{"id":13454533,"url":"https://github.com/moscajs/aedes","last_synced_at":"2026-01-15T22:20:36.900Z","repository":{"id":28258479,"uuid":"31768514","full_name":"moscajs/aedes","owner":"moscajs","description":"Barebone MQTT broker that can run on any stream server, the node way","archived":false,"fork":false,"pushed_at":"2026-01-13T10:47:44.000Z","size":1238,"stargazers_count":1912,"open_issues_count":86,"forks_count":236,"subscribers_count":46,"default_branch":"main","last_synced_at":"2026-01-13T19:24:20.154Z","etag":null,"topics":["aedes","hacktoberfest","iot","mosquitto","mqtt","mqtt-broker","mqtt-server","nodejs","stream"],"latest_commit_sha":null,"homepage":"","language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moscajs.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":"SECURITY.md","support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null},"funding":{"open_collective":"aedes"}},"created_at":"2015-03-06T12:33:52.000Z","updated_at":"2026-01-11T08:27:08.000Z","dependencies_parsed_at":"2023-09-29T08:54:39.274Z","dependency_job_id":"158fe115-e1a1-4992-9ea2-23410ff385c3","html_url":"https://github.com/moscajs/aedes","commit_stats":{"total_commits":753,"total_committers":66,"mean_commits":"11.409090909090908","dds":0.6759628154050465,"last_synced_commit":"d0c441404a76f8602fb72f22aad2dd953ec4ca3d"},"previous_names":["mcollina/aedes"],"tags_count":95,"template":false,"template_full_name":null,"purl":"pkg:github/moscajs/aedes","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moscajs%2Faedes","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moscajs%2Faedes/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moscajs%2Faedes/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moscajs%2Faedes/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moscajs","download_url":"https://codeload.github.com/moscajs/aedes/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moscajs%2Faedes/sbom","scorecard":{"id":660748,"data":{"date":"2025-08-11","repo":{"name":"github.com/moscajs/aedes","commit":"b5178c02629d8e2096820c4b743a591b26a49fda"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":7.7,"checks":[{"name":"Security-Policy","score":10,"reason":"security policy file detected","details":["Info: security policy file detected: SECURITY.md:1","Info: Found linked content: SECURITY.md:1","Info: Found disclosure, vulnerability, and/or timelines in security policy: SECURITY.md:1","Info: Found text in security policy: SECURITY.md:1"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Code-Review","score":6,"reason":"Found 15/25 approved changesets -- score normalized to 6","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":10,"reason":"10 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmark-compare-serial.yml:21: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/benchmark-compare-serial.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmark-compare-serial.yml:27: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/benchmark-compare-serial.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/benchmark-compare-serial.yml:42: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/benchmark-compare-serial.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:39: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/ci.yml:44: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/ci.yml/main?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/ci.yml:66: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/ci.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:23: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:28: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/codeql.yml:33: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/codeql.yml/main?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/labeler.yml:13: update your workflow using https://app.stepsecurity.io/secureworkflow/moscajs/aedes/labeler.yml/main?enable=pin","Warn: npmCommand not pinned by hash: .github/workflows/benchmark-compare-serial.yml:34","Warn: npmCommand not pinned by hash: .github/workflows/benchmark-compare-serial.yml:48","Warn: npmCommand not pinned by hash: .github/workflows/ci.yml:53","Info:   0 out of  11 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   1 third-party GitHubAction dependencies pinned","Info:   0 out of   3 npmCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Token-Permissions","score":9,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'actions' permission set to 'read': .github/workflows/codeql.yml:14","Info: jobLevel 'contents' permission set to 'read': .github/workflows/codeql.yml:15","Info: topLevel 'contents' permission set to 'read': .github/workflows/benchmark-compare-serial.yml:10","Info: topLevel 'contents' permission set to 'read': .github/workflows/ci.yml:14","Warn: no topLevel permission defined: .github/workflows/codeql.yml:1","Info: topLevel 'contents' permission set to 'read': .github/workflows/labeler.yml:6","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE:0","Info: FSF or OSI recognized license: MIT License: LICENSE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"Branch-Protection","score":8,"reason":"branch protection is not maximal on development and all release branches","details":["Info: 'allow deletion' disabled on branch 'main'","Info: 'force pushes' disabled on branch 'main'","Warn: required approving review count is 1 on branch 'main'","Warn: codeowners review is not required on branch 'main'","Info: status check found to merge onto on branch 'main'","Info: PRs are required in order to make changes on branch 'main'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":8,"reason":"SAST tool detected but not run on all commits","details":["Info: SAST configuration detected: CodeQL","Warn: 12 commits out of 21 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-21T16:08:12.651Z","repository_id":28258479,"created_at":"2025-08-21T16:08:12.651Z","updated_at":"2025-08-21T16:08:12.651Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28472626,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-15T22:13:38.078Z","status":"ssl_error","status_checked_at":"2026-01-15T22:12:11.737Z","response_time":62,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["aedes","hacktoberfest","iot","mosquitto","mqtt","mqtt-broker","mqtt-server","nodejs","stream"],"created_at":"2024-07-31T08:00:55.069Z","updated_at":"2026-01-15T22:20:36.895Z","avatar_url":"https://github.com/moscajs.png","language":"JavaScript","readme":"\u003c!-- markdownlint-disable MD013 --\u003e\n# Aedes\n\n![ci](https://github.com/moscajs/aedes/workflows/ci/badge.svg)\n[![js-standard-style](https://img.shields.io/badge/code%20style-standard-brightgreen.svg?style=flat)](https://standardjs.com/)\n[![Maintenance](https://img.shields.io/badge/Maintained%3F-yes-green.svg)](https://github.com/moscajs/aedes/graphs/commit-activity)\n[![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](https://github.com/moscajs/aedes/pulls)\\\n[![codecov](https://codecov.io/gh/moscajs/aedes/graph/badge.svg?token=6SdoJIgIjg)](https://codecov.io/gh/moscajs/aedes)\n[![Known Vulnerabilities](https://snyk.io/test/github/moscajs/aedes/badge.svg)](https://snyk.io/test/github/moscajs/aedes)\\\n![node](https://img.shields.io/node/v/aedes)\n[![NPM version](https://img.shields.io/npm/v/aedes.svg?style=flat)](https://www.npmjs.com/aedes)\n[![NPM downloads](https://img.shields.io/npm/dm/aedes.svg?style=flat)](https://www.npmjs.com/aedes)\n\n[![opencollective](https://opencollective.com/aedes/donate/button.png)](https://opencollective.com/aedes/donate)\n\nBarebone MQTT server that can run on any stream servers\n\n- [Aedes](#aedes)\n  - [Install](#install)\n  - [Docker](#docker)\n  - [API](#api)\n  - [Features](#features)\n  - [Examples](#examples)\n  - [Clusters](#clusters)\n  - [Bridge connections](#bridge-connections)\n  - [Extensions](#extensions)\n  - [Middleware Plugins](#middleware-plugins)\n    - [Persistence](#persistence)\n    - [MQEmitter](#mqemitter)\n  - [Acknowledgements](#acknowledgements)\n  - [Mosca vs Aedes](#mosca-vs-aedes)\n    - [Benchmark: Aedes](#benchmark-aedes)\n      - [In memory - No clusters](#in-memory---no-clusters)\n      - [Redis Persistence and Redis Emitter - With Clusters](#redis-persistence-and-redis-emitter---with-clusters)\n      - [Mongo Persistence and Redis Emitter - With Clusters](#mongo-persistence-and-redis-emitter---with-clusters)\n    - [Redis Persistence and Mongodb Emitter - With Clusters](#redis-persistence-and-mongodb-emitter---with-clusters)\n    - [Benchmark: Mosca](#benchmark-mosca)\n  - [Made with Aedes](#made-with-aedes)\n  - [Collaborators](#collaborators)\n  - [Contribution](#contribution)\n  - [Security notice](#security-notice)\n  - [Support](#support)\n    - [Backers](#backers)\n    - [Sponsors](#sponsors)\n  - [License](#license)\n\n## Install\n\nTo install aedes, simply use npm:\n\n```sh\nnpm install aedes\n```\n\n## Docker\n\nCheck the [Docker docs](https://github.com/moscajs/aedes-cli#docker)\n\n## API\n\n- [Aedes class](./docs/Aedes.md)\n- [Client class](./docs/Client.md)\n\n## Features\n\n- Full compatible with [MQTT 3.1 and 3.1.1][ISO20922]\n- Standard TCP Support\n- SSL / TLS\n- WebSocket Support\n- Message Persistence\n- Automatic Reconnect\n- Offline Buffering\n- Backpress-support API\n- High Availability\n- Clusterable\n- Authentication and Authorization\n- `$SYS` support\n- Pluggable middlewares\n- [Dynamic Topics][dynamic_topics] Support\n- MQTT Bridge Support between aedes\n- [MQTT 5.0][mqttv5] _(not support yet)_\n- [Bridge Protocol][bridge_protocol] _(incoming connections only)_\n\n## Examples\n\n- [Examples](./docs/Examples.md)\n\n## Clusters\n\nAedes needs on disk dbs like MongoDB and Redis in order to work with clusters. Based on our tests and users reports the best performances/stability are reached when using [aedes-persistence-mongodb] paired with [mqemitter-redis].\n\nOther info:\n\n- The repo [aedes-tests](https://github.com/moscajs/aedes-tests) is used to test aedes with clusters and different emitters/persistences. Check its source code to have a starting point on how to work with clusters\n\n## Bridge connections\n\nNormally, when publishing a message, the `retain` flag is consumed by Aedes and\nthen set to `false`.  This is done for two reasons:\n\n- MQTT-3.3.1-9 states that it MUST set the RETAIN flag to 0 when a PUBLISH\n  Packet is sent to a Client because it matches an established subscription\n  regardless of how the flag was set in the message it received.\n- When operating as a cluster, only one Aedes node may store the packet\n\nBrokers that support the [Bridge Protocol][bridge_protocol] can connect to\nAedes.  When connecting with this special protocol, subscriptions work as usual\nexcept that the `retain` flag in the packet is propagated as-is.\n\n## Extensions\n\n- [aedes-logging]: Logging module for Aedes, based on Pino\n- [aedes-stats]: Stats for Aedes\n- [aedes-cli]: Run Aedes MQTT Broker from the CLI\n- [aedes-protocol-decoder]: Protocol decoder for Aedes MQTT Broker\n- [aedes-server-factory]: Create a server instance such as TCP, HTTP, TLS...\n\n## Middleware Plugins\n\n### Persistence\n\n- [aedes-persistence]: In-memory implementation of an Aedes persistence\n- [aedes-persistence-mongodb]: MongoDB persistence for Aedes\n- [aedes-persistence-redis]: Redis persistence for Aedes\n- [aedes-persistence-level]: LevelDB persistence for Aedes\n- [aedes-persistence-nedb]: NeDB persistence for Aedes\n\n### MQEmitter\n\n- [mqemitter]: An opinionated memory Message Queue with an emitter-style API\n- [mqemitter-redis]: Redis-powered mqemitter\n- [mqemitter-mongodb]: Mongodb based mqemitter\n- [mqemitter-child-process]: Share the same mqemitter between a hierarchy of\n  child processes\n- [mqemitter-cs]: Expose a MQEmitter via a simple client/server protocol\n- [mqemitter-p2p]: A P2P implementation of MQEmitter, based on HyperEmitter and\n  a Merkle DAG\n- [mqemitter-aerospike]: Aerospike mqemitter\n\n## Acknowledgements\n\nThis library is born after a lot of discussion with all\n[Mosca](http://www.npmjs.com/mosca) users and how that was deployed in\nproduction. This addresses your concerns about performance and stability.\n\n## Mosca vs Aedes\n\nExample benchmark test with 1000 clients sending 5000 QoS 1 messsages. Used\n[mqtt-benchmark] with command:\n\n```sh\nmqtt-benchmark --broker tcp://localhost:1883 --clients 1000 --qos 1 --count 5000\n```\n\nCPU INFO:\n\n```sh\nArchitecture:        x86_64\nCPU op-mode(s):      32-bit, 64-bit\nByte Order:          Little Endian\nCPU(s):              8\nOn-line CPU(s) list: 0-7\nThread(s) per core:  2\nCore(s) per socket:  4\nSocket(s):           1\nNUMA node(s):        1\nVendor ID:           GenuineIntel\nCPU family:          6\nModel:               94\nModel name:          Intel(R) Core(TM) i7-6700HQ CPU @ 2.60GHz\nStepping:            3\nCPU MHz:             800.014\nCPU max MHz:         3500,0000\nCPU min MHz:         800,0000\nBogoMIPS:            5199.98\nVirtualization:      VT-x\nL1d cache:           32K\nL1i cache:           32K\nL2 cache:            256K\nL3 cache:            6144K\n```\n\n### Benchmark: Aedes\n\n#### In memory - No clusters\n\n```sh\n========= TOTAL (1000) =========\nTotal Ratio:                 1.000 (5000000/5000000)\nTotal Runtime (sec):         178.495\nAverage Runtime (sec):       177.845\nMsg time min (ms):           0.077\nMsg time max (ms):           199.805\nMsg time mean mean (ms):     35.403\nMsg time mean std (ms):      0.042\nAverage Bandwidth (msg/sec): 28.115\nTotal Bandwidth (msg/sec):   28114.678\n```\n\n#### Redis Persistence and Redis Emitter - With Clusters\n\n```sh\n========= TOTAL (1000) =========\nTotal Ratio:                 1.000 (5000000/5000000)\nTotal Runtime (sec):         114.404\nAverage Runtime (sec):       109.022\nMsg time min (ms):           0.065\nMsg time max (ms):           393.214\nMsg time mean mean (ms):     21.520\nMsg time mean std (ms):      0.595\nAverage Bandwidth (msg/sec): 45.896\nTotal Bandwidth (msg/sec):   45896.306\n```\n\n#### Mongo Persistence and Redis Emitter - With Clusters\n\n```sh\n========= TOTAL (1000) =========\nTotal Ratio:                 1.000 (5000000/5000000)\nTotal Runtime (sec):         112.769\nAverage Runtime (sec):       105.524\nMsg time min (ms):           0.062\nMsg time max (ms):           329.062\nMsg time mean mean (ms):     20.750\nMsg time mean std (ms):      0.878\nAverage Bandwidth (msg/sec): 47.464\nTotal Bandwidth (msg/sec):   47464.271\n```\n\n### Redis Persistence and Mongodb Emitter - With Clusters\n\n```sh\n========= TOTAL (1000) =========\nTotal Ratio:                 1.000 (5000000/5000000)\nTotal Runtime (sec):         118.587\nAverage Runtime (sec):       114.190\nMsg time min (ms):           0.080\nMsg time max (ms):           324.028\nMsg time mean mean (ms):     22.558\nMsg time mean std (ms):      0.730\nAverage Bandwidth (msg/sec): 43.832\nTotal Bandwidth (msg/sec):   43831.927\n```\n\n### Benchmark: [Mosca](http://www.npmjs.com/mosca)\n\n```sh\n========= TOTAL (1000) =========\nTotal Ratio:                 1.000 (5000000/5000000)\nTotal Runtime (sec):         264.934\nAverage Runtime (sec):       264.190\nMsg time min (ms):           0.070\nMsg time max (ms):           168.116\nMsg time mean mean (ms):     52.629\nMsg time mean std (ms):      0.074\nAverage Bandwidth (msg/sec): 18.926\nTotal Bandwidth (msg/sec):   18925.942\n```\n\n## Made with Aedes\n\nHere is a list of some interesting projects that are using Aedes as MQTT Broker. Submit a PR or an issue if you would like to add yours\n\n- [node-red-contrib-aedes](https://github.com/martin-doyle/node-red-contrib-aedes): MQTT broker for Node-Red based on Aedes\n- [Mqtt2Mqtt](https://github.com/robertsLando/Mqtt2Mqtt): Mqtt Bridge between two brokers with UI\n- [Kuzzle](https://github.com/kuzzleio/kuzzle): High performance and full featured IoT backend using MQTT alongside WebSocket and Http protocols\n\n## Collaborators\n\n- [__Gavin D'mello__](https://github.com/GavinDmello)\n- [__Behrad Zari__](https://github.com/behrad)\n- [__Gnought__](https://github.com/gnought)\n- [__Daniel Lando__](https://github.com/robertsLando)\n- [__Getlarge__](https://github.com/getlarge)\n\n## Contribution\n\n[![Help wanted](https://img.shields.io/github/labels/moscajs/aedes/help%20wanted)](https://github.com/moscajs/aedes/labels/help%20wanted)\n[![Contributors](https://img.shields.io/github/contributors/moscajs/aedes)](https://github.com/moscajs/aedes/graphs/contributors)\n\nWant to contribute? Check our list of\n[features/bugs](https://github.com/moscajs/aedes/projects/1)\n\n## Security notice\n\nMessages sent to the broker are considered _valid_ once they pass the [`authorizePublish`](./docs/Aedes.md#handler-authorizepublish-client-packet-callback) callback.\nIn other terms, if permissions for the given client are revoked after the call completes, the message is still considered valid.\nIn case you are sending time-sensitive messages, make sure to use QoS 0 or connect with a clean session.\n\n## Support\n\nIf there are bugs/leaks in production scenarios, we encourage people to send Pull Request and/or reach out maintainers for some paid support.\n\n### Backers\n\nThank you to all our backers! :raised_hands:\n\n[![Backers](https://opencollective.com/aedes/backers.svg?avatarHeight=64\u0026width=890\u0026button=false)](https://opencollective.com/aedes#backers)\n\n### Sponsors\n\nBecome a sponsor to get your logo on our README on Github\n\n[![Sponsor](https://opencollective.com/aedes/sponsors.svg)](https://opencollective.com/aedes#sponsor)\n\n## License\n\nLicensed under [MIT](./LICENSE).\n\n[ISO20922]: https://docs.oasis-open.org/mqtt/mqtt/v3.1.1/mqtt-v3.1.1.html\n[mqttv5]: https://docs.oasis-open.org/mqtt/mqtt/v5.0/mqtt-v5.0.html\n[bridge_protocol]: https://github.com/mqtt/mqtt.github.io/wiki/bridge_protocol\n[dynamic_topics]: https://github.com/mqtt/mqtt.github.io/wiki/are_topics_dynamic\n[mqtt-benchmark]: https://github.com/krylovsk/mqtt-benchmark\n\n[aedes-logging]: https://www.npmjs.com/aedes-logging\n[aedes-stats]: https://www.npmjs.com/aedes-stats\n[aedes-cli]: https://www.npmjs.com/aedes-cli\n[aedes-protocol-decoder]: https://www.npmjs.com/aedes-protocol-decoder\n[aedes-server-factory]: https://www.npmjs.com/aedes-server-factory\n[aedes-persistence]: https://www.npmjs.com/aedes-persistence\n[aedes-persistence-mongodb]: https://www.npmjs.com/aedes-persistence-mongodb\n[aedes-persistence-redis]: https://www.npmjs.com/aedes-persistence-redis\n[aedes-persistence-level]: https://www.npmjs.com/aedes-persistence-level\n[aedes-persistence-nedb]: https://www.npmjs.com/aedes-persistence-nedb\n\n[mqemitter]: https://www.npmjs.com/mqemitter\n[mqemitter-redis]: https://www.npmjs.com/mqemitter-redis\n[mqemitter-mongodb]: https://www.npmjs.com/mqemitter-mongodb\n[mqemitter-child-process]: https://www.npmjs.com/mqemitter-child-process\n[mqemitter-cs]: https://www.npmjs.com/mqemitter-cs\n[mqemitter-p2p]: https://www.npmjs.com/mqemitter-p2p\n[mqemitter-aerospike]: https://www.npmjs.com/mqemitter-aerospike\n","funding_links":["https://opencollective.com/aedes","https://opencollective.com/aedes/donate"],"categories":["Packages","Brokers","JavaScript","包"],"sub_categories":["Real-time","Talks","实时"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoscajs%2Faedes","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoscajs%2Faedes","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoscajs%2Faedes/lists"}