diff --git a/config/meetings.json b/config/meetings.json
index 84d2257386c7..aa4169891f45 100644
--- a/config/meetings.json
+++ b/config/meetings.json
@@ -1,39 +1,4 @@
[
- {
- "title": "Spec 3.0 Docs Meeting",
- "calLink": "https://www.google.com/calendar/event?eid=aHJwdnA1bzI1ajVjNzliZ2h2bm1nZnI3b3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn",
- "url": "https://github.com/asyncapi/community/issues/793",
- "banner": "",
- "date": "2023-08-31T14:30:00.000Z"
- },
- {
- "title": "Spec 3.0 Meeting",
- "calLink": "https://www.google.com/calendar/event?eid=NDEzM2E1ZGE5YWttYXVpYW9zbTl1cWM1YWMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn",
- "url": "https://github.com/asyncapi/community/issues/857",
- "banner": "",
- "date": "2023-09-06T16:00:00.000Z"
- },
- {
- "title": "Brainstorm on AsyncAPI Cheat Sheet Poster",
- "calLink": "https://www.google.com/calendar/event?eid=bGx1dXBuc2x1a29mN3RzMmQzcGFjaWM4anMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn",
- "url": "https://github.com/asyncapi/community/issues/862",
- "banner": "",
- "date": "2023-09-06T09:00:00.000Z"
- },
- {
- "title": "Generator and new parser discussion",
- "calLink": "https://www.google.com/calendar/event?eid=bnI2ZHBsa2ZxMDM3bmw5anFtY21pbjF0amMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn",
- "url": "https://github.com/asyncapi/community/issues/865",
- "banner": "",
- "date": "2023-09-06T15:00:00.000Z"
- },
- {
- "title": "Community Meeting",
- "calLink": "https://www.google.com/calendar/event?eid=aTNsZXN2YzkwbWdyanBxdDgwY2RrbGxnMTggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn",
- "url": "https://github.com/asyncapi/community/issues/868",
- "banner": "https://user-images.githubusercontent.com/40604284/264583319-519e721e-3112-43ca-adab-d68bac288666.png",
- "date": "2023-09-05T16:00:00.000Z"
- },
{
"title": "Community Meeting",
"calLink": "https://www.google.com/calendar/event?eid=b3MydnJrN2VuMjNjY3J1Z2IycW9qMDFmZTQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn",
@@ -115,5 +80,12 @@
"url": "https://github.com/asyncapi/community/issues/985",
"banner": "https://user-images.githubusercontent.com/40604284/288488243-e274e624-c5b3-4bff-b0ec-8c1929a24aae.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDE4ODI2MTUsIm5iZiI6MTcwMTg4MjMxNSwicGF0aCI6Ii80MDYwNDI4NC8yODg0ODgyNDMtZTI3NGU2MjQtYzViMy00YmZmLWIwZWMtOGMxOTI5YTI0YWFlLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMDYlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjA2VDE3MDUxNVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWUyMGYyNDE3Nzg4OGUyZGVmYjNlMDkxYzVkOWFkNjEwYjM4ZDI2YzZjZmUyYjRjMDliMDQ3YWJiNTVlNDI1MmQmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.jYmY72ZRresQv1lMFeKwA49Wi6VkAozRpIHH4uE0J8g",
"date": "2023-12-14T18:00:00.000Z"
+ },
+ {
+ "title": "Quoi de neuf dans AsyncAPI v3 ? Découvrez le en live avec la migration du use-case Adeo",
+ "calLink": "https://www.google.com/calendar/event?eid=Nmk1dm8yZm10dWc0ZXI3MTNtczRhbWkzdTAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn",
+ "url": "https://github.com/asyncapi/community/issues/988",
+ "banner": "https://user-images.githubusercontent.com/40604284/289498866-12bffa57-7db8-491f-917e-8e4f8f5b20a7.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTEiLCJleHAiOjE3MDIyODk0MDMsIm5iZiI6MTcwMjI4OTEwMywicGF0aCI6Ii80MDYwNDI4NC8yODk0OTg4NjYtMTJiZmZhNTctN2RiOC00OTFmLTkxN2UtOGU0ZjhmNWIyMGE3LnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFJV05KWUFYNENTVkVINTNBJTJGMjAyMzEyMTElMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjMxMjExVDEwMDUwM1omWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTA4ZmVlODI0YzY4OTEwMTVkMWMxNzA3MzE5NGNkZDE4N2RmOTIzMWIwMTExNmQ2YzNiNjRhZGMwYWI5YmU2NjImWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JmFjdG9yX2lkPTAma2V5X2lkPTAmcmVwb19pZD0wIn0.4vALVenjnYGjuQYn4FAT5X3yYBJHi8-bKVpGMriehJc",
+ "date": "2023-12-14T10:00:00.000Z"
}
]
\ No newline at end of file
diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json
index 352d13b5def6..78704f45039c 100644
--- a/config/newsroom_videos.json
+++ b/config/newsroom_videos.json
@@ -1,9 +1,21 @@
[
{
- "image_url": "https://i.ytimg.com/vi/YREb9wuYCOA/hqdefault.jpg",
- "title": "AsyncAPI v3 announcement",
- "description": "Join us live to learn about all the goodies that AsyncAPI v3 brings.",
- "videoId": "YREb9wuYCOA"
+ "image_url": "https://i.ytimg.com/vi/-OsMet9h_dg/hqdefault.jpg",
+ "title": "3 Request/Reply Use Cases",
+ "description": "Explain Request/Reply use cases to me like I'm a 5 year old.",
+ "videoId": "-OsMet9h_dg"
+ },
+ {
+ "image_url": "https://i.ytimg.com/vi/WCK9_ZDv6K4/hqdefault.jpg",
+ "title": "Quoi de neuf dans AsyncAPI v3 ? Découvrez le en live avec la migration du use-case Adeo(14th Dece…",
+ "description": "Participez à ce live pour découvrir les nouveautés de la V3 et comment migrer une version 2 en version 3 sur un use-case de ...",
+ "videoId": "WCK9_ZDv6K4"
+ },
+ {
+ "image_url": "https://i.ytimg.com/vi/yOc_fI-i9C8/hqdefault.jpg",
+ "title": "Community Meeting(12th December)",
+ "description": "https://github.com/asyncapi/community/issues/979.",
+ "videoId": "yOc_fI-i9C8"
},
{
"image_url": "https://i.ytimg.com/vi/g6CPg77Lf5Q/hqdefault.jpg",
@@ -16,17 +28,5 @@
"title": "Community Meeting(November 28th, 2023)",
"description": "https://github.com/asyncapi/community/issues/918.",
"videoId": "p68PUXDMsks"
- },
- {
- "image_url": "https://i.ytimg.com/vi/KDort611FNg/hqdefault.jpg",
- "title": "Community Meeting(November 14th, 2023)",
- "description": "https://github.com/asyncapi/community/issues/917.",
- "videoId": "KDort611FNg"
- },
- {
- "image_url": "https://i.ytimg.com/vi/Vm4ZKFb2PVE/hqdefault.jpg",
- "title": "Community Meeting(October 31th, 2023)",
- "description": "Powered by Restream https://restream.io https://github.com/asyncapi/community/issues/916.",
- "videoId": "Vm4ZKFb2PVE"
}
]
\ No newline at end of file
diff --git a/config/tools-automated.json b/config/tools-automated.json
index e4d8bdb7790b..305987a6fb25 100644
--- a/config/tools-automated.json
+++ b/config/tools-automated.json
@@ -420,41 +420,41 @@
"description": "The following is a list of tools that compare AsyncAPI documents.",
"toolsList": [
{
- "title": "AsyncAPI Diff",
- "description": "Diff is a library that compares two AsyncAPI Documents and provides information about the differences by pointing out explicitly information like breaking changes.",
+ "title": "jasyncapicmp",
+ "description": "Tool for comparing two AsyncAPI versions and evaluating compatibility.",
"links": {
- "repoUrl": "https://github.com/asyncapi/diff"
+ "websiteUrl": "https://siom79.github.io/jasyncapicmp/",
+ "docsUrl": "https://github.com/siom79/jasyncapicmp",
+ "repoUrl": "https://github.com/siom79/jasyncapicmp"
},
"filters": {
- "language": "TypeScript",
+ "language": "Java",
"technology": [
- "TypeScript"
+ "Maven"
],
"categories": [
"compare-tool"
],
"hasCommercial": false,
- "isAsyncAPIOwner": true
+ "isAsyncAPIOwner": false
}
},
{
- "title": "jasyncapicmp",
- "description": "Tool for comparing two AsyncAPI versions and evaluating compatibility.",
+ "title": "AsyncAPI Diff",
+ "description": "Diff is a library that compares two AsyncAPI Documents and provides information about the differences by pointing out explicitly information like breaking changes.",
"links": {
- "websiteUrl": "https://siom79.github.io/jasyncapicmp/",
- "docsUrl": "https://github.com/siom79/jasyncapicmp",
- "repoUrl": "https://github.com/siom79/jasyncapicmp"
+ "repoUrl": "https://github.com/asyncapi/diff"
},
"filters": {
- "language": "Java",
+ "language": "TypeScript",
"technology": [
- "Maven"
+ "TypeScript"
],
"categories": [
"compare-tool"
],
"hasCommercial": false,
- "isAsyncAPIOwner": false
+ "isAsyncAPIOwner": true
}
}
]
@@ -617,10 +617,10 @@
"description": "The following is a list of templates compatible with AsyncAPI Generator. You can use them to generate apps, clients or documentation from your AsyncAPI documents.",
"toolsList": [
{
- "title": "Node.js Multiprotocol Template",
- "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.",
+ "title": "Node.js Websockets Template",
+ "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.",
"links": {
- "repoUrl": "https://github.com/asyncapi/nodejs-template"
+ "repoUrl": "https://github.com/asyncapi/nodejs-ws-template"
},
"filters": {
"language": "javascript",
@@ -635,15 +635,19 @@
}
},
{
- "title": "Node.js Websockets Template",
- "description": "Node.js WebSockets template for the AsyncAPI Generator. It showcases how from a single AsyncAPI document you can generate a server and a client at the same time.",
+ "title": "Java Spring Template",
+ "description": "Java Spring template for the AsyncAPI Generator",
"links": {
- "repoUrl": "https://github.com/asyncapi/nodejs-ws-template"
+ "repoUrl": "https://github.com/asyncapi/java-spring-template"
},
"filters": {
- "language": "javascript",
+ "language": [
+ "javascript"
+ ],
"technology": [
- "Node.js"
+ "Springboot",
+ "Maven",
+ "Gradle"
],
"categories": [
"generator-template"
@@ -671,19 +675,15 @@
}
},
{
- "title": "Java Spring Template",
- "description": "Java Spring template for the AsyncAPI Generator",
+ "title": "Node.js Multiprotocol Template",
+ "description": "This template generates a server using your AsyncAPI document. It supports multiple different protocols, like Kafka or MQTT. It is designed in the way that generated code is a library and with it's API you can start the server, send messages or register a middleware for listening incoming messages. Runtime message validation included.",
"links": {
- "repoUrl": "https://github.com/asyncapi/java-spring-template"
+ "repoUrl": "https://github.com/asyncapi/nodejs-template"
},
"filters": {
- "language": [
- "javascript"
- ],
+ "language": "javascript",
"technology": [
- "Springboot",
- "Maven",
- "Gradle"
+ "Node.js"
],
"categories": [
"generator-template"
diff --git a/dashboard.json b/dashboard.json
index bc7e99f50fe9..85d330069d30 100644
--- a/dashboard.json
+++ b/dashboard.json
@@ -1,31 +1,53 @@
{
"hotDiscussions": [
{
- "id": "MDU6SXNzdWU5ODkyOTg0MzY=",
+ "id": "PR_kwDOBW5R_c5Xb72L",
+ "isPR": true,
+ "isAssigned": false,
+ "title": "feat: implement the asyncapi financial summary page",
+ "author": "vishvamsinh28",
+ "resourcePath": "/asyncapi/website/pull/2038",
+ "repo": "asyncapi/website",
+ "labels": [],
+ "score": 43.363362901138075
+ },
+ {
+ "id": "I_kwDOBW5R_c5BIl5P",
"isPR": false,
"isAssigned": true,
- "title": "Proposal to solve publish/subscribe confusion",
- "author": "fmvilas",
- "resourcePath": "/asyncapi/spec/issues/618",
- "repo": "asyncapi/spec",
+ "title": "Add new page for collecting user testing participants",
+ "author": "mcturco",
+ "resourcePath": "/asyncapi/website/issues/529",
+ "repo": "asyncapi/website",
"labels": [
{
- "name": "💭 Strawman (RFC 0)",
- "color": "C2E0C6"
+ "name": "enhancement",
+ "color": "84b6eb"
}
],
- "score": 54.2759972736099
+ "score": 19.527872034949596
},
{
- "id": "PR_kwDOBW5R_c5Xb72L",
+ "id": "I_kwDOCVQpZM5M_dcV",
+ "isPR": false,
+ "isAssigned": true,
+ "title": "DocsUI: Messages Object output",
+ "author": "mcturco",
+ "resourcePath": "/asyncapi/asyncapi-react/issues/618",
+ "repo": "asyncapi/asyncapi-react",
+ "labels": [],
+ "score": 16.65612614745701
+ },
+ {
+ "id": "PR_kwDOFLhIt85bqKL8",
"isPR": true,
"isAssigned": false,
- "title": "feat: implement the asyncapi financial summary page",
- "author": "vishvamsinh28",
- "resourcePath": "/asyncapi/website/pull/2038",
- "repo": "asyncapi/website",
+ "title": "docs: add Bounty Program Rules",
+ "author": "aeworxet",
+ "resourcePath": "/asyncapi/community/pull/897",
+ "repo": "asyncapi/community",
"labels": [],
- "score": 41.35314077989326
+ "score": 16.65612614745701
},
{
"id": "I_kwDOFLhIt84-OUI3",
@@ -41,155 +63,168 @@
"color": "a2eeef"
}
],
- "score": 33.31225229491402
+ "score": 16.056087666155555
},
{
- "id": "PR_kwDOB5hCo85gDiV-",
+ "id": "PR_kwDOFDnrNc5RUbi_",
"isPR": true,
"isAssigned": false,
- "title": "feat: new script and ci for JSON Schema validation",
- "author": "AnimeshKumar923",
- "resourcePath": "/asyncapi/spec-json-schemas/pull/452",
- "repo": "asyncapi/spec-json-schemas",
+ "title": "fix: help command",
+ "author": "sambhavgupta0705",
+ "resourcePath": "/asyncapi/cli/pull/593",
+ "repo": "asyncapi/cli",
"labels": [],
- "score": 25.55853839868403
+ "score": 15.507427792459973
},
{
- "id": "MDU6SXNzdWU5OTMxODc5ODM=",
- "isPR": false,
+ "id": "PR_kwDOBW5R_c5QjwOq",
+ "isPR": true,
"isAssigned": false,
- "title": "Proposal to allow defining schema format other than default one (AsyncAPI Schema)",
- "author": "magicmatatjahu",
- "resourcePath": "/asyncapi/spec/issues/622",
- "repo": "asyncapi/spec",
+ "title": "feat: add table of contents in case study",
+ "author": "Shurtu-gal",
+ "resourcePath": "/asyncapi/website/pull/1673",
+ "repo": "asyncapi/website",
+ "labels": [],
+ "score": 15.507427792459973
+ },
+ {
+ "id": "PR_kwDOBW5R_c5RI5z2",
+ "isPR": true,
+ "isAssigned": false,
+ "title": "feat: add testimonial carousel",
+ "author": "Lucif3r-in",
+ "resourcePath": "/asyncapi/website/pull/1704",
+ "repo": "asyncapi/website",
+ "labels": [],
+ "score": 14.07155484871368
+ },
+ {
+ "id": "PR_kwDODou01c5Iv4zR",
+ "isPR": true,
+ "isAssigned": false,
+ "title": "docs: added table of contents and introduction document for Studio tool",
+ "author": "Jagrutiti",
+ "resourcePath": "/asyncapi/studio/pull/553",
+ "repo": "asyncapi/studio",
+ "labels": [],
+ "score": 14.07155484871368
+ },
+ {
+ "id": "I_kwDOFDnrNc5rjrK-",
+ "isPR": false,
+ "isAssigned": true,
+ "title": "Improve `new glee` command",
+ "author": "KhudaDad414",
+ "resourcePath": "/asyncapi/cli/issues/683",
+ "repo": "asyncapi/cli",
"labels": [
{
- "name": "stale",
- "color": "819cd3"
+ "name": "enhancement",
+ "color": "a2eeef"
},
{
- "name": "💭 Strawman (RFC 0)",
- "color": "C2E0C6"
+ "name": "bounty",
+ "color": "FD6F9E"
+ },
+ {
+ "name": "level/medium",
+ "color": "FD6F9E"
+ },
+ {
+ "name": "bounty/2023-Q4",
+ "color": "FD6F9E"
}
],
- "score": 23.26114168868996
+ "score": 13.497205671215161
},
{
- "id": "I_kwDOBGu-184_rP6l",
- "isPR": false,
+ "id": "PR_kwDOBW5R_c5dJ7hJ",
+ "isPR": true,
"isAssigned": false,
- "title": "Let channels be identified by an ID rather than their address.",
- "author": "smoya",
- "resourcePath": "/asyncapi/spec/issues/663",
- "repo": "asyncapi/spec",
- "labels": [
- {
- "name": "💭 Strawman (RFC 0)",
- "color": "C2E0C6"
- }
- ],
- "score": 21.825268744943667
+ "title": "docs: Tutorial for WebSockets with AsyncAPI",
+ "author": "VaishnaviNandakumar",
+ "resourcePath": "/asyncapi/website/pull/2245",
+ "repo": "asyncapi/website",
+ "labels": [],
+ "score": 13.497205671215161
},
{
- "id": "I_kwDOGJ23c85V9C3c",
- "isPR": false,
+ "id": "PR_kwDODou01c5YJ7kV",
+ "isPR": true,
"isAssigned": false,
- "title": "Support `referenceIntoComponents` for other components than `message`",
- "author": "thake",
- "resourcePath": "/asyncapi/bundler/issues/97",
- "repo": "asyncapi/bundler",
+ "title": "Add Form component",
+ "author": "KhudaDad414",
+ "resourcePath": "/asyncapi/studio/pull/773",
+ "repo": "asyncapi/studio",
"labels": [
{
- "name": "enhancement",
- "color": "a2eeef"
+ "name": "autoupdate",
+ "color": "ededed"
}
],
- "score": 20.102221212448114
- },
+ "score": 13.210031082465903
+ }
+ ],
+ "goodFirstIssues": [
{
- "id": "MDU6SXNzdWUzNjkwNDExMDc=",
- "isPR": false,
+ "id": "I_kwDOB5hCo855VB2E",
+ "title": "Add code linting (eslint) as part of CI script",
"isAssigned": false,
- "title": "Support request/reply pattern",
- "author": "adrianhopebailie",
- "resourcePath": "/asyncapi/spec/issues/94",
- "repo": "asyncapi/spec",
+ "resourcePath": "/asyncapi/spec-json-schemas/issues/467",
+ "repo": "asyncapi/spec-json-schemas",
+ "author": "smoya",
+ "area": "ci-cd",
"labels": [
{
- "name": "keep-open",
- "color": "fce250"
+ "name": "enhancement",
+ "color": "a2eeef"
}
- ],
- "score": 20.070109582694446
+ ]
},
{
- "id": "I_kwDOBW5R_c5BIl5P",
- "isPR": false,
- "isAssigned": true,
- "title": "Add new page for collecting user testing participants",
- "author": "mcturco",
- "resourcePath": "/asyncapi/website/issues/529",
- "repo": "asyncapi/website",
+ "id": "I_kwDODyzcIc54mr9C",
+ "title": "Fix wrong format for Co-authored automerged commits + pagination",
+ "isAssigned": false,
+ "resourcePath": "/asyncapi/.github/issues/263",
+ "repo": "asyncapi/.github",
+ "author": "smoya",
+ "area": "ci-cd",
"labels": [
{
- "name": "enhancement",
- "color": "84b6eb"
+ "name": "bug",
+ "color": "d73a4a"
}
- ],
- "score": 19.527872034949596
+ ]
},
{
- "id": "I_kwDOE8Qh385nTCST",
- "isPR": false,
+ "id": "I_kwDOFXtyC854XYL2",
+ "title": "Add migration guides ",
"isAssigned": false,
- "title": "Improve layout of playground",
+ "resourcePath": "/asyncapi/parser-api/issues/106",
+ "repo": "asyncapi/parser-api",
"author": "jonaslagoni",
- "resourcePath": "/asyncapi/modelina/issues/1346",
- "repo": "asyncapi/modelina",
+ "area": "Unknown",
"labels": [
{
"name": "enhancement",
"color": "a2eeef"
},
{
- "name": "good first issue",
- "color": "7057ff"
- },
- {
- "name": "area/design",
- "color": "0d67d3"
- },
- {
- "name": "website",
- "color": "57A793"
+ "name": "📑 docs",
+ "color": "E50E99"
}
- ],
- "score": 18.37917367995256
+ ]
},
{
- "id": "PR_kwDOFLhIt85bqKL8",
- "isPR": true,
+ "id": "I_kwDODou01c531nlO",
+ "title": "Misalignment of Code Editor Highlight Box",
"isAssigned": false,
- "title": "docs: add Bounty Program Rules",
- "author": "aeworxet",
- "resourcePath": "/asyncapi/community/pull/897",
- "repo": "asyncapi/community",
- "labels": [],
- "score": 16.65612614745701
+ "resourcePath": "/asyncapi/studio/issues/861",
+ "repo": "asyncapi/studio",
+ "author": "princerajpoot20",
+ "area": "typescript",
+ "labels": []
},
- {
- "id": "MDU6SXNzdWUxMjMwODQwMDM4",
- "isPR": false,
- "isAssigned": false,
- "title": "Usages of allOf within message payload could be flattened",
- "author": "jamescrowley",
- "resourcePath": "/asyncapi/asyncapi-react/issues/596",
- "repo": "asyncapi/asyncapi-react",
- "labels": [],
- "score": 14.933078614961456
- }
- ],
- "goodFirstIssues": [
{
"id": "I_kwDOBGu-1853mU6h",
"title": "Fix description of Operation Trait object",
@@ -250,21 +285,6 @@
}
]
},
- {
- "id": "I_kwDOFDnrNc5yy6e0",
- "title": "The new glee command is generating a 2.1.0 document",
- "isAssigned": false,
- "resourcePath": "/asyncapi/cli/issues/829",
- "repo": "asyncapi/cli",
- "author": "fmvilas",
- "area": "Unknown",
- "labels": [
- {
- "name": "bug",
- "color": "d73a4a"
- }
- ]
- },
{
"id": "I_kwDOFLhIt85yyn4B",
"title": "Update tooling doc with info about new category",
@@ -344,25 +364,6 @@
}
]
},
- {
- "id": "I_kwDOBW5R_c5yduk_",
- "title": "Single backtick is recognised as Codeblock",
- "isAssigned": false,
- "resourcePath": "/asyncapi/website/issues/2188",
- "repo": "asyncapi/website",
- "author": "akshatnema",
- "area": "Unknown",
- "labels": [
- {
- "name": "bug",
- "color": "ee0701"
- },
- {
- "name": "Hacktoberfest",
- "color": "FF8AE2"
- }
- ]
- },
{
"id": "I_kwDODwv8N85yTwat",
"title": "venues addresses to be clickable links that take you you google map location",
@@ -397,21 +398,6 @@
}
]
},
- {
- "id": "I_kwDOBW5R_c5sqLtN",
- "title": "[📑 Docs]: import Glee docs under tools folder",
- "isAssigned": false,
- "resourcePath": "/asyncapi/website/issues/2003",
- "repo": "asyncapi/website",
- "author": "AnimeshKumar923",
- "area": "docs",
- "labels": [
- {
- "name": "📑 docs",
- "color": "E50E99"
- }
- ]
- },
{
"id": "I_kwDOBW5R_c5soAAM",
"title": "Create a research page to have participants sign up for the research study",
@@ -552,69 +538,6 @@
}
]
},
- {
- "id": "I_kwDOBW5R_c5qCdE5",
- "title": "[📑 Docs]: Adapt Streetlights - Interactive tutorial for v3",
- "isAssigned": true,
- "resourcePath": "/asyncapi/website/issues/1863",
- "repo": "asyncapi/website",
- "author": "jonaslagoni",
- "area": "docs",
- "labels": [
- {
- "name": "stale",
- "color": "ededed"
- },
- {
- "name": "📑 docs",
- "color": "E50E99"
- }
- ]
- },
- {
- "id": "I_kwDOBW5R_c5qCLdo",
- "title": "[📑 Docs]: Adapt coming from OpenAPI tutorial for v3",
- "isAssigned": true,
- "resourcePath": "/asyncapi/website/issues/1856",
- "repo": "asyncapi/website",
- "author": "jonaslagoni",
- "area": "docs",
- "labels": [
- {
- "name": "📑 docs",
- "color": "E50E99"
- }
- ]
- },
- {
- "id": "I_kwDOFLhIt85o9dDJ",
- "title": "Add 2023 mentorship directory",
- "isAssigned": false,
- "resourcePath": "/asyncapi/community/issues/753",
- "repo": "asyncapi/community",
- "author": "AceTheCreator",
- "area": "Unknown",
- "labels": []
- },
- {
- "id": "I_kwDOE8Qh385nTCST",
- "title": "Improve layout of playground",
- "isAssigned": false,
- "resourcePath": "/asyncapi/modelina/issues/1346",
- "repo": "asyncapi/modelina",
- "author": "jonaslagoni",
- "area": "design",
- "labels": [
- {
- "name": "enhancement",
- "color": "a2eeef"
- },
- {
- "name": "website",
- "color": "57A793"
- }
- ]
- },
{
"id": "I_kwDOBW5R_c5mwLzC",
"title": "[📑 Docs]: Create an Onboarding guide for technical writers",
@@ -717,21 +640,6 @@
}
]
},
- {
- "id": "I_kwDODCuNRs5e58gr",
- "title": "MQTT `retain` flag should be applied only to `publish` operations",
- "isAssigned": false,
- "resourcePath": "/asyncapi/bindings/issues/187",
- "repo": "asyncapi/bindings",
- "author": "KhudaDad414",
- "area": "docs",
- "labels": [
- {
- "name": "enhancement",
- "color": "a2eeef"
- }
- ]
- },
{
"id": "I_kwDOBW5R_c5eFaBF",
"title": "Add proper dropdowns to the Filters Select Menu",
@@ -914,29 +822,6 @@
}
]
},
- {
- "id": "MDU6SXNzdWUxMDA4MjQ5Nzg4",
- "title": "Set the left menu collapsable",
- "isAssigned": false,
- "resourcePath": "/asyncapi/asyncapi-react/issues/441",
- "repo": "asyncapi/asyncapi-react",
- "author": "M3lkior",
- "area": "library",
- "labels": [
- {
- "name": "enhancement",
- "color": "a2eeef"
- },
- {
- "name": "stale",
- "color": "ededed"
- },
- {
- "name": "Hacktoberfest",
- "color": "FF8AE2"
- }
- ]
- },
{
"id": "MDU6SXNzdWU4MDU4MDM5Njg=",
"title": "Enhance API docs with information about results of code generation with generateFromString using entrypoint",
@@ -949,10 +834,6 @@
{
"name": "enhancement",
"color": "a2eeef"
- },
- {
- "name": "stale",
- "color": "ededed"
}
]
}
diff --git a/pages/docs/concepts/asyncapi-document/adding-bindings.md b/pages/docs/concepts/asyncapi-document/adding-bindings.md
index 6d6cf0c0f5ce..ef5d75de346a 100644
--- a/pages/docs/concepts/asyncapi-document/adding-bindings.md
+++ b/pages/docs/concepts/asyncapi-document/adding-bindings.md
@@ -1,5 +1,5 @@
---
-title: Adding Bindings
+title: Adding bindings
weight: 260
---
diff --git a/pages/docs/concepts/asyncapi-document/adding-channels.md b/pages/docs/concepts/asyncapi-document/adding-channels.md
new file mode 100644
index 000000000000..4a5157026872
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/adding-channels.md
@@ -0,0 +1,59 @@
+---
+title: Adding channels
+weight: 65
+---
+
+Incorporating [channels](/docs/concepts/channel) in the AsyncAPI document facilitates message organization and categorization, streamlining message routing to suitable consumers. It also enables the decoupling of producers and consumers, which contributes to the API's scalability and extensibility. Moreover, it offers comprehensive documentation and transparent communication about the API's communication patterns. Additionally, alternative names for channels can be user-defined to suit specific contexts and preferences.
+
+Here is an example of how to define channels:
+
+```yml
+userSignedUp:
+ address: 'user.signedup'
+ messages:
+ userSignedUp:
+ $ref: '#/components/messages/userSignedUp'
+```
+
+The previous AsyncAPI document sets up an interface for a `userSignedUp` channel, where the `address` field holds the actual address of the channel (`user.signedup`).
+
+### Channel availability on specific servers
+
+When you add a channel to the AsyncAPI document, by default it is expected to be available on any server described in the document. In other words, if you have two servers, `production-kafka-secure` and `development-kafka`, the channel described in the AsyncAPI document must be present on both servers.
+
+It's possible to encounter a scenario where an AsyncAPI document describes an application communicating in a production environment through multiple servers, each utilizing distinct protocols. For example, the application might receive messages from a channel on an MQTT server while concurrently sending messages to a different channel on a Kafka server. In such cases, it's imperative to distinctly specify the exclusive availability of one channel on the MQTT server and another channel solely on the Kafka server.
+
+```mermaid
+graph LR
+ D[MQTT Server] --> |receive| E[Application]
+ E -->|send| G[Kafka Server]
+```
+
+Here is an example of how you might specify that a channel is available only on specific servers:
+
+```yml
+channels:
+ lightTurnOn:
+ address: light.on
+ messages:
+ lightOn:
+ description: An event describing that lights are on
+ servers:
+ - $ref: '#/servers/serverA'
+ lightTurnOnOff:
+ address: light/onoff
+ messages:
+ lightOnOff:
+ description: An event describing that light is either on or off
+ servers:
+ - $ref: '#/servers/serverB'
+servers:
+ serverA:
+ host: serverA.example.com
+ protocol: kafka
+ serverB:
+ host: serverB.example.com
+ protocol: mqtt
+```
+
+The above example shows two different channels available only on selected servers. Notice the `servers` field under each channel. It means that the `lightTurnOn` channel is only available on `serverA` which uses Kafka protocol, and the `lightTurnOnOff` channel is available only on `serverB` which uses MQTT protocol.
diff --git a/pages/docs/concepts/asyncapi-document/adding-messages.md b/pages/docs/concepts/asyncapi-document/adding-messages.md
new file mode 100644
index 000000000000..9f81a798fdbe
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/adding-messages.md
@@ -0,0 +1,155 @@
+---
+title: Adding messages
+weight: 140
+---
+
+In an AsyncAPI document, adding [messages](/docs/reference/specification/v3.0.0#messageObject) mainly means setting up channels and operations. This is key for explaining how data moves between your applications. However, sometimes you might just want to use the AsyncAPI document to describe the messages themselves, without anything else.
+
+## Add messages
+
+In an AsyncAPI document, you define message definitions under channels. However, the best practice is to first define these messages under the 'components' section as reusable definitions. That way, you can reference them easily from a channel.
+
+Here is a diagram showing some channel fields and the relation between channel messages and components messages:
+
+```mermaid
+graph LR
+ C[channels]
+ F[title]
+ I[address]
+ A[components]
+ B[messages]
+ D[messages]
+ C --> F
+ C --> I
+ C --> D
+ D --> |$ref| B
+ A --> B
+
+ style C fill:#47BCEE,stroke:#000;
+ style D fill:#47BCEE,stroke:#000;
+```
+
+### Channels section
+
+Define the channels section in your AsyncAPI document, including the `messages` your channel accepts. For example:
+
+```yaml
+channels:
+ allCommentsLiked:
+ address: comment/liked
+ messages:
+ commentLiked:
+ description: Message that is being sent when a comment has been liked by someone.
+ payload:
+ type: object
+ title: commentLikedPayload
+ additionalProperties: false
+ properties:
+ commentId:
+ type: string
+ description: Id of the comment that was liked
+ description: Notification channel for all the services that need to know comment is liked.
+```
+
+The above example presents an application that communicates over the `allCommentsLiked` channel, which only accepts one message called `commentLiked`.
+
+### `messages` section
+
+In your AsyncAPI document, create a `components.messages` section to define each message your application uses as a reusable message. When setting up multiple channels, you won't have to repeat the same message definitions. For example:
+
+```yaml
+components:
+ messages:
+ commentLiked:
+ description: Message that is being sent when a comment has been liked by someone.
+ payload:
+ type: object
+ title: commentLikedPayload
+ additionalProperties: false
+ properties:
+ commentId:
+ type: string
+ description: Id of the comment that was liked
+```
+
+You can reuse messages using the [Reference Object](/docs/reference/specification/v3.0.0#referenceObject). For example:
+
+```yml
+ messages:
+ commentLiked:
+ $ref: '#/components/messages/commentLiked'
+```
+
+Here's the complete AsyncAPI document with channels reusing the same message:
+```yml
+asyncapi: 3.0.0
+info:
+ title: Example API
+ version: '1.0.0'
+channels:
+ allCommentsLiked:
+ address: comment/liked
+ messages:
+ commentLiked:
+ $ref: '#/components/messages/commentLikedUnliked'
+ description: Notification channel for all the services that need to know comment is liked.
+ allCommentUnliked:
+ address: comment/unliked
+ messages:
+ commentUnliked:
+ $ref: '#/components/messages/commentLikedUnliked'
+ description: Notification channel for all the services that need to know comment is liked.
+components:
+ messages:
+ commentLikedUnliked:
+ description: Message that is being sent when a comment has been liked or unliked by someone.
+ payload:
+ type: object
+ title: commentInfoPayload
+ additionalProperties: false
+ properties:
+ commentId:
+ type: string
+ description: Id of the comment that was liked or unliked
+```
+
+### Identifier of the message
+
+The key name that represents a message in your AsyncAPI document must be interpreted as `messageId`. If your document defines channels, the message key defined in the channel is the `messageId`.
+
+```yaml
+channels:
+ allCommentsLiked:
+ address: comment/liked
+ messages:
+ commentLiked:
+ $ref: '#/components/messages/commentLikedUnliked'
+ description: Notification channel for all the services that need to know comment is liked.
+```
+
+The above example shows a `commentLiked` message under the `allCommentsLiked` channel. It references a reusable message definition from the `components` section represented by the `commentLikedUnliked` key. In this setup, the `commentLiked` key is the `messageId` and not `commentLikedUnliked`.
+
+### Messages under operations
+
+Operations specify which channels they interact with. If a channel has several messages, but your operation only involves one, indicate which specific message the operation uses.
+
+```yaml
+channels:
+ allComments:
+ address: comments
+ messages:
+ commentLiked:
+ $ref: '#/components/messages/commentLikedMsg'
+ commentUnliked:
+ $ref: '#/components/messages/commentUnlikedMsg'
+ description: Notification channel for all the services that need to know comment is liked.
+operations:
+ onCommentLiked:
+ action: receive
+ channel:
+ $ref: '#/channels/allComments'
+ messages:
+ - $ref: '#/channels/allComments/messages/commentLiked'
+```
+
+The above example demonstrates how to specify the message for the `onCommentsLiked` operation received from the `allCommentLiked` channel. It's important to note that the message reference points to the channel, not the components section. That ensures accurate information about the `messageId`, which in this case is `commentLiked`, not `commentLikedMsg`.
diff --git a/pages/docs/concepts/asyncapi-document/adding-operations.md b/pages/docs/concepts/asyncapi-document/adding-operations.md
new file mode 100644
index 000000000000..964e8cef18fd
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/adding-operations.md
@@ -0,0 +1,54 @@
+---
+title: Adding operations
+weight: 90
+---
+
+In a messaging system, 'operations' are how messages are sent and received between participants or components. In AsyncAPI, understanding operations helps you see how the system sends asynchronous messages back and forth without waiting for responses. They serve as a vital tool, aiding users in comprehending the range of tasks and functionalities that the API is capable of performing.
+
+In an AsyncAPI document, operations describe your application's behaviors and capabilities by exchanging messages through channels configured in the AsyncAPI document. An `operation` represents a particular action or interaction that can be performed. The purpose of operations is to provide a standardized means for describing the process of sending, receiving from, requesting, or replying to messages within the messaging system.
+
+## Defining operations
+
+Operations can be defined as an independent object in the AsyncAPI document. More information about each field name that is used to define operations can be found [in the reference documentation of the specification](/docs/reference/specification/v3.0.0#operationObject).
+
+The following diagram declares the field names that are frequently used to define operations in an AsyncAPI document:
+
+```mermaid
+flowchart LR
+ C[operations]
+ F[action]
+ I[channel]
+ A[messages]
+ B[reply]
+ D[bindings]
+ E[security]
+ C --> F
+ C --> I
+ C --> D
+ C --> B
+ C --> E
+ C --> A
+ classDef default fill:#47BCEE,stroke:#000;
+```
+
+## Adding operations
+
+In the AsyncAPI document, 'operations' are distinct fields located at the root level of the document, alongside 'channels' and other key fields.
+Operations must specify on what channel they are performed by referencing the `channel` with `$ref`. For example:
+
+```
+onUserSignUp:
+ title: User sign up
+ summary: React and process information about new user sign up.
+ description: Process information about user sign up and update the information in the table that counts numbers of currently signed up users.
+ action: receive
+ channel:
+ $ref: '#/channels/userSignup'
+```
+
+The operation definition mentioned above gives the details needed for the application to send a message. Its 'title' and 'summary' clearly show that it's about receiving an event when a new user signs up to the system.
+
+Some fields are missing from this example:
+- No `messages` field means that this operation processes any message coming from the `userSignup` channel.
+- No `security` field means that there are no special security measures related to this operation and that the security should be applied the same as for other operations. Essentially, the security from the server level should be respected.
+- No `reply` field means that after reacting to the user sign up, this application will not send any reply as a reaction.
diff --git a/pages/docs/concepts/asyncapi-document/define-payload.md b/pages/docs/concepts/asyncapi-document/define-payload.md
new file mode 100644
index 000000000000..02d96aa24874
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/define-payload.md
@@ -0,0 +1,155 @@
+---
+title: Payload schema
+weight: 270
+---
+
+The payload schema sets the format, data types, and properties of a message. Such an approach ensures the message's payload follows a specific structure and data format.
+
+It's recommended to use AsyncAPI Schema (a superset of JSON Schema) for handling complex messages and structured data. AsyncAPI Schema helps consumers understand the payload's structure and data types. However, AsyncAPI allows any schema format. For example, when using the Avro schema format, define your message payload in Avro directly instead of trying to represent it in JSON Schema format.
+
+## Define schema
+
+Define the schema for the message payload with one of the following methods:
+
+- Inline: Define the JSON schema within the message payload property.
+- Components reference: Specify the schema using a reference to the `components.schemas` section, such as `$ref: '#/components/schemas/user`.
+- Remote reference: Specify the schema using an absolute remote endpoint, such as `$ref: 'https://schemas.example.com/user'`.
+- Local file reference: Specify the schema using a relative reference, such as `$ref: './user-signedup.json'`.
+
+The diagram below describes how payload referencing works within the component reference:
+
+```mermaid
+graph LR
+ C[message]
+ F[contentType]
+ I[headers]
+ A[components]
+ B[schemas]
+ D[payload]
+ C --> F
+ C --> I
+ C --> D
+ D --> |$ref| B
+ A --> B
+
+ style C fill:#47BCEE,stroke:#000;
+ style D fill:#47BCEE,stroke:#000;
+```
+
+Here is an example of an AsyncAPI document where the payload's schema is defined directly within it:
+
+```yaml
+channels:
+ exampleChannel:
+ address: exampleChannel
+ messages:
+ SimpleSignup:
+ payload:
+ type: object
+ properties:
+ name:
+ type: string
+ email:
+ type: string
+```
+
+## Attach examples
+
+Although optional, attaching examples to the AsyncAPI document is highly recommended. You can use JSON or YAML format for binary encodings. Attach the examples to the examples property within the message payload definition. For example:
+
+```yaml
+examples:
+ - name: SimpleSignup
+ summary: A simple UserSignup example message
+ payload:
+ user:
+ name: Demo
+ email: demo@demo.io
+```
+
+## Reuse schemas between messages
+
+To reuse a schema in your AsyncAPI document, define it in the `components/schemas` section and reference it using the `$ref` keyword. Using `$ref` avoids duplication and ensures consistency. Here's an example of reusing a schema from components in AsyncAPI:
+
+```yaml
+components:
+ messages:
+ SimpleSignup:
+ name: SimpleSignup
+ contentType: application/json
+ payload:
+ $ref: '#/components/schemas/SimpleSignup'
+ examples:
+ - name: SimpleSignup
+ payload:
+ user:
+ name: Demo
+ email: demo@demo.io
+schemas:
+ SimpleSignup:
+ type: object
+ properties:
+ name:
+ type: string
+ email:
+ type: string
+```
+
+## Schema formats
+
+The default schema in an AsyncAPI document is the AsyncAPI schema itself. However, you can choose from other formats like JSON Schema, Avro, OpenAPI Schema, Protobuf, and more. Remember to indicate in your AsyncAPI document which schema format you're using.
+
+You specify the format of the schema inside the `payload` field. The type of information you can put in `payload` can be described as a tuple. (A tuple is an ordered sequence of elements that can't be changed during a program's execution.)
+
+When using AsyncAPI Schema, the `payload` must represent a reference or the payload schema definition as described in previous sections.
+
+If you're using various formats, the `payload` field should include both `payload.schemaFormat` and `payload.schema`. For example:
+```yaml
+ payload:
+ schemaFormat: application/vnd.apache.avro;version=1.9.0
+ schema:
+ $ref: "https://www.asyncapi.com/resources/casestudies/adeo/CostingRequestPayload.avsc"
+```
+
+The above example specifies that the provided schema of the message payload is in Avro, version 1.9.0. It also specifies where the Avro schema file is located.
+
+## Schema formats and limitations related to their structures
+
+Some schema formats are too challenging to manage in JSON/YAML. Complex schema formats — Avro, AsyncAPI schemas, and other JSON-based schemas — can be directly included in the AsyncAPI document or referenced using `$ref` for specific sections.
+```yaml
+ payload:
+ schemaFormat: 'application/vnd.apache.avro;version=1.9.0'
+ schema: # The following is an Avro schema in YAML format (JSON format is also supported)
+ type: record
+ name: User
+ namespace: com.company
+ doc: User information
+ fields:
+ - name: displayName
+ type: string
+ - name: email
+ type: string
+ - name: age
+ type: int
+```
+
+The process is more complex for Protobuf schemas, as their Protocol Buffers are not JSON-based. You cannot use `$ref` to reference parts of the schema. Instead, you must include the entire Protobuf schema definition as a string:
+
+```yaml
+ payload:
+ schemaFormat: application/vnd.google.protobuf;version=3
+ schema: |
+ message Point {
+ required int32 x = 1;
+ required int32 y = 2;
+ optional string label = 3;
+ }
+
+ message Line {
+ required Point start = 1;
+ required Point end = 2;
+ optional string label = 3;
+ }
+```
+
+
diff --git a/pages/docs/concepts/asyncapi-document/dynamic-channel-address.md b/pages/docs/concepts/asyncapi-document/dynamic-channel-address.md
new file mode 100644
index 000000000000..38bec737e1ae
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/dynamic-channel-address.md
@@ -0,0 +1,86 @@
+---
+title: Parameters in channel address
+weight: 80
+---
+
+In the context of channel addresses within AsyncAPI documents, parameters play a crucial role in defining the dynamic components of an address. That aspect is particularly beneficial in setups like IoT, where topics are often assigned per device or device segment. In this scenario, your AsyncAPI document would describe a system composed of multiple channels. While these channels share the same definition, messages, and purpose, they differ in their channel addresses, which vary according to each device's identifier. To efficiently manage this setup, you provide a singular channel definition. The dynamic segment of each channel address, which corresponds to the device identifier, is then articulated through the use of parameters.
+
+## Add parameters
+
+You can add parameters to the `channel.address` by adding a parameter between curly braces like `{braces}`. Next, use `channel.parameters` to define your parameters. Finally, leverage the `components.parameters` to enable reusable parameters' definitions across multiple channels.
+
+The diagram below describes how to use reusable parameters in AsyncAPI.
+
+```mermaid
+graph LR
+ C[channels]
+ F[address]
+ I[messages]
+ A[components]
+ B[parameters]
+ D[parameters]
+ C --> F
+ C --> I
+ C --> D
+ D --> |$ref| B
+ A --> B
+
+ style C fill:#47BCEE,stroke:#000;
+ style D fill:#47BCEE,stroke:#000;
+ style F fill:#47BCEE,stroke:#000;
+```
+
+First, configure the variables in `address`. Next, define reusable variables in `components.parameters`. Finally, ensure that your `channel.parameters` references definitions in the `components.parameters` using `$ref`.
+
+### Channels section
+
+Here is an example of a parametrized channel address:
+
+```yml
+ lightingMeasured:
+ address: 'smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured'
+ description: The topic on which measured values may be produced and consumed.
+ parameters:
+ streetlightId:
+ description: The ID of the streetlight.
+```
+
+In the above example, you can see a definition of a `lightingMeasured` channel that contains a `streetlight` parameter. During runtime, there can be two or more channels serving the same purpose, but with different devices. For example, you could have channels for `smartylighting/streetlights/1/0/event/2/lighting/measured` and `smartylighting/streetlights/1/0/event/1/lighting/measured`.
+
+### `parameters` section
+
+In your AsyncAPI document, it's important to carefully define the `components.parameters` section. For each parameter utilized in the channel `address`, provide a comprehensive description along with other pertinent details. Avoid repeating the parameter definitions. For example:
+
+```yaml
+components:
+ parameters:
+ streetlightId:
+ description: The ID of the streetlight.
+```
+
+You can reuse parameters using the [Reference Object](/docs/reference/specification/v3.0.0#referenceObject) like in the following example:
+
+```yml
+ parameters:
+ streetlightId:
+ $ref: '#/components/parameters/streetlightId'
+```
+
+Here's the complete AsyncAPI document with the channels' parameters for the `address` field:
+```yaml
+asyncapi: 3.0.0
+info:
+ title: Example API
+ version: '1.0.0'
+channels:
+ lightingMeasured:
+ address: 'smartylighting/streetlights/1/0/event/{streetlightId}/lighting/measured'
+ description: The topic on which measured values may be produced and consumed.
+ parameters:
+ streetlightId:
+ $ref: '#/components/parameters/streetlightId'
+components:
+ parameters:
+ streetlightId:
+ description: The ID of the streetlight.
+```
diff --git a/pages/docs/concepts/asyncapi-document/index.md b/pages/docs/concepts/asyncapi-document/index.md
new file mode 100644
index 000000000000..032e8a0a9e2b
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/index.md
@@ -0,0 +1,43 @@
+---
+title: 'Introduction'
+weight: 50
+---
+
+The AsyncAPI Specification defines a set of fields that can be used in an AsyncAPI document to describe an application's API. The document may reference other files for additional details or shared fields, but it is typically a single, primary document that encapsulates the API description.
+
+Furthermore, the AsyncAPI document acts as a communication contract between `receivers` and `senders` within an event-driven system. It specifies the payload content required when a service sends a message and offers clear guidance to the receiver regarding the message's properties.
+
+```YAML
+asyncapi: 3.0.0
+info:
+ title: Cool Example
+ version: 0.1.0
+channels:
+ userSignedUp:
+ address: user/signedup
+ messages:
+ userSignedUp:
+ description: An event describing that a user just signed up.
+ payload:
+ type: object
+ properties:
+ fullName:
+ type: string
+ email:
+ type: string
+ format: email
+ age:
+ type: integer
+ minimum: 18
+operations:
+ userSignedUp:
+ action: send
+ channel:
+ $ref: '#/channels/userSignedUp'
+```
+
+
+You might have additional fields depending on the implemented protocol (i.e., MQTT, AMQP, Kafka, etc.).
+
+For example, your AsyncAPI document could have additional fields for configuring Kafka bindings.
+
diff --git a/pages/docs/concepts/asyncapi-document/reusability-with-traits.md b/pages/docs/concepts/asyncapi-document/reusability-with-traits.md
new file mode 100644
index 000000000000..edab24162061
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/reusability-with-traits.md
@@ -0,0 +1,100 @@
+---
+title: Reusability with traits
+weight: 200
+---
+
+Traits work only with the `operations` and `messages` fields. Traits allow the definition of properties to be reused across multiple messages and operations within the specification. Reusing traits promotes code maintainability and reduces duplication while making your AsyncAPI documents cleaner to manage.
+
+## Defining traits
+
+Traits are meant to be reused, so it's best to define them in the `components` section of your AsyncAPI document, either under `operationTraits` or `messageTraits`. Choose depending on whether they're for operations or messages. Give each trait a unique name and list the properties it includes. You can reference these traits with the `$ref` keyword, allowing you to keep traits in a separate file outside the AsyncAPI document. For more on using `$ref` and reusability, check out the [reusable parts document](/docs/concepts/asyncapi-document/reusable-parts).
+
+```mermaid
+graph LR
+ A[channels] --> F[messages]
+ F -->|$ref| D
+ B[components] --> C[operationTraits]
+ B --> D[messageTraits]
+ E[operations] -->|$ref| C
+
+
+ style A fill:#47BCEE,stroke:#47BCEE;
+ style F fill:#47BCEE,stroke:#47BCEE;
+ style E fill:#47BCEE,stroke:#47BCEE;
+```
+
+[Message traits](/docs/reference/specification/latest#messageTraitObject) do not fully cover all fields that a normal message has, such as the `payload`. The same is true with [Operation traits](/docs/reference/specification/latest#operationTraitObject) which represent only selected fields usually used in an operation.
+
+Here is a part of a message that has a trait defined inline in a message:
+
+```yaml
+description: Example description.
+traits:
+ - name: UserSignup
+ description: Trait description.
+ - tags:
+ - name: user
+```
+
+When traits are combined with a message object, the resulting message will look like the example shown below:
+
+```yaml
+name: UserSignup
+description: Example description.
+tags:
+ - name: user
+```
+
+Notice that the trait description didn't override the already defined description in a message outside the trait.
+
+## Applying traits from components
+
+Once a trait is defined, you can apply it to an operation or a message using the `$ref` keyword in the `traits` section. The `$ref` value should point to the path of the trait within the `components` section.
+
+For example, let's say we have a trait named `commonHeaders` defined in `messageTraits`:
+
+```yml
+components:
+ messageTraits:
+ commonHeaders:
+ headers:
+ type: object
+ properties:
+ content-type:
+ type: integer
+```
+
+To apply the above trait to a message object, you can do:
+
+```yml
+name: lightMeasured
+title: Light measured
+summary: Inform about environmental lighting conditions of a particular streetlight.
+headers:
+ type: object
+ properties:
+ custom-header:
+ type: string
+traits:
+ - $ref: '#/components/messageTraits/commonHeaders'
+```
+
+Notice how the `commonHeaders` trait includes a `content-type` header and is merged into the `headers` object in a message:
+
+```yaml
+name: lightMeasured
+title: Light measured
+summary: Inform about environmental lighting conditions of a particular streetlight.
+headers:
+ type: object
+ properties:
+ content-type:
+ type: integer
+ custom-header:
+ type: string
+```
+
+## Trait merging mechanism
+
+In the AsyncAPI document, traits are merged into the operation or message object in the order they are defined, without overriding any properties. For detailed information on how this merging works, refer to [the specification's section on the traits merge mechanism](/docs/reference/specification/#traitsMergeMechanism).
+
diff --git a/pages/docs/concepts/asyncapi-document/reusable-parts.md b/pages/docs/concepts/asyncapi-document/reusable-parts.md
new file mode 100644
index 000000000000..9effdb64ebdf
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/reusable-parts.md
@@ -0,0 +1,82 @@
+---
+title: Reusable parts
+weight: 280
+---
+
+Reusable parts in AsyncAPI provide flexibility, modularity, and code reusability. You can reuse the majority of document sections like messages, schema definitions, channels, operations, and more.
+
+Reusable parts allow you to split up the AsyncAPI document into many files and reference them using the [Reference Object](/docs/reference/specification/v3.0.0#referenceObject). You can use the `$ref` keyword to reference the same document, another local file, or an external URL. The diagram below describes how to reuse parts in AsyncAPI:
+
+## Same document
+
+You can use the `$ref` keyword to reference a component in an AsyncAPI document. In the example below, you define a component called `MyMessageSchema` under the `schemas` section to describe the structure of a message. Under the `myChannel` channel, you have a message with a payload definition that's represented as a reference to the `MyMessageSchema` schema via the `$ref` keyword.
+
+```yaml
+channels:
+ myChannel:
+ message:
+ myMessage:
+ payload:
+ $ref: '#/components/schemas/MyMessageSchema'
+components:
+ schemas:
+ MyMessageSchema:
+ type: object
+ properties:
+ message:
+ type: string
+```
+
+## Another local file
+
+You can reference another local document using the `$ref` keyword. Ensure the path to the local file is correct and accessible from your main AsyncAPI document.
+
+In the code below, you reference the component from another local document, such as `message-schema.yaml`.
+
+```yaml
+UserSignup:
+ name: UserSignup
+ title: User signup
+ summary: Action to sign a user up.
+ description: A longer description
+ contentType: application/json
+ payload: null
+```
+
+In the code below, you use another local document, `message-schema.yaml`, through a reference inside the AsyncAPI document.
+
+```yaml
+channels:
+ signUp:
+ address: user/signedup
+ messages:
+ UserSignup:
+ $ref: './message-schema.yaml#/UserSignup'
+operations:
+ user/signedup.publish:
+ action: receive
+ channel:
+ $ref: '#/channels/signUp'
+ messages:
+ - $ref: '#/channels/signUp/messages/UserSignup'
+```
+
+## External URL
+
+You can reference an external URL using the `$ref` keyword. Ensure the external URL provides the referenced component in a compatible format, such as YAML or JSON. In the example below, you reference the component from an external URL. The `$ref` value specifies the full URL to the external resource and the component's location.
+
+```yaml
+channels:
+ signUp:
+ address: user/signedup
+ messages:
+ UserSignup:
+ $ref: https://example.com/my-components.yaml#/schemas/MySchema
+operations:
+ user/signedup.publish:
+ action: receive
+ channel:
+ $ref: '#/channels/signUp'
+ messages:
+ - $ref: '#/channels/signUp/messages/UserSignup'
+```
diff --git a/pages/docs/concepts/asyncapi-document/variable-url.md b/pages/docs/concepts/asyncapi-document/variable-url.md
new file mode 100644
index 000000000000..8c7c93415279
--- /dev/null
+++ b/pages/docs/concepts/asyncapi-document/variable-url.md
@@ -0,0 +1,136 @@
+---
+title: Server variables
+weight: 275
+---
+
+The server's URL consists of the `host` and `pathname` fields. These values are not always known when you design your system. AsyncAPI enables you to construct dynamic URLs while enhancing the flexibility and maintainability of your AsyncAPI documents. These dynamic values (variables) are placeholders for values you can replace during runtime. You can easily manage multiple endpoints, handling various server configurations and environments.
+
+## Add variables
+
+You can add variables to `server.host` and `server.pathname` by adding a variable between curly braces like `{braces}`. Next, you use `server.variables` to provide definitions of your variables. Finally, leverage `components.serverVariables` to enable reusable variable definitions across multiple servers.
+
+The diagram below describes how to use reusable variables in AsyncAPI.
+
+```mermaid
+graph LR
+ C[servers]
+ F[host]
+ I[protocol]
+ E[pathname]
+ A[components]
+ B[serverVariables]
+ D[variables]
+ C --> F
+ C --> I
+ C --> E
+ C --> D
+ D --> |$ref| B
+ A --> B
+
+ style C fill:#47BCEE,stroke:#000;
+ style D fill:#47BCEE,stroke:#000;
+ style F fill:#47BCEE,stroke:#000;
+ style E fill:#47BCEE,stroke:#000
+```
+
+First, configure the variables in `host` and/or `pathname`. Next, define reusable variables in `components.serverVariables`. Finally, ensure that your `server.variables` from the server reference definitions in the `components.serverVariables` uses `$ref`.
+
+### Servers section
+
+Define the servers section in your AsyncAPI document, including the `host` and `pathname` for your API servers. Use placeholders enclosed in curly braces {} to represent the variables in the server. For example:
+
+```yaml
+servers:
+ production:
+ host: '{subdomain}.example.com:{port}'
+ pathname: '/{version}
+ variables:
+ subdomain:
+ enum:
+ - development
+ - staging
+ - production
+ port:
+ default: '8080'
+ version:
+ enum:
+ - v1
+ - v2
+```
+
+### `serverVariables` section
+
+Define the `components.serverVariables` section in your AsyncAPI document. For each variable used in the server `host` or `pathname`, provide a default value and an optional description to avoid repeating the variable definitions. For example:
+
+```yaml
+components:
+ serverVariables:
+ subdomain:
+ enum:
+ - development
+ - staging
+ - production
+ default: development
+ port:
+ default: '8080'
+ version:
+ enum:
+ - v1
+ - v2
+```
+
+### Define domain and port variables
+
+Use `components.serverVariables` in your server using the [Reference Object](/docs/reference/specification/v3.0.0#referenceObject) to avoid repeating information:
+
+```yml
+ variables:
+ subdomain:
+ $ref: '#/components/serverVariables/subdomain'
+```
+
+Here's the complete AsyncAPI document with the servers' variables for the `host` field:
+
+```yaml
+asyncapi: 3.0.0
+info:
+ title: Example API
+ version: '1.0.0'
+servers:
+ production:
+ host: '{subdomain}.example.com:{port}'
+ pathname: '/{version}'
+ protocol: amqp
+ variables:
+ subdomain:
+ $ref: '#/components/serverVariables/subdomain'
+ port:
+ $ref: '#/components/serverVariables/port'
+ version:
+ $ref: '#/components/serverVariables/version'
+ development:
+ host: '{subdomain}.dev.example.com:{port}'
+ pathname: /v1
+ protocol: amqp
+ variables:
+ subdomain:
+ $ref: '#/components/serverVariables/subdomain'
+ port:
+ $ref: '#/components/serverVariables/port'
+ version:
+ $ref: '#/components/serverVariables/version'
+components:
+ serverVariables:
+ subdomain:
+ enum:
+ - development
+ - staging
+ - production
+ default: development
+ port:
+ default: '8080'
+ version:
+ enum:
+ - v1
+ - v2
+```
diff --git a/pages/docs/tools/cli/usage.md b/pages/docs/tools/cli/usage.md
index f3ec30102585..0b98316cad9b 100644
--- a/pages/docs/tools/cli/usage.md
+++ b/pages/docs/tools/cli/usage.md
@@ -29,7 +29,7 @@ $ npm install -g @asyncapi/cli
$ asyncapi COMMAND
running command...
$ asyncapi (--version)
-@asyncapi/cli/1.2.8 linux-x64 node-v18.18.2
+@asyncapi/cli/1.2.22 linux-x64 node-v18.19.0
$ asyncapi --help [COMMAND]
USAGE
$ asyncapi COMMAND
@@ -93,7 +93,7 @@ EXAMPLES
$ asyncapi bundle ./asyncapi.yaml ./features.yaml --base ./asyncapi.yaml --reference-into-components
```
-_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/bundle.ts)_
+_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/bundle.ts)_
## `asyncapi config`
@@ -107,7 +107,7 @@ DESCRIPTION
CLI config settings
```
-_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/index.ts)_
+_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/index.ts)_
## `asyncapi config context`
@@ -121,7 +121,7 @@ DESCRIPTION
Manage short aliases for full paths to AsyncAPI documents
```
-_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/context/index.ts)_
+_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/context/index.ts)_
## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH`
@@ -143,7 +143,7 @@ DESCRIPTION
Add a context to the store
```
-_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/context/add.ts)_
+_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/context/add.ts)_
## `asyncapi config context current`
@@ -160,7 +160,7 @@ DESCRIPTION
Shows the current context that is being used
```
-_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/context/current.ts)_
+_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/context/current.ts)_
## `asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH`
@@ -181,7 +181,7 @@ DESCRIPTION
Edit a context in the store
```
-_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/context/edit.ts)_
+_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/context/edit.ts)_
## `asyncapi config context init [CONTEXT-FILE-PATH]`
@@ -204,7 +204,7 @@ DESCRIPTION
Initialize context
```
-_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/context/init.ts)_
+_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/context/init.ts)_
## `asyncapi config context list`
@@ -221,7 +221,7 @@ DESCRIPTION
List all the stored contexts in the store
```
-_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/context/list.ts)_
+_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/context/list.ts)_
## `asyncapi config context remove CONTEXT-NAME`
@@ -241,7 +241,7 @@ DESCRIPTION
Delete a context from the store
```
-_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/context/remove.ts)_
+_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/context/remove.ts)_
## `asyncapi config context use CONTEXT-NAME`
@@ -261,7 +261,7 @@ DESCRIPTION
Set a context as current
```
-_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/context/use.ts)_
+_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/context/use.ts)_
## `asyncapi config versions`
@@ -278,7 +278,7 @@ DESCRIPTION
Show versions of AsyncAPI tools used
```
-_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/config/versions.ts)_
+_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/config/versions.ts)_
## `asyncapi convert [SPEC-FILE]`
@@ -300,7 +300,7 @@ DESCRIPTION
Convert asyncapi documents older to newer versions
```
-_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/convert.ts)_
+_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/convert.ts)_
## `asyncapi diff OLD NEW`
@@ -355,7 +355,7 @@ DESCRIPTION
Find diff between two asyncapi files
```
-_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/diff.ts)_
+_See code: [src/commands/diff.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/diff.ts)_
## `asyncapi generate`
@@ -369,7 +369,7 @@ DESCRIPTION
Generate typed models or other things like clients, applications or docs using AsyncAPI Generator templates.
```
-_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/generate/index.ts)_
+_See code: [src/commands/generate/index.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/generate/index.ts)_
## `asyncapi generate fromTemplate ASYNCAPI TEMPLATE`
@@ -406,7 +406,7 @@ EXAMPLES
$ asyncapi generate fromTemplate asyncapi.yaml @asyncapi/html-template --param version=1.0.0 singleFile=true --output ./docs --force-write
```
-_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/generate/fromTemplate.ts)_
+_See code: [src/commands/generate/fromTemplate.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/generate/fromTemplate.ts)_
## `asyncapi generate models LANGUAGE FILE`
@@ -480,7 +480,7 @@ DESCRIPTION
Generates typed models
```
-_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/generate/models.ts)_
+_See code: [src/commands/generate/models.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/generate/models.ts)_
## `asyncapi new`
@@ -493,23 +493,26 @@ USAGE
FLAGS
-e, --example=
name of the example to use. Available examples are:
- - simple.yml
- - anyof.yml
- - application-headers.yml
- - correlation-id.yml
- - websocket-gemini.yml
- - gitter-streaming.yml
- - mercure.yml
- - not.yml
- - operation-security.yml
- - oneof.yml
- - rpc-client.yml
- - rpc-server.yml
- - slack-rtm.yml
+ - simple-asyncapi.yml
+ - adeo-kafka-request-reply-asyncapi.yml
+ - anyof-asyncapi.yml
+ - application-headers-asyncapi.yml
+ - correlation-id-asyncapi.yml
+ - websocket-gemini-asyncapi.yml
+ - gitter-streaming-asyncapi.yml
+ - kraken-websocket-request-reply-message-filter-in-reply-asyncapi.yml
+ - kraken-websocket-request-reply-multiple-channels-asyncapi.yml
+ - mercure-asyncapi.yml
+ - not-asyncapi.yml
+ - operation-security-asyncapi.yml
+ - oneof-asyncapi.yml
+ - rpc-client-asyncapi.yml
+ - rpc-server-asyncapi.yml
+ - slack-rtm-asyncapi.yml
- tutorial.yml
- - streetlights-kafka.yml
- - streetlights-operation-security.yml
- - streetlights-mqtt.yml
+ - streetlights-kafka-asyncapi.yml
+ - streetlights-operation-security-asyncapi.yml
+ - streetlights-mqtt-asyncapi.yml
-h, --help
Show CLI help.
@@ -535,7 +538,7 @@ EXAMPLES
$ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode
```
-_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/new/index.ts)_
+_See code: [src/commands/new/index.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/new/index.ts)_
## `asyncapi new file`
@@ -548,23 +551,26 @@ USAGE
FLAGS
-e, --example=
name of the example to use. Available examples are:
- - simple.yml
- - anyof.yml
- - application-headers.yml
- - correlation-id.yml
- - websocket-gemini.yml
- - gitter-streaming.yml
- - mercure.yml
- - not.yml
- - operation-security.yml
- - oneof.yml
- - rpc-client.yml
- - rpc-server.yml
- - slack-rtm.yml
+ - simple-asyncapi.yml
+ - adeo-kafka-request-reply-asyncapi.yml
+ - anyof-asyncapi.yml
+ - application-headers-asyncapi.yml
+ - correlation-id-asyncapi.yml
+ - websocket-gemini-asyncapi.yml
+ - gitter-streaming-asyncapi.yml
+ - kraken-websocket-request-reply-message-filter-in-reply-asyncapi.yml
+ - kraken-websocket-request-reply-multiple-channels-asyncapi.yml
+ - mercure-asyncapi.yml
+ - not-asyncapi.yml
+ - operation-security-asyncapi.yml
+ - oneof-asyncapi.yml
+ - rpc-client-asyncapi.yml
+ - rpc-server-asyncapi.yml
+ - slack-rtm-asyncapi.yml
- tutorial.yml
- - streetlights-kafka.yml
- - streetlights-operation-security.yml
- - streetlights-mqtt.yml
+ - streetlights-kafka-asyncapi.yml
+ - streetlights-operation-security-asyncapi.yml
+ - streetlights-mqtt-asyncapi.yml
-h, --help
Show CLI help.
@@ -590,7 +596,7 @@ EXAMPLES
$ asyncapi new --file-name=my-asyncapi.yml --example=default-example.yml --no-tty - create a new file with a specific name, using one of the examples and without interactive mode
```
-_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/new/file.ts)_
+_See code: [src/commands/new/file.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/new/file.ts)_
## `asyncapi new glee`
@@ -609,7 +615,7 @@ DESCRIPTION
Creates a new Glee project
```
-_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/new/glee.ts)_
+_See code: [src/commands/new/glee.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/new/glee.ts)_
## `asyncapi new project`
@@ -628,7 +634,7 @@ DESCRIPTION
Creates a new Glee project
```
-_See code: [src/commands/new/project.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/new/project.ts)_
+_See code: [src/commands/new/project.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/new/project.ts)_
## `asyncapi optimize [SPEC-FILE]`
@@ -664,7 +670,7 @@ EXAMPLES
$ asyncapi optimize ./asyncapi.yaml --optimization=remove-components,reuse-components,move-to-components --output=terminal --no-tty
```
-_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/optimize.ts)_
+_See code: [src/commands/optimize.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/optimize.ts)_
## `asyncapi start`
@@ -678,7 +684,7 @@ DESCRIPTION
Start asyncapi studio
```
-_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/start/index.ts)_
+_See code: [src/commands/start/index.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/start/index.ts)_
## `asyncapi start studio`
@@ -697,7 +703,7 @@ DESCRIPTION
starts a new local instance of Studio
```
-_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/start/studio.ts)_
+_See code: [src/commands/start/studio.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/start/studio.ts)_
## `asyncapi validate [SPEC-FILE]`
@@ -724,5 +730,5 @@ DESCRIPTION
validate asyncapi file
```
-_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v1.2.8/src/commands/validate.ts)_
+_See code: [src/commands/validate.ts](https://github.com/asyncapi/cli/blob/v1.2.22/src/commands/validate.ts)_