diff --git a/.all-contributorsrc b/.all-contributorsrc index 64e7fe6bdf7d..c1c76d9cdfe0 100644 --- a/.all-contributorsrc +++ b/.all-contributorsrc @@ -61,10 +61,10 @@ ] }, { - "login": "alequetzalli", - "name": "Alejandra Quetzalli ", + "login": "quetzalliwrites", + "name": "Quetzalli Writes", "avatar_url": "https://avatars.githubusercontent.com/u/19964402?v=4", - "profile": "https://github.com/alequetzalli", + "profile": "https://github.com/quetzalliwrites", "contributions": [ "doc", "review", @@ -555,6 +555,15 @@ "contributions": [ "doc" ] + }, + { + "login": "raj17ce", + "name": "Raj Patel", + "avatar_url": "https://avatars.githubusercontent.com/u/116947399?v=4", + "profile": "https://github.com/raj17ce", + "contributions": [ + "code" + ] } ], "contributorsPerLine": 7, diff --git a/.coderabbit.yaml b/.coderabbit.yaml new file mode 100644 index 000000000000..74b51b881dd3 --- /dev/null +++ b/.coderabbit.yaml @@ -0,0 +1,35 @@ +language: "en-US" +reviews: + high_level_summary: true + tools: + markdownlint: + enabled: true + biome: + enabled: true + github-checks: + enabled: true + timeout_ms: 180000 + languagetool: + enabled: true + enabled_only: false + level: default + hadolint: + enabled: true + yamllint: + enabled: true + gitleaks: + enabled: true + eslint: + enabled: true + actionlint: + enabled: true + semgrep: + enabled: true +knowledge_base: + opt_out: false + learnings: + scope: "local" + issues: + scope: "local" + pull_requests: + scope: "local" diff --git a/.eslintrc b/.eslintrc index ddab7e016ee3..f77da8144e9c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -9,7 +9,8 @@ "env": { "browser": true, "es2021": true, - "node": true + "node": true, + "jest": true }, "plugins": [ "react", @@ -313,4 +314,4 @@ } } ] -} \ No newline at end of file +} diff --git a/.github/workflows/if-nodejs-pr-testing.yml b/.github/workflows/if-nodejs-pr-testing.yml index 2154143339cc..d5489e7ab8f2 100644 --- a/.github/workflows/if-nodejs-pr-testing.yml +++ b/.github/workflows/if-nodejs-pr-testing.yml @@ -2,8 +2,10 @@ name: PR testing - if Node project on: - pull_request: + pull_request_target: types: [opened, reopened, synchronize, ready_for_review] + push: + branches: [master] jobs: test-nodejs-pr: @@ -40,6 +42,11 @@ jobs: - if: steps.should_run.outputs.shouldrun == 'true' name: Checkout repository uses: actions/checkout@v4 + with: + # Checkout the merge commit instead of the pull request head commit for a pull request + # Fallback to the head commit if its not a pull request + ref: ${{ github.event.pull_request.number != '' && format('refs/pull/{0}/merge', github.event.pull_request.number) || github.ref }} + - if: steps.should_run.outputs.shouldrun == 'true' name: Check if Node.js project and has package.json id: packagejson @@ -59,7 +66,7 @@ jobs: name: Setup Node.js uses: actions/setup-node@v4 with: - node-version: "${{ steps.nodeversion.outputs.version }}" + node-version: '${{ steps.nodeversion.outputs.version }}' - name: Install dependencies run: npm ci - if: steps.packagejson.outputs.exists == 'true' @@ -72,3 +79,47 @@ jobs: name: Run release assets generation to make sure PR does not break it shell: bash run: npm run generate:assets --if-present + + # Run the test:md script and capture output + - if: ${{ steps.packagejson.outputs.exists == 'true' && matrix.os == 'ubuntu-latest' }} + name: Run markdown checks + id: markdown_check + run: | + ERRORS=$(npm run test:md | sed -n '/Errors in file/,$p') + echo "markdown_output<> $GITHUB_OUTPUT + echo "$ERRORS" >> $GITHUB_OUTPUT + echo "EOF" >> $GITHUB_OUTPUT + + # Post a comment using sticky-pull-request-comment + - name: Comment on PR with markdown issues + if: ${{ steps.markdown_check.outputs.markdown_output != '' && matrix.os == 'ubuntu-latest' }} + uses: marocchino/sticky-pull-request-comment@3d60a5b2dae89d44e0c6ddc69dd7536aec2071cd + with: + header: markdown-check-error + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + message: | + ### Markdown Check Results + + We found issues in the following markdown files: + + ``` + ${{ steps.markdown_check.outputs.markdown_output }} + ``` + + # Delete the comment if there are no issues + - if: ${{ steps.markdown_check.outputs.markdown_output == '' && matrix.os == 'ubuntu-latest' }} + name: Delete markdown check comment + uses: marocchino/sticky-pull-request-comment@3d60a5b2dae89d44e0c6ddc69dd7536aec2071cd + with: + header: markdown-check-error + delete: true + GITHUB_TOKEN: ${{ secrets.GH_TOKEN }} + + - if: steps.packagejson.outputs.exists == 'true' + name: Upload Coverage to Codecov + uses: codecov/codecov-action@e28ff129e5465c2c0dcc6f003fc735cb6ae0c673 + with: + fail_ci_if_error: true + files: ./coverage/lcov.info + token: ${{ secrets.CODECOV_TOKEN }} + verbose: true diff --git a/.github/workflows/regenerate-meetings-and-videos.yml b/.github/workflows/regenerate-meetings-and-videos.yml index 72aeda4e9e69..34509995d063 100644 --- a/.github/workflows/regenerate-meetings-and-videos.yml +++ b/.github/workflows/regenerate-meetings-and-videos.yml @@ -1,6 +1,6 @@ name: List everyday latest list of AsyncAPI Meetings, Newsroom Videos and Dashboard data. -on: +on: workflow_dispatch: schedule: #every day at midnight @@ -23,7 +23,7 @@ jobs: - name: Check package-lock version uses: asyncapi/.github/.github/actions/get-node-version-from-package-lock@master id: lockversion - + - name: Use Node.js uses: actions/setup-node@v3 with: @@ -45,7 +45,7 @@ jobs: committer: asyncapi-bot author: asyncapi-bot title: 'chore: update meetings.json and newsrooom_videos.json' - branch: update-meetings/${{ github.job }} + branch: update-meetings/${{ github.sha }} - if: failure() # Only, on failure, send a message on the 94_bot-failing-ci slack channel name: Report workflow run status to Slack uses: 8398a7/action-slack@fbd6aa58ba854a740e11a35d0df80cb5d12101d8 #using https://github.com/8398a7/action-slack/releases/tag/v3.15.1 @@ -54,4 +54,4 @@ jobs: fields: repo,action,workflow text: 'AsyncAPI Meetings and Videos workflow failed' env: - SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} \ No newline at end of file + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_CI_FAIL_NOTIFY }} diff --git a/.github/workflows/update-maintainers-trigger.yaml b/.github/workflows/update-maintainers-trigger.yaml new file mode 100644 index 000000000000..12fc4abe4f06 --- /dev/null +++ b/.github/workflows/update-maintainers-trigger.yaml @@ -0,0 +1,28 @@ +# This action is centrally managed in https://github.com/asyncapi/.github/ +# Don't make changes to this file in this repo as they will be overwritten with changes made to the same file in above mentioned repo + +name: Trigger MAINTAINERS.yaml file update + +on: + push: + branches: [ master ] + paths: + # Check all valid CODEOWNERS locations: + # https://docs.github.com/en/repositories/managing-your-repositorys-settings-and-features/customizing-your-repository/about-code-owners#codeowners-file-location + - 'CODEOWNERS' + - '.github/CODEOWNERS' + - '.docs/CODEOWNERS' + +jobs: + trigger-maintainers-update: + name: Trigger updating MAINTAINERS.yaml because of CODEOWNERS change + runs-on: ubuntu-latest + + steps: + - name: Repository Dispatch + uses: peter-evans/repository-dispatch@ff45666b9427631e3450c54a1bcbee4d9ff4d7c0 # https://github.com/peter-evans/repository-dispatch/releases/tag/v3.0.0 + with: + # The PAT with the 'public_repo' scope is required + token: ${{ secrets.GH_TOKEN }} + repository: ${{ github.repository_owner }}/community + event-type: trigger-maintainers-update diff --git a/LICENSE-docs b/LICENSE-docs new file mode 100644 index 000000000000..102013379aa9 --- /dev/null +++ b/LICENSE-docs @@ -0,0 +1,395 @@ +Attribution 4.0 International + +======================================================================= + +Creative Commons Corporation ("Creative Commons") is not a law firm and +does not provide legal services or legal advice. Distribution of +Creative Commons public licenses does not create a lawyer-client or +other relationship. Creative Commons makes its licenses and related +information available on an "as-is" basis. Creative Commons gives no +warranties regarding its licenses, any material licensed under their +terms and conditions, or any related information. Creative Commons +disclaims all liability for damages resulting from their use to the +fullest extent possible. + +Using Creative Commons Public Licenses + +Creative Commons public licenses provide a standard set of terms and +conditions that creators and other rights holders may use to share +original works of authorship and other material subject to copyright +and certain other rights specified in the public license below. The +following considerations are for informational purposes only, are not +exhaustive, and do not form part of our licenses. + + Considerations for licensors: Our public licenses are + intended for use by those authorized to give the public + permission to use material in ways otherwise restricted by + copyright and certain other rights. Our licenses are + irrevocable. Licensors should read and understand the terms + and conditions of the license they choose before applying it. + Licensors should also secure all rights necessary before + applying our licenses so that the public can reuse the + material as expected. Licensors should clearly mark any + material not subject to the license. This includes other CC- + licensed material, or material used under an exception or + limitation to copyright. More considerations for licensors: + wiki.creativecommons.org/Considerations_for_licensors + + Considerations for the public: By using one of our public + licenses, a licensor grants the public permission to use the + licensed material under specified terms and conditions. If + the licensor's permission is not necessary for any reason--for + example, because of any applicable exception or limitation to + copyright--then that use is not regulated by the license. Our + licenses grant only permissions under copyright and certain + other rights that a licensor has authority to grant. Use of + the licensed material may still be restricted for other + reasons, including because others have copyright or other + rights in the material. A licensor may make special requests, + such as asking that all changes be marked or described. + Although not required by our licenses, you are encouraged to + respect those requests where reasonable. More considerations + for the public: + wiki.creativecommons.org/Considerations_for_licensees + +======================================================================= + +Creative Commons Attribution 4.0 International Public License + +By exercising the Licensed Rights (defined below), You accept and agree +to be bound by the terms and conditions of this Creative Commons +Attribution 4.0 International Public License ("Public License"). To the +extent this Public License may be interpreted as a contract, You are +granted the Licensed Rights in consideration of Your acceptance of +these terms and conditions, and the Licensor grants You such rights in +consideration of benefits the Licensor receives from making the +Licensed Material available under these terms and conditions. + + +Section 1 -- Definitions. + + a. Adapted Material means material subject to Copyright and Similar + Rights that is derived from or based upon the Licensed Material + and in which the Licensed Material is translated, altered, + arranged, transformed, or otherwise modified in a manner requiring + permission under the Copyright and Similar Rights held by the + Licensor. For purposes of this Public License, where the Licensed + Material is a musical work, performance, or sound recording, + Adapted Material is always produced where the Licensed Material is + synched in timed relation with a moving image. + + b. Adapter's License means the license You apply to Your Copyright + and Similar Rights in Your contributions to Adapted Material in + accordance with the terms and conditions of this Public License. + + c. Copyright and Similar Rights means copyright and/or similar rights + closely related to copyright including, without limitation, + performance, broadcast, sound recording, and Sui Generis Database + Rights, without regard to how the rights are labeled or + categorized. For purposes of this Public License, the rights + specified in Section 2(b)(1)-(2) are not Copyright and Similar + Rights. + + d. Effective Technological Measures means those measures that, in the + absence of proper authority, may not be circumvented under laws + fulfilling obligations under Article 11 of the WIPO Copyright + Treaty adopted on December 20, 1996, and/or similar international + agreements. + + e. Exceptions and Limitations means fair use, fair dealing, and/or + any other exception or limitation to Copyright and Similar Rights + that applies to Your use of the Licensed Material. + + f. Licensed Material means the artistic or literary work, database, + or other material to which the Licensor applied this Public + License. + + g. Licensed Rights means the rights granted to You subject to the + terms and conditions of this Public License, which are limited to + all Copyright and Similar Rights that apply to Your use of the + Licensed Material and that the Licensor has authority to license. + + h. Licensor means the individual(s) or entity(ies) granting rights + under this Public License. + + i. Share means to provide material to the public by any means or + process that requires permission under the Licensed Rights, such + as reproduction, public display, public performance, distribution, + dissemination, communication, or importation, and to make material + available to the public including in ways that members of the + public may access the material from a place and at a time + individually chosen by them. + + j. Sui Generis Database Rights means rights other than copyright + resulting from Directive 96/9/EC of the European Parliament and of + the Council of 11 March 1996 on the legal protection of databases, + as amended and/or succeeded, as well as other essentially + equivalent rights anywhere in the world. + + k. You means the individual or entity exercising the Licensed Rights + under this Public License. Your has a corresponding meaning. + + +Section 2 -- Scope. + + a. License grant. + + 1. Subject to the terms and conditions of this Public License, + the Licensor hereby grants You a worldwide, royalty-free, + non-sublicensable, non-exclusive, irrevocable license to + exercise the Licensed Rights in the Licensed Material to: + + a. reproduce and Share the Licensed Material, in whole or + in part; and + + b. produce, reproduce, and Share Adapted Material. + + 2. Exceptions and Limitations. For the avoidance of doubt, where + Exceptions and Limitations apply to Your use, this Public + License does not apply, and You do not need to comply with + its terms and conditions. + + 3. Term. The term of this Public License is specified in Section + 6(a). + + 4. Media and formats; technical modifications allowed. The + Licensor authorizes You to exercise the Licensed Rights in + all media and formats whether now known or hereafter created, + and to make technical modifications necessary to do so. The + Licensor waives and/or agrees not to assert any right or + authority to forbid You from making technical modifications + necessary to exercise the Licensed Rights, including + technical modifications necessary to circumvent Effective + Technological Measures. For purposes of this Public License, + simply making modifications authorized by this Section 2(a) + (4) never produces Adapted Material. + + 5. Downstream recipients. + + a. Offer from the Licensor -- Licensed Material. Every + recipient of the Licensed Material automatically + receives an offer from the Licensor to exercise the + Licensed Rights under the terms and conditions of this + Public License. + + b. No downstream restrictions. You may not offer or impose + any additional or different terms or conditions on, or + apply any Effective Technological Measures to, the + Licensed Material if doing so restricts exercise of the + Licensed Rights by any recipient of the Licensed + Material. + + 6. No endorsement. Nothing in this Public License constitutes or + may be construed as permission to assert or imply that You + are, or that Your use of the Licensed Material is, connected + with, or sponsored, endorsed, or granted official status by, + the Licensor or others designated to receive attribution as + provided in Section 3(a)(1)(A)(i). + + b. Other rights. + + 1. Moral rights, such as the right of integrity, are not + licensed under this Public License, nor are publicity, + privacy, and/or other similar personality rights; however, to + the extent possible, the Licensor waives and/or agrees not to + assert any such rights held by the Licensor to the limited + extent necessary to allow You to exercise the Licensed + Rights, but not otherwise. + + 2. Patent and trademark rights are not licensed under this + Public License. + + 3. To the extent possible, the Licensor waives any right to + collect royalties from You for the exercise of the Licensed + Rights, whether directly or through a collecting society + under any voluntary or waivable statutory or compulsory + licensing scheme. In all other cases the Licensor expressly + reserves any right to collect such royalties. + + +Section 3 -- License Conditions. + +Your exercise of the Licensed Rights is expressly made subject to the +following conditions. + + a. Attribution. + + 1. If You Share the Licensed Material (including in modified + form), You must: + + a. retain the following if it is supplied by the Licensor + with the Licensed Material: + + i. identification of the creator(s) of the Licensed + Material and any others designated to receive + attribution, in any reasonable manner requested by + the Licensor (including by pseudonym if + designated); + + ii. a copyright notice; + + iii. a notice that refers to this Public License; + + iv. a notice that refers to the disclaimer of + warranties; + + v. a URI or hyperlink to the Licensed Material to the + extent reasonably practicable; + + b. indicate if You modified the Licensed Material and + retain an indication of any previous modifications; and + + c. indicate the Licensed Material is licensed under this + Public License, and include the text of, or the URI or + hyperlink to, this Public License. + + 2. You may satisfy the conditions in Section 3(a)(1) in any + reasonable manner based on the medium, means, and context in + which You Share the Licensed Material. For example, it may be + reasonable to satisfy the conditions by providing a URI or + hyperlink to a resource that includes the required + information. + + 3. If requested by the Licensor, You must remove any of the + information required by Section 3(a)(1)(A) to the extent + reasonably practicable. + + 4. If You Share Adapted Material You produce, the Adapter's + License You apply must not prevent recipients of the Adapted + Material from complying with this Public License. + + +Section 4 -- Sui Generis Database Rights. + +Where the Licensed Rights include Sui Generis Database Rights that +apply to Your use of the Licensed Material: + + a. for the avoidance of doubt, Section 2(a)(1) grants You the right + to extract, reuse, reproduce, and Share all or a substantial + portion of the contents of the database; + + b. if You include all or a substantial portion of the database + contents in a database in which You have Sui Generis Database + Rights, then the database in which You have Sui Generis Database + Rights (but not its individual contents) is Adapted Material; and + + c. You must comply with the conditions in Section 3(a) if You Share + all or a substantial portion of the contents of the database. + +For the avoidance of doubt, this Section 4 supplements and does not +replace Your obligations under this Public License where the Licensed +Rights include other Copyright and Similar Rights. + + +Section 5 -- Disclaimer of Warranties and Limitation of Liability. + + a. UNLESS OTHERWISE SEPARATELY UNDERTAKEN BY THE LICENSOR, TO THE + EXTENT POSSIBLE, THE LICENSOR OFFERS THE LICENSED MATERIAL AS-IS + AND AS-AVAILABLE, AND MAKES NO REPRESENTATIONS OR WARRANTIES OF + ANY KIND CONCERNING THE LICENSED MATERIAL, WHETHER EXPRESS, + IMPLIED, STATUTORY, OR OTHER. THIS INCLUDES, WITHOUT LIMITATION, + WARRANTIES OF TITLE, MERCHANTABILITY, FITNESS FOR A PARTICULAR + PURPOSE, NON-INFRINGEMENT, ABSENCE OF LATENT OR OTHER DEFECTS, + ACCURACY, OR THE PRESENCE OR ABSENCE OF ERRORS, WHETHER OR NOT + KNOWN OR DISCOVERABLE. WHERE DISCLAIMERS OF WARRANTIES ARE NOT + ALLOWED IN FULL OR IN PART, THIS DISCLAIMER MAY NOT APPLY TO YOU. + + b. TO THE EXTENT POSSIBLE, IN NO EVENT WILL THE LICENSOR BE LIABLE + TO YOU ON ANY LEGAL THEORY (INCLUDING, WITHOUT LIMITATION, + NEGLIGENCE) OR OTHERWISE FOR ANY DIRECT, SPECIAL, INDIRECT, + INCIDENTAL, CONSEQUENTIAL, PUNITIVE, EXEMPLARY, OR OTHER LOSSES, + COSTS, EXPENSES, OR DAMAGES ARISING OUT OF THIS PUBLIC LICENSE OR + USE OF THE LICENSED MATERIAL, EVEN IF THE LICENSOR HAS BEEN + ADVISED OF THE POSSIBILITY OF SUCH LOSSES, COSTS, EXPENSES, OR + DAMAGES. WHERE A LIMITATION OF LIABILITY IS NOT ALLOWED IN FULL OR + IN PART, THIS LIMITATION MAY NOT APPLY TO YOU. + + c. The disclaimer of warranties and limitation of liability provided + above shall be interpreted in a manner that, to the extent + possible, most closely approximates an absolute disclaimer and + waiver of all liability. + + +Section 6 -- Term and Termination. + + a. This Public License applies for the term of the Copyright and + Similar Rights licensed here. However, if You fail to comply with + this Public License, then Your rights under this Public License + terminate automatically. + + b. Where Your right to use the Licensed Material has terminated under + Section 6(a), it reinstates: + + 1. automatically as of the date the violation is cured, provided + it is cured within 30 days of Your discovery of the + violation; or + + 2. upon express reinstatement by the Licensor. + + For the avoidance of doubt, this Section 6(b) does not affect any + right the Licensor may have to seek remedies for Your violations + of this Public License. + + c. For the avoidance of doubt, the Licensor may also offer the + Licensed Material under separate terms or conditions or stop + distributing the Licensed Material at any time; however, doing so + will not terminate this Public License. + + d. Sections 1, 5, 6, 7, and 8 survive termination of this Public + License. + + +Section 7 -- Other Terms and Conditions. + + a. The Licensor shall not be bound by any additional or different + terms or conditions communicated by You unless expressly agreed. + + b. Any arrangements, understandings, or agreements regarding the + Licensed Material not stated herein are separate from and + independent of the terms and conditions of this Public License. + + +Section 8 -- Interpretation. + + a. For the avoidance of doubt, this Public License does not, and + shall not be interpreted to, reduce, limit, restrict, or impose + conditions on any use of the Licensed Material that could lawfully + be made without permission under this Public License. + + b. To the extent possible, if any provision of this Public License is + deemed unenforceable, it shall be automatically reformed to the + minimum extent necessary to make it enforceable. If the provision + cannot be reformed, it shall be severed from this Public License + without affecting the enforceability of the remaining terms and + conditions. + + c. No term or condition of this Public License will be waived and no + failure to comply consented to unless expressly agreed to by the + Licensor. + + d. Nothing in this Public License constitutes or may be interpreted + as a limitation upon, or waiver of, any privileges and immunities + that apply to the Licensor or You, including from the legal + processes of any jurisdiction or authority. + + +======================================================================= + +Creative Commons is not a party to its public +licenses. Notwithstanding, Creative Commons may elect to apply one of +its public licenses to material it publishes and in those instances +will be considered the “Licensor.” The text of the Creative Commons +public licenses is dedicated to the public domain under the CC0 Public +Domain Dedication. Except for the limited purpose of indicating that +material is shared under a Creative Commons public license or as +otherwise permitted by the Creative Commons policies published at +creativecommons.org/policies, Creative Commons does not authorize the +use of the trademark "Creative Commons" or any other trademark or logo +of Creative Commons without its prior written consent including, +without limitation, in connection with any unauthorized modifications +to any of its public licenses or any other arrangements, +understandings, or agreements concerning use of licensed material. For +the avoidance of doubt, this paragraph does not form part of the +public licenses. + +Creative Commons may be contacted at creativecommons.org. \ No newline at end of file diff --git a/README.md b/README.md index 543ff41d935c..5f153826f3c7 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,7 @@ After cloning repository to your local, perform the following steps from the roo #### Steps: 1. Build the Docker image: ```bash - docker build -t asyncapi-website .` + docker build -t asyncapi-website . ``` 2. Start the container: ```bash @@ -314,6 +314,15 @@ This repository has the following structure:

+## License + +This project's source code is licensed under the Apache License, Version 2.0. A copy of the +license is available in LICENSE file. + +This project's documentation is licensed under the Creative Commons Attribution +4.0 International License (CC-BY-4.0). A copy of the license is available in +LICENSE-docs. + ## AsyncAPI Contributors ✨ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/docs/en/emoji-key)): @@ -327,7 +336,7 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Fran Méndez
Fran Méndez

💻 📖 🐛 🎨 🚧 🚇 🤔 👀 📝 Lukasz Gornicki
Lukasz Gornicki

💻 📖 🐛 🎨 🚧 🚇 🤔 👀 📝 Maciej Urbańczyk
Maciej Urbańczyk

💻 📖 🐛 🎨 🚧 🚇 🤔 👀 📝 - Alejandra Quetzalli
Alejandra Quetzalli

📖 👀 📢 + Quetzalli Writes
Quetzalli Writes

📖 👀 📢 Aayush Kumar Sahu
Aayush Kumar Sahu

💻 🐛 🎨 David Boyne
David Boyne

💻 🎨 Jesse Menning
Jesse Menning

📝 @@ -395,6 +404,9 @@ Thanks goes to these wonderful people ([emoji key](https://allcontributors.org/d Neutron
Neutron

💻 Sagar Kori
Sagar Kori

📖 + + Raj Patel
Raj Patel

💻 + diff --git a/assets/docs/fragments/contribution-notes.md b/assets/docs/fragments/contribution-notes.md index 5c10d80c480f..64f0015e4d89 100644 --- a/assets/docs/fragments/contribution-notes.md +++ b/assets/docs/fragments/contribution-notes.md @@ -11,4 +11,4 @@ To get started as a Docs contributor: Do you have a documentation contributor question and you're wondering how to tag me into a GitHub discussion or PR? Never fear! -Tag me in your AsyncAPI Doc PRs or [GitHub Discussions](https://github.com/asyncapi/community/discussions/categories/docs) via my GitHub handle, [`alequetzalli`](https://github.com/alequetzalli) 🐙. +Tag me in your AsyncAPI Doc PRs or [GitHub Discussions](https://github.com/asyncapi/community/discussions/categories/docs) via my GitHub handle, [`quetzalliwrites`](https://github.com/quetzalliwrites) 🐙. diff --git a/components/AlgoliaSearch.tsx b/components/AlgoliaSearch.tsx index 43b3cc7ce6b9..a7d3604fafb7 100644 --- a/components/AlgoliaSearch.tsx +++ b/components/AlgoliaSearch.tsx @@ -5,7 +5,7 @@ import clsx from 'clsx'; import Head from 'next/head'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react'; +import React, { createContext, useCallback, useContext, useEffect, useRef, useState } from 'react'; import { createPortal } from 'react-dom'; export const INDEX_NAME = 'asyncapi'; @@ -283,6 +283,7 @@ export default function AlgoliaSearch({ children }: { children: React.ReactNode */ export function SearchButton({ children, indexName = INDEX_NAME, ...props }: ISearchButtonProps) { const { onOpen, onInput } = useContext(SearchContext); + const [Children, setChildren] = useState(''); const searchButtonRef = useRef(null); const actionKey = getActionKey(); @@ -308,6 +309,12 @@ export function SearchButton({ children, indexName = INDEX_NAME, ...props }: ISe }; }, [onInput, searchButtonRef]); + useEffect(() => { + if (typeof children === 'function') { + setChildren(children({ actionKey })); + } + }, []); + return ( ); } diff --git a/components/Avatar.tsx b/components/Avatar.tsx index b8bb1e557153..d889cafb9d7c 100644 --- a/components/Avatar.tsx +++ b/components/Avatar.tsx @@ -32,9 +32,17 @@ export default function Avatar({ name, photo, link, className }: AvatarProps) { ); return link ? ( - + ) : ( {avatar} ); diff --git a/components/Calendar.tsx b/components/Calendar.tsx index 2805abf2f7cd..5a5bfd2ba134 100644 --- a/components/Calendar.tsx +++ b/components/Calendar.tsx @@ -1,4 +1,5 @@ import moment from 'moment'; +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { IEvent } from '@/types/event'; @@ -27,10 +28,16 @@ export default function Calendar({ className = '', size }: ICalendarProps) { const CALENDAR_URL = 'https://calendar.google.com/calendar/embed?src=c_q9tseiglomdsj6njuhvbpts11c%40group.calendar.google.com&ctz=UTC'; - const eventsExist = eventsData.length > 0; + const currentDate = new Date(); + const eventsExist = eventsData?.filter((event: IEvent) => moment(event.date).isAfter(currentDate)).length > 0; return ( -
+
{t('calendar.title')} @@ -42,7 +49,7 @@ export default function Calendar({ className = '', size }: ICalendarProps) { {moment(event.date).format('D')}
-

{event.title}

+

{event.title}

{moment(event.date).local().format('LLLL')} UTC {moment(event.date).local().format('Z')} @@ -52,13 +59,12 @@ export default function Calendar({ className = '', size }: ICalendarProps) { ))} - {eventsExist ? ( -

+
+ {!eventsExist &&
{t('calendar.noMeetingsMessage')}
} +
- ) : ( -
{t('calendar.noMeetingsMessage')}
- )} +
); } diff --git a/components/CaseStudyCard.tsx b/components/CaseStudyCard.tsx index 241e9b5aa84b..7b6bad8dadb2 100644 --- a/components/CaseStudyCard.tsx +++ b/components/CaseStudyCard.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ICaseStudies } from '@/types/post'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/CaseTOC.tsx b/components/CaseTOC.tsx index 6008a6ea1562..e242c6af579c 100644 --- a/components/CaseTOC.tsx +++ b/components/CaseTOC.tsx @@ -1,4 +1,4 @@ -import { useMemo, useState } from 'react'; +import React, { useMemo, useState } from 'react'; import { twMerge } from 'tailwind-merge'; import { useHeadingsObserver } from './helpers/useHeadingsObserver'; diff --git a/components/ClickableLogo.tsx b/components/ClickableLogo.tsx index e40e7fa488c2..98836011e1fa 100644 --- a/components/ClickableLogo.tsx +++ b/components/ClickableLogo.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; import AsyncAPILogo from './logos/AsyncAPILogo'; diff --git a/components/DemoAnimation.tsx b/components/DemoAnimation.tsx index 0e8affd76280..1748d0c6ca2b 100644 --- a/components/DemoAnimation.tsx +++ b/components/DemoAnimation.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import Typing from 'react-typist-component'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; diff --git a/components/Feedback.tsx b/components/Feedback.tsx index 6fad56ecb206..104e21107f0f 100644 --- a/components/Feedback.tsx +++ b/components/Feedback.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import GitHubIssue from './buttons/GitHubIssue'; diff --git a/components/Figure.tsx b/components/Figure.tsx index 878258ce7755..c20a92884c3d 100644 --- a/components/Figure.tsx +++ b/components/Figure.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { Float } from '@/types/components/FigurePropsType'; import Caption from './Caption'; diff --git a/components/FinancialSummary/AsyncAPISummary.tsx b/components/FinancialSummary/AsyncAPISummary.tsx index 280a24b476f8..7ee80d54dbfa 100644 --- a/components/FinancialSummary/AsyncAPISummary.tsx +++ b/components/FinancialSummary/AsyncAPISummary.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/FinancialSummary/Card.tsx b/components/FinancialSummary/Card.tsx index 7e46e272733b..44c9a00ca555 100644 --- a/components/FinancialSummary/Card.tsx +++ b/components/FinancialSummary/Card.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ExpenseItem, Expenses } from '@/types/FinancialSummary/BarChartComponent'; import ExpensesLinkData from '../../config/finance/json-data/ExpensesLink.json'; diff --git a/components/FinancialSummary/ContactUs.tsx b/components/FinancialSummary/ContactUs.tsx index 738631f8e8fc..1e0dd9560d3e 100644 --- a/components/FinancialSummary/ContactUs.tsx +++ b/components/FinancialSummary/ContactUs.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/FinancialSummary/CustomTooltip.tsx b/components/FinancialSummary/CustomTooltip.tsx index fa23aa5e69ed..f4ae6afe1172 100644 --- a/components/FinancialSummary/CustomTooltip.tsx +++ b/components/FinancialSummary/CustomTooltip.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { CustomTooltipProps } from '@/types/FinancialSummary/BarChartComponent'; /** diff --git a/components/FinancialSummary/ExpenseBreakdown.tsx b/components/FinancialSummary/ExpenseBreakdown.tsx index 89ceaff56f72..d0566968820e 100644 --- a/components/FinancialSummary/ExpenseBreakdown.tsx +++ b/components/FinancialSummary/ExpenseBreakdown.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; import { expenseData } from '../data/ExpenseBreakdownData'; diff --git a/components/FinancialSummary/ExpensesCard.tsx b/components/FinancialSummary/ExpensesCard.tsx index 86af3e7b1b83..5bf593f96425 100644 --- a/components/FinancialSummary/ExpensesCard.tsx +++ b/components/FinancialSummary/ExpensesCard.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { Expenses } from '@/types/FinancialSummary/BarChartComponent'; import ExpensesData from '../../config/finance/json-data/Expenses.json'; diff --git a/components/FinancialSummary/OtherFormsComponent.tsx b/components/FinancialSummary/OtherFormsComponent.tsx index d3132dc931a0..2c52e7775fc9 100644 --- a/components/FinancialSummary/OtherFormsComponent.tsx +++ b/components/FinancialSummary/OtherFormsComponent.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; import { otherFormsData } from '../data/otherFormsData'; diff --git a/components/FinancialSummary/SponsorshipTiers.tsx b/components/FinancialSummary/SponsorshipTiers.tsx index 42464c7f9e6b..082fc22e5a37 100644 --- a/components/FinancialSummary/SponsorshipTiers.tsx +++ b/components/FinancialSummary/SponsorshipTiers.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/FinancialSummary/SuccessStories.tsx b/components/FinancialSummary/SuccessStories.tsx index 487be9fd1a39..2ffdd960b003 100644 --- a/components/FinancialSummary/SuccessStories.tsx +++ b/components/FinancialSummary/SuccessStories.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { successStories } from '../data/successStoriesData'; /** diff --git a/components/GeneratorInstallation.tsx b/components/GeneratorInstallation.tsx index 713e819198e8..bf4d937f802f 100644 --- a/components/GeneratorInstallation.tsx +++ b/components/GeneratorInstallation.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/Hero.tsx b/components/Hero.tsx index 6ce5289e085a..c0609e837569 100644 --- a/components/Hero.tsx +++ b/components/Hero.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/InlineHelp.tsx b/components/InlineHelp.tsx index ec8d039da2a1..0db3fd87f441 100644 --- a/components/InlineHelp.tsx +++ b/components/InlineHelp.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { registerClickAway } from './helpers/click-away'; import QuestionMark from './icons/QuestionMark'; diff --git a/components/InputBox.stories.tsx b/components/InputBox.stories.tsx index f30247a7b83b..78edb891d6fb 100644 --- a/components/InputBox.stories.tsx +++ b/components/InputBox.stories.tsx @@ -1,5 +1,6 @@ import { useArgs } from '@storybook/preview-api'; import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import type { InputBoxProps } from '@/types/components/InputBoxPropsType'; import { InputTypes } from '@/types/components/InputBoxPropsType'; diff --git a/components/Loader.stories.tsx b/components/Loader.stories.tsx index 85d97ee88674..563f1ed81e79 100644 --- a/components/Loader.stories.tsx +++ b/components/Loader.stories.tsx @@ -1,4 +1,5 @@ import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import AsyncAPIColorIcon from '@/components/icons/AsyncAPIColorIcon'; import IconCircularLoader from '@/components/icons/CircularLoader'; diff --git a/components/Loader.tsx b/components/Loader.tsx index 94fd29417659..b0be9da34750 100644 --- a/components/Loader.tsx +++ b/components/Loader.tsx @@ -1,6 +1,8 @@ import React from 'react'; import { twMerge } from 'tailwind-merge'; +import AsyncAPIColorIcon from './icons/AsyncAPIColorIcon'; + interface LoaderProps { // eslint-disable-next-line prettier/prettier @@ -25,7 +27,7 @@ interface LoaderProps { */ export default function Loader({ loaderText = '', - loaderIcon = null, + loaderIcon = , className = '', dark = false, pulsating = false diff --git a/components/MDX/MDX.tsx b/components/MDX/MDX.tsx index f9846fd6ec86..c3ead83b61b3 100644 --- a/components/MDX/MDX.tsx +++ b/components/MDX/MDX.tsx @@ -1,7 +1,7 @@ import { MDXProvider as CoreMDXProvider } from '@mdx-js/react'; import mermaid from 'mermaid'; import Link from 'next/link'; -import { useLayoutEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { TwitterDMButton, TwitterFollowButton, @@ -97,7 +97,7 @@ function MermaidDiagram({ graph }: MermaidDiagramProps) { /** * @description Renders the Mermaid diagram. */ - useLayoutEffect(() => { + useEffect(() => { if (!graph) { return; } diff --git a/components/MacWindow.tsx b/components/MacWindow.tsx index 5b419add92c1..9deb60ae7e08 100644 --- a/components/MacWindow.tsx +++ b/components/MacWindow.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface IMacWindowProps { className?: string; contentClassName?: string; diff --git a/components/Meeting.tsx b/components/Meeting.tsx index fe2816fbd742..41bb90dd0fb4 100644 --- a/components/Meeting.tsx +++ b/components/Meeting.tsx @@ -1,4 +1,5 @@ import { ArrowRightIcon } from '@heroicons/react/outline'; +import React from 'react'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/Modal.tsx b/components/Modal.tsx index ddaefd84ea70..95763029607f 100644 --- a/components/Modal.tsx +++ b/components/Modal.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef } from 'react'; +import React, { useEffect, useRef } from 'react'; interface IModalProps { title: string; diff --git a/components/NewsletterSubscribe.tsx b/components/NewsletterSubscribe.tsx index b4bad37ed2d6..3d9e0863dd69 100644 --- a/components/NewsletterSubscribe.tsx +++ b/components/NewsletterSubscribe.tsx @@ -1,11 +1,11 @@ -import { useTranslation } from 'next-i18next'; -import { useState } from 'react'; +import React, { useState } from 'react'; import IconCircularLoader from '@/components/icons/CircularLoader'; import { ButtonType } from '@/types/components/buttons/ButtonPropsType'; import { InputTypes } from '@/types/components/InputBoxPropsType'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; +import { useTranslation } from '../utils/i18n'; import Button from './buttons/Button'; import InputBox from './InputBox'; import Loader from './Loader'; @@ -26,6 +26,7 @@ interface NewsletterSubscribeProps { title?: string; subtitle?: string; type?: string; + errorSubtitle?: string; } /** @@ -37,19 +38,21 @@ interface NewsletterSubscribeProps { * @param {string} props.title - The title of the Subscribe card. * @param {string} props.subtitle - The subtitle of the Subscribe card. * @param {string} props.type - The type of subscription. + * @param {string} props.errorSubtitle - The error subtitle to be displayed. */ export default function NewsletterSubscribe({ className = 'p-8 text-center text-black', dark = false, title = 'Subscribe to our newsletter to receive news about AsyncAPI.', subtitle = 'We respect your inbox. No spam, promise ✌️', - type = 'Newsletter' + type = 'Newsletter', + errorSubtitle = 'Subscription failed, please let us know about it by submitting a bug' }: NewsletterSubscribeProps) { const [email, setEmail] = useState(''); const [name, setName] = useState(''); const [status, setStatus] = useState(FormStatus.NORMAL); - const { t } = useTranslation('common'); + const { t, ready } = useTranslation('common', { keyPrefix: 'newsletterCTA' }); const headTextColor = dark ? 'text-white' : ''; const paragraphTextColor = dark ? 'text-gray-300' : ''; @@ -94,10 +97,10 @@ export default function NewsletterSubscribe({ return (
- {t('newsletterCTA.successTitle')} + {ready ? t('successTitle') : 'Thank you for subscribing!'} - {t('newsletterCTA.subtitle')} + {ready ? t('subtitle') : subtitle}
); @@ -107,12 +110,12 @@ export default function NewsletterSubscribe({ return (
- {t('newsletterCTA.errorTitle')} + {ready ? t('errorTitle') : 'Something went wrong'} - {t('newsletterCTA.errorSubtitle')}{' '} + {ready ? t('errorSubtitle') : errorSubtitle}{' '} - {t('newsletterCTA.errorLinkText')} + {ready ? t('errorLinkText') : 'here'}
@@ -122,10 +125,10 @@ export default function NewsletterSubscribe({ return (
- {title} + {ready ? t('title') : title} - {subtitle} + {ready ? t('subtitle') : subtitle} {status === 'loading' ? ( } dark={dark} /> @@ -134,20 +137,20 @@ export default function NewsletterSubscribe({ ) : ( author.name ) ) - .reduce((prev, curr) => ( - <> + .reduce((prev, curr, index) => ( + {prev} & {curr} - + ))} diff --git a/components/navigation/CommunityPanel.tsx b/components/navigation/CommunityPanel.tsx index 82306db1284a..2a6f0fd451b7 100644 --- a/components/navigation/CommunityPanel.tsx +++ b/components/navigation/CommunityPanel.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import communityItems from './communityItems'; import FlyoutMenu from './FlyoutMenu'; diff --git a/components/navigation/DocsNav.tsx b/components/navigation/DocsNav.tsx index d0ee433b5733..83bf94294f27 100644 --- a/components/navigation/DocsNav.tsx +++ b/components/navigation/DocsNav.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { buckets } from '../data/buckets'; import DocsArrow from '../icons/DocsArrow'; diff --git a/components/navigation/DocsNavItem.tsx b/components/navigation/DocsNavItem.tsx index 43d4af17a6ff..eadc6f464184 100644 --- a/components/navigation/DocsNavItem.tsx +++ b/components/navigation/DocsNavItem.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; export interface DocsNavItemProps { title: string; diff --git a/components/navigation/DocsNavWrapper.tsx b/components/navigation/DocsNavWrapper.tsx index b7ad00dbcd85..c51f0cb2033e 100644 --- a/components/navigation/DocsNavWrapper.tsx +++ b/components/navigation/DocsNavWrapper.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { IDocsTree, IPost } from '@/types/post'; import { DOCS_INDEX_NAME, SearchButton } from '../AlgoliaSearch'; diff --git a/components/navigation/Filter.tsx b/components/navigation/Filter.tsx index d7f07c2e3224..7b69f4702931 100644 --- a/components/navigation/Filter.tsx +++ b/components/navigation/Filter.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import Select from '../form/Select'; import { applyFilterList, onFilterApply } from '../helpers/applyFilter'; diff --git a/components/navigation/FlyoutMenu.tsx b/components/navigation/FlyoutMenu.tsx index b6faf8269fe3..fc5ab7d41a4e 100644 --- a/components/navigation/FlyoutMenu.tsx +++ b/components/navigation/FlyoutMenu.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { MenuItem } from './MenuBlocks'; import MenuBlocks from './MenuBlocks'; diff --git a/components/navigation/Label.tsx b/components/navigation/Label.tsx index 53315b0ea45a..25b8d5e7ef69 100644 --- a/components/navigation/Label.tsx +++ b/components/navigation/Label.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + enum LabelColor { Gray = 'gray', Green = 'green' diff --git a/components/navigation/LearningPanel.tsx b/components/navigation/LearningPanel.tsx index 090cc7a16908..a2882b094ea2 100644 --- a/components/navigation/LearningPanel.tsx +++ b/components/navigation/LearningPanel.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { buckets } from '../data/buckets'; import FlyoutMenu from './FlyoutMenu'; diff --git a/components/navigation/MenuBlocks.tsx b/components/navigation/MenuBlocks.tsx index 1f239ba8b17e..b13543685bfe 100644 --- a/components/navigation/MenuBlocks.tsx +++ b/components/navigation/MenuBlocks.tsx @@ -1,4 +1,5 @@ import { useRouter } from 'next/router'; +import React from 'react'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; @@ -41,7 +42,7 @@ export default function MenuBlocks({ items = [] }: MenuBlocksProps) { > diff --git a/components/navigation/MobileNavMenu.tsx b/components/navigation/MobileNavMenu.tsx index 1c6f57e130f9..8b0ccd740374 100644 --- a/components/navigation/MobileNavMenu.tsx +++ b/components/navigation/MobileNavMenu.tsx @@ -1,5 +1,5 @@ import Link from 'next/link'; -import { useState } from 'react'; +import React, { useState } from 'react'; import { SearchButton } from '../AlgoliaSearch'; import NavItemDropdown from '../icons/NavItemDropdown'; diff --git a/components/navigation/NavBar.tsx b/components/navigation/NavBar.tsx index e76330c41cff..d0fd2ca6fa02 100644 --- a/components/navigation/NavBar.tsx +++ b/components/navigation/NavBar.tsx @@ -2,7 +2,7 @@ import Link from 'next/link'; import type { NextRouter } from 'next/router'; import { useRouter } from 'next/router'; import { useTranslation } from 'next-i18next'; -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import { defaultLanguage, i18nPaths, languages } from '@/utils/i18n'; diff --git a/components/navigation/SubCategoryDocsNav.tsx b/components/navigation/SubCategoryDocsNav.tsx index 63f3a60337ac..2b72003a582a 100644 --- a/components/navigation/SubCategoryDocsNav.tsx +++ b/components/navigation/SubCategoryDocsNav.tsx @@ -1,4 +1,4 @@ -import { useEffect, useState } from 'react'; +import React, { useEffect, useState } from 'react'; import DocsArrow from '../icons/DocsArrow'; import DocsNavItem from './DocsNavItem'; diff --git a/components/navigation/ToolsPanel.tsx b/components/navigation/ToolsPanel.tsx index 6571bd6d3708..a90c248b2803 100644 --- a/components/navigation/ToolsPanel.tsx +++ b/components/navigation/ToolsPanel.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import FlyoutMenu from './FlyoutMenu'; import toolingItems from './toolingItems'; diff --git a/components/navigation/TutorialList.tsx b/components/navigation/TutorialList.tsx index a7cd0b8a790f..f2cfea0d5a23 100644 --- a/components/navigation/TutorialList.tsx +++ b/components/navigation/TutorialList.tsx @@ -1,5 +1,5 @@ import Link from 'next/link'; -import { useContext } from 'react'; +import React, { useContext } from 'react'; import type { DocsContextType } from '@/types/context/DocsContext'; import type { IDoc } from '@/types/post'; diff --git a/components/navigation/communityItems.tsx b/components/navigation/communityItems.tsx index e5df44e22808..aa25ac89a1b3 100644 --- a/components/navigation/communityItems.tsx +++ b/components/navigation/communityItems.tsx @@ -1,3 +1,5 @@ +import type React from 'react'; + import IconAmbassador from '../icons/Ambassador'; import IconContributing from '../icons/Contributing'; import IconDashboard from '../icons/Dashboard'; diff --git a/components/navigation/learningItems.tsx b/components/navigation/learningItems.tsx index 40e9b0d670e8..d8f538bb8652 100644 --- a/components/navigation/learningItems.tsx +++ b/components/navigation/learningItems.tsx @@ -1,3 +1,5 @@ +import type React from 'react'; + import IconGradCap from '../icons/GradCap'; import IconGuide from '../icons/Guide'; import IconMigration from '../icons/Migration'; diff --git a/components/navigation/toolingItems.tsx b/components/navigation/toolingItems.tsx index 8c18db3bec06..e637a62d0070 100644 --- a/components/navigation/toolingItems.tsx +++ b/components/navigation/toolingItems.tsx @@ -1,4 +1,5 @@ import { TerminalIcon } from '@heroicons/react/outline'; +import type React from 'react'; import IconGenerator from '../icons/Generator'; import IconGithubActions from '../icons/GithubActions'; diff --git a/components/newsroom/FeaturedBlogPost.tsx b/components/newsroom/FeaturedBlogPost.tsx index 515d0d0a2f66..49b4c8ef4ab4 100644 --- a/components/newsroom/FeaturedBlogPost.tsx +++ b/components/newsroom/FeaturedBlogPost.tsx @@ -1,5 +1,6 @@ import moment from 'moment'; import Link from 'next/link'; +import React from 'react'; import TextTruncate from 'react-text-truncate'; import { BlogPostType } from '@/types/components/navigation/BlogPostType'; @@ -87,18 +88,9 @@ export default function FeaturedBlogPost({ post, className = '' }: FeaturedBlogP {post.authors .map((author, index) => author.link ? ( - { - e.stopPropagation(); - }} - target='_blank' - rel='noreferrer' - > + {author.name} - + ) : ( author.name ) diff --git a/components/newsroom/Newsroom.tsx b/components/newsroom/Newsroom.tsx index 649263afaebe..a88c4e2f14cf 100644 --- a/components/newsroom/Newsroom.tsx +++ b/components/newsroom/Newsroom.tsx @@ -1,4 +1,4 @@ -import { TwitterTimelineEmbed } from 'react-twitter-embed'; +import React from 'react'; import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; @@ -68,19 +68,14 @@ export default function Newsroom() {
-
+
-
+
-
-
- -
-
diff --git a/components/newsroom/NewsroomBlogPosts.tsx b/components/newsroom/NewsroomBlogPosts.tsx index c5036b126995..7e79c1fb5342 100644 --- a/components/newsroom/NewsroomBlogPosts.tsx +++ b/components/newsroom/NewsroomBlogPosts.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { A11y, Navigation } from 'swiper/modules'; import { Swiper, SwiperSlide } from 'swiper/react'; diff --git a/components/newsroom/NewsroomSection.tsx b/components/newsroom/NewsroomSection.tsx index c3a3e7df1cd7..7e660e69dfe4 100644 --- a/components/newsroom/NewsroomSection.tsx +++ b/components/newsroom/NewsroomSection.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { HeadingLevel, HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/newsroom/NewsroomYoutube.tsx b/components/newsroom/NewsroomYoutube.tsx index 91015b937883..ced5fceedbe2 100644 --- a/components/newsroom/NewsroomYoutube.tsx +++ b/components/newsroom/NewsroomYoutube.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import { A11y, Navigation } from 'swiper/modules'; import { Swiper, SwiperSlide } from 'swiper/react'; diff --git a/components/newsroom/swiper.tsx b/components/newsroom/swiper.tsx index 1118cc36e8f4..4f040cbeca6c 100644 --- a/components/newsroom/swiper.tsx +++ b/components/newsroom/swiper.tsx @@ -1,3 +1,4 @@ +import type React from 'react'; import { useEffect, useRef, useState } from 'react'; /** diff --git a/components/roadmap/RoadmapItem.tsx b/components/roadmap/RoadmapItem.tsx index e82504eae658..34787b7252e6 100644 --- a/components/roadmap/RoadmapItem.tsx +++ b/components/roadmap/RoadmapItem.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; // Since a roadmap item can contain nested roadmap lists, we need to import RoadmapList to display them. /* eslint-disable import/no-cycle*/ diff --git a/components/roadmap/RoadmapList.tsx b/components/roadmap/RoadmapList.tsx index b9ad17296622..57d500978bf4 100644 --- a/components/roadmap/RoadmapList.tsx +++ b/components/roadmap/RoadmapList.tsx @@ -1,5 +1,7 @@ // Since a RoadmapList may contain other RoadmapItems, we need to import RoadmapItem to display them. /* eslint-disable import/no-cycle*/ +import React from 'react'; + import RoadmapItem from './RoadmapItem'; interface IRoadmapListProps { diff --git a/components/roadmap/RoadmapPill.tsx b/components/roadmap/RoadmapPill.tsx index e89b9dba463c..d73ac46e84bf 100644 --- a/components/roadmap/RoadmapPill.tsx +++ b/components/roadmap/RoadmapPill.tsx @@ -1,4 +1,4 @@ -import { useState } from 'react'; +import React, { useState } from 'react'; import IconArrowRight from '../icons/ArrowRight'; import Modal from '../Modal'; diff --git a/components/slack/index.tsx b/components/slack/index.tsx index 70bdef3e739b..5d3b4a17fd64 100644 --- a/components/slack/index.tsx +++ b/components/slack/index.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import SlackMessage from './Message'; interface SlackProps { diff --git a/components/sponsors/GoldSponsors.tsx b/components/sponsors/GoldSponsors.tsx index 277f4332ad33..3729ffcc7e09 100644 --- a/components/sponsors/GoldSponsors.tsx +++ b/components/sponsors/GoldSponsors.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { goldSponsors } from './GoldSponsorsList'; interface GoldSponsorsProps { diff --git a/components/sponsors/SilverSponsors.tsx b/components/sponsors/SilverSponsors.tsx index 62c8868980a6..4a737aef7df9 100644 --- a/components/sponsors/SilverSponsors.tsx +++ b/components/sponsors/SilverSponsors.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { Silversponsors } from './SilverSponsorsList'; interface SilverSponsorsProps { diff --git a/components/sponsors/SilverSponsorsList.ts b/components/sponsors/SilverSponsorsList.ts index 6c86f88eaa87..e49c6667d886 100644 --- a/components/sponsors/SilverSponsorsList.ts +++ b/components/sponsors/SilverSponsorsList.ts @@ -4,7 +4,7 @@ export const Silversponsors: SponsorType[] = [ { name: 'Bump.sh', website: 'https://bump.sh/asyncapi?utm_source=asyncapi&utm_medium=referral&utm_campaign=sponsor', - altText: 'Bump', + altText: 'OpenAPI & AsyncAPI API docs - Bump.sh', imageSrc: '/img/sponsors/bumpsh.svg', imageClass: 'inline-block sm:h-9' }, diff --git a/components/sponsors/Sponsors.tsx b/components/sponsors/Sponsors.tsx index af0fed3882e3..fd5aff751179 100644 --- a/components/sponsors/Sponsors.tsx +++ b/components/sponsors/Sponsors.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import { sponsors } from './SponsorsList'; interface SponsorsProps { diff --git a/components/tools/CategoryDropdown.tsx b/components/tools/CategoryDropdown.tsx index f865a226021c..02d091008a0f 100644 --- a/components/tools/CategoryDropdown.tsx +++ b/components/tools/CategoryDropdown.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ToolsListData } from '@/types/components/tools/ToolDataType'; import ToolsDataList from '../../config/tools.json'; diff --git a/components/tools/Checkbox.stories.tsx b/components/tools/Checkbox.stories.tsx index d9691aff1813..7445b41b4123 100644 --- a/components/tools/Checkbox.stories.tsx +++ b/components/tools/Checkbox.stories.tsx @@ -1,5 +1,6 @@ import { useArgs } from '@storybook/preview-api'; import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import type { CheckboxProps } from '@/types/components/tools/CheckboxPropsType'; diff --git a/components/tools/Checkbox.tsx b/components/tools/Checkbox.tsx index 439bb040be02..25b4bceb2c2a 100644 --- a/components/tools/Checkbox.tsx +++ b/components/tools/Checkbox.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { CheckboxProps } from '@/types/components/tools/CheckboxPropsType'; diff --git a/components/tools/Filters.tsx b/components/tools/Filters.tsx index 0ca822b7eea9..4938828086c6 100644 --- a/components/tools/Filters.tsx +++ b/components/tools/Filters.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { useContext, useEffect, useState } from 'react'; +import React, { useContext, useEffect, useState } from 'react'; import { twMerge } from 'tailwind-merge'; import type { Language, Technology, VisibleDataListType } from '@/types/components/tools/ToolDataType'; diff --git a/components/tools/FiltersDisplay.tsx b/components/tools/FiltersDisplay.tsx index 945481cae243..63c34db8dc17 100644 --- a/components/tools/FiltersDisplay.tsx +++ b/components/tools/FiltersDisplay.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; interface FiltersDisplayProps { diff --git a/components/tools/FiltersDropdown.tsx b/components/tools/FiltersDropdown.tsx index beb68e81eb5a..6c473541e871 100644 --- a/components/tools/FiltersDropdown.tsx +++ b/components/tools/FiltersDropdown.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { Category, Language, Technology } from '@/types/components/tools/ToolDataType'; diff --git a/components/tools/Tags.tsx b/components/tools/Tags.tsx index 7609b2237415..0fd1c2453b2e 100644 --- a/components/tools/Tags.tsx +++ b/components/tools/Tags.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + interface SelectTagsProps { // eslint-disable-next-line prettier/prettier diff --git a/components/tools/Toggle.stories.tsx b/components/tools/Toggle.stories.tsx index 2fcaf81c26df..5e72492197ea 100644 --- a/components/tools/Toggle.stories.tsx +++ b/components/tools/Toggle.stories.tsx @@ -1,5 +1,6 @@ import { useArgs } from '@storybook/preview-api'; import type { Meta, StoryObj } from '@storybook/react'; +import React from 'react'; import type { ToggleProps } from '@/types/components/tools/TogglePropsType'; diff --git a/components/tools/Toggle.tsx b/components/tools/Toggle.tsx index bfa324b8538b..ee7066e7b900 100644 --- a/components/tools/Toggle.tsx +++ b/components/tools/Toggle.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import type { ToggleProps } from '@/types/components/tools/TogglePropsType'; diff --git a/components/tools/ToolsCard.tsx b/components/tools/ToolsCard.tsx index b3e73df9364a..2a6d9ced02f0 100644 --- a/components/tools/ToolsCard.tsx +++ b/components/tools/ToolsCard.tsx @@ -1,4 +1,4 @@ -import { useEffect, useRef, useState } from 'react'; +import React, { useEffect, useRef, useState } from 'react'; import type { ToolData, VisibleDataListType } from '@/types/components/tools/ToolDataType'; import { HeadingTypeStyle } from '@/types/typography/Heading'; @@ -92,9 +92,12 @@ export default function ToolsCard({ toolData }: ToolsCardProp) { }, 500) } > -
+ {toolData.description} -
+ diff --git a/components/tools/ToolsDashboard.tsx b/components/tools/ToolsDashboard.tsx index 920aaee66eb3..ff9a364c87d4 100644 --- a/components/tools/ToolsDashboard.tsx +++ b/components/tools/ToolsDashboard.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { createRef, useContext, useEffect, useMemo, useRef, useState } from 'react'; +import React, { createRef, useContext, useEffect, useMemo, useRef, useState } from 'react'; import type { ToolsListData } from '@/types/components/tools/ToolDataType'; diff --git a/components/tools/ToolsList.tsx b/components/tools/ToolsList.tsx index b6e6eeeafe51..5ce95974d722 100644 --- a/components/tools/ToolsList.tsx +++ b/components/tools/ToolsList.tsx @@ -1,3 +1,5 @@ +import React from 'react'; + import type { ToolsListData } from '@/types/components/tools/ToolDataType'; import { HeadingTypeStyle } from '@/types/typography/Heading'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/typography/Paragraph.tsx b/components/typography/Paragraph.tsx index 261a83d96f49..17f8eadcce88 100644 --- a/components/typography/Paragraph.tsx +++ b/components/typography/Paragraph.tsx @@ -1,3 +1,4 @@ +import React from 'react'; import { twMerge } from 'tailwind-merge'; import { ParagraphTypeStyle } from '@/types/typography/Paragraph'; diff --git a/components/typography/TextLink.tsx b/components/typography/TextLink.tsx index 4b789ba9e0d7..c8f2bb4a6281 100644 --- a/components/typography/TextLink.tsx +++ b/components/typography/TextLink.tsx @@ -1,4 +1,5 @@ import Link from 'next/link'; +import React from 'react'; import { twMerge } from 'tailwind-merge'; export interface TextLinkProps { diff --git a/config/AMBASSADORS_MEMBERS.json b/config/AMBASSADORS_MEMBERS.json index c86c4cca9898..7e0bb122ce72 100644 --- a/config/AMBASSADORS_MEMBERS.json +++ b/config/AMBASSADORS_MEMBERS.json @@ -287,72 +287,6 @@ } ] }, - { - "name": "Jesse Menning", - "github": "jessemenning", - "twitter": "JesseMenning", - "bio": "Jesse Menning teams with companies and government agencies to design event-driven architecture and microservices at scale. To guide those discussions, I draw upon more than 15 years of integration architecture and implementation experience, particularly with IBM and Solace platforms. I've been involved with AsyncAPI since 2020, along with other open-source initiatives such as CloudEvents and OpenTelemetry.", - "linkedin": "jesse-menning", - "company": "Solace", - "title": "Architect, Office of the CTO at Solace", - "img": "https://avatars.githubusercontent.com/u/62108913?v=4", - "contributions": [ - { - "type": "article", - "title": "AsyncAPI 2.3 Adds Solace Bindings to Unlock Full Power of PubSub+", - "date": { - "year": 2022, - "month": "January" - }, - "link": "https://solace.com/blog/asyncapi-adds-solace-bindings/" - }, - { - "type": "article", - "title": "Align Production Reality and Event Documentation with the AsyncAPI Discovery Tool", - "date": { - "year": 2021, - "month": "November" - }, - "link": "https://solace.com/blog/asyncapi-discovery-tool/" - }, - { - "type": "article", - "title": "AsyncAPI vs. OpenAPI: Answers to Your Burning Questions About the Two Leading API Specs", - "date": { - "year": 2021, - "month": "June" - }, - "link": "https://solace.com/blog/asyncapi-vs-openapi/" - }, - { - "type": "article", - "title": "AsyncAPI, CloudEvents, OpenTelemetry: Which Event-Driven Specs Should Your DevOps Include?", - "date": { - "year": 2021, - "month": "March" - }, - "link": "https://solace.com/blog/asyncapi-cloudevents-opentelemetry-event-driven-specs-devops/" - }, - { - "type": "presentation", - "title": "Future of AsyncAPI, Panel discussion, AsyncAPI Conference", - "date": { - "year": 2021, - "month": "November" - }, - "link": "https://www.youtube.com/watch?v=3EeMHhbwyOQ" - }, - { - "type": "presentation", - "title": "Thinking Out Loud #4 — with Jesse Menning", - "date": { - "year": 2021, - "month": "August" - }, - "link": "https://www.youtube.com/watch?v=eJewFUR-OaM" - } - ] - }, { "name": "Ludovic Dussart", "github": "M3lkior", diff --git a/config/MAINTAINERS.json b/config/MAINTAINERS.json index 7ae06a8ebacb..ee02bec23fbd 100644 --- a/config/MAINTAINERS.json +++ b/config/MAINTAINERS.json @@ -158,7 +158,7 @@ "html-template", "markdown-template", "nodejs-ws-template", - "generator-hooks", + "glee", "brand" ], "githubID": 242119 @@ -181,8 +181,8 @@ "github": "jonaslagoni", "linkedin": "jonaslagoni", "slack": "UQ2ANBG1E", + "company": "EventStack", "availableForHire": false, - "company": "Postman", "isTscMember": true, "repos": [ "spec-json-schemas", @@ -238,7 +238,7 @@ "twitter": "ldussart", "availableForHire": false, "company": "zatsit", - "isTscMember": true, + "isTscMember": false, "repos": [ "avro-schema-parser" ], @@ -250,15 +250,13 @@ "linkedin": "lukasz-gornicki-a621914", "slack": "UD698Q5LM", "twitter": "derberq", - "availableForHire": false, - "company": "Postman", + "availableForHire": true, "isTscMember": true, "repos": [ "spec", "website", "spec-json-schemas", "generator", - "asyncapi-react", "extensions-catalog", "bindings", "enterprise-patterns", @@ -270,7 +268,6 @@ "github-action-for-cli", ".github", "jasyncapi", - "generator-hooks", "vs-asyncapi-preview", "template-for-generator-templates", "community", @@ -317,10 +314,10 @@ "github": "AceTheCreator", "twitter": "_acebuild", "slack": "U01RWDD69PZ", - "company": "Postman", "availableForHire": false, "isTscMember": true, "repos": [ + "asyncapi-react", "conference-website", "chatbot" ], @@ -346,7 +343,7 @@ "linkedin": "nektarios-fifes-372740220", "slack": "U01SE93Q48N", "availableForHire": true, - "isTscMember": true, + "isTscMember": false, "repos": [ "simulator" ], @@ -412,8 +409,8 @@ "slack": "U01N6AW5V5G", "twitter": "amzani", "linkedin": "amzani", + "company": "Apideck", "availableForHire": false, - "company": "Postman", "isTscMember": true, "repos": [ "studio", @@ -427,8 +424,8 @@ "linkedin": "smoya", "slack": "UN22ZTLHG", "twitter": "smoyac", + "company": "Timescale", "availableForHire": false, - "company": "Postman", "isTscMember": true, "repos": [ "spec", @@ -453,8 +450,7 @@ "slack": "U01SGCZMJKW", "twitter": "souvik_ns", "linkedin": "souvik-de-a2b941169", - "availableForHire": false, - "company": "Postman", + "availableForHire": true, "isTscMember": true, "repos": [ "cli", @@ -469,8 +465,7 @@ "twitter": "QuetzalliWrites", "slack": "U02AKC14WAJ", "linkedin": "quetzalli-writes", - "availableForHire": false, - "company": "Postman", + "availableForHire": true, "isTscMember": true, "repos": [ "website" @@ -988,5 +983,18 @@ "kotlin-asyncapi" ], "githubID": 758568 + }, + { + "name": "Ashmit Jagtap", + "github": "ashmit-coder", + "linkedin": "ashmit-jagtap", + "twitter": "AshmitJagtap", + "slack": "U06RA7GDHU1", + "availableForHire": true, + "isTscMember": true, + "repos": [ + "conference-website" + ], + "githubID": 69006513 } ] \ No newline at end of file diff --git a/config/adopters.yml b/config/adopters.yml index 0ffaba4966cb..456ac537a4fb 100644 --- a/config/adopters.yml +++ b/config/adopters.yml @@ -80,4 +80,16 @@ useCase: Implementing a GitOps-based pipeline to enable self-service management of Kafka infrastructure, including access control management. Automation of AsyncAPI document governance ensures consistency in the infrastructure at the pull request level. resources: - title: "Slides: AsyncAPI For Platform Self-Service: A GitOps Tale" - link: https://drive.google.com/file/d/1y67PI8NaITPPwZAiDF2Zs7ISfcIpqMV8/view?usp=sharing \ No newline at end of file + link: https://drive.google.com/file/d/1y67PI8NaITPPwZAiDF2Zs7ISfcIpqMV8/view?usp=sharing + +- companyName: Adidas + useCase: AsyncAPI is a standard for defining asynchronous APIs using Apache Kafka. AsyncAPI governed under official guidelines. AsyncAPI is promoted to be used for documentation and code generation. + resources: + - title: "Docs: AsyncAPI and Kafka Guidelines" + link: https://adidas.gitbook.io/api-guidelines/asynchronous-api-guidelines/kafka-asynchronous-guidelines/a_introduction/why-asyncapi + +- companyName: Morgan Stanley + useCase: AsyncAPI is promoted not only inside the company but also as a standard for FinOS Foundation for managing architecture as code. + resources: + - title: "Slides: Deploying WebSockets with AsyncAPI and Architecture as Code" + link: https://drive.google.com/file/d/1YzLwQZsMUXGwj_Lsqv-ZnvV2knuowWrS/view?usp=drive_link diff --git a/config/all-tags.json b/config/all-tags.json index b2a1c6f3c3ac..b8274f82abbd 100644 --- a/config/all-tags.json +++ b/config/all-tags.json @@ -1 +1 @@ -{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file +{"languages":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"},{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"},{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"},{"name":"HTML","color":"bg-[#E2A291]","borderColor":"border-[#E44D26]"},{"name":"C/C++","color":"bg-[#93CDEF]","borderColor":"border-[#0080CC]"},{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"},{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"},{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"},{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"},{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"},{"name":"Markdown","color":"bg-[#BABEBF]","borderColor":"border-[#445B64]"},{"name":"YAML","color":"bg-[#FFB764]","borderColor":"border-[#F1901F]"},{"name":"R","color":"bg-[#84B5ED]","borderColor":"border-[#246BBE]"},{"name":"Ruby","color":"bg-[#FF8289]","borderColor":"border-[#FF000F]"},{"name":"Rust","color":"bg-[#FFB8AA]","borderColor":"border-[#E43716]"},{"name":"Shell","color":"bg-[#87D4FF]","borderColor":"border-[#389ED7]"},{"name":"Groovy","color":"bg-[#B6D5E5]","borderColor":"border-[#609DBC]"}],"technologies":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Hermes","color":"bg-[#8AEEBD]","borderColor":"border-[#2AB672]"},{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"AWS","color":"bg-[#FF9F59]","borderColor":"border-[#EF6703]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"},{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Scala","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Azure","color":"bg-[#4B93FF]","borderColor":"border-[#015ADF]"},{"name":"Jenkins","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}]} \ No newline at end of file diff --git a/config/edit-page-config.json b/config/edit-page-config.json index dbd5fa50b9eb..32921f145d4e 100644 --- a/config/edit-page-config.json +++ b/config/edit-page-config.json @@ -13,7 +13,7 @@ }, { "value": "", - "href": "https://github.com/asyncapi/website/blob/master/pages" + "href": "https://github.com/asyncapi/website/blob/master/markdown" }, { "value": "reference/extensions/", diff --git a/config/finance/2024/Expenses.yml b/config/finance/2024/Expenses.yml index 1467852bbb50..bdc166bb2859 100644 --- a/config/finance/2024/Expenses.yml +++ b/config/finance/2024/Expenses.yml @@ -87,7 +87,7 @@ August: - Category: Community Manager Amount: '2000.00' - Category: Bounty Program - Amount: '1600.00' + Amount: '1800.00' - Category: Swag Store Amount: '2556.42' - Category: Community Marketing Specialist @@ -95,4 +95,28 @@ August: - Category: 3rd Party Services Amount: '1354.35' - Category: AsyncAPI Conf on Tour 2024 - Amount: '1384.70' \ No newline at end of file + Amount: '1384.70' +September: + - Category: Bounty Program + Amount: '3000.00' + - Category: Swag Store + Amount: '736.59' + - Category: Community Manager + Amount: '2000.00' + - Category: Community Marketing Specialist + Amount: '2000.00' + - Category: JSON Schema Sponsorship + Amount: '250.00' +October: + - Category: Bounty Program + Amount: '1000.00' + - Category: Swag Store + Amount: '882.12' + - Category: AsyncAPI Conf on Tour 2024 + Amount: '962.01' + - Category: Community Manager + Amount: '2000.00' + - Category: Community Marketing Specialist + Amount: '2000.00' + - Category: JSON Schema Sponsorship + Amount: '250.00' diff --git a/config/meetings.json b/config/meetings.json index d17a57704fd9..a6db3de6e5be 100644 --- a/config/meetings.json +++ b/config/meetings.json @@ -1,224 +1,142 @@ [ { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=ZzZ0OG1iNmkyZW5lbnF2bnE5ZnY5ZW9ua28gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1067", - "banner": "https://github.com/asyncapi/community/assets/40604284/897e0278-8da4-41dc-b2b2-b5add9370d6f", - "date": "2024-02-20T16:00:00.000Z" - }, - { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=dHJ1dGxncm81b3VvZjI0ZjE1MDkxY25lcjggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1068", - "banner": "https://github.com/asyncapi/community/assets/40604284/70eff71e-5de5-4c99-bc89-86a1b9b81e81", - "date": "2024-03-05T08:00:00.000Z" - }, - { - "title": "Essential building blocks for AsyncAPI", - "calLink": "https://www.google.com/calendar/event?eid=dmoyY2ZjNXZ1cDh2cGRiZzFnNG92YzQzZHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1084", + "title": "Essential Building Blocks Working Group", + "calLink": "https://www.google.com/calendar/event?eid=c28zazMxcDk3MThpMWFpNG9lYzRrbmIzNW8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1342", "banner": "", - "date": "2024-03-12T20:00:00.000Z" + "date": "2024-08-27T18:00:00.000Z" }, { - "title": "AACoT'24 Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=aG9xMzUyam82cDluaDNpY2c2aDBlb25pdDggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1087", - "banner": "https://github.com/asyncapi/community/assets/66913810/43114d9e-ee7f-4479-8714-475d67a374aa", - "date": "2024-03-13T14:00:00.000Z" + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=MmpwdGxqb29wcHQyaGk3dXU1cTJ0M3E2aGMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1354", + "banner": "", + "date": "2024-09-10T14:00:00.000Z" }, { "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=OTE2Y3YxdGVzNzhqNXJrZThqYml0M2Uwa2MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1103", - "banner": "https://github-production-user-asset-6210df.s3.amazonaws.com/40604284/313431824-6d286502-6a69-4584-9c01-a2f6984d8320.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240316%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240316T213213Z&X-Amz-Expires=300&X-Amz-Signature=558069f389931870f0ec70cc3f7f4e3bf0e1c4f669a2bd74763f6ed5ae4b2206&X-Amz-SignedHeaders=host&actor_id=40604284&key_id=0&repo_id=347621559", - "date": "2024-03-19T08:00:00.000Z" - }, - { - "title": "Let's talk about contributing GSoC FAQ", - "calLink": "https://www.google.com/calendar/event?eid=ZmVkcTI2aTNsZjhwcHZuNWZhb2UwNHE1a2MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1104", - "banner": "https://github-production-user-asset-6210df.s3.amazonaws.com/40604284/313431821-e905e25c-87b1-466a-adc5-e8551556d7ba.png?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAVCODYLSA53PQK4ZA%2F20240316%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20240316T213412Z&X-Amz-Expires=300&X-Amz-Signature=4bbf99e0b0da3bfd2b5c3a42394f49314acf5cec64be0394487a5809dc489d71&X-Amz-SignedHeaders=host&actor_id=40604284&key_id=0&repo_id=347621559", - "date": "2024-03-21T14:00:00.000Z" + "calLink": "https://www.google.com/calendar/event?eid=b2lsN3YwcGNmdWZiNTltNm1lM25wYXYwc3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1355", + "banner": "https://github.com/user-attachments/assets/399c2eec-5123-47e9-ad41-024cd478a667", + "date": "2024-09-03T08:00:00.000Z" }, { - "title": "Essential building blocks", - "calLink": "https://www.google.com/calendar/event?eid=cjFnc2VrNjIzMGZmOXE2Y2FqazF1aHJobWMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1107", - "banner": "", - "date": "2024-03-26T18:00:00.000Z" - }, - { - "title": "Essential building blocks", - "calLink": "https://www.google.com/calendar/event?eid=NW42YmtrcTl1ajRscThmMm9qMzhqMG05dHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1108", - "banner": "", - "date": "2024-04-02T18:00:00.000Z" + "title": "Community Meeting", + "calLink": "https://www.google.com/calendar/event?eid=dG1nMGxqMWg4ajVqZ3Z2NHRpYW42bmUyNWMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1356", + "banner": "https://github.com/user-attachments/assets/bfcd9509-ba05-4e23-9fbd-65fcaed1bccc", + "date": "2024-09-17T16:00:00.000Z" }, { - "title": "AsyncAPI Marketing in 2024 - kick off", - "calLink": "https://www.google.com/calendar/event?eid=bmkyZm9pMzZhNjNjM2RwMjllOHB1YnEwczggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1109", + "title": "Design Onboarding Call", + "calLink": "https://www.google.com/calendar/event?eid=dTU0c212bjVpcTFtYmp0aXVqMGFidG1paDAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1372", "banner": "", - "date": "2024-03-26T14:00:00.000Z" + "date": "2024-09-12T10:00:00.000Z" }, { - "title": "AACoT'24 Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=c24wbzZkM2VqMTh1MjUzNGoxOGszZXBxOGMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1110", - "banner": "https://github.com/asyncapi/community/assets/66913810/8769dbe0-baef-42f7-b55e-74f5a288da55", - "date": "2024-03-27T14:00:00.000Z" - }, - { - "title": "Community Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=MXU4ZXJnOW5sbWZuOW5ndmE3MGwyYzRvdjggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1118", + "title": "Marketing WG Meeting,", + "calLink": "https://www.google.com/calendar/event?eid=NDVmcGpjM3Y2aGFxMDhhMjMxZGgyNzlkNGsgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1534", "banner": "", - "date": "2024-03-27T16:00:00.000Z" + "date": "2024-10-08T14:00:00.000Z" }, { "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=bWdldGthMGpycXBtaHZ2MXA0dmJlOGpvOXMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1123", - "banner": "https://github.com/asyncapi/community/assets/40604284/10c8e2ef-8c1b-4758-9751-d37a7e123864", - "date": "2024-04-02T16:00:00.000Z" + "calLink": "https://www.google.com/calendar/event?eid=MHRvMzJtb2pxZWs5bDM4a3Jxb2RhYmVhMmMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1545", + "banner": "https://github.com/user-attachments/assets/91fca5af-ae9a-46be-aa44-0f2ef20ce34e", + "date": "2024-10-15T08:00:00.000Z" }, { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=ZGRuZ290dGk0aGQ3cmtoMXFhc205NHVsYW8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1124", - "banner": "https://github.com/asyncapi/community/assets/40604284/e4085ee6-6e1a-45d7-8bbe-11b44432f8ef", - "date": "2024-04-16T08:00:00.000Z" + "title": "Let's talk about contributing Hacktoberfest Edition", + "calLink": "https://www.google.com/calendar/event?eid=Zm9lMzRvM2F2MGljbWplZDJnNWYwczIwMzQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1549", + "banner": "https://github.com/user-attachments/assets/0cd48545-5e26-4240-aa8f-f39306617e94", + "date": "2024-10-08T12:00:00.000Z" }, { - "title": "Cheat Sheet Poster - Content discussion", - "calLink": "https://www.google.com/calendar/event?eid=dHA1MWNlZTl2c3RkOWxwdTk4YzBkZWtxcGMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1126", - "banner": "", - "date": "2024-04-03T10:00:00.000Z" + "title": "AsyncAPI Mentorship Program FAQ", + "calLink": "https://www.google.com/calendar/event?eid=NGlzdDFubzY1YWlwNjhpbm8ycTJzNGU1ZjQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1550", + "banner": "https://github.com/user-attachments/assets/d9e9e2cd-714b-48a8-a40d-03c7683a973c", + "date": "2024-10-10T11:00:00.000Z" }, { - "title": "Essential building blocks", - "calLink": "https://www.google.com/calendar/event?eid=c2pqamo4YXUwMWg1YmdqbDE3bXZncWpzb2cgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1144", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=NDd1NzNqdWprNWdqc3U3aGsyZnBhOWpobXMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1553", "banner": "", - "date": "2024-04-09T18:00:00.000Z" - }, - { - "title": "AACoT'24 Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=NmJlNWE0dmlhZnZvNmwzNnRmNGp1OW1sNzQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1147", - "banner": "https://github.com/asyncapi/community/assets/66913810/8769dbe0-baef-42f7-b55e-74f5a288da55", - "date": "2024-04-10T14:00:00.000Z" + "date": "2024-10-22T14:00:00.000Z" }, { - "title": "Community Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=NWluOTRmcG9vYjVjcWoydjVocDAzbjJtb2sgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1154", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=MG9qY2RycjY2cm0xMW1ibTVpZGh2MXZuNjQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1554", "banner": "", - "date": "2024-04-09T14:00:00.000Z" + "date": "2024-11-05T14:00:00.000Z" }, { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=M2JoNHViMGE4MXQwZjdlM2RmMWRqczJpZXMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1159", + "title": "Design Meeting", + "calLink": "https://www.google.com/calendar/event?eid=ZWptamE1cWRzdGE5Mjlybm9vcGlqYTJkOXMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1558", "banner": "", - "date": "2024-04-16T18:00:00.000Z" + "date": "2024-10-17T12:00:00.000Z" }, { - "title": "Community Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=a25zaTduazV2ZTI1NGcxYzJ2N2h2NXJ0MnMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1169", + "title": "AsyncAPI Online Conference 2024 Dry-Run", + "calLink": "https://www.google.com/calendar/event?eid=cnY0NDB2Y2dvcm1uZ2V0MmlrdDdyc3ByNTAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1559", "banner": "", - "date": "2024-04-15T14:00:00.000Z" + "date": "2024-10-18T16:00:00.000Z" }, { - "title": "Marketing - Next steps", - "calLink": "https://www.google.com/calendar/event?eid=bG5rcGc3bWZuODhrajU2aGtxamtvajI4c28gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1175", + "title": "AsyncAPI Online Conference 2024", + "calLink": "https://www.google.com/calendar/event?eid=cjZwdnVldDd2Z29zb3Jlcm9pdTBvYzJmMnMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1562", "banner": "", - "date": "2024-04-25T14:00:00.000Z" + "date": "2024-10-30T10:00:00.000Z" }, { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=M2RqZ3FmODRyZzRxM3RwOW9uMHEyNzVudjQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1177", + "title": "Conference Dry Run", + "calLink": "https://www.google.com/calendar/event?eid=ZmR1c25lZG1wc2swOWloNDd2c2VudWc5OTggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1566", "banner": "", - "date": "2024-04-23T18:00:00.000Z" + "date": "2024-10-28T16:00:00.000Z" }, { - "title": "Maintainers Growth Working Group Meeting", - "calLink": "https://www.google.com/calendar/event?eid=NGZ0NWZiNWw0MzJsbGR0M2Ewdm5kcGNkYzEgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "date": "2024-04-22T14:00:00.000Z" + "title": "AsyncAPI + WebSocket: The Collaborative Combo ", + "calLink": "https://www.google.com/calendar/event?eid=bGo4aXNjNzg3Ym5tbWRtb2wxZ2ZuMmtxN2sgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1569", + "banner": "https://github.com/user-attachments/assets/0cdfc741-e61d-4710-bb0a-af9f7485ff9a", + "date": "2024-11-01T13:00:00.000Z" }, { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=cmk4OTNzZGxvZDd2NHZxb243cG44NzlibWsgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1184", - "banner": "https://github.com/asyncapi/community/assets/40604284/d5358c67-20c3-48a9-b61c-cbea54bbf95c", - "date": "2024-04-30T16:00:00.000Z" - }, - { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=cjNxYm9sOXIwNDlpazY5MmoyNHE3NGxoZHMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1186", + "title": "Marketing WG Meeting", + "calLink": "https://www.google.com/calendar/event?eid=dHVrZHMyYm9kMzcydmJpYW5qMmdpcWU5MW8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1589", "banner": "", - "date": "2024-04-30T18:00:00.000Z" + "date": "2024-11-19T14:00:00.000Z" }, { - "title": "Marketing - WG setup and hiring", - "calLink": "https://www.google.com/calendar/event?eid=cjdhZTcxM25zNG1pMzloc2g5b2I3aTMyaG8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1192", - "banner": "", - "date": "2024-05-09T14:00:00.000Z" - }, - { - "title": "Maintainers Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=ZG9tMTVxazhybm5vMnE2cHIxbG4wOHQ3djAgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1197", - "banner": "", - "date": "2024-05-08T14:00:00.000Z" - }, - { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=ZzQ4aDFsbnZpaXBmZ2h2amdrdWpxZXZrYmcgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1200", + "title": "Design Call", + "calLink": "https://www.google.com/calendar/event?eid=ZmFwNGNoZW5kNzkzcDBsaHM2MW4xdDBzNW8gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1592", "banner": "", - "date": "2024-05-14T18:00:00.000Z" + "date": "2024-11-21T12:00:00.000Z" }, { "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=bG5pdGoxcWZjc3VxMnJib2p2ZXZpYW8xM3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1201", - "banner": "https://github.com/asyncapi/community/assets/40604284/0b128389-fad9-4342-bbc6-4e5624327374", - "date": "2024-05-14T08:00:00.000Z" + "calLink": "https://www.google.com/calendar/event?eid=NmQzNTJzbW91NTNscGo4dnJoMWNlM3J2YnMgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1596", + "banner": "https://github.com/user-attachments/assets/ff469484-a2c5-4aa2-8652-782f017947fb", + "date": "2024-11-26T16:00:00.000Z" }, { - "title": "Community Meeting", - "calLink": "https://www.google.com/calendar/event?eid=OWZwaWlyOWJ0dmExcDJ0c2llaXZiMXA3M3MgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1202", - "banner": "https://github.com/asyncapi/community/assets/40604284/be6af5ec-9697-4ba4-a70b-4b9dd2c54c78", - "date": "2024-05-28T16:00:00.000Z" - }, - { - "title": "Essential Building Blocks Working Group", - "calLink": "https://www.google.com/calendar/event?eid=Z2M2dWxkZWI1YzY1amJydTQzcTlrYW1uZzggY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1210", - "banner": "", - "date": "2024-05-28T18:00:00.000Z" - }, - { - "title": "Maintainers Growth Working Group", - "calLink": "https://www.google.com/calendar/event?eid=ZG45NjF1dXIyc2ZuajkwMTQwMWtxNGhma28gY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1212", - "banner": "", - "date": "2024-05-22T14:00:00.000Z" - }, - { - "title": "Developer Experience Working Group", - "calLink": "https://www.google.com/calendar/event?eid=ZWd1bWVrMjNrN3JoM3A3cXJndmZvNGFsdmsgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", - "url": "https://github.com/asyncapi/community/issues/1220", - "banner": "", - "date": "2024-05-23T14:00:00.000Z" + "title": "AsyncAPI Mentorship Program Kick-Off", + "calLink": "https://www.google.com/calendar/event?eid=aGg5cGtwdGV0YmpzbnBlcmdwYjFqMjU1cTQgY19xOXRzZWlnbG9tZHNqNm5qdWh2YnB0czExY0Bn", + "url": "https://github.com/asyncapi/community/issues/1599", + "banner": "https://github.com/user-attachments/assets/739381b2-b7de-4e08-b845-04e5a07ba7e0", + "date": "2024-12-03T13:00:00.000Z" } ] \ No newline at end of file diff --git a/config/newsroom_videos.json b/config/newsroom_videos.json index 52eefddc49ba..004af39ff3b3 100644 --- a/config/newsroom_videos.json +++ b/config/newsroom_videos.json @@ -1,32 +1,32 @@ [ { - "image_url": "https://i.ytimg.com/vi/K7fvKbOfqOg/hqdefault.jpg", - "title": "Developer Experience Working Group, 14:00 UTC Thursday May 23rd 2024", - "description": "Define our vision and plans https://github.com/asyncapi/community/issues/1220.", - "videoId": "K7fvKbOfqOg" + "image_url": "https://i.ytimg.com/vi/XirMXiBNaBM/hqdefault.jpg", + "title": "Community Meeting, 16:00 UTC Tuesday November 26th 2024", + "description": "", + "videoId": "XirMXiBNaBM" }, { - "image_url": "https://i.ytimg.com/vi/94SSXX78VCU/hqdefault.jpg", - "title": "Essential Building Blocks Working Group, 18:00 UTC Tuesday May 14th 2024", - "description": "https://github.com/asyncapi/community/issues/1200.", - "videoId": "94SSXX78VCU" + "image_url": "https://i.ytimg.com/vi/Q2cvxsUUgzA/hqdefault.jpg", + "title": "AsyncAPI-Powered Event Feeds: 3 Steps to Streaming", + "description": "In this livestream, we'll dive into the challenges and benefits of using AsyncAPI for building event-driven architectures.", + "videoId": "Q2cvxsUUgzA" }, { - "image_url": "https://i.ytimg.com/vi/RijgS6y_JAo/hqdefault.jpg", - "title": "Maintainers Growth Working Group, 14:00 UTC Wednesday May 8th 2024", - "description": "https://github.com/asyncapi/community/issues/1197.", - "videoId": "RijgS6y_JAo" + "image_url": "https://i.ytimg.com/vi/9MaHh4b-rmc/hqdefault.jpg", + "title": "Broadening the API Landscape: AsyncAPI and CloudEvents in the Enterprise - Daniel Kocot", + "description": "", + "videoId": "9MaHh4b-rmc" }, { - "image_url": "https://i.ytimg.com/vi/8F3mTwf7JEs/hqdefault.jpg", - "title": "Essential Building Blocks Working Group, 18:00 UTC Tuesday May 14th 2024", - "description": "https://github.com/asyncapi/community/issues/1200.", - "videoId": "8F3mTwf7JEs" + "image_url": "https://i.ytimg.com/vi/Q1q6JoFG0zM/hqdefault.jpg", + "title": "The Many Meanings Of An AsyncAPI File - Swen-Helge Huber", + "description": "", + "videoId": "Q1q6JoFG0zM" }, { - "image_url": "https://i.ytimg.com/vi/eQed8AKDlsM/hqdefault.jpg", - "title": "Marketing - WG setup and hiring, 14:00 UTC Wednesday May 9th 2024", - "description": "https://github.com/asyncapi/community/issues/1192.", - "videoId": "eQed8AKDlsM" + "image_url": "https://i.ytimg.com/vi/lCTdXmougTk/hqdefault.jpg", + "title": "AsyncAPI and DDD - A Pretty Couple - Dr. Annegret Junker", + "description": "", + "videoId": "lCTdXmougTk" } ] \ No newline at end of file diff --git a/config/orbitData.json b/config/orbitData.json index 8f5e11acd061..6d0c2aa26296 100644 --- a/config/orbitData.json +++ b/config/orbitData.json @@ -7,8 +7,8 @@ }, { "id": "item", - "img": "/img/homepage/ale.webp", - "alt": "ale" + "img": "/img/homepage/que.webp", + "alt": "que" }, { "id": "item", diff --git a/config/tools-automated.json b/config/tools-automated.json index 6fac6523de4b..20f6621b8fe2 100644 --- a/config/tools-automated.json +++ b/config/tools-automated.json @@ -342,6 +342,23 @@ "Frameworks": { "description": "The following is a list of API/application frameworks that make use of AsyncAPI.", "toolsList": [ + { + "title": "Glee", + "description": "Glee — The AsyncAPI framework that will make you smile again :)", + "links": { + "repoUrl": "https://github.com/asyncapi/glee" + }, + "filters": { + "technology": [ + "TypeScript" + ], + "categories": [ + "framework" + ], + "hasCommercial": false, + "isAsyncAPIOwner": true + } + }, { "title": "Zod Sockets", "description": "Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.", @@ -656,24 +673,6 @@ "IDE Extensions": { "description": "The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others", "toolsList": [ - { - "title": "asyncapi-preview", - "description": "VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n", - "links": { - "repoUrl": "https://github.com/asyncapi/vs-asyncapi-preview" - }, - "filters": { - "technology": [ - "VSCode", - "SmartPaste" - ], - "categories": [ - "ide-extension" - ], - "hasCommercial": false, - "isAsyncAPIOwner": true - } - }, { "title": "jAsyncAPI - IDEA plugin", "description": "Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.", @@ -699,7 +698,7 @@ "title": "asyncapi-preview", "description": "VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n", "links": { - "repoUrl": "https://github.com/Savio629/testing2" + "repoUrl": "https://github.com/asyncapi/vs-asyncapi-preview" }, "filters": { "technology": [ @@ -710,7 +709,7 @@ "ide-extension" ], "hasCommercial": false, - "isAsyncAPIOwner": false + "isAsyncAPIOwner": true } } ] @@ -757,19 +756,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" @@ -800,15 +795,19 @@ } }, { - "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": "Java Spring Template", + "description": "Java Spring template for the AsyncAPI Generator", "links": { - "repoUrl": "https://github.com/asyncapi/nodejs-template" + "repoUrl": "https://github.com/asyncapi/java-spring-template" }, "filters": { - "language": "javascript", + "language": [ + "javascript" + ], "technology": [ - "Node.js" + "Springboot", + "Maven", + "Gradle" ], "categories": [ "generator-template" diff --git a/config/tools.json b/config/tools.json index ccb2d7a5f45f..0265d466afdb 100644 --- a/config/tools.json +++ b/config/tools.json @@ -1 +1 @@ -{"APIs":{"description":"The following is a list of APIs that expose functionality related to AsyncAPI.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Server API","description":"Server API providing official AsyncAPI tools","links":{"websiteUrl":"https://api.asyncapi.com/v1","docsUrl":"https://api.asyncapi.com/v1/docs","repoUrl":"https://github.com/asyncapi/server-api"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncApi.Net.Generator","description":"Code-first AsyncAPI documentation generator and ui","links":{"repoUrl":"https://github.com/yurvon-screamo/asyncapi.net"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"EventBridge Atlas","description":"Tool that translates your AWS EventBridge Schemas into an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://eventbridge-atlas.netlify.app/","repoUrl":"https://github.com/boyney123/eventbridge-atlas"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Go AsyncAPI","description":"This library helps to create AsyncAPI spec from your Go message structures. It uses reflection to translate Go structures in JSON Schema definitions and arrange them in AsyncAPI schema.","links":{"repoUrl":"https://github.com/swaggest/go-asyncapi"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Java AsyncAPI","description":"This tool stores modules, which simplifies interacting with AsyncAPI in jvm ecosystem.","links":{"repoUrl":"https://github.com/asyncapi/jasyncapi"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Kotlin AsyncAPI","description":"The Kotlin AsyncAPI project aims to provide convenience tools for generating and serving AsyncAPI documentation. The core of this project is a Kotlin DSL for building the specification in a typesafe way.","links":{"repoUrl":"https://github.com/OpenFolder/kotlin-asyncapi"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"nestjs-asyncapi","description":"Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.","links":{"repoUrl":"https://github.com/flamewow/nestjs-asyncapi"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Neuroglia AsyncAPI","description":"A .NET SDK for the Async API specification. Automatically generates and serves AsyncAPI documents based on your code. Includes fluent-builders to create AsyncAPI documents from scratch, and provides a web-based GUI to browse generated documents.","links":{"repoUrl":"https://github.com/neuroglia-io/AsyncApi"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Saunter","description":"Saunter is an AsyncAPI documentation generator for dotnet. Generates (and hosts) an AsyncAPI schema document from your code.","links":{"repoUrl":"https://github.com/tehmantra/saunter"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"sttp tapir","description":"Library for describing HTTP endpoints, and then interpreting them as a server, client, or documentation","links":{"websiteUrl":"https://tapir.softwaremill.com/","repoUrl":"https://github.com/softwaremill/tapir"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Modelina","description":"Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization","links":{"websiteUrl":"https://modelina.org","docsUrl":"https://github.com/asyncapi/modelina/tree/master/docs","repoUrl":"https://github.com/asyncapi/modelina"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Golang AsyncAPI Code Generator","description":"Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n","links":{"repoUrl":"https://github.com/lerenn/asyncapi-codegen"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"MultiAPI Generator","description":"This is a plugin designed to help developers automatizing the creation of code classes from YML files based on AsyncApi and OpenAPI. It is presented in 2 flavours Maven and Gradle","links":{"repoUrl":"https://github.com/sngular/scs-multiapi-plugin"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Node-RED AsyncAPI plugin","description":"A plugin for generating and configuring nodes for Kafka, MQTT, AMQP, etc. automatically from an AsyncAPI specification.","links":{"repoUrl":"https://github.com/dalelane/node-red-contrib-plugin-asyncapi"},"filters":{"technology":[{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Converters":{"description":"The following is a list of tools that do not yet belong to any specific category but are also useful for the community.","toolsList":[{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/thim81/asyncapi-format"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Converter","description":"Converts old versions of AsyncAPI files into the latest version.","links":{"repoUrl":"https://github.com/asyncapi/converter-js"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Converter-Go","description":"The AsyncAPI Converter converts AsyncAPI documents from versions 1.0.0, 1.1.0 and 1.2.0 to version 2.0.0. It supports both json and yaml formats on input and output. By default, the AsyncAPI Converter converts a document into the json format.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}}]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-asciidoc-template","description":"Asciidoc template for the asyncapi generator","links":{"repoUrl":"https://gitlab.com/djencks/asyncapi-asciidoc-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"}],"categories":["documentation-generator","generator-template"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Bump.sh","description":"OpenAPI 2 & 3 / AsyncAPI 2 documentation generator, with automatic changelog and visual diff.","links":{"websiteUrl":"https://bump.sh/","docsUrl":"https://docs.bump.sh/help/","repoUrl":""},"filters":{"categories":["documentation-generator"],"hasCommercial":true,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Cupid","description":"A library that focuses on finding and analyzing the relationships between AsyncAPI documents. It outputs a map of the system architecture.","links":{"repoUrl":"https://github.com/asyncapi/cupid"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Widdershins","description":"OpenAPI 3.0 / Swagger 2.0 / AsyncAPI 1.0 definition to Slate / Shins compatible markdown.","links":{"websiteUrl":"https://mermade.github.io/reslate/","repoUrl":"https://github.com/Mermade/widdershins"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[{"title":"AsyncAPI Studio","description":"Visually design your AsyncAPI files and event-driven architecture.","links":{"websiteUrl":"https://studio.asyncapi.com","repoUrl":"https://github.com/asyncapi/studio"},"filters":{"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["editor"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"title":"Api-Diff-Viewer","description":"React component to view the difference between two Json based API documents. Supported specifications: JsonSchema, OpenAPI 3.x, AsyncAPI 2.x.","links":{"repoUrl":"https://github.com/udamir/api-diff-viewer","websiteUrl":"https://api-diff-viewer.vercel.app/"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI React component","description":"React component for rendering documentation from your specification in real-time in the browser. It also provides a WebComponent and bundle for Angular and Vue","links":{"repoUrl":"https://github.com/asyncapi/asyncapi-react"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"DSL":{"description":"Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.","toolsList":[{"title":"BOATS","description":"Compile your single AsyncAPI file from multiple YAML files with BOATS and with the help of the template engine Nunjucks, plus a many extra helpers to automate much of the donkey work.","links":{"repoUrl":"https://github.com/j-d-carmichael/boats"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["dsl"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Frameworks":{"description":"The following is a list of API/application frameworks that make use of AsyncAPI.","toolsList":[{"title":"Asynction","description":"SocketIO server framework driven by the AsyncAPI specification. Asynction guarantees that your API will work in accordance with its AsyncAPI documentation. Built on top of Flask-SocketIO.","links":{"websiteUrl":"https://pypi.org/project/asynction/","repoUrl":"https://github.com/dedoussis/asynction"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["framework"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"API documentation generation on Bump.sh","description":"With this GitHub Action you can automatically generate your API reference (with the changelog and diff) on Bump.sh from any AsyncAPI file.","links":{"websiteUrl":"https://github.com/marketplace/actions/api-documentation-on-bump","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Automated version bump for AsyncAPI documents","description":"With this GitHub Action, you can automatically bump the version based on commit messages, which is similar to what semantic-release is for NPM.","links":{"websiteUrl":"https://github.com/marketplace/actions/automated-version-bump-for-asyncapi","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for CLI","description":"GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"GitHub Action for Generator","description":null,"links":{"repoUrl":"https://github.com/actions-marketplace-validations/asyncapi_github-action-for-generator"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for Generator","description":"CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!","links":{"repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-actions"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Mocking and Testing":{"description":"The tools below take specification documents as input, then publish fake messages to broker destinations for simulation purposes. They may also check that publisher messages are compliant with schemas.","toolsList":[{"title":"Microcks","description":"Mocking and testing platform for API and microservices. Turn your AsyncAPI, OpenAPI contract examples, or Postman collections into ready-to-use mocks. Use examples to simulate and validate received messages according to schema elements.","links":{"websiteUrl":"https://microcks.io/","repoUrl":"https://github.com/microcks/microcks"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"MultiAPI Converter","description":"Use AsyncAPI definition, to generate Spring Cloud Contract producer validation or consumer stubs, using maven.","links":{"repoUrl":"https://github.com/sngular/scc-multiapi-converter"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Specmatic","description":"An API contract testing tool that helps ensure the correctness APIs by automatically generating test cases and verifying them against the API spec. It simplifies the process of testing APIs and reduces the likelihood of bugs and compatibility issues.","links":{"websiteUrl":"https://specmatic.io","docsUrl":"https://specmatic.io/documentation/","repoUrl":"https://github.com/znsio/specmatic"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Virtualan","description":"Mocking and testing platform for API and microservices. Allows you to create and setup mocks for OpenAPI and AsyncAPI contracts. Shows how to setup and create AsyncAPI GitHub Reference Examples and OpenAPI GitHub Reference Examples.","links":{"websiteUrl":"https://www.virtualan.io/index.html","repoUrl":"https://github.com/virtualansoftware"},"filters":{"technology":[{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[{"title":"AMF","description":"AMF (AML Modeling Framework) is an open-source library capable of parsing and validating AML metadata documents.","links":{"docsUrl":"https://a.ml/docs/","repoUrl":"https://github.com/aml-org/amf"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Parser","description":"Use this package to parse and validate AsyncAPI documents —either YAML or JSON— in your Node.js or browser application. Updated bundle for the browser is always attached to the GitHub Release.","links":{"repoUrl":"https://github.com/asyncapi/parser-js"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Parser","description":"The AsyncAPI Parser validates AsyncAPI documents according to dedicated schemas.","links":{"repoUrl":"https://github.com/asyncapi/parser-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}},{"title":"AsyncAPI Parser Wrapper","description":"Use this library to parse and validate AsyncAPI documents — either YAML or JSON — in your Java application. It is a Java wrapper over JavaScript Parser implemented using J2V8.","links":{"repoUrl":"https://github.com/AsyncAPITools/parser-java-wrapper"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Validation","description":"Message validation package for YAML and JSON AsyncAPI documents.","links":{"repoUrl":"https://github.com/Elhebert/asyncapi-validation"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"asyncapi-validator","description":"It allows you to validate the schema of your messages against your AsyncAPI schema definition. You can use it with Kafka, RabbitMQ or any other messaging/queue.","links":{"repoUrl":"https://github.com/WaleedAshraf/asyncapi-validator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Spectral","description":"A flexible JSON/YAML linter for creating automated style guides, with baked in support for OpenAPI v3.1, v3.0, and v2.0 as well as AsyncAPI v2.x.","links":{"repoUrl":"https://github.com/stoplightio/spectral"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Compare tools":{"description":"The following is a list of tools that compare AsyncAPI documents.","toolsList":[{"title":"Api-Smart-Diff","description":"It allows you to compare two API documents and classify changes. Supported API specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-smart-diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"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":{"repoUrl":"https://github.com/asyncapi/diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"jasyncapicmp","description":"Tool for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","docsUrl":"https://github.com/siom79/jasyncapicmp","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jasyncapicmp","description":"Tool/library/maven-plugin for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"CLIs":{"description":"The following is a list of tools that you can work with in terminal or do some CI/CD automation.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"title":"Api-ref-bundler","description":"It allows you bundle/dereference external/internal $refs in Json based API document. Supported specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-ref-bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Bundler","description":"Combine multiple AsyncAPI specification files into one.","links":{"repoUrl":"https://github.com/asyncapi/bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"IDE Extensions":{"description":"The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others","toolsList":[{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/asyncapi/vs-asyncapi-preview"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/Savio629/testing2"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jAsyncAPI - IDEA plugin","description":"Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.","links":{"websiteUrl":"https://plugins.jetbrains.com/plugin/15673-asyncapi","docsUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin#usage","repoUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"AsyncAPI Generator Templates":{"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":"HTML Template","description":"HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.","links":{"repoUrl":"https://github.com/asyncapi/html-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Cloud Stream Template","description":"Java Spring Cloud Stream template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-cloud-stream-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Template","description":"Java Spring template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Template","description":"Java template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"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/nodejs-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"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-ws-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Others":{"description":"The following is a list of tools that comes under Other category.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]}} \ No newline at end of file +{"APIs":{"description":"The following is a list of APIs that expose functionality related to AsyncAPI.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Server API","description":"Server API providing official AsyncAPI tools","links":{"websiteUrl":"https://api.asyncapi.com/v1","docsUrl":"https://api.asyncapi.com/v1/docs","repoUrl":"https://github.com/asyncapi/server-api"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code-first tools":{"description":"The following is a list of tools that generate AsyncAPI documents from your code.","toolsList":[{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncApi.Net.Generator","description":"Code-first AsyncAPI documentation generator and ui","links":{"repoUrl":"https://github.com/yurvon-screamo/asyncapi.net"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"EventBridge Atlas","description":"Tool that translates your AWS EventBridge Schemas into an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://eventbridge-atlas.netlify.app/","repoUrl":"https://github.com/boyney123/eventbridge-atlas"},"filters":{"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Go AsyncAPI","description":"This library helps to create AsyncAPI spec from your Go message structures. It uses reflection to translate Go structures in JSON Schema definitions and arrange them in AsyncAPI schema.","links":{"repoUrl":"https://github.com/swaggest/go-asyncapi"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Java AsyncAPI","description":"This tool stores modules, which simplifies interacting with AsyncAPI in jvm ecosystem.","links":{"repoUrl":"https://github.com/asyncapi/jasyncapi"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Kotlin","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Kotlin AsyncAPI","description":"The Kotlin AsyncAPI project aims to provide convenience tools for generating and serving AsyncAPI documentation. The core of this project is a Kotlin DSL for building the specification in a typesafe way.","links":{"repoUrl":"https://github.com/OpenFolder/kotlin-asyncapi"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"nestjs-asyncapi","description":"Utilize decorators to generate AsyncAPI document utilizing DTOs (similar to @nestjs/swagger) and a web UI.","links":{"repoUrl":"https://github.com/flamewow/nestjs-asyncapi"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Nest Js","color":"bg-[#E1224E]","borderColor":"border-[#B9012b]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Neuroglia AsyncAPI","description":"A .NET SDK for the Async API specification. Automatically generates and serves AsyncAPI documents based on your code. Includes fluent-builders to create AsyncAPI documents from scratch, and provides a web-based GUI to browse generated documents.","links":{"repoUrl":"https://github.com/neuroglia-io/AsyncApi"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Saunter","description":"Saunter is an AsyncAPI documentation generator for dotnet. Generates (and hosts) an AsyncAPI schema document from your code.","links":{"repoUrl":"https://github.com/tehmantra/saunter"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"SIO-AsyncAPI","description":"This is code-first approach to generate AsyncAPI specification from Socket.IO server.","links":{"websiteUrl":"https://github.com/daler-rahimov/sio-asyncapi","docsUrl":"https://github.com/daler-rahimov/sio-asyncapi","repoUrl":"https://github.com/daler-rahimov/sio-asyncapi"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Socket.IO","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["code-first","api"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"sttp tapir","description":"Library for describing HTTP endpoints, and then interpreting them as a server, client, or documentation","links":{"websiteUrl":"https://tapir.softwaremill.com/","repoUrl":"https://github.com/softwaremill/tapir"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["code-first"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Code Generators":{"description":"The following is a list of tools that generate code from an AsyncAPI document; not the other way around.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Modelina","description":"Generate payload models into Java, TypeScript, Go, etc, you name it, from AsyncAPI documents. This tool gives you full control over the models through high customization","links":{"websiteUrl":"https://modelina.org","docsUrl":"https://github.com/asyncapi/modelina/tree/master/docs","repoUrl":"https://github.com/asyncapi/modelina"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Docker","color":"bg-[#B8E0FF]","borderColor":"border-[#2596ED]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Golang AsyncAPI Code Generator","description":"Generate Go user and application boilerplate from AsyncAPI specifications. Can be called from `go generate` without requirements.\n","links":{"repoUrl":"https://github.com/lerenn/asyncapi-codegen"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"MultiAPI Generator","description":"This is a plugin designed to help developers automatizing the creation of code classes from YML files based on AsyncApi and OpenAPI. It is presented in 2 flavours Maven and Gradle","links":{"repoUrl":"https://github.com/sngular/scs-multiapi-plugin"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Groovy","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Node-RED AsyncAPI plugin","description":"A plugin for generating and configuring nodes for Kafka, MQTT, AMQP, etc. automatically from an AsyncAPI specification.","links":{"repoUrl":"https://github.com/dalelane/node-red-contrib-plugin-asyncapi"},"filters":{"technology":[{"name":"Node-RED","color":"bg-[#FF7474]","borderColor":"border-[#8F0101]"}],"categories":["code-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Converters":{"description":"The following is a list of tools that do not yet belong to any specific category but are also useful for the community.","toolsList":[{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/thim81/asyncapi-format"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Converter","description":"Converts old versions of AsyncAPI files into the latest version.","links":{"repoUrl":"https://github.com/asyncapi/converter-js"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Converter-Go","description":"The AsyncAPI Converter converts AsyncAPI documents from versions 1.0.0, 1.1.0 and 1.2.0 to version 2.0.0. It supports both json and yaml formats on input and output. By default, the AsyncAPI Converter converts a document into the json format.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["converter"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}}]},"Directories":{"description":"The following is a list of directories that index public AsyncAPI documents.","toolsList":[{"title":"API Tracker - AsyncAPI specs","description":"Explore APIs and companies with public AsyncAPI specifications.","links":{"websiteUrl":"https://apitracker.io/specifications/asyncapi","repoUrl":""},"filters":{"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI-Directory by APIs.guru","description":"Directory of asynchronous API specifications in AsyncAPI format.","links":{"websiteUrl":"https://apis.guru/asyncapi-directory/","repoUrl":"https://github.com/APIs-guru/asyncapi-directory"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["api","directory"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Documentation Generators":{"description":"The following is a list of tools that generate human-readable documentation from an AsyncAPI document.","toolsList":[{"title":"AsyncAPI Generator","description":"Generator is a tool that you can use to generate whatever you want basing on the AsyncAPI specification file as an input.","links":{"docsUrl":"https://www.asyncapi.com/docs/tools/generator","repoUrl":"https://github.com/asyncapi/generator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Markdown","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"asyncapi-asciidoc-template","description":"Asciidoc template for the asyncapi generator","links":{"repoUrl":"https://gitlab.com/djencks/asyncapi-asciidoc-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"}],"categories":["documentation-generator","generator-template"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Bump.sh","description":"OpenAPI 2 & 3 / AsyncAPI 2 documentation generator, with automatic changelog and visual diff.","links":{"websiteUrl":"https://bump.sh/","docsUrl":"https://docs.bump.sh/help/","repoUrl":""},"filters":{"categories":["documentation-generator"],"hasCommercial":true,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Cupid","description":"A library that focuses on finding and analyzing the relationships between AsyncAPI documents. It outputs a map of the system architecture.","links":{"repoUrl":"https://github.com/asyncapi/cupid"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"KnstEventBus","description":"AsyncApi code-first tools for c#. Generates document and view.","links":{"repoUrl":"https://github.com/d0972058277/KnstEventBus"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"},{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Springwolf","description":"Automated documentation for async APIs built with Spring Boot. Like Springfox for AsyncAPI. Auto-generates an AsyncAPI document and a web UI.","links":{"websiteUrl":"https://www.springwolf.dev","repoUrl":"https://github.com/springwolf/springwolf-core"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Widdershins","description":"OpenAPI 3.0 / Swagger 2.0 / AsyncAPI 1.0 definition to Slate / Shins compatible markdown.","links":{"websiteUrl":"https://mermade.github.io/reslate/","repoUrl":"https://github.com/Mermade/widdershins"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"Shell","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["documentation-generator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Editors":{"description":"The following is a list of editors or related tools that allow editing of AsyncAPI document.","toolsList":[{"title":"AsyncAPI Studio","description":"Visually design your AsyncAPI files and event-driven architecture.","links":{"websiteUrl":"https://studio.asyncapi.com","repoUrl":"https://github.com/asyncapi/studio"},"filters":{"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["editor"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"UI components":{"description":"The following is a list of UI components to view AsyncAPI documents.","toolsList":[{"title":"Api-Diff-Viewer","description":"React component to view the difference between two Json based API documents. Supported specifications: JsonSchema, OpenAPI 3.x, AsyncAPI 2.x.","links":{"repoUrl":"https://github.com/udamir/api-diff-viewer","websiteUrl":"https://api-diff-viewer.vercel.app/"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"Babel","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Storybook","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI React component","description":"React component for rendering documentation from your specification in real-time in the browser. It also provides a WebComponent and bundle for Angular and Vue","links":{"repoUrl":"https://github.com/asyncapi/asyncapi-react"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"React JS","color":"bg-[#9FECFA]","borderColor":"border-[#08D8FE]"},{"name":"WebComponents","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ui-component"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"DSL":{"description":"Writing YAML by hand is no fun, and maybe you don't want a GUI, so use a Domain Specific Language to write AsyncAPI in your language of choice.","toolsList":[{"title":"BOATS","description":"Compile your single AsyncAPI file from multiple YAML files with BOATS and with the help of the template engine Nunjucks, plus a many extra helpers to automate much of the donkey work.","links":{"repoUrl":"https://github.com/j-d-carmichael/boats"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["dsl"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Frameworks":{"description":"The following is a list of API/application frameworks that make use of AsyncAPI.","toolsList":[{"title":"Asynction","description":"SocketIO server framework driven by the AsyncAPI specification. Asynction guarantees that your API will work in accordance with its AsyncAPI documentation. Built on top of Flask-SocketIO.","links":{"websiteUrl":"https://pypi.org/project/asynction/","repoUrl":"https://github.com/dedoussis/asynction"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"technology":[{"name":"Flask","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["framework"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"FastStream","description":"A powerful and easy-to-use Python framework for building asynchronous services interacting with event streams such as Apache Kafka, RabbitMQ and NATS.","links":{"websiteUrl":"https://faststream.airt.ai","repoUrl":"https://github.com/airtai/FastStream"},"filters":{"language":[{"name":"Python","color":"bg-[#A8D0EF]","borderColor":"border-[#3878AB]"}],"categories":["code-first","framework"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"Glee","description":"Glee — The AsyncAPI framework that will make you smile again :)","links":{"repoUrl":"https://github.com/asyncapi/glee"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["framework"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Zod Sockets","description":"Socket.IO solution with I/O validation and the ability to generate AsyncAPI specification and a contract for consumers.","links":{"websiteUrl":"https://www.npmjs.com/package/zod-sockets","repoUrl":"https://github.com/RobinTail/zod-sockets"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"},{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-first","dsl","framework"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"GitHub Actions":{"description":"The following is a list of GitHub Actions that you can use in your workflows","toolsList":[{"title":"API documentation generation on Bump.sh","description":"With this GitHub Action you can automatically generate your API reference (with the changelog and diff) on Bump.sh from any AsyncAPI file.","links":{"websiteUrl":"https://github.com/marketplace/actions/api-documentation-on-bump","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Automated version bump for AsyncAPI documents","description":"With this GitHub Action, you can automatically bump the version based on commit messages, which is similar to what semantic-release is for NPM.","links":{"websiteUrl":"https://github.com/marketplace/actions/automated-version-bump-for-asyncapi","repoUrl":"https://github.com/bump-sh/github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for CLI","description":"GitHub Action with generator, validator, converter and others - all in one for your AsyncAPI documents with AsyncAPI CLI as backbone","links":{"repoUrl":"https://github.com/asyncapi/github-action-for-cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"GitHub Action for Generator","description":null,"links":{"repoUrl":"https://github.com/actions-marketplace-validations/asyncapi_github-action-for-generator"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-action"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"GitHub Action for Generator","description":"CLI to work with your AsyncAPI files. You can validate them and in the future use a generator and even bootstrap a new file. Contributions are welcomed!","links":{"repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"AsyncAPI Generator","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["github-actions"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Mocking and Testing":{"description":"The tools below take specification documents as input, then publish fake messages to broker destinations for simulation purposes. They may also check that publisher messages are compliant with schemas.","toolsList":[{"title":"Microcks","description":"Mocking and testing platform for API and microservices. Turn your AsyncAPI, OpenAPI contract examples, or Postman collections into ready-to-use mocks. Use examples to simulate and validate received messages according to schema elements.","links":{"websiteUrl":"https://microcks.io/","repoUrl":"https://github.com/microcks/microcks"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"},{"name":"Saas","color":"bg-[#6AB8EC]","borderColor":"border-[#2275AD]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"MultiAPI Converter","description":"Use AsyncAPI definition, to generate Spring Cloud Contract producer validation or consumer stubs, using maven.","links":{"repoUrl":"https://github.com/sngular/scc-multiapi-converter"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Specmatic","description":"An API contract testing tool that helps ensure the correctness APIs by automatically generating test cases and verifying them against the API spec. It simplifies the process of testing APIs and reduces the likelihood of bugs and compatibility issues.","links":{"websiteUrl":"https://specmatic.io","docsUrl":"https://specmatic.io/documentation/","repoUrl":"https://github.com/znsio/specmatic"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Virtualan","description":"Mocking and testing platform for API and microservices. Allows you to create and setup mocks for OpenAPI and AsyncAPI contracts. Shows how to setup and create AsyncAPI GitHub Reference Examples and OpenAPI GitHub Reference Examples.","links":{"websiteUrl":"https://www.virtualan.io/index.html","repoUrl":"https://github.com/virtualansoftware"},"filters":{"technology":[{"name":"Kubernetes-native","color":"bg-[#D7C7F2]","borderColor":"border-[#A387D2]"}],"categories":["mocking-and-testing"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Validators":{"description":"The following is a list of tools that validate AsyncAPI documents.","toolsList":[{"title":"AMF","description":"AMF (AML Modeling Framework) is an open-source library capable of parsing and validating AML metadata documents.","links":{"docsUrl":"https://a.ml/docs/","repoUrl":"https://github.com/aml-org/amf"},"filters":{"language":[{"name":"Scala","color":"bg-[#FFA299]","borderColor":"border-[#DF301F]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI GitHub Action","description":"This action validates if the AsyncAPI schema file is valid or not.","links":{"websiteUrl":"https://github.com/marketplace/actions/asyncapi-github-action","repoUrl":"https://github.com/WaleedAshraf/asyncapi-github-action"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["github-action","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Parser","description":"Use this package to parse and validate AsyncAPI documents —either YAML or JSON— in your Node.js or browser application. Updated bundle for the browser is always attached to the GitHub Release.","links":{"repoUrl":"https://github.com/asyncapi/parser-js"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI Parser","description":"The AsyncAPI Parser validates AsyncAPI documents according to dedicated schemas.","links":{"repoUrl":"https://github.com/asyncapi/parser-go"},"filters":{"language":[{"name":"Go/Golang","color":"bg-[#8ECFDF]","borderColor":"border-[#00AFD9]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":true,"technology":[]}},{"title":"AsyncAPI Parser Wrapper","description":"Use this library to parse and validate AsyncAPI documents — either YAML or JSON — in your Java application. It is a Java wrapper over JavaScript Parser implemented using J2V8.","links":{"repoUrl":"https://github.com/AsyncAPITools/parser-java-wrapper"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"title":"AsyncAPI Validation","description":"Message validation package for YAML and JSON AsyncAPI documents.","links":{"repoUrl":"https://github.com/Elhebert/asyncapi-validation"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"asyncapi-validator","description":"It allows you to validate the schema of your messages against your AsyncAPI schema definition. You can use it with Kafka, RabbitMQ or any other messaging/queue.","links":{"repoUrl":"https://github.com/WaleedAshraf/asyncapi-validator"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI.Net","description":"The AsyncAPI.NET SDK contains a useful object model for AsyncAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model.","links":{"websiteUrl":"https://github.com/LEGO/AsyncAPI.NET/","repoUrl":"https://github.com/LEGO/AsyncAPI.NET"},"filters":{"language":[{"name":"C#","color":"bg-[#E3AFE0]","borderColor":"border-[#9B4F96]"}],"technology":[{"name":".NET","color":"bg-[#A184FF]","borderColor":"border-[#5026D4]"},{"name":"ASP.NET","color":"bg-[#71C2FB]","borderColor":"border-[#1577BC]"}],"categories":["converters","code-first","validator"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"Spectral","description":"A flexible JSON/YAML linter for creating automated style guides, with baked in support for OpenAPI v3.1, v3.0, and v2.0 as well as AsyncAPI v2.x.","links":{"repoUrl":"https://github.com/stoplightio/spectral"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["validator"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Compare tools":{"description":"The following is a list of tools that compare AsyncAPI documents.","toolsList":[{"title":"Api-Smart-Diff","description":"It allows you to compare two API documents and classify changes. Supported API specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-smart-diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false,"technology":[]}},{"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":{"repoUrl":"https://github.com/asyncapi/diff"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"jasyncapicmp","description":"Tool for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","docsUrl":"https://github.com/siom79/jasyncapicmp","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"jasyncapicmp","description":"Tool/library/maven-plugin for comparing two AsyncAPI versions and evaluating compatibility.","links":{"websiteUrl":"https://siom79.github.io/jasyncapicmp/","repoUrl":"https://github.com/siom79/jasyncapicmp"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["compare-tool"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"CLIs":{"description":"The following is a list of tools that you can work with in terminal or do some CI/CD automation.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI-format","description":"Format an AsyncAPI document by ordering, casing, formatting, and filtering fields.","links":{"repoUrl":"https://github.com/asyncapi/converter-go"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["converter","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"ZenWave SDK","description":"DDD and API-First for Event-Driven Microservices","links":{"websiteUrl":"https://zenwave360.github.io/","docsUrl":"https://zenwave360.github.io/zenwave-sdk/plugins/asyncapi-spring-cloud-streams3/","repoUrl":"https://github.com/zenwave360/zenwave-sdk"},"filters":{"language":[{"name":"Java","color":"bg-[#ECA2A4]","borderColor":"border-[#EC2125]"}],"technology":[{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Liquid","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"JHipster JDL","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["code-generator","dsl","mocking-and-testing","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]},"Bundlers":{"description":"The following is a list of tools that you can work with to bundle AsyncAPI documents.","toolsList":[{"title":"Api-ref-bundler","description":"It allows you bundle/dereference external/internal $refs in Json based API document. Supported specifications: OpenAPI, AsyncAPI, JsonSchema.","links":{"repoUrl":"https://github.com/udamir/api-ref-bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":false}},{"title":"AsyncAPI Bundler","description":"Combine multiple AsyncAPI specification files into one.","links":{"repoUrl":"https://github.com/asyncapi/bundler"},"filters":{"language":[{"name":"TypeScript","color":"bg-[#7DBCFE]","borderColor":"border-[#2C78C7]"}],"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["bundler"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"IDE Extensions":{"description":"The following is a list of extensions for different IDEs like VSCode, IntelliJ IDEA and others","toolsList":[{"title":"asyncapi-preview","description":"VSCode extension that enables you to:\n - Preview documentation generated using you AsyncAPI document. It uses AsyncAPI React component under the hood,\n - Create AsyncAPI documents faster using SmartPaste functionality\n","links":{"repoUrl":"https://github.com/asyncapi/vs-asyncapi-preview"},"filters":{"technology":[{"name":"VSCode","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"SmartPaste","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"jAsyncAPI - IDEA plugin","description":"Idea plugin for the java-asyncapi - Helps to edit and validate AsyncAPI schemas.","links":{"websiteUrl":"https://plugins.jetbrains.com/plugin/15673-asyncapi","docsUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin#usage","repoUrl":"https://github.com/asyncapi/jasyncapi-idea-plugin"},"filters":{"language":[{"name":"Kotlin","color":"bg-[#B1ACDF]","borderColor":"border-[#756BD9]"}],"technology":[{"name":"JetBrains","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"IntelliJ IDEA","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["ide-extension"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"AsyncAPI Generator Templates":{"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":"HTML Template","description":"HTML template for AsyncAPI Generator. Use it to generate a static docs. It is using AsyncAPI React component under the hood.","links":{"repoUrl":"https://github.com/asyncapi/html-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"HTML","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Cloud Stream Template","description":"Java Spring Cloud Stream template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-cloud-stream-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Spring Cloud Streams","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Spring Template","description":"Java Spring template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-spring-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Springboot","color":"bg-[#98E279]","borderColor":"border-[#68BC44]"},{"name":"Maven","color":"bg-[#FF6B80]","borderColor":"border-[#CA1A33]"},{"name":"Gradle","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"Java Template","description":"Java template for the AsyncAPI Generator","links":{"repoUrl":"https://github.com/asyncapi/java-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Java","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"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/nodejs-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"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-ws-template"},"filters":{"language":[{"name":"JavaScript","color":"bg-[#F2F1C7]","borderColor":"border-[#BFBE86]"}],"technology":[{"name":"Node.js","color":"bg-[#BDFF67]","borderColor":"border-[#84CE24]"}],"categories":["generator-template"],"hasCommercial":false,"isAsyncAPIOwner":true}}]},"Others":{"description":"The following is a list of tools that comes under Other category.","toolsList":[{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/asyncapi/cli"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":true}},{"title":"AsyncAPI CLI","description":"One CLI to rule them all. \nThis is a CLI that aims to integrate all AsyncAPI tools that you need while AsyncAPI document development and maintainance. \nYou can use it to generate docs or code, validate AsyncAPI document and event create new documents.\n","links":{"websiteUrl":"https://www.asyncapi.com/tools/cli","repoUrl":"https://github.com/hkirat/asyncapi-fork"},"filters":{"technology":[{"name":"TypeScript","color":"bg-[#61d0f2]","borderColor":"border-[#40ccf7]"}],"categories":["others","cli"],"hasCommercial":false,"isAsyncAPIOwner":false}}]}} \ No newline at end of file diff --git a/context/AppContext.tsx b/context/AppContext.tsx index 696c2ae6f2db..5d53b72dfe77 100644 --- a/context/AppContext.tsx +++ b/context/AppContext.tsx @@ -1,4 +1,5 @@ import { createContext } from 'react'; -import { AppContextType } from '@/types/context/AppContext'; -export default createContext({ path: "" }); +import type { AppContextType } from '@/types/context/AppContext'; + +export default createContext({ path: '' }); diff --git a/context/GenericPostContext.tsx b/context/GenericPostContext.tsx index 65b510b15a84..6d9b519d7bd3 100644 --- a/context/GenericPostContext.tsx +++ b/context/GenericPostContext.tsx @@ -2,4 +2,4 @@ import { createContext } from 'react'; import type { IPosts } from '@/types/post'; -export default createContext<{ post: IPosts['blog'][number] | IPosts['docs'][number]} | undefined>(undefined); +export default createContext<{ post: IPosts['blog'][number] | IPosts['docs'][number] } | undefined>(undefined); diff --git a/context/ToolFilterContext.tsx b/context/ToolFilterContext.tsx index b3ea042f49d3..0b2b582dcc70 100644 --- a/context/ToolFilterContext.tsx +++ b/context/ToolFilterContext.tsx @@ -1,5 +1,5 @@ import { useRouter } from 'next/router'; -import { createContext, useEffect, useState } from 'react'; +import React, { createContext, useEffect, useState } from 'react'; interface ToolFilterContextProps { isPaid: string; diff --git a/dashboard.json b/dashboard.json index 53053b94e94c..4624392d0ec0 100644 --- a/dashboard.json +++ b/dashboard.json @@ -1,35 +1,71 @@ { "hotDiscussions": [ { - "id": "I_kwDOFLhIt85_y16Y", + "id": "I_kwDOFLhIt84-OUI3", "isPR": false, - "isAssigned": true, - "title": "Automate Slack user groups + channels creation and management", - "author": "smoya", - "resourcePath": "/asyncapi/community/issues/1072", + "isAssigned": false, + "title": "Create educational & technical video explaining AsyncAPI's main features", + "author": "quetzalliwrites", + "resourcePath": "/asyncapi/community/issues/155", "repo": "asyncapi/community", "labels": [ { "name": "enhancement", "color": "a2eeef" + } + ], + "score": 34.46095064991105 + }, + { + "id": "I_kwDODou01c5BZZv-", + "isPR": false, + "isAssigned": false, + "title": "Open Graph link preview image according to the document to open", + "author": "smoya", + "resourcePath": "/asyncapi/studio/issues/224", + "repo": "asyncapi/studio", + "labels": [ + { + "name": "enhancement", + "color": "a2eeef" + }, + { + "name": "keep-open", + "color": "f9dd4b" + } + ], + "score": 31.302030173669205 + }, + { + "id": "I_kwDOGQYLdM5AX1lK", + "isPR": false, + "isAssigned": true, + "title": "Brand Refresh: Mascot", + "author": "mcturco", + "resourcePath": "/asyncapi/brand/issues/12", + "repo": "asyncapi/brand", + "labels": [ + { + "name": ":art: design", + "color": "0D67D3" }, { "name": "bounty", "color": "0E8A16" } ], - "score": 104.24437571598092 + "score": 27.8559351086781 }, { - "id": "PR_kwDOFLhIt85js7KX", + "id": "PR_kwDOBW5R_c5-T7mG", "isPR": true, "isAssigned": false, - "title": "chore: add documents CoC Committee and Incident Resolution Procedures", - "author": "Barbanio", - "resourcePath": "/asyncapi/community/pull/1013", - "repo": "asyncapi/community", + "title": "feat: add tests for build post list script", + "author": "vishvamsinh28", + "resourcePath": "/asyncapi/website/pull/3284", + "repo": "asyncapi/website", "labels": [], - "score": 22.9739670999407 + "score": 27.28158593117958 }, { "id": "PR_kwDOFLhIt85bqKL8", @@ -43,155 +79,150 @@ "score": 22.112443333692923 }, { - "id": "I_kwDOBW5R_c580Z0o", + "id": "I_kwDOBW5R_c5BIl5P", "isPR": false, "isAssigned": false, - "title": "New Contributor Guide and Maintenance Setup", - "author": "derberg", - "resourcePath": "/asyncapi/website/issues/2586", + "title": "Add new page for collecting user testing participants", + "author": "mcturco", + "resourcePath": "/asyncapi/website/issues/529", "repo": "asyncapi/website", "labels": [ { "name": "enhancement", "color": "84b6eb" + }, + { + "name": "Epic", + "color": "3E4B9E" + }, + { + "name": "keep-open", + "color": "ffee84" + }, + { + "name": "area/design", + "color": "0d67d3" + }, + { + "name": "area/javascript", + "color": "ededed" } ], - "score": 18.091999091203302 + "score": 21.825268744943667 }, { - "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": 17.230475324955524 + "id": "PR_kwDOBW5R_c59FBoR", + "isPR": true, + "isAssigned": false, + "title": "feat: add tests for tool-object script", + "author": "vishvamsinh28", + "resourcePath": "/asyncapi/website/pull/3265", + "repo": "asyncapi/website", + "labels": [ + { + "name": "gsoc", + "color": "F4D03F" + } + ], + "score": 21.825268744943667 }, { - "id": "PR_kwDOBW5R_c5p28Vu", + "id": "PR_kwDOBW5R_c6BZLuT", "isPR": true, "isAssigned": false, - "title": "fix: navigation to correct heading in tools section", - "author": "Vishal2002", - "resourcePath": "/asyncapi/website/pull/2790", + "title": "feat: add tests for check markdown script", + "author": "vishvamsinh28", + "resourcePath": "/asyncapi/website/pull/3378", "repo": "asyncapi/website", "labels": [], - "score": 14.933078614961456 + "score": 20.67657038994663 }, { - "id": "PR_kwDOCoBobc5tRBZn", + "id": "PR_kwDOFLhIt855u7Eb", "isPR": true, "isAssigned": false, - "title": "chore: introduce the turborepo to the parser.js", - "author": "ayushnau", - "resourcePath": "/asyncapi/parser-js/pull/992", - "repo": "asyncapi/parser-js", + "title": "docs: added marketing strategy doc", + "author": "iambami", + "resourcePath": "/asyncapi/community/pull/1358", + "repo": "asyncapi/community", "labels": [], - "score": 14.358729437462937 + "score": 20.102221212448114 }, { - "id": "I_kwDOFi_gUM5hpuWl", - "isPR": false, - "isAssigned": true, - "title": "Improve kafka adapter", - "author": "KhudaDad414", - "resourcePath": "/asyncapi/glee/issues/411", - "repo": "asyncapi/glee", + "id": "PR_kwDOBW5R_c535wDj", + "isPR": true, + "isAssigned": false, + "title": "feat: add test for combine tools script", + "author": "vishvamsinh28", + "resourcePath": "/asyncapi/website/pull/3136", + "repo": "asyncapi/website", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "good first issue", - "color": "7057ff" - }, - { - "name": "area/typescript", - "color": "007acc" + "name": "gsoc", + "color": "F4D03F" } ], - "score": 13.78438025996442 + "score": 17.804824502454043 }, { - "id": "I_kwDODou01c5BZZv-", + "id": "I_kwDOBW5R_c5RVOOY", "isPR": false, "isAssigned": false, - "title": "Open Graph link preview image according to the document to open", - "author": "smoya", - "resourcePath": "/asyncapi/studio/issues/224", - "repo": "asyncapi/studio", + "title": "Community cards implementation.", + "author": "Mayaleeeee", + "resourcePath": "/asyncapi/website/issues/930", + "repo": "asyncapi/website", "labels": [ { - "name": "enhancement", - "color": "a2eeef" + "name": "area/design", + "color": "0d67d3" }, { - "name": "keep-open", - "color": "f9dd4b" + "name": "area/javascript", + "color": "ededed" } ], - "score": 13.703040335770691 + "score": 17.517649913704783 }, { - "id": "I_kwDOFLhIt85bebeO", - "isPR": false, - "isAssigned": false, - "title": "Meeting Banners Storage", - "author": "AceTheCreator", - "resourcePath": "/asyncapi/community/issues/568", - "repo": "asyncapi/community", - "labels": [], - "score": 13.497205671215161 - }, - { - "id": "PR_kwDODou01c5r4UjU", - "isPR": true, - "isAssigned": false, - "title": "fix: Enhancement of Visual Json Schema Editor", - "author": "Gmin2", - "resourcePath": "/asyncapi/studio/pull/1065", - "repo": "asyncapi/studio", - "labels": [], - "score": 13.497205671215161 - }, - { - "id": "PR_kwDOFDnrNc5tl-_j", + "id": "PR_kwDOFLhIt853IEwA", "isPR": true, "isAssigned": false, - "title": "test: replicate incorrect bundling and missing assertions part of #1323", - "author": "francocm", - "resourcePath": "/asyncapi/cli/pull/1389", - "repo": "asyncapi/cli", + "title": "docs: added asyncapi student ambassador md file", + "author": "iambami", + "resourcePath": "/asyncapi/community/pull/1333", + "repo": "asyncapi/community", "labels": [], - "score": 12.061332727468868 + "score": 16.08177696995849 } ], "goodFirstIssues": [ { - "id": "I_kwDOE8Qh386HJeIz", - "title": "[BUG] Implement avro schema data type ", - "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1974", - "repo": "asyncapi/modelina", - "author": "akkshitgupta", - "area": "typescript", + "id": "I_kwDOFLhIt86hMsxx", + "title": "Create an announcement design for the new TSC member (Ashmit Jagtap)", + "isAssigned": true, + "resourcePath": "/asyncapi/community/issues/1602", + "repo": "asyncapi/community", + "author": "iambami", + "area": "Unknown", "labels": [ { - "name": "avro", - "color": "EC3D91" + "name": ":loudspeaker: marketing", + "color": "a829e2" + }, + { + "name": "🎨 design", + "color": "0D67D3" } ] }, { - "id": "I_kwDODwv8N86CASyz", - "title": "Card text is unreadable ", + "id": "I_kwDODwv8N86f37o-", + "title": "Return to top arrow feature/button", "isAssigned": false, - "resourcePath": "/asyncapi/conference-website/issues/266", + "resourcePath": "/asyncapi/conference-website/issues/475", "repo": "asyncapi/conference-website", - "author": "AceTheCreator", + "author": "thulieblack", "area": "Unknown", "labels": [ { @@ -201,73 +232,102 @@ ] }, { - "id": "I_kwDOCxglSM6Bxg4I", - "title": "Convert OpenAPI 3.0 to AsyncAPI 3.0", + "id": "I_kwDOFLhIt86dker5", + "title": "Designs for the mentees selected for the mentorship program for promotion", "isAssigned": true, - "resourcePath": "/asyncapi/converter-js/issues/233", - "repo": "asyncapi/converter-js", - "author": "jonaslagoni", - "area": "typescript", + "resourcePath": "/asyncapi/community/issues/1581", + "repo": "asyncapi/community", + "author": "iambami", + "area": "design", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "keep-open", - "color": "f4d473" - }, - { - "name": "bounty", - "color": "0E8A16" + "name": ":loudspeaker: marketing", + "color": "a829e2" } ] }, { - "id": "I_kwDOE8Qh385-gvCP", - "title": "Add \"generated-code\" XmlDoc and `[GeneratedCode]` attribute to C# models.", + "id": "I_kwDOBW5R_c6ddpHW", + "title": "[BUG] algolia search icon not visible on website navbar", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1784", - "repo": "asyncapi/modelina", - "author": "RowlandBanks", - "area": "typescript", + "resourcePath": "/asyncapi/website/issues/3371", + "repo": "asyncapi/website", + "author": "anshgoyalevil", + "area": "Unknown", + "labels": [ + { + "name": "bug", + "color": "ee0701" + } + ] + }, + { + "id": "I_kwDOBW5R_c6crqQz", + "title": "Improve image type detection in build-rss.js", + "isAssigned": true, + "resourcePath": "/asyncapi/website/issues/3357", + "repo": "asyncapi/website", + "author": "coderabbitai", + "area": "Unknown", "labels": [ { "name": "enhancement", - "color": "a2eeef" - }, + "color": "84b6eb" + } + ] + }, + { + "id": "I_kwDOFLhIt86bdQd-", + "title": "Add Proposed Project Ideas to Mentorship Directory", + "isAssigned": false, + "resourcePath": "/asyncapi/community/issues/1564", + "repo": "asyncapi/community", + "author": "AceTheCreator", + "area": "Unknown", + "labels": [ { - "name": "C# generator", - "color": "c5def5" + "name": "Hacktoberfest", + "color": "FF8AE2" } ] }, { - "id": "I_kwDOCHlHJM58YMi8", - "title": "Improve arborist (npm installation) to have no hacks", + "id": "I_kwDOCVQpZM6YZd4E", + "title": "A fragment with only one child is redundant.", "isAssigned": false, - "resourcePath": "/asyncapi/generator/issues/1102", - "repo": "asyncapi/generator", - "author": "derberg", - "area": "javascript", + "resourcePath": "/asyncapi/asyncapi-react/issues/1054", + "repo": "asyncapi/asyncapi-react", + "author": "AceTheCreator", + "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, + "name": "Hacktoberfest", + "color": "FF8AE2" + } + ] + }, + { + "id": "I_kwDOCVQpZM6YZbiE", + "title": "Remove this redundant \"undefined\"", + "isAssigned": false, + "resourcePath": "/asyncapi/asyncapi-react/issues/1052", + "repo": "asyncapi/asyncapi-react", + "author": "AceTheCreator", + "area": "Unknown", + "labels": [ { - "name": "stale", - "color": "ededed" + "name": "Hacktoberfest", + "color": "FF8AE2" } ] }, { - "id": "I_kwDOE8Qh38572pxu", - "title": "Add runtime tests for Dart", + "id": "I_kwDODwv8N86YYYFf", + "title": "Fix the way the ticket section is being rendered", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1744", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", + "resourcePath": "/asyncapi/conference-website/issues/395", + "repo": "asyncapi/conference-website", + "author": "AceTheCreator", "area": "Unknown", "labels": [ { @@ -275,92 +335,171 @@ "color": "a2eeef" }, { - "name": "Dart generator", - "color": "296FBA" + "name": "Hacktoberfest", + "color": "FF8AE2" } ] }, { - "id": "I_kwDOE8Qh38572gDd", - "title": "Add XSD support ", + "id": "I_kwDOGQYLdM6VGsJA", + "title": "Design a Graphic for the Member Spotlight Post", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1742", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "typescript", + "resourcePath": "/asyncapi/brand/issues/108", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", + "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, - { - "name": "stale", - "color": "ededed" + "name": ":art: design", + "color": "0D67D3" } ] }, { - "id": "I_kwDOE8Qh38572bME", - "title": "Add JSON Type definition support ", + "id": "I_kwDOGQYLdM6VAt9d", + "title": "Create \"Did You Know?\" Social Media Posts (3-4 Graphics)", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1740", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "typescript", + "resourcePath": "/asyncapi/brand/issues/107", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", + "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" + "name": "🎨 design", + "color": "0D67D3" } ] }, { - "id": "I_kwDOE8Qh3857Kllp", - "title": "Add loading animation for when playground generate models ", + "id": "I_kwDOGQYLdM6VAsmz", + "title": "Create a Graphic for \"Ask Me Anything\" (AMA) Session Announcement", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1725", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", + "resourcePath": "/asyncapi/brand/issues/106", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" - }, + "name": "🎨 design", + "color": "0D67D3" + } + ] + }, + { + "id": "I_kwDOGQYLdM6VArWv", + "title": "Design a Graphic for Mentorship Program Announcement", + "isAssigned": false, + "resourcePath": "/asyncapi/brand/issues/105", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", + "area": "design", + "labels": [] + }, + { + "id": "I_kwDOGQYLdM6VApSN", + "title": "Design a Graphic for Newsletter Promo", + "isAssigned": false, + "resourcePath": "/asyncapi/brand/issues/104", + "repo": "asyncapi/brand", + "author": "Mayaleeeee", + "area": "design", + "labels": [] + }, + { + "id": "I_kwDOFLhIt86O7jFN", + "title": "[DESIGN] Holopin Design Tracking", + "isAssigned": true, + "resourcePath": "/asyncapi/community/issues/1306", + "repo": "asyncapi/community", + "author": "Mayaleeeee", + "area": "design", + "labels": [ { - "name": "website", - "color": "57A793" + "name": "🎨 design", + "color": "0D67D3" } ] }, { - "id": "I_kwDOE8Qh3857KYj1", - "title": "Add input document for OpenAPI", + "id": "I_kwDODwv8N86Lel9M", + "title": "[FEATURE] Resolve the existing Next.js lint issues", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1723", - "repo": "asyncapi/modelina", - "author": "jonaslagoni", - "area": "Unknown", + "resourcePath": "/asyncapi/conference-website/issues/328", + "repo": "asyncapi/conference-website", + "author": "ashmit-coder", + "area": "javascript", "labels": [ { "name": "enhancement", "color": "a2eeef" - }, + } + ] + }, + { + "id": "I_kwDOE8Qh386HJeIz", + "title": "[BUG] Implement avro schema data type ", + "isAssigned": false, + "resourcePath": "/asyncapi/modelina/issues/1974", + "repo": "asyncapi/modelina", + "author": "akkshitgupta", + "area": "typescript", + "labels": [ + { + "name": "avro", + "color": "EC3D91" + } + ] + }, + { + "id": "I_kwDOFDnrNc6Gp88n", + "title": " Implement new UI/UX improvements in start command", + "isAssigned": false, + "resourcePath": "/asyncapi/cli/issues/1384", + "repo": "asyncapi/cli", + "author": "Amzani", + "area": "typescript", + "labels": [ { "name": "stale", "color": "ededed" - }, + } + ] + }, + { + "id": "I_kwDOFDnrNc6Gp8Qd", + "title": " Implement new UI/UX improvements in config command", + "isAssigned": false, + "resourcePath": "/asyncapi/cli/issues/1380", + "repo": "asyncapi/cli", + "author": "Amzani", + "area": "typescript", + "labels": [ { - "name": "📑 docs", - "color": "E50E99" + "name": "stale", + "color": "ededed" } ] }, { - "id": "I_kwDOE8Qh3857KYQc", - "title": "Add input document for AsyncAPI", + "id": "I_kwDOCHlHJM58YMi8", + "title": "Improve arborist (npm installation) to have no hacks", "isAssigned": false, - "resourcePath": "/asyncapi/modelina/issues/1722", + "resourcePath": "/asyncapi/generator/issues/1102", + "repo": "asyncapi/generator", + "author": "derberg", + "area": "javascript", + "labels": [ + { + "name": "enhancement", + "color": "a2eeef" + } + ] + }, + { + "id": "I_kwDOE8Qh3857Kllp", + "title": "Add loading animation for when playground generate models ", + "isAssigned": true, + "resourcePath": "/asyncapi/modelina/issues/1725", "repo": "asyncapi/modelina", "author": "jonaslagoni", "area": "Unknown", @@ -370,12 +509,8 @@ "color": "a2eeef" }, { - "name": "stale", - "color": "ededed" - }, - { - "name": "📑 docs", - "color": "E50E99" + "name": "website", + "color": "57A793" } ] }, @@ -406,18 +541,27 @@ { "name": "enhancement", "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" } ] }, { - "id": "I_kwDODou01c531nlO", - "title": "Misalignment of Code Editor Highlight Box", - "isAssigned": true, - "resourcePath": "/asyncapi/studio/issues/861", - "repo": "asyncapi/studio", - "author": "princerajpoot20", + "id": "I_kwDOFDnrNc50wZMh", + "title": "Add support for proxy", + "isAssigned": false, + "resourcePath": "/asyncapi/cli/issues/862", + "repo": "asyncapi/cli", + "author": "mamyn0va", "area": "typescript", - "labels": [] + "labels": [ + { + "name": "enhancement", + "color": "a2eeef" + } + ] }, { "id": "I_kwDOCoBobc5zovn3", @@ -431,6 +575,10 @@ { "name": "bug", "color": "d73a4a" + }, + { + "name": "stale", + "color": "ededed" } ] }, @@ -454,21 +602,36 @@ ] }, { - "id": "I_kwDODwv8N85yh95N", - "title": "would be nice if venue from past events is grayed out", + "id": "I_kwDOFDnrNc5xaTa3", + "title": "Parallel execution command asyncapi generate got error", "isAssigned": false, - "resourcePath": "/asyncapi/conference-website/issues/208", - "repo": "asyncapi/conference-website", - "author": "derberg", - "area": "javascript", + "resourcePath": "/asyncapi/cli/issues/814", + "repo": "asyncapi/cli", + "author": "Zacama", + "area": "Unknown", "labels": [ { - "name": "enhancement", - "color": "a2eeef" + "name": "bug", + "color": "d73a4a" }, { - "name": "Hacktoberfest", - "color": "FF8AE2" + "name": "stale", + "color": "ededed" + } + ] + }, + { + "id": "I_kwDOFDnrNc5wmQBl", + "title": "Need to Consider the Case Senstive feature in CLI while creating new file.", + "isAssigned": false, + "resourcePath": "/asyncapi/cli/issues/790", + "repo": "asyncapi/cli", + "author": "AayushSaini101", + "area": "typescript", + "labels": [ + { + "name": "enhancement", + "color": "a2eeef" } ] }, @@ -484,6 +647,10 @@ { "name": "bug", "color": "d73a4a" + }, + { + "name": "stale", + "color": "ededed" } ] }, @@ -568,6 +735,10 @@ "author": "CynthiaPeter", "area": "docs", "labels": [ + { + "name": "stale", + "color": "ededed" + }, { "name": "📑 docs", "color": "E50E99" @@ -586,13 +757,17 @@ { "name": "enhancement", "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" } ] }, { "id": "I_kwDOBW5R_c5eFaBF", "title": "Add proper dropdowns to the Filters Select Menu", - "isAssigned": false, + "isAssigned": true, "resourcePath": "/asyncapi/website/issues/1318", "repo": "asyncapi/website", "author": "akshatnema", @@ -662,25 +837,10 @@ { "name": "enhancement", "color": "a2eeef" - } - ] - }, - { - "id": "I_kwDOBW5R_c5dfidP", - "title": "docs: new style guide - Glossary", - "isAssigned": true, - "resourcePath": "/asyncapi/website/issues/1294", - "repo": "asyncapi/website", - "author": "alequetzalli", - "area": "docs", - "labels": [ + }, { "name": "stale", "color": "ededed" - }, - { - "name": "📑 docs", - "color": "E50E99" } ] }, @@ -764,6 +924,25 @@ } ] }, + { + "id": "I_kwDOFiHaLM5DeQ4y", + "title": "Add support for HTML output", + "isAssigned": false, + "resourcePath": "/asyncapi/diff/issues/85", + "repo": "asyncapi/diff", + "author": "aayushmau5", + "area": "Unknown", + "labels": [ + { + "name": "enhancement", + "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" + } + ] + }, { "id": "I_kwDOBW5R_c48lGJg", "title": "Add visual on the \"generator\" and maybe others....", @@ -771,7 +950,7 @@ "resourcePath": "/asyncapi/website/issues/403", "repo": "asyncapi/website", "author": "boyney123", - "area": "typescript", + "area": "design", "labels": [ { "name": "enhancement", @@ -795,6 +974,10 @@ { "name": "enhancement", "color": "a2eeef" + }, + { + "name": "stale", + "color": "ededed" } ] } diff --git a/jest.config.js b/jest.config.js index 25c7865434ed..39211f19dc49 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,10 @@ module.exports = { verbose: true, collectCoverage: true, + coverageReporters: ['text', 'lcov', 'json-summary'], + coverageDirectory: 'coverage', collectCoverageFrom: ['scripts/**/*.js'], + coveragePathIgnorePatterns: ['scripts/compose.js'], // To disallow netlify edge function tests from running testMatch: ['**/tests/**/*.test.*', '!**/netlify/**/*.test.*'], -}; +}; \ No newline at end of file diff --git a/markdown/blog/2022Q1-summary.md b/markdown/blog/2022Q1-summary.md index 800fafb39ea3..7d4393219071 100644 --- a/markdown/blog/2022Q1-summary.md +++ b/markdown/blog/2022Q1-summary.md @@ -120,10 +120,10 @@ Success with OpenForce was followed by the unexpected announcement that AsyncAPI }} /> -An amazing success for [Alejandra Quetzalli](https://twitter.com/QuetzalliAle) and an excellent opportunity for the AsyncAPI Initiative to improve its documentation big time! -On May 16, we will announce the names of six interns we want to hire to work on two different projects to have better docs. Alejandra leads a super challenging task to interview as many candidates as possible (around 150!). Keep your fingers crossed. +An amazing success for [Quetzalli Writes][quetzalliwrites-xcom] and an excellent opportunity for the AsyncAPI Initiative to improve its documentation big time! +On May 16, we will announce the names of six interns we want to hire to work on two different projects to have better docs. Quetzalli leads a super challenging task to interview as many candidates as possible (around 150!). Keep your fingers crossed. -Alejandra and I will be mentors for our GSoD interns in the following months. Stay tuned to watch the progress. +Quetzalli and I will be mentors for our GSoD interns in the following months. Stay tuned to watch the progress. ### AsyncAPI Mentorship @@ -147,7 +147,7 @@ One of our missions is to have kick-ass documentation. Easy, right? Writing docs is easy, just like writing code (at least in my opinion :stuck_out_tongue_winking_eye:). Well, we all know the devil is hidden in details. Details like gathering requirements, figuring out architecture, and making sure you have a well-motivated group of people working on it. And last but not least, make sure the community can easily share feedback on your work transparently. -I wrote already about [Alejandra Quetzalli](https://twitter.com/QuetzalliAle) and the efforts to get AsyncAPI into GSoD. Getting a well-motivated group of people to work on docs, checked. :white_check_mark: +I wrote already about [Quetzalli Writes][quetzalliwrites-xcom] and the efforts to get AsyncAPI into GSoD. Getting a well-motivated group of people to work on docs, checked. :white_check_mark: Our [new docs information architecture is almost here too](https://github.com/asyncapi/website/pull/601). I think we can say "checked" :white_check_mark: to this one too. @@ -164,11 +164,14 @@ Since this week, we can also say "checked" :white_check_mark: to the idea of **g Each documentation page has a dedicated feedback form that one can fill in anonymously. The form injects the feedback into a [docs-related GitHub Discussion like this example](https://github.com/asyncapi/community/discussions/340). Huge applause to: -- [Alejandra Quetzalli](https://twitter.com/QuetzalliAle) for leading the change +- [Quetzalli Writes][quetzalliwrites-xcom] for leading the change - [Missy Turco](https://twitter.com/missyturco) for amazing support with design - [Maciej Urbanczyk](https://github.com/magicmatatjahu) for detailed review - [Akshat Nema](https://twitter.com/AksNema) for implementation. Akshat demonstrated a lot of patience here. As an individual contributor, he waited for the merge for quite some time. There was a long discussion, many parties involved. Many contributors lost interest in such long-running PRs. Not Akshat! :muscle: -Anyway, I recommend you follow [Alejandra](https://twitter.com/QuetzalliAle) and her [regular docs-related updates](https://gist.github.com/alequetzalli). +Anyway, I recommend you follow [Quetzalli][quetzalliwrites-xcom] and her [regular docs-related updates][quetzalliwrites-gist]. > Photo by Mitchell Luo on Unsplash + +- [quetzalliwrites-xcom]: https://x.com/quetzalliwrites +- [quetzalliwrites-gist]: https://gist.github.com/quetzalliwrites \ No newline at end of file diff --git a/markdown/blog/2023-April-docs-report.md b/markdown/blog/2023-April-docs-report.md index e2df7bbe2ed1..74c321547e5a 100644 --- a/markdown/blog/2023-April-docs-report.md +++ b/markdown/blog/2023-April-docs-report.md @@ -7,10 +7,10 @@ tags: - Communication cover: /img/posts/2023-april-docs-report.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ -excerpt: In April 2023, the AsyncAPI documentation experienced significant growth with 8,889 sessions and 4,575 unique users, including 2,895 new users. + - name: Quetzalli Writes + photo: /img/avatars/canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ + byline: In April 2023, the AsyncAPI documentation experienced significant growth with 8,889 sessions and 4,575 unique users, including 2,895 new users. --- import ContributionNotes from '@/assets/docs/fragments/contribution-notes.md'; @@ -23,21 +23,21 @@ In April 2023, the AsyncAPI documentation experienced significant growth with ** We are thrilled to introduce this year's selected technical writing candidates for the 2023 Google Season of Docs (GSoD) at AsyncAPI! ### 2023 GSoD Accepted Technical Writer Candidates -Alejandra Quetzalli has chosen four outstanding candidates to collaborate with us for GSoD this year: [Mahfuza](https://github.com/mhmohona), [Bhaswati](https://github.com/BhaswatiRoy), [Rohit](https://github.com/TRohit20), and [Hridyesh](https://github.com/kakabisht). +Quetzalli Writes has chosen four outstanding candidates to collaborate with us for GSoD this year: [Mahfuza](https://github.com/mhmohona), [Bhaswati](https://github.com/BhaswatiRoy), [Rohit](https://github.com/TRohit20), and [Hridyesh](https://github.com/kakabisht). ### Overview of the LIVE Writing/Editing Interviews -During the LIVE interview session, Alejandra divided the exercises into two parts: writing and editing. Candidates were given a document and asked to identify issues and potential solutions, then rewrite or edit the document as needed. Some candidates faced challenges with staying focused on writing, while others struggled to generate ideas due to nerves or the live format of the exercise. A few candidates had difficulty spotting errors and completing the editing task. +During the LIVE interview session, Quetzalli divided the exercises into two parts: writing and editing. Candidates were given a document and asked to identify issues and potential solutions, then rewrite or edit the document as needed. Some candidates faced challenges with staying focused on writing, while others struggled to generate ideas due to nerves or the live format of the exercise. A few candidates had difficulty spotting errors and completing the editing task. -However, Alejandra did not disqualify candidates who experienced nerves, writer's block, or had limited editing skills. Instead, she guided them with questions and suggestions, encouraging them to search for answers online during the call. The main objective was to evaluate the candidates' problem-solving skills, ability to accept feedback, and integrate suggestions for improvement. The following sections outline the writing and editing exercises and the selection criteria for the candidates. +However, Quetzalli did not disqualify candidates who experienced nerves, writer's block, or had limited editing skills. Instead, she guided them with questions and suggestions, encouraging them to search for answers online during the call. The main objective was to evaluate the candidates' problem-solving skills, ability to accept feedback, and integrate suggestions for improvement. The following sections outline the writing and editing exercises and the selection criteria for the candidates. #### The Writing Part -For the writing exercise, Alejandra utilized [an old commit from the 2022 GSoD project](https://github.com/asyncapi/website/pull/1025/commits/1f1fe7dc643434d8ab24a877ee4e2af38a0f330b), which contained numerous errors for candidates to identify and fix. Some examples of these errors include: +For the writing exercise, Quetzalli utilized [an old commit from the 2022 GSoD project](https://github.com/asyncapi/website/pull/1025/commits/1f1fe7dc643434d8ab24a877ee4e2af38a0f330b), which contained numerous errors for candidates to identify and fix. Some examples of these errors include: - Multiple preview deployment links instead of live links to actual documentation. - Content more appropriate for the `Background context` section crammed into the `Introduction`. - Inadequate tutorial steps that lacked sufficient technical background context for first-time users. #### The Editing Part -For the editing exercise, Alejandra used the same [old commit from the 2022 GSoD project](https://github.com/asyncapi/website/pull/1025/commits/1f1fe7dc643434d8ab24a877ee4e2af38a0f330b) for some candidates. For those who progressed further during the writing exercise, she provided a second block of content to edit that was unformatted and contained repeated mistakes. The purpose of this unformatted text was to assess the candidates' ability to: +For the editing exercise, Quetzalli used the same [old commit from the 2022 GSoD project](https://github.com/asyncapi/website/pull/1025/commits/1f1fe7dc643434d8ab24a877ee4e2af38a0f330b) for some candidates. For those who progressed further during the writing exercise, she provided a second block of content to edit that was unformatted and contained repeated mistakes. The purpose of this unformatted text was to assess the candidates' ability to: - Research terms like CLI, Node.js, macOS, etc., instead of assuming they know the correct spelling. - Use the `replace all` keyboard shortcut to fix repeated mistakes. - Think to check and confirm the correct spelling of AsyncAPI during an AsyncAPI interview. @@ -55,7 +55,7 @@ The following factors were considered when assessing candidates: ## Spec 3.0 Release AsyncAPI community members, including Jonas Lagoni and Sergio Moya, have started the process of identifying Spec 3.0 Subject Matter Experts (SMEs) who can provide the necessary background context for our technical writers to begin updating our documentation. -While Alejandra and Sergio are currently the only ones sharing the Spec 3.0 **writing work**, we're actively seeking more contributors to join their writing efforts. +While Quetzalli and Sergio are currently the only ones sharing the Spec 3.0 **writing work**, we're actively seeking more contributors to join their writing efforts. The following Spec 3.0 release changes require documentation updates: - [Request/reply](https://github.com/asyncapi/spec/pull/847) diff --git a/markdown/blog/2023-Q1-docs-report.md b/markdown/blog/2023-Q1-docs-report.md index 1c90d29c37ed..ed550e01b600 100644 --- a/markdown/blog/2023-Q1-docs-report.md +++ b/markdown/blog/2023-Q1-docs-report.md @@ -7,9 +7,9 @@ tags: - Communication cover: /img/posts/Q1-asyncapidocs-report.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ + - name: Quetzalli Writes + photo: /img/avatars/canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ byline: During Q1 2023, AsyncAPI Docs had 26,875 sessions and 13,506 unique users! excerpt: Did you know that you can contribute Docs to AsyncAPI as well? Code isn't the only way to contribute to OSS; Dev Docs are a huge help that benefit the entire OSS ecosystem. --- @@ -89,9 +89,9 @@ style N fill:#T3EFB8,stroke:#000000,stroke-width:2px; - $350 for participant swag+shipping costs ### GSoD technical writer applications are open -Alejandra Quetzalli is currently accepting applications for technical writers who want to participate in GSoD 2023 at AsyncAPI. **The deadline for applications is April 15.** Interested participants must complete this [AsyncAPI GSoD 2023 written application available in a public Google form](https://forms.gle/Lb4ELK78R1WY2z9MA). We have received 18 applications to date. +Quetzalli Writes is currently accepting applications for technical writers who want to participate in GSoD 2023 at AsyncAPI. **The deadline for applications is April 15.** Interested participants must complete this [AsyncAPI GSoD 2023 written application available in a public Google form](https://forms.gle/Lb4ELK78R1WY2z9MA). We have received 18 applications to date. -If selected, the next step in the process for candidates will be to receive a direct follow-up message (DM) on AsyncAPI Slack and an email from Alejandra to schedule a LIVE editing and writing exercise interview. Up to 6 technical writers will be selected no later than April 21st. +If selected, the next step in the process for candidates will be to receive a direct follow-up message (DM) on AsyncAPI Slack and an email from Quetzalli to schedule a LIVE editing and writing exercise interview. Up to 6 technical writers will be selected no later than April 21st. ```mermaid graph TD diff --git a/markdown/blog/2023-Q4-docs-report.md b/markdown/blog/2023-Q4-docs-report.md index 8baaf02d3c04..b3c4ec8c7398 100644 --- a/markdown/blog/2023-Q4-docs-report.md +++ b/markdown/blog/2023-Q4-docs-report.md @@ -7,9 +7,9 @@ tags: - Communication cover: /img/posts/2023-Q4-docs-report/Q4-docs-diagram-summary.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ + - name: Quetzalli Writes + photo: /img/avatars/canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ byline: During Q4 2023, AsyncAPI Docs had a total of 19,267 sessions and 6,447 unique users. excerpt: In Q4, AsyncAPI docs had primary engagement across the tutorials and reference content buckets. --- @@ -18,7 +18,7 @@ import ContributionNotes from '@/assets/docs/fragments/contribution-notes.md'; import TalkToMe from '@/assets/docs/fragments/talk-to-me.md'; # AsyncAPI Documentation Report - Q4 2023 -As a core maintainer of AsyncAPI Docs, I (Alejandra Quetzalli) volunteer to write periodic updates about the AsyncAPI Docs ecosystem. The goal is to keep the community informed about what's going on in docs and how docs contributors collaborate with other areas in AsyncAPI Initiative. +As a core maintainer of AsyncAPI Docs, I (Quetzalli Writes) volunteer to write periodic updates about the AsyncAPI Docs ecosystem. The goal is to keep the community informed about what's going on in docs and how docs contributors collaborate with other areas in AsyncAPI Initiative. ## Overview During Q4 2023, AsyncAPI Docs had a total of **19,267 sessions** and **6,447 unique users**. diff --git a/markdown/blog/2023-july-docs-report.md b/markdown/blog/2023-july-docs-report.md index 2180653cdf0b..3f0e8ffb8573 100644 --- a/markdown/blog/2023-july-docs-report.md +++ b/markdown/blog/2023-july-docs-report.md @@ -7,10 +7,10 @@ tags: - Communication cover: /img/posts/2023-july-docs-report.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ -excerpt: In July 2023, the AsyncAPI documentation had 7,443 sessions and 3,895 unique users, including 2,345 new users. + - name: Quetzalli Writes + photo: /img/avatars/canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ + byline: In July 2023, the AsyncAPI documentation had 7,443 sessions and 3,895 unique users, including 2,345 new users. --- import ContributionNotes from '@/assets/docs/fragments/contribution-notes.md'; diff --git a/markdown/blog/2023-june-docs-report.md b/markdown/blog/2023-june-docs-report.md index 235b5cdb66c8..d9ddc6b76455 100644 --- a/markdown/blog/2023-june-docs-report.md +++ b/markdown/blog/2023-june-docs-report.md @@ -7,10 +7,10 @@ tags: - Communication cover: /img/posts/2023-june-docs-report.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ -excerpt: In June 2023, the AsyncAPI documentation had 7,827 sessions and 4,203 unique users, including 2,566 new users. + - name: Quetzalli Writes + photo: /img/avatars/canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ + byline: In June 2023, the AsyncAPI documentation had 7,827 sessions and 4,203 unique users, including 2,566 new users. --- import ContributionNotes from '@/assets/docs/fragments/contribution-notes.md'; diff --git a/markdown/blog/2023-may-docs-report.md b/markdown/blog/2023-may-docs-report.md index 7d3097a73273..d2c73afe3e03 100644 --- a/markdown/blog/2023-may-docs-report.md +++ b/markdown/blog/2023-may-docs-report.md @@ -7,10 +7,10 @@ tags: - Communication cover: /img/posts/2023-may-docs-report.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ -excerpt: In May 2023, the AsyncAPI documentation had 9,453 sessions and 4,876 unique users, including 2,895 new users. + - name: Quetzalli Writes + photo: /img/avatars/canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ + byline: In May 2023, the AsyncAPI documentation had 9,453 sessions and 4,876 unique users, including 2,895 new users. --- import ContributionNotes from '@/assets/docs/fragments/contribution-notes.md'; diff --git a/markdown/blog/2024-Q1-docs-report.md b/markdown/blog/2024-Q1-docs-report.md index 3f5950eeedae..abac050f3e07 100644 --- a/markdown/blog/2024-Q1-docs-report.md +++ b/markdown/blog/2024-Q1-docs-report.md @@ -7,15 +7,15 @@ tags: - Communication cover: /img/posts/2024-Q1-docs-report/2024-Q1-docs-report.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ + - name: Quetzalli Writes + photo: /img/avatars/canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ byline: During Q1 2024, AsyncAPI docs had a total of 26,923 sessions and 8,128 unique users. excerpt: During Q1 2024, AsyncAPI docs had a total of 26,923 sessions and 8,128 unique users. --- # AsyncAPI Documentation Report - Q1 2024 -As a core maintainer of AsyncAPI Docs, I (Alejandra Quetzalli) volunteer to write periodic updates about the AsyncAPI Docs ecosystem. The goal is to keep the community informed about what's going on in docs and how docs contributors collaborate with other areas in AsyncAPI Initiative. +As a core maintainer of AsyncAPI Docs, I (Quetzalli Writes) volunteer to write periodic updates about the AsyncAPI Docs ecosystem. The goal is to keep the community informed about what's going on in docs and how docs contributors collaborate with other areas in AsyncAPI Initiative. ## Overview During Q1 2024, AsyncAPI Docs had a total of **26,923 sessions** and **8,128 unique users**. Our tutorials content bucket garnered the highest visitor count, indicating strong engagement. Additionally, our newer content bucket for migrations attracted a notable influx of new users, showcasing promising growth. diff --git a/markdown/blog/2024-february-summary.md b/markdown/blog/2024-february-summary.md index 2ee2a4026f5d..7bf7ba79e025 100644 --- a/markdown/blog/2024-february-summary.md +++ b/markdown/blog/2024-february-summary.md @@ -13,7 +13,7 @@ authors: excerpt: 'Community update for February' --- -We are starting the year off with a bang as we got accepted to the [Google Summer of Code 2024](https://summerofcode.withgoogle.com/programs/2024/organizations/asyncapi) program after two years of rejections. It is an incredible achievement for the community, and we wouldn't have done it without our Doc's Lead, [Alejandra Quetzalli](https://www.linkedin.com/in/alejandra-quetzalli/), who crafted an excellent proposal, and [Elegbede Azeez](https://twitter.com/_acebuild). We are very excited to have received this opportunity, and you can read [the AsyncAPI Project Ideas Page](https://github.com/asyncapi/community/blob/master/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md) for in-depth details on participating projects. +We are starting the year off with a bang as we got accepted to the [Google Summer of Code 2024](https://summerofcode.withgoogle.com/programs/2024/organizations/asyncapi) program after two years of rejections. It is an incredible achievement for the community, and we wouldn't have done it without our Doc's Lead, [Quetzalli Writes](https://www.linkedin.com/in/quetzalli-writes), who crafted an excellent proposal, and [Elegbede Azeez](https://twitter.com/_acebuild). We are very excited to have received this opportunity, and you can read [the AsyncAPI Project Ideas Page](https://github.com/asyncapi/community/blob/master/mentorship/summerofcode/2024/asyncapi-gsoc-ideas-page.md) for in-depth details on participating projects. ## AsyncAPI Conf on Tour 2024 The planning of AACoT'24 is already underway as we prepare for our first conference in Helsinki on the 28th - 29th of May. We are putting in the final touches to update our conference website with the latest details, and we will soon announce the Call for Speakers. In the meantime, be sure to start crafting those proposals and get ready to share your expertise with the community. diff --git a/markdown/blog/2024-october-summary.md b/markdown/blog/2024-october-summary.md new file mode 100644 index 000000000000..88d9e7b9e36a --- /dev/null +++ b/markdown/blog/2024-october-summary.md @@ -0,0 +1,155 @@ +--- +title: "October Community Update And AsyncAPI Online Conference 2024" +date: 2024-11-07T06:00:00+01:00 +type: Communication +tags: + - Project Status +cover: /img/posts/2024-blog-banner/blog-banner-october.webp +authors: + - name: Thulisile Sibanda + photo: /img/avatars/thulieblack.webp + link: https://www.linkedin.com/in/v-thulisile-sibanda/ + byline: AsyncAPI Community Manager +excerpt: 'October Community Update And Online Conference Summary' +featured: true +--- + +October marked the third AsyncAPI Conference, this time an online edition. As someone fortunate enough to be extensively involved in organizing the conferences, I saw the challenges that came with in-person events. +It gave me the idea to propose bringing back the online edition as part of the AsyncAPI Conference brand. We're glad and excited that we received positive results, with over **360 views** from attendees who watched and engaged with us. + +I want to express my gratitude to our financial sponsors, [Gravitee.io](https://www.gravitee.io/) and [Postman](https://www.postman.com/), as well as to the speakers for their engaging talks and the conference volunteers (*be sure to check out the [Hall of Fame](#asyncapi-conference-hall-of-fame) section*). [I encourage you to watch the recorded sessions if you missed the event](https://www.youtube.com/watch?v=XGn8v0yBfOI&t=1895s). A playlist of the individual talks and slides will also be available on the [conference website](https://conference.asyncapi.com/). + + +## AsyncAPI Community Building and Maintenance Goals Proposal 2025 +As we approach the end of 2024, we have a proposal outlining the community building and maintenance goals we should prioritize in 2025. Please note that the AsyncAPI community manager will manage and oversee these goals. The goals are poised to address some of the challenges our community is facing, such as the limited number of maintainers and the lack of onboarding materials, and pave the way for a more vibrant and thriving community. + +I encourage everyone to participate in the open discussion and share your thoughts and solutions. [Please take a moment to review the open PR related to the AsyncAPI Community Building Goals for 2025](https://github.com/asyncapi/community/pull/1575). + +## AsyncAPI Conferences + +### AsyncAPI Conf in Paris 2024 +We are excited to announce that the final AsyncAPI Conference will be held on December 5th in Paris, thanks to the amazing team at APIdays. [The draft agenda is now available on our conference website](https://conference.asyncapi.com/venue/Paris), and the lineup of speakers looks fantastic. + +Additionally, we have a limited number of free community tickets available. To register, please visit the [AsyncAPI Conference website](https://conference.asyncapi.com/). + +**Note**: *When getting your tickets, please choose quantity one (1) of the Regular ticket and click the blue continue button to get your free ticket.* + +### AsyncAPI Conf 2025 Venues +The discussion for potential venues for the AsyncAPI Conference 2025 is underway, and we invite everyone to participate. Please share your thoughts and suggestions for locations for the upcoming year in the [AsyncAPI Conference 2025 open discussion](https://github.com/asyncapi/community/issues/1571). Your input is valuable to us! + +### AsyncAPI Conference Rebranding +In 2023, we successfully launched the AsyncAPI Conf on Tour (AACoT). We followed our vision to host events in various locations, allowing us to connect with the community in multiple cities. As we expand our reach and grow as a brand, we believe it is necessary to drop "on Tour" and simply refer to our events as the AsyncAPI Conf/Conference moving forward. +Although we are simplifying the name, we remain committed to hosting conferences worldwide and enhancing our conference brand's visibility. [We welcome your thoughts on this rebranding in the AsyncAPI Conf rebranding discussion](https://github.com/orgs/asyncapi/discussions/1578). + +### AsyncAPI at FOSDEM 2025 + +Are you attending FOSDEM and interested in speaking? AsyncAPI will participate in the FOSDEM conference as part of the `APIs: GraphQL, OpenAPI, AsyncAPI, and Friends` track. +[The Call for Participation is now open](https://pretalx.fosdem.org/fosdem-2025/cfp), and we encourage everyone in the community to apply. Deadline for talk submissions is December 15, 2024. This is another great opportunity to meet fellow community members! + +## Should AsyncAPI Initiative Endorse The United Nations Global Digital Compact? +The United Nations General Assembly has approved the Global Digital Compact, a commitment to ensure digital technologies support sustainable development and human rights. +AsyncAPI is one of the key standards for event-driven architectures, and our Executive Director, [Lukasz Gornicki](https://www.linkedin.com/in/lukasz-gornicki-a621914), [has called for a vote](https://github.com/asyncapi/community/issues/1577) to determine whether we, as the AsyncAPI Initiative, should endorse the Compact which aligns with our values of open-source software and collaboration. [We encourage all community members to participate in the vote and share their thoughts on this important decision](https://github.com/asyncapi/community/issues/1577). + +## Spec x Tooling +We're thrilled to announce that Glee has been migrated to a monorepo structure and is moving its core functionality to a new package called Gleequore, inspired by the Italian word "cuore," which means "heart." +This change will allow developers to leverage Glee's features without using the full framework, facilitating integration with platforms like Remix and Next.js. +We're also working on creating a "Glee for the browser" by extracting protocol adapters to support HTTP and WebSocket clients, overcoming current limitations. Kudos to [Fran Mendez](https://www.linkedin.com/in/fmvilas) and all the Glee maintainers for their amazing work! + +[The packages are now available on the Glee repo](https://github.com/asyncapi/glee/tree/master/packages); be sure to try it out. + +## AsyncAPI Mascot Brand Refresh + +As part of the AsyncAPI Bounty Program, we have a task to rebrand the Eve and Chan mascots. The designs look amazing so far! + +
+ +[Please join the discussion and share your thoughts on the progress made on the brand refresh mascot issue](https://github.com/asyncapi/brand/issues/12). + +## AsyncAPI Conference Hall of Fame +I want to extend a heartfelt thank you to the incredible volunteers who generously dedicated their skills and time to ensure the success of the Online Conference. From developers and designers to those working both on-stage and off-stage, their efforts made the planning and execution of the event seamless. + + + +## Coming in November +- **AsyncAPI Community Updates Newsletter** - The November Edition issue will arrive in your inbox on the 8th. [Ensure you subscribe to the AsyncAPI Newsletter](https://www.asyncapi.com/newsletter); you don't want to miss out. diff --git a/markdown/blog/2024-september-summary-and-london.md b/markdown/blog/2024-september-summary-and-london.md index cbac4f5563ed..0e965cefe356 100644 --- a/markdown/blog/2024-september-summary-and-london.md +++ b/markdown/blog/2024-september-summary-and-london.md @@ -11,7 +11,6 @@ authors: link: https://www.linkedin.com/in/v-thulisile-sibanda/ byline: AsyncAPI Community Manager excerpt: 'September Community Update and London Conference Highlights' -featured: true --- In September, we had our second in-person AsyncAPI conference after Helsinki; read all about it in the [AsyncAPI Helsinki Conference update](https://www.asyncapi.com/blog/helsinki-and-community). diff --git a/markdown/blog/april-2023.md b/markdown/blog/april-2023.md index 5b4a0dc1be10..e37d2bacc520 100644 --- a/markdown/blog/april-2023.md +++ b/markdown/blog/april-2023.md @@ -13,7 +13,7 @@ authors: excerpt: 'April Community Update' --- -April brought ecstatic news that AsyncAPI is participating in the 2023 Google Season of Docs (GSoD). This achievement is a result of the exceptional work done by [Alejandra Quetzalli](https://www.linkedin.com/in/alejandra-quetzalli/), our lead documentation engineer and author of [Docs-as-Ecosystem: The Community Approach to Engineering](https://docsasecosystem.com/). Alejandra's contributions to the documentation process have been vital in improving the quality of AsyncAPI documentation, and her hard work has not gone unnoticed. As part of the GSoD program, Ale carefully reviewed and selected the best applicants out of the 87 applications received, and she conducted live writing/editing interviews. We are excited to welcome the five selected candidates, Mahfuza, Bhaswati, Rohit, Abhishek, and Hridyesh! We can't wait to see them contribute to AsyncAPI's documentation with Ale's guidance and mentorship. Do check out [Alejandra's Q1 AsyncAPI documentation report](https://www.asyncapi.com/blog/2023-Q1-docs-report) to learn more about our docs community's recent efforts. +April brought ecstatic news that AsyncAPI is participating in the 2023 Google Season of Docs (GSoD). This achievement is a result of the exceptional work done by [Quetzalli Writes](https://www.linkedin.com/in/quetzalli-writes/), our lead documentation engineer and author of [Docs-as-Ecosystem: The Community Approach to Engineering](https://docsasecosystem.com/). Quetzalli's contributions to the documentation process have been vital in improving the quality of AsyncAPI documentation, and her hard work has not gone unnoticed. As part of the GSoD program, Quetzalli carefully reviewed and selected the best applicants out of the 87 applications received, and she conducted live writing/editing interviews. We are excited to welcome the five selected candidates, Mahfuza, Bhaswati, Rohit, Abhishek, and Hridyesh! We can't wait to see them contribute to AsyncAPI's documentation with Quetzalli's guidance and mentorship. Do check out [Quetzalli's Q1 AsyncAPI documentation report](https://www.asyncapi.com/blog/2023-Q1-docs-report) to learn more about our docs community's recent efforts. ## AsyncAPI Bounty Program Trial We are thrilled to introduce the trial launch of the AsyncAPI Bounty Program. This program aims to express our gratitude and support to our maintainers and contributors who dedicate their time and efforts to drive the initiative forward. As part of the trial, we have selected seven projects comprising various coding, design, and technical writing tasks. We invite you to explore the [projects participating in the AsyncAPI Bounty Program trial run](https://github.com/issues?q=is%3Aopen+org%3Aasyncapi+label%3A%22bounty%22). diff --git a/markdown/blog/asyncapi-bounty-program-2024.md b/markdown/blog/asyncapi-bounty-program-2024.md index bc409d285814..bcfb5183d5d8 100644 --- a/markdown/blog/asyncapi-bounty-program-2024.md +++ b/markdown/blog/asyncapi-bounty-program-2024.md @@ -11,7 +11,6 @@ authors: link: https://github.com/aeworxet byline: Bounty Program Coordinator excerpt: 'Annual update on the quarterly published set of tasks that are currently in demand among AsyncAPI Maintainers, targeted at engineers of Middle and Senior professional levels.' -featured: true --- ## AsyncAPI Bounty Program diff --git a/markdown/blog/beyond-boundaries.md b/markdown/blog/beyond-boundaries.md index 155b85db0a85..3160b7e8fd49 100644 --- a/markdown/blog/beyond-boundaries.md +++ b/markdown/blog/beyond-boundaries.md @@ -74,7 +74,7 @@ Comparing this to the previous year, we are proud of this current trajectory and | 1 | [Add help/\{command} endpoint](https://github.com/asyncapi/server-api/issues/144) | [David Pereira](https://github.com/BOLT04) | Engineering | [Prince Rajpoot](https://github.com/princerajpoot20) | | 2 | [Website UI Kit design/dev project](https://github.com/asyncapi/design-system/issues/4) | [AceTheCreator](https://github.com/AceTheCreator) | Design | [AISHAT MUIBUDEEN](https://github.com/Mayaleeeee) | | 3 | [MVP integration of extensions catalog with AsyncAPI tools](https://github.com/asyncapi/extensions-catalog/issues/78) | [Lukasz Gornicki](https://github.com/derberg) | Engineering | [Sambhav Gupta](https://github.com/sambhavgupta0705) | -| 4 | [Documenting how different protocols work with AsyncAPI](https://github.com/orgs/asyncapi/discussions/533) | [Alejandra Quetzalli](https://github.com/alequetzalli) | Documentation | [Cynthia Peter](https://github.com/CynthiaPeter), [Arya Gupta](https://github.com/Arya-Gupta), [Joy Almeida](https://github.com/J0SAL), [Vaishnavi Nandakumar](https://github.com/VaishnaviNandakumar)| +| 4 | [Documenting how different protocols work with AsyncAPI](https://github.com/orgs/asyncapi/discussions/533) | [Quetzalli Writes](https://github.com/quetzalliwrites) | Documentation | [Cynthia Peter](https://github.com/CynthiaPeter), [Arya Gupta](https://github.com/Arya-Gupta), [Joy Almeida](https://github.com/J0SAL), [Vaishnavi Nandakumar](https://github.com/VaishnaviNandakumar)| | 5 | [Rewrite this template and NodeJS WS template](https://github.com/asyncapi/nodejs-template/issues/133) | [Lukasz Gornicki](https://github.com/derberg) | Engineering | [Kaushik Rishi](https://github.com/kaushik-rishi) | | 6 | [Simulator Desktop Application](https://github.com/asyncapi/community/issues/691) | [Nektarios Fifes](https://github.com/NektariosFifes) | Engineering | [Sumant Tirkey](https://github.com/SumantxD) | | 7 | [Tutorial document or separate guides for glee](https://github.com/asyncapi/glee/issues/431) | [Souvik](https://github.com/Souvikns) & [Khuda Dad Nomani](https://github.com/KhudaDad414) | Documentation | [Afzal Ansari](https://github.com/afzal442) | diff --git a/markdown/blog/changes-coming-docs.md b/markdown/blog/changes-coming-docs.md index cd2291fa5152..b35a280c20ab 100644 --- a/markdown/blog/changes-coming-docs.md +++ b/markdown/blog/changes-coming-docs.md @@ -7,9 +7,9 @@ tags: - Announcement cover: /img/posts/changes-coming-docs/mind-map.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ + - name: Quetzalli Writes + photo: /img/avatars/canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ byline: AsyncAPI Dev Docs are getting a makeover! excerpt: Did you know that you can contribute Docs to AsyncAPI as well? Code isn't the only way to contribute to OSS; Dev Docs are a huge help that benefit the entire OSS ecosystem. --- @@ -17,13 +17,13 @@ excerpt: Did you know that you can contribute Docs to AsyncAPI as well? Code isn import ContributionNotes from '@/assets/docs/fragments/contribution-notes.md'; import TalkToMe from '@/assets/docs/fragments/talk-to-me.md'; -## 🦄 Hola, soy Alejandra Quetzalli +## 🦄 Hola, soy Quetzalli Writes ¡Hola! 😄 -AsyncAPI community, it's an absolute pleasure to meet you. My name is Alejandra. I was born and raised in México 🇲🇽, so my first language is Spanish. +AsyncAPI community, it's an absolute pleasure to meet you. My name is Quetzalli. I was born and raised in México 🇲🇽, so my first language is Spanish. -I’m a Senior Technical Writer 👩🏻‍💻 recently hired by [Postman](https://www.postman.com/alejandra-quetzalli) to focus solely on the Open-Source (OSS) [AsyncAPI initiative](https://www.asyncapi.com/) as primary owner for our AsyncAPI Dev Docs 📄 . +I’m a Senior Technical Writer 👩🏻‍💻 recently hired by Postman to focus solely on the Open-Source (OSS) [AsyncAPI initiative](https://www.asyncapi.com/) as primary owner for our AsyncAPI Dev Docs 📄 . I also recently [joined our initiative's Technical Steering Committee (TSC)](https://www.asyncapi.com/community/tsc)! The TSC is responsible for the oversight of the AsyncAPI Initiative, helping make decisions on a higher level, or when maintainers cannot find a consensus. diff --git a/markdown/blog/conference-2022.md b/markdown/blog/conference-2022.md index b6033ba376c2..6fe5bb20a286 100644 --- a/markdown/blog/conference-2022.md +++ b/markdown/blog/conference-2022.md @@ -93,11 +93,6 @@ Special thanks to Restream for supporting us with their amazing product for medi name: 'Aishat Muibudeen', avatar: 'https://avatars.githubusercontent.com/Mayaleeeee', link: 'https://github.com/Mayaleeeee' - }, - { - name: 'Alejandra Quetzalli', - avatar: 'https://avatars.githubusercontent.com/alequetzalli', - link: 'https://github.com/alequetzalli' }, { name: 'Azeez Elegbede', @@ -154,6 +149,11 @@ Special thanks to Restream for supporting us with their amazing product for medi avatar: 'https://avatars.githubusercontent.com/mcturco', link: 'https://github.com/mcturco' }, + { + name: 'Quetzalli Writes', + avatar: 'https://avatars.githubusercontent.com/quetzalliwrites', + link: 'https://github.com/quetzalliwrites' + }, { name: 'Sergio Moya', avatar: 'https://avatars.githubusercontent.com/smoya', diff --git a/markdown/blog/google-season-of-docs-2022.md b/markdown/blog/google-season-of-docs-2022.md index c83a1bcba9e8..ee7a9ecd3844 100644 --- a/markdown/blog/google-season-of-docs-2022.md +++ b/markdown/blog/google-season-of-docs-2022.md @@ -7,9 +7,9 @@ tags: - Announcement cover: /img/posts/gsod-2022/SeasonofDocs_Logo.webp authors: - - name: Alejandra Quetzalli - photo: /img/avatars/canela-ale.webp - link: https://www.linkedin.com/in/alejandra-quetzalli/ + - name: Quetzalli Writes + photo: /canela-quetzalli.webp + link: https://www.linkedin.com/in/quetzalli-writes/ byline: Our proposal? Update Docs Information Architecture excerpt: Check out the Docs project proposal we're submitting to GSoD 2022! You won't want to miss out. --- @@ -19,7 +19,7 @@ import ContributionNotes from '@/assets/docs/fragments/contribution-notes.md'; ## ¡Hola, AsyncAPI community! For today's blog post about AsyncAPI Docs 📑, I wanted to share with all technical writers about our organization’s plan for participation in `Google Season of Docs 2022 (GSoD)`. Any and all technical writers are welcome to come participate with us for GSoD 2022 season, regardless of tech background or years of experience! At AsyncAPI, we love mentoring folks who want to get involved in OSS, tech, and Docs. ❤️ -As some of you may remember from my [Gist Docs update for 31 Jan - 11 Feb 2022](https://gist.github.com/alequetzalli/94ca1ffb5d123b450501e40a4a3b56e2), I noted that GSoD 2022 was coming up and that AsyncAPI wanted to participate in the application process once it opened on February 23, 2022. +As some of you may remember from my [Gist Docs update for 31 Jan - 11 Feb 2022](https://gist.github.com/quetzalliwrites/94ca1ffb5d123b450501e40a4a3b56e2), I noted that GSoD 2022 was coming up and that AsyncAPI wanted to participate in the application process once it opened on February 23, 2022. In anticipation of this, I also created a new AsyncAPI Slack channel named `#temp-gsod-2022` that anyone can join! First, [join our Slack workspace](https://www.asyncapi.com/slack-invite) ☎️ and please respect [our slack etiquette](https://github.com/asyncapi/community/blob/master/slack-etiquette.md).🙂 Then join the `temp-gsod-2022` channel, our temporary channel to coordinate GSoC 2022 setup. I'll publish regular updates on where we are in the application process, so stay tuned as the process continues. 😄 @@ -56,7 +56,7 @@ AsyncAPI has several CLI and Tools markdown README documentation in miscellaneou In addition, we want to also target improving the [Generator tool](https://github.com/asyncapi/template-for-generator-templates) docs that are only READMEs in a repo right now. The Docs for this one tool are a big enough job to merit being our 2nd proposed project for 2022 GSoD. -We're also writing voluntary OSS bi-weekly updates via GitHub Gists to speak about the latest updates made in the AsyncAPI Docs Ecosystem. Due to our commitment to investing time in gaining interest in our community and getting Google excited about us, we've made sure to maintain updates about our `Google Season of Docs 2022` application too! In fact, you can take a look at the latest three where we made said mentions here in [AsyncAPI Docs update (31 Jan - 11 Feb 2022)](https://gist.github.com/alequetzalli/94ca1ffb5d123b450501e40a4a3b56e2), [AsyncAPI Docs update (14 Feb - 25 Feb 2022)](https://gist.github.com/alequetzalli/d34e3aececa49d10d0ddb2dc9938b477), and [AsyncAPI Docs update (28 Feb - 11 March 2022)](https://gist.github.com/alequetzalli/8f449f731b919193f4101098a69da14d). +We're also writing voluntary OSS bi-weekly updates via GitHub Gists to speak about the latest updates made in the AsyncAPI Docs Ecosystem. Due to our commitment to investing time in gaining interest in our community and getting Google excited about us, we've made sure to maintain updates about our `Google Season of Docs 2022` application too! In fact, you can take a look at the latest three where we made said mentions here in [AsyncAPI Docs update (31 Jan - 11 Feb 2022)](https://gist.github.com/quetzalliwrites/94ca1ffb5d123b450501e40a4a3b56e2), [AsyncAPI Docs update (14 Feb - 25 Feb 2022)](https://gist.github.com/quetzalliwrites/d34e3aececa49d10d0ddb2dc9938b477), and [AsyncAPI Docs update (28 Feb - 11 March 2022)](https://gist.github.com/quetzalliwrites/8f449f731b919193f4101098a69da14d). ### Measuring our Docs project’s success We will partially measure success in the Docs project by capturing specific feedback about the IA changes via our soon-to-come new [Docs Feedback card](https://github.com/asyncapi/website/issues/453). We need this specific and granular feedback to make sure we listen and make changes according to what the community requests from Docs. In previous AsyncAPI Docs Gist updates, we've mentioned that Design contributors were teaming with Docs on `/website`issue [#453](https://github.com/asyncapi/website/issues/453) for the ideation and development of our new **feedback card** that will be added at the bottom of each Docs page. What the community decided over the last 2 weeks was that the `Submit feedback` button in the card will publish the feedback anonymously via the AsyncAPI bot and create a new **GitHub Discussion** with said feedback: @@ -93,4 +93,4 @@ ___ ## Get started contributing to AsyncAPI Docs Today Last but not least, don't forget that -_-A.Q. 👩🏻‍💻 and Canela 🐕‍🦺_ \ No newline at end of file +_-Q.W. 👩🏻‍💻 and Canela 🐕‍🦺_ \ No newline at end of file diff --git a/markdown/blog/helsinki-and-community.md b/markdown/blog/helsinki-and-community.md index ffb47a8f82a7..5f1dae232259 100644 --- a/markdown/blog/helsinki-and-community.md +++ b/markdown/blog/helsinki-and-community.md @@ -11,7 +11,6 @@ authors: link: https://twitter.com/derberq byline: AsyncAPI Executive Director excerpt: 'Conferences are great. They bring communities together and give people a platform to share their experiences. But is that enough?' -featured: true --- ## How It All Started diff --git a/markdown/blog/release-notes-3.0.0.md b/markdown/blog/release-notes-3.0.0.md index 75447e635408..32a371353806 100644 --- a/markdown/blog/release-notes-3.0.0.md +++ b/markdown/blog/release-notes-3.0.0.md @@ -359,4 +359,4 @@ We have [removed the note that stated we strived to be compatible with OpenAPI w ## Acknowledgements Spec 3.0 have been a massive undertaking, so I would like to say a huge "thank you!" to everyone who has been involved; maybe you commented on your views, added to discussions, joined the live meetings, championed changes, or reviewed proposed changes; this section is for you! -Thank you, [Simon Heimler](https://github.com/Fannon), [Vladimír Gorej](https://github.com/char0n), [Fran Méndez](https://github.com/fmvilas), [Lukasz Gornicki](https://github.com/derberg), [Sergio Moya](https://github.com/smoya), [Michael Davis](https://github.com/damaru-inc), [Maciej Urbańczyk](https://github.com/magicmatatjahu), [Jesse Menning](https://github.com/jessemenning), [Heiko Henning](https://github.com/GreenRover), [Gerald Loeffler ](https://github.com/GeraldLoeffler), [c-pius](https://github.com/c-pius), [Ian Cooper](https://github.com/iancooper), [Dale Lane](https://github.com/dalelane), [Jörg Walter](https://github.com/joerg-walter-de), [Nic Townsend](https://github.com/nictownsend), [Laurent Broudoux](https://github.com/lbroudoux), [olamiral](https://github.com/olamiral), [Iván García Sainz-Aja](https://github.com/ivangsa), [Fabian Bühler](https://github.com/buehlefs), [John Fallows](https://github.com/jfallows), [Adrian Hope-Bailie](https://github.com/adrianhopebailie), [Christian (prdatur)](https://github.com/prdatur), [Karl Morrison](https://github.com/basickarl), [Javier Jiménez Roda](https://github.com/jjimenezroda), [Marek Sebera](https://github.com/smarek), [Nathanaël Lécaudé](https://github.com/natcl), [Jeremy Whitlock](https://github.com/whitlockjc), [souvik](https://github.com/Souvikns), [Animesh Kumar](https://www.github.com/animeshkumar923), [Samir AMZANI](https://github.com/Amzani), [Alejandra Quetzalli](https://github.com/alequetzalli), [Vaishnavi](https://github.com/VaishnaviNandakumar), [Mahfuza](https://github.com/mhmohona), [Bhaswati](https://github.com/BhaswatiRoy), [Cynthia Peter](https://github.com/CynthiaPeter), [Arya Gupta](https://github.com/Arya-Gupta), [Joy Almeida](https://github.com/J0SAL), [Hridyesh](https://github.com/kakabisht), [Rohit](https://github.com/TRohit20), [Ashish Padhy](https://github.com/Shurtu-gal), [Al Amin Muhammad](https://github.com/alaminthespecial), [nickshoe](https://github.com/nickshoe), [Khuda Dad Nomani](https://github.com/KhudaDad414), [V Thulisile Sibanda](https://github.com/thulieblack), [Ace](https://github.com/AceTheCreator), [Mihael Bosnjak](https://github.com/mboss37), [Sambhav Gupta](https://github.com/sambhavgupta0705), [Jonas Lagoni](https://github.com/jonaslagoni), [Afzal Ansari](https://github.com/afzal442) \ No newline at end of file +Thank you, [Simon Heimler](https://github.com/Fannon), [Vladimír Gorej](https://github.com/char0n), [Fran Méndez](https://github.com/fmvilas), [Lukasz Gornicki](https://github.com/derberg), [Sergio Moya](https://github.com/smoya), [Michael Davis](https://github.com/damaru-inc), [Maciej Urbańczyk](https://github.com/magicmatatjahu), [Jesse Menning](https://github.com/jessemenning), [Heiko Henning](https://github.com/GreenRover), [Gerald Loeffler ](https://github.com/GeraldLoeffler), [c-pius](https://github.com/c-pius), [Ian Cooper](https://github.com/iancooper), [Dale Lane](https://github.com/dalelane), [Jörg Walter](https://github.com/joerg-walter-de), [Nic Townsend](https://github.com/nictownsend), [Laurent Broudoux](https://github.com/lbroudoux), [olamiral](https://github.com/olamiral), [Iván García Sainz-Aja](https://github.com/ivangsa), [Fabian Bühler](https://github.com/buehlefs), [John Fallows](https://github.com/jfallows), [Adrian Hope-Bailie](https://github.com/adrianhopebailie), [Christian (prdatur)](https://github.com/prdatur), [Karl Morrison](https://github.com/basickarl), [Javier Jiménez Roda](https://github.com/jjimenezroda), [Marek Sebera](https://github.com/smarek), [Nathanaël Lécaudé](https://github.com/natcl), [Jeremy Whitlock](https://github.com/whitlockjc), [souvik](https://github.com/Souvikns), [Animesh Kumar](https://www.github.com/animeshkumar923), [Samir AMZANI](https://github.com/Amzani), [Quetzalli Writes](https://github.com/quetzalliwrites), [Vaishnavi](https://github.com/VaishnaviNandakumar), [Mahfuza](https://github.com/mhmohona), [Bhaswati](https://github.com/BhaswatiRoy), [Cynthia Peter](https://github.com/CynthiaPeter), [Arya Gupta](https://github.com/Arya-Gupta), [Joy Almeida](https://github.com/J0SAL), [Hridyesh](https://github.com/kakabisht), [Rohit](https://github.com/TRohit20), [Ashish Padhy](https://github.com/Shurtu-gal), [Al Amin Muhammad](https://github.com/alaminthespecial), [nickshoe](https://github.com/nickshoe), [Khuda Dad Nomani](https://github.com/KhudaDad414), [V Thulisile Sibanda](https://github.com/thulieblack), [Ace](https://github.com/AceTheCreator), [Mihael Bosnjak](https://github.com/mboss37), [Sambhav Gupta](https://github.com/sambhavgupta0705), [Jonas Lagoni](https://github.com/jonaslagoni), [Afzal Ansari](https://github.com/afzal442) \ No newline at end of file diff --git a/markdown/blog/socketio-part1.md b/markdown/blog/socketio-part1.md index a3894c7c2ba2..323ec7fe94df 100644 --- a/markdown/blog/socketio-part1.md +++ b/markdown/blog/socketio-part1.md @@ -58,6 +58,6 @@ Note that the scope of this documentation is limited to the interface between th Stay tuned for the next (and most exciting) part of this series which adds AsyncAPI into the equation. In the meantime, you can check out [Asynction](https://github.com/dedoussis/asynction), a python Socket.IO micro-framework driven by the AsyncAPI specification. -_Special thanks to [derberq](https://twitter.com/derberq) and [alequetzalli](https://twitter.com/QuetzalliAle) for reviewing this post!_ 🙏 +_Special thanks to [derberq](https://twitter.com/derberq) and [quetzalliwrites](https://x.com/quetzalliwrites) for reviewing this post!_ 🙏 > Photo by Matt Howard on Unsplash diff --git a/markdown/blog/socketio-part2.md b/markdown/blog/socketio-part2.md index 8a31af96d2af..93287087fed7 100644 --- a/markdown/blog/socketio-part2.md +++ b/markdown/blog/socketio-part2.md @@ -503,6 +503,6 @@ Any piece of feedback would be much appreciated. For any questions, comments, or corrections, feel free to reach out to me at [dimitrios@dedouss.is](mailto:dimitrios@dedouss.is). -_A special shout out to [derberq](https://twitter.com/derberq), [alequetzalli](https://twitter.com/QuetzalliAle), and the wider AsyncAPI community for being particularly helpful and responsive._ 🙇 +_A special shout out to [derberq](https://twitter.com/derberq), [quetzalliwrites](https://x.com/quetzalliwrites), and the wider AsyncAPI community for being particularly helpful and responsive._ 🙇 > Photo by Matt Howard on Unsplash diff --git a/markdown/docs/concepts/application.md b/markdown/docs/concepts/application.md index 1d9c4634a944..63bc5d75757e 100644 --- a/markdown/docs/concepts/application.md +++ b/markdown/docs/concepts/application.md @@ -5,12 +5,12 @@ weight: 23 ## What is an application? -An application is any computer program or a group of them. +An _application_ is a computer program or a group of them. -An application could also be a micro-service, IoT device (sensor), mainframe process, etc. Users may even write applications in different programming languages if they support one of the selected protocols. +An application can be a micro-service, IoT (Internet of things) device (for example, a sensor), mainframe process, and more. Users can create applications using various programming languages that support the chosen protocols. ## Why do we need applications? -In Event-Driven Architecture (EDA), an application must be a `producer`, a `consumer`, or both. Applications must also use the protocols the server supports if they wish to connect and exchange messages. +In Event-Driven Architecture (EDA), an application can either be a producer, a consumer, or both. Additionally, if an application wants to connect and exchange messages with the server, it must adhere to the protocols supported by the server. ### Applications: producers and consumers ```mermaid @@ -20,4 +20,5 @@ flowchart TD C --> D[message] D --> F[CONSUMER application] ``` -The above diagram describes a message communication traveling through a channel between a **PRODUCER application** and a **CONSUMER application**. + +The diagram above illustrates a message transmission between a Producer application and a Consumer application through a channel. \ No newline at end of file diff --git a/markdown/docs/concepts/asyncapi-document/index.md b/markdown/docs/concepts/asyncapi-document/index.md index 032e8a0a9e2b..9419ff90ff83 100644 --- a/markdown/docs/concepts/asyncapi-document/index.md +++ b/markdown/docs/concepts/asyncapi-document/index.md @@ -3,11 +3,11 @@ 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. +The AsyncAPI Specification defines a set of fields that can be used in an AsyncAPI document to describe an application’s API. While the document may reference other files for additional details or shared fields, it usually serves as 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. +Furthermore, the AsyncAPI document acts as a communication contract between receivers and senders within an event-driven system. It specifies the payload content necessary for a service to send a message and provides clear guidance to the receiver about the message's properties. -```YAML +```yaml asyncapi: 3.0.0 info: title: Cool Example @@ -37,7 +37,5 @@ operations: ``` -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. +Depending on the implemented protocol (such as MQTT, AMQP, Kafka, etc.), you may have additional fields in your AsyncAPI document. For example, for configuring Kafka bindings. diff --git a/markdown/docs/concepts/channel.md b/markdown/docs/concepts/channel.md index 96fefe067f71..d44759b8a2cf 100644 --- a/markdown/docs/concepts/channel.md +++ b/markdown/docs/concepts/channel.md @@ -4,12 +4,10 @@ weight: 20 --- # What is a channel? -A `channel` is a mechanism created by the server for the organization and transmission of messages. Users can define channels as a _topic, queue, routing key, path,_ or _subject_ depending on the protocol used. +A _channel_ is a mechanism created by the server that facilitates the organization and transmission of messages. Depending on the used protocol, users can define channels as a _topic_, _queue_, _routing key_, _path_, or _subject_. # Why do we need channels? -Channels play a crucial role in communication between `producers` and `consumers`. A producer can send a message through the channel, and the consumer receives messages from a particular channel. A channel's sole purpose is to ensure the right messages route to the right consumers. - - +Channels are pivotal for establishing communication between producers and consumers. They enable producers to send messages, while consumers receive messages from specific channels. The primary function of a channel is to ensure that the intended messages reach the appropriate consumers. ```mermaid graph LR @@ -19,4 +17,6 @@ graph LR C --> E[Consumer] C --> F[Consumer] ``` -The diagram above shows the communication between a `producer` and `consumer`, with the producer sending a `message` through the `channel`. The channel then queues the message to the specific consumer. + +The diagram above illustrates the communication process between a producer and a consumer. The producer sends a message through the channel, which then queues the message for delivery to the specific consumer. +The diagram above illustrates the communication process between a producer and multiple consumers. The producer sends a message through the channel, which then queues the message for delivery to the appropriate consumers. \ No newline at end of file diff --git a/markdown/docs/concepts/consumer.md b/markdown/docs/concepts/consumer.md index 512970e11d4b..a115505419fd 100644 --- a/markdown/docs/concepts/consumer.md +++ b/markdown/docs/concepts/consumer.md @@ -4,12 +4,12 @@ weight: 4 --- ## What is a consumer? -In an Event Driven Architecture (EDA), a consumer is an application that listens for a particular event from a broker and reacts to it. +A _consumer_ is an application that subscribes to a specific event from a broker and responds accordingly. ## Why do we need consumers? -Unlike traditional REST APIs, in EDA, event consumers are not expected to respond immediately on the same connection. In this architecture, a consumer is unaware of the producer or other consumers; all they know is that when a broker sends them an event, it is because they subscribed to it. +Unlike traditional REST APIs, in Event-Driven Architecture (EDA), event consumers are asynchronous, which means they are not required to respond immediately on the same connection. In this architecture, consumers are unaware of the producers or other consumers. All they know is that when a broker sends them an event, it is because they have subscribed to it. -When you want events processed asynchronously in your application, the consumer plays an important role in completing that event data flow in the event channel. +When you want your application to process events asynchronously, the consumer plays a crucial role in completing the event data flow through the event channel. ```mermaid flowchart LR @@ -26,7 +26,8 @@ flowchart LR end ``` -The above diagram depicts a sample flow of events from `producer` to `broker` to `consumer`. In this instance, the `producer` publishes two events _(A and B)_ and sends them to the `broker`. Then each `consumer` subscribes to receive those events. +The diagram above illustrates a sample flow of events from the `producer` to the `broker` to the `consumers`. In this scenario, the `producer` publishes two events _(A and B)_ and sends them to the `broker`. Subsequently, each `consumer` subscribes to receive those events. + Subscribers can also be producers. diff --git a/markdown/docs/concepts/index.md b/markdown/docs/concepts/index.md index 34e581fea077..63dd3b9573e3 100644 --- a/markdown/docs/concepts/index.md +++ b/markdown/docs/concepts/index.md @@ -5,9 +5,9 @@ weight: 1 import ContributionNotes from '@/assets/docs/fragments/contribution-notes.md'; -## Concepts: Define AsyncAPI features and capabilities +## Concepts -Welcome to AsyncAPI **Concepts**! Our Concepts section will define the concepts of AsyncAPI features and capabilities. +Welcome to AsyncAPI **Concepts**! This section defines AsyncAPI features and capabilities. diff --git a/markdown/docs/concepts/message.md b/markdown/docs/concepts/message.md index e5e65e91fb0a..497bfa30a089 100644 --- a/markdown/docs/concepts/message.md +++ b/markdown/docs/concepts/message.md @@ -4,8 +4,9 @@ weight: 30 --- ## What is a message? -A `message` is a communication asset used to transmit or exchange information from a sender to the receiver through `channels`. A single `message` can be consumed by multiple independent receivers and can also be defined as an _event_ or _command_. The sender includes a payload of data (that has been serialized into an appropriate format, e.g., JSON, XML, binary, etc.) that needs to be processed by the receiver. It may also include metadata; information that describes the message itself. This metadata is often known as _headers_ or _properties_. +A _message_ is a communication asset that transmits or exchanges information from a sender to the receiver through channels. +One message can also be defined as an event or command and can be consumed by multiple independent receivers. The sender encodes a payload of data (serialized into a suitable format, such as JSON, XML, binary, or others) that requires processing by the receiver. Additionally, the message may include _metadata_, which is information that describes the message itself. This metadata is commonly referred to as _headers_ or _properties_. ``` mermaid graph LR @@ -17,11 +18,10 @@ A{{sender application}} --> b --> C{{receiver application}} ``` -In the diagram above, the sender application transmits a `message` to the receiver application. +The diagram above illustrates how a sender application transmits a message through a channel to a receiver application, demonstrating the basic flow of message-based communication. ## Messages vs Events -A `message` carries information from one application to the other, while an `event` is a message that provides details of something that has already occurred. One important aspect to note is that depending on the type of information a `message` contains, it can fall under an _event_, _query_, or _command_. -*See the diagram below.* +A **message** conveys information between applications, while an **event** is a message that provides details of something that has already occurred. A crucial aspect to note is that depending on the type of information a message carries, it can either be an event, query, or command. Check the diagram below. ``` mermaid graph TD @@ -32,4 +32,4 @@ graph TD C --> E(Command) ``` -Overall, `events` are `messages` but not all `messages` are `events`. +Summing up, events are messages, but not all messages are events. diff --git a/markdown/docs/concepts/producer.md b/markdown/docs/concepts/producer.md index ce17b9e31042..c2614d9c5b81 100644 --- a/markdown/docs/concepts/producer.md +++ b/markdown/docs/concepts/producer.md @@ -4,24 +4,26 @@ weight: 3 --- ## What is a Producer? -A producer is an application that senses state changes (events) and publishes those events as messages. An event indicates a state change or update triggered by a user's/device's action. +A _producer_ is an application that detects state changes (_events_) and publishes these events as messages. An event signifies a state change or update triggered by a user’s or device’s action. The following are sample events: -* Placing an item in a shopping cart on an e-commerce website. +* Adding an item to a shopping cart on an e-commerce website. * Clicking the subscribe button on a YouTube channel. -* A temperature change in a sensor. +* Detecting a temperature change using a sensor. + ## Why do we need Producers? -One of the core concepts of event-driven architecture is the publish/subscribe communication model. Producers are publishers in this model; they're the first logical layer responsible for distributing messages to the broker so that others can subscribe to receive messages. +The publish/subscribe communication model is one of the core concepts of event-driven architecture. In this model, producers are publishers, acting as the first logical layer responsible for distributing messages to the broker, enabling others to subscribe and receive these messages. ```mermaid flowchart TD a[Producer]-- Message 1 --->d[(Broker)] d -- Message 1 --->g[Consumer] ``` -The diagram above depicts the communication between a **producer** publishing events to a specific channel in a **broker** and a **consumer** subscribed to the same channel. -In some cases, an entity can be both a producer publishing messages to a specific channel in the broker and a consumer subscribing to messages from a different channel in the broker. +The diagram above illustrates the communication flow between a producer who publishes events to a specific channel in a broker and a consumer who subscribes to the same channel. + +In some cases, an entity can simultaneously function as both a producer, publishing messages to a specific channel in the broker, and a consumer, subscribing to messages from a different channel in the broker. ```mermaid flowchart LR @@ -31,4 +33,4 @@ flowchart LR c -- Message 2 ---> d[Consumer] ``` -In the diagram above, we see a producer publishing messages to a specific channel and a consumer subscribing to messages from that channel. We also have a second producer who publishes to one channel, but subscribes to messages from another. +In the diagram above, there is a producer publishing messages to a specific channel and a consumer subscribing to messages from that channel. Also, there is a second producer publishing to one channel and subscribing to messages from another channel. diff --git a/markdown/docs/concepts/protocol.md b/markdown/docs/concepts/protocol.md index 61a454744844..8fb93541f008 100644 --- a/markdown/docs/concepts/protocol.md +++ b/markdown/docs/concepts/protocol.md @@ -5,7 +5,7 @@ weight: 25 ## What is a protocol? -A protocol is a set of rules that specifies how information is exchanged between applications and/or servers. +A _protocol_ is a set of rules that governs the exchange of information between applications and/or servers. Protocol examples: * [WebSockets](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) @@ -14,7 +14,7 @@ Protocol examples: * [MQTT](https://mqtt.org/) ## Why do we need protocols? -Whenever a producer detects a state change (events) and publishes those events as messages, a protocol carries those messages to the channel and then to a consumer. Protocol plays a vital role in message transmission. +Protocols play a crucial role in message transmission. Whenever a producer detects a state change (events) and publishes those events as messages, a protocol carries those messages to the channel and then to the consumer. ```mermaid sequenceDiagram @@ -23,8 +23,8 @@ sequenceDiagram Publisher->>+Publisher: Delete(Msg) ``` -The diagram above depicts the message exchange flow from `producer` to `broker` to `consumer` using the MQTT protocol with QoS0 (quality of service 0). This means that information exchanged from `producer` to `broker` to `consumer` is delivered at most once. +The diagram above illustrates the message exchange flow from `producer` to `broker` to `consumer` using the MQTT protocol with QoS0 (quality of service 0). In other words, the information transferred from the producer to broker to consumer is delivered at most once. -The quality of service information rule is specified on a protocol level. Broker implementations and other involved actors must act accordingly. +The quality of service information rule is defined at the protocol level. Broker implementations and other involved parties must adhere to this rule. -In AsyncAPI documents, all protocol-specific details that the application follows can be described using [bindings](/docs/reference/specification/v2.5.0#definitionsBindings). +In AsyncAPI documents, all protocol-specific details that the application follows can be described using [bindings](https://www.asyncapi.com/docs/reference/specification/latest#definitionsBindings). diff --git a/markdown/docs/concepts/server.md b/markdown/docs/concepts/server.md index 7d3a6441bb3e..d6f461076132 100644 --- a/markdown/docs/concepts/server.md +++ b/markdown/docs/concepts/server.md @@ -5,10 +5,10 @@ weight: 2 ## What is a server? -A server represents a messaging broker system where connections and communication between a producer and a consumer are established. Unlike traditional API servers which are dependent on request/response, message broker interactions occur back and forth over different channels. +A _server_ acts as a _messaging broker_ system, establishing connections and facilitating communication between [_producers_](producer) and [_consumers_](consumer). Unlike traditional API servers that rely on request-response interactions, message broker interactions occur bidirectionally across various channels. ## What is the purpose of servers? -Servers play an important role in maintaining a relationship between producers and consumers. When designing and setting up an event-driven application, servers are in charge of delivering asynchronous messages from the producer to the consumers through the use of channels. By integrating different messaging protocols, servers can transmit and exchange messages between clients. +Servers play a crucial role in establishing a connection between producers and consumers. In the context of designing and setting up an event-driven application, servers are responsible for delivering asynchronous messages from the producer to the consumers through the use of [_channels_](channel). Additionally, servers can integrate various messaging [_protocols_](protocol) to facilitate the transmission and exchange of messages between _clients_. ### Clients and Server ```mermaid @@ -18,7 +18,7 @@ flowchart TD c[Client Mobile] --> b[(server)] b --> c ``` -The diagram above describes a bi-directional communication between several **clients** and one **server**. In this case, in your AsyncAPI file, you describe the `server`, and therefore the [`Server Object`](https://www.asyncapi.com/docs/reference/specification/latest#serverObject) holds information about the actual server, including its physical location. +The diagram above illustrates a bidirectional communication between one server and several clients. In this case, in your AsyncAPI file, you describe the `server`, so the [`Server Object`](https://www.asyncapi.com/docs/reference/specification/latest#serverObject) holds information about the actual server, including its physical location. ### Broker Centric @@ -35,4 +35,4 @@ flowchart TD a2 --> C[consumer2] ``` -The diagram above shows the *Broker Centric Architecture*. In this case, we created three AsyncAPI files for the `producer`, `consumer1`, and `consumer2`. In these AsyncAPI files, the [`Server Object`](https://www.asyncapi.com/docs/reference/specification/latest#serverObject) provides information about the `broker`, so that API users know where to connect to start receiving or sending messages. +The diagram above illustrates the Broker-centric Architecture. In this case, there are three AsyncAPI files for the `producer`, `consumer1`, and `consumer2`. In these AsyncAPI files, the [`Server Object`](https://www.asyncapi.com/docs/reference/specification/latest#serverObject) provides information about the `broker`, so that API users know where to connect to start receiving or sending messages. diff --git a/markdown/docs/migration/index.md b/markdown/docs/migration/index.md index 195bcc35cf54..a8a57359ae21 100644 --- a/markdown/docs/migration/index.md +++ b/markdown/docs/migration/index.md @@ -1,5 +1,6 @@ --- title: "Overview" +weight: 1 --- Migration to a new major version is always difficult, and AsyncAPI is no exception, but we want to provide as smooth a transition as possible. diff --git a/markdown/docs/migration/migrating-to-v3.md b/markdown/docs/migration/migrating-to-v3.md index 85fa6bb47a76..00587645fee6 100644 --- a/markdown/docs/migration/migrating-to-v3.md +++ b/markdown/docs/migration/migrating-to-v3.md @@ -1,5 +1,6 @@ --- title: "Migrating to v3" +weight: 2 --- diff --git a/markdown/docs/tools/cli/usage.md b/markdown/docs/tools/cli/usage.md index 95669e0efd6c..84f59e8803c4 100644 --- a/markdown/docs/tools/cli/usage.md +++ b/markdown/docs/tools/cli/usage.md @@ -27,7 +27,7 @@ $ npm install -g @asyncapi/cli $ asyncapi COMMAND running command... $ asyncapi (--version) -@asyncapi/cli/2.5.0 linux-x64 node-v18.20.4 +@asyncapi/cli/2.11.0 linux-x64 node-v18.20.5 $ asyncapi --help [COMMAND] USAGE $ asyncapi COMMAND @@ -52,6 +52,7 @@ USAGE * [`asyncapi config versions`](#asyncapi-config-versions) * [`asyncapi convert [SPEC-FILE]`](#asyncapi-convert-spec-file) * [`asyncapi diff OLD NEW`](#asyncapi-diff-old-new) +* [`asyncapi format [SPEC-FILE]`](#asyncapi-format-spec-file) * [`asyncapi generate`](#asyncapi-generate) * [`asyncapi generate fromTemplate ASYNCAPI TEMPLATE`](#asyncapi-generate-fromtemplate-asyncapi-template) * [`asyncapi generate models LANGUAGE FILE`](#asyncapi-generate-models-language-file) @@ -60,6 +61,7 @@ USAGE * [`asyncapi new glee`](#asyncapi-new-glee) * [`asyncapi new template`](#asyncapi-new-template) * [`asyncapi optimize [SPEC-FILE]`](#asyncapi-optimize-spec-file) +* [`asyncapi pretty SPEC-FILE`](#asyncapi-pretty-spec-file) * [`asyncapi start`](#asyncapi-start) * [`asyncapi start studio`](#asyncapi-start-studio) * [`asyncapi validate [SPEC-FILE]`](#asyncapi-validate-spec-file) @@ -99,7 +101,7 @@ EXAMPLES $ asyncapi bundle ./asyncapi.yaml -o final-asyncapi.yaml --base ../public-api/main.yaml --baseDir ./social-media/comments-service ``` -_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/bundle.ts)_ +_See code: [src/commands/bundle.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/bundle.ts)_ ## `asyncapi config` @@ -113,7 +115,7 @@ DESCRIPTION CLI config settings ``` -_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/index.ts)_ +_See code: [src/commands/config/index.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/index.ts)_ ## `asyncapi config analytics` @@ -133,7 +135,7 @@ DESCRIPTION Enable or disable analytics for metrics collection ``` -_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/analytics.ts)_ +_See code: [src/commands/config/analytics.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/analytics.ts)_ ## `asyncapi config context` @@ -147,7 +149,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/v2.5.0/src/commands/config/context/index.ts)_ +_See code: [src/commands/config/context/index.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/context/index.ts)_ ## `asyncapi config context add CONTEXT-NAME SPEC-FILE-PATH` @@ -169,7 +171,7 @@ DESCRIPTION Add a context to the store ``` -_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/add.ts)_ +_See code: [src/commands/config/context/add.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/context/add.ts)_ ## `asyncapi config context current` @@ -186,7 +188,7 @@ DESCRIPTION Shows the current context that is being used ``` -_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/current.ts)_ +_See code: [src/commands/config/context/current.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/context/current.ts)_ ## `asyncapi config context edit CONTEXT-NAME NEW-SPEC-FILE-PATH` @@ -207,7 +209,7 @@ DESCRIPTION Edit a context in the store ``` -_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/edit.ts)_ +_See code: [src/commands/config/context/edit.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/context/edit.ts)_ ## `asyncapi config context init [CONTEXT-FILE-PATH]` @@ -230,7 +232,7 @@ DESCRIPTION Initialize context ``` -_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/init.ts)_ +_See code: [src/commands/config/context/init.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/context/init.ts)_ ## `asyncapi config context list` @@ -247,7 +249,7 @@ DESCRIPTION List all the stored contexts in the store ``` -_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/list.ts)_ +_See code: [src/commands/config/context/list.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/context/list.ts)_ ## `asyncapi config context remove CONTEXT-NAME` @@ -267,7 +269,7 @@ DESCRIPTION Delete a context from the store ``` -_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/remove.ts)_ +_See code: [src/commands/config/context/remove.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/context/remove.ts)_ ## `asyncapi config context use CONTEXT-NAME` @@ -287,7 +289,7 @@ DESCRIPTION Set a context as current ``` -_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/context/use.ts)_ +_See code: [src/commands/config/context/use.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/context/use.ts)_ ## `asyncapi config versions` @@ -304,7 +306,7 @@ DESCRIPTION Show versions of AsyncAPI tools used ``` -_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/config/versions.ts)_ +_See code: [src/commands/config/versions.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/config/versions.ts)_ ## `asyncapi convert [SPEC-FILE]` @@ -332,7 +334,7 @@ DESCRIPTION Convert asyncapi documents older to newer versions or OpenAPI/postman-collection documents to AsyncAPI ``` -_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.5.0/src/commands/convert.ts)_ +_See code: [src/commands/convert.ts](https://github.com/asyncapi/cli/blob/v2.11.0/src/commands/convert.ts)_ ## `asyncapi diff OLD NEW` @@ -342,7 +344,7 @@ Find diff between two asyncapi files USAGE $ asyncapi diff OLD NEW [-h] [-f json|yaml|yml|md] [-t breaking|non-breaking|unclassified|all] [--markdownSubtype json|yaml|yml] [-o ] [--no-error] [-w] [--log-diagnostics] [--diagnostics-format - json|stylish|junit|html|text|teamcity|pretty] [--fail-severity error|warn|info|hint] + json|stylish|junit|html|text|teamcity|pretty] [--fail-severity error|warn|info|hint] [-o ] ARGUMENTS OLD old spec path, URL or context-name @@ -352,6 +354,7 @@ FLAGS -f, --format=