+ );
+}
+
+/**
+ * @description The Generator page component.
+ */
+export default function GeneratorPage() {
+ const description = 'Generate documentation, code, and more out of your AsyncAPI files with the Generator.';
+ const image = '/img/social/generator-card.jpg';
+
+ return (
+
+
+
+
+
+ Docs, Code, Anything!
+
+ {description}
+
+
+
+
+
+ Installation & Usage
+
+
+ Start using Generator really quickly. Select one of the multiple templates we offer and start generating
+ documentation and code in a few seconds.
+
+ {renderButtons()}
+
+
+
+
+
+
+ Ready to use
+
+
+ The Generator is our solution to automatically generate documentation and code from your AsyncAPI files.
+ It comes packed with lots of cool features you can't miss. Have a look!
+
+
+
+
+
+
+
+
+
+
+
+ {/* */}
+
+ HTML & Markdown
+
+
+ Generate beautiful HTML documentation that's easy to share with your team and customers.
+ Markdown docs that will seat along with your code? Perfect!
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Node.js, Java, Python, and more...
+
+
+ Generate code out of your AsyncAPI files in your favourite programming language. Speed up the
+ time-to-first-prototype. Keep using it even after you wrote your custom business logic.
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Highly extensible
+
+
+ Don't see your programming language of choice? Want to generate docs that meet your brand
+ look and feel? Create your custom templates or extend existing ones.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
{renderButtons()}
+
+
+ );
+}
diff --git a/pages/tools/github-actions.tsx b/pages/tools/github-actions.tsx
new file mode 100644
index 000000000000..ae6043721834
--- /dev/null
+++ b/pages/tools/github-actions.tsx
@@ -0,0 +1,93 @@
+import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading';
+
+import GithubButton from '../../components/buttons/GithubButton';
+import CodeBlock from '../../components/editor/CodeBlock';
+import GenericLayout from '../../components/layout/GenericLayout';
+import Heading from '../../components/typography/Heading';
+import Paragraph from '../../components/typography/Paragraph';
+
+/**
+ * @description Render the buttons for the Github Actions page.
+ */
+function renderButtons(): JSX.Element {
+ return (
+
+
+ Automate using GitHub Actions
+
+ {description}
+
+
+
+
+
+ Generate docs
+
+
+ Seamlessly integrate the docs generation process with your GitHub pipeline. Make sure your documentation
+ is always up to date. It will be a gift to your team and your future self.
+
+ {renderButtons()}
+
+
+
+ {getCode()}
+
+
+
+
+
+ );
+}
diff --git a/pages/tools/index.tsx b/pages/tools/index.tsx
new file mode 100644
index 000000000000..7ed98f27b12f
--- /dev/null
+++ b/pages/tools/index.tsx
@@ -0,0 +1,45 @@
+import ToolsDashboard from '@/components/tools/ToolsDashboard';
+import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading';
+
+import GenericLayout from '../../components/layout/GenericLayout';
+import Heading from '../../components/typography/Heading';
+import Paragraph from '../../components/typography/Paragraph';
+import TextLink from '../../components/typography/TextLink';
+import ToolFilter from '../../context/ToolFilterContext';
+
+/**
+ * @description The Tools Index page component.
+ */
+export default function ToolsIndex() {
+ const description = 'Tools Dashboard for AsyncAPI Initiative';
+ const image = '/img/social/tools-dashboard-card.webp';
+
+ return (
+
+
+
+
+
+ AsyncAPI Tools Dashboard
+
+
+ Discover various AsyncAPI tools to optimize your journey! These tools are made by the community, for the
+ community. Have an AsyncAPI tool you want to be featured on this list? Then follow the procedure given in
+ the
+
+ Tool Documentation
+ {' '}
+ file, and show up your AsyncAPI Tool card in the website.
+
+
+
+
+
+
+
+
+ );
+}
diff --git a/pages/tools/modelina.tsx b/pages/tools/modelina.tsx
new file mode 100644
index 000000000000..43423e1e5d57
--- /dev/null
+++ b/pages/tools/modelina.tsx
@@ -0,0 +1,167 @@
+import React, { useState } from 'react';
+
+import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading';
+
+import Button from '../../components/buttons/Button';
+import GithubButton from '../../components/buttons/GithubButton';
+import CodeBlock from '../../components/editor/CodeBlock';
+import IconRocket from '../../components/icons/Rocket';
+import GenericLayout from '../../components/layout/GenericLayout';
+import Heading from '../../components/typography/Heading';
+import Paragraph from '../../components/typography/Paragraph';
+
+const exampleModelinaCode = `import { JavaGenerator, JAVA_COMMON_PRESET } from '@asyncapi/modelina'
+
+const generator = new JavaGenerator({
+ collectionType: "List",
+ presets: [
+ {
+ preset: JAVA_COMMON_PRESET,
+ options: {
+ classToString: true
+ }
+ }
+ ]
+});
+
+// const input = ...AsyncAPI document
+const models = await generator.generate(input)`;
+
+const exampleOutputModel = `import java.util.List;
+import java.util.Map;
+
+public class LightMeasured {
+ private Integer id;
+ private Integer lumens;
+ private java.time.OffsetDateTime sentAt;
+ private Map additionalProperties;
+
+ public Integer getId() { return this.id; }
+ public void setId(Integer id) { this.id = id; }
+
+ public Integer getLumens() { return this.lumens; }
+ public void setLumens(Integer lumens) { this.lumens = lumens; }
+
+ public java.time.OffsetDateTime getSentAt() { return this.sentAt; }
+ public void setSentAt(java.time.OffsetDateTime sentAt) { this.sentAt = sentAt; }
+
+ public Map getAdditionalProperties() { return this.additionalProperties; }
+ public void setAdditionalProperties(Map additionalProperties) { this.additionalProperties = additionalProperties; }
+
+ @Override
+ public String toString() {
+ return "class LightMeasured {\\n" +
+ " id: " + toIndentedString(id) + "\\n" +
+ " lumens: " + toIndentedString(lumens) + "\\n" +
+ " sentAt: " + toIndentedString(sentAt) + "\\n" +
+ " additionalProperties: " + toIndentedString(additionalProperties) + "\\n" +
+ "}";
+ }
+
+ /**
+ * Convert the given object to string with each line indented by 4 spaces
+ * (except the first line).
+ */
+ private String toIndentedString(Object o) {
+ if (o == null) {
+ return "null";
+ }
+ return o.toString().replace("\\n", "\\n ");
+ }
+}`;
+
+/**
+ * @description The Modelina page component.
+ */
+export default function ModelinaPlaygroundPage() {
+ const [error, setError] = useState(undefined);
+ const description =
+ 'Sometimes you just want to generate data models for your payload. Modelina is a library for generating data models based on inputs such as AsyncAPI, OpenAPI, or JSON Schema documents.';
+ const image = '/img/social/modelina-card.jpg';
+
+ const tabs = (
+
+ );
+
+ return (
+
+
+
+
+ Modelina
+
+ {description}
+
+
+
+
+
+ Installation & Usage
+
+
+ Start using Modelina really quickly. Select one of the available languages we offer and start generating
+ models from your AsyncAPI document in a few seconds.
+
+
+ );
+}
+
+/**
+ * @description The Parsers page component.
+ */
+export default function ParsersPage() {
+ const description = 'Use our parsers to build your own tools or add AsyncAPI support to your product.';
+ const image = '/img/social/parsers-card.jpg';
+
+ return (
+
+
+
+
+
+ Build your own tools
+
+ {description}
+
+
+
+
+
+ JavaScript parser
+
+
+ Parse AsyncAPI documents in your JavaScript tooling and products. It works on Node.js{' '}
+ and browsers.
+
+
+ npm install @asyncapi/parser
+
+ {renderButtons()}
+