{"id":13513903,"url":"https://github.com/commanded/commanded","last_synced_at":"2025-05-12T13:15:18.107Z","repository":{"id":37763398,"uuid":"54749959","full_name":"commanded/commanded","owner":"commanded","description":"Use Commanded to build Elixir CQRS/ES applications","archived":false,"fork":false,"pushed_at":"2025-02-26T23:50:15.000Z","size":2528,"stargazers_count":1904,"open_issues_count":51,"forks_count":249,"subscribers_count":45,"default_branch":"master","last_synced_at":"2025-05-09T11:03:45.450Z","etag":null,"topics":["commanded","cqrs","cqrs-es","cqrs-framework","elixir","event-sourcing","eventstore"],"latest_commit_sha":null,"homepage":"","language":"Elixir","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/commanded.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null},"funding":{"github":"slashdotdash","open_collective":"commanded"}},"created_at":"2016-03-25T22:01:38.000Z","updated_at":"2025-05-06T11:49:35.000Z","dependencies_parsed_at":"2023-09-29T08:52:14.815Z","dependency_job_id":"0c313b76-33bf-4afc-86ef-8b4c60664807","html_url":"https://github.com/commanded/commanded","commit_stats":{"total_commits":987,"total_committers":91,"mean_commits":"10.846153846153847","dds":"0.32522796352583583","last_synced_commit":"6f6342cafda3897004f27793aef2f029b4ed8efb"},"previous_names":["slashdotdash/commanded"],"tags_count":59,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commanded%2Fcommanded","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commanded%2Fcommanded/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commanded%2Fcommanded/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/commanded%2Fcommanded/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/commanded","download_url":"https://codeload.github.com/commanded/commanded/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":253457982,"owners_count":21911770,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","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":["commanded","cqrs","cqrs-es","cqrs-framework","elixir","event-sourcing","eventstore"],"created_at":"2024-08-01T05:00:39.801Z","updated_at":"2025-05-12T13:15:17.509Z","avatar_url":"https://github.com/commanded.png","language":"Elixir","readme":"# Commanded\n\nUse Commanded to build your own Elixir applications following the [CQRS/ES](http://cqrs.nu/Faq) pattern.\n\nProvides support for:\n\n- Command registration and dispatch.\n- Hosting and delegation to aggregates.\n- Event handling.\n- Long running process managers.\n\nCommanded provides a solid technical foundation for you to build on. It allows you to focus on modelling your domain, the most important part of your app, creating a better application at a faster pace.\n\nYou can use Commanded with one of the following event stores for persistence:\n\n- [EventStore](https://github.com/commanded/eventstore) - Elixir library using Postgres for persistence.\n- [EventStoreDB](https://www.eventstore.com/) - a stream database built for Event Sourcing.\n- [In-memory event store](https://github.com/commanded/commanded/wiki/In-memory-event-store) - included for test use only.\n\nPlease refer to the [CHANGELOG](CHANGELOG.md) for features, bug fixes, and any upgrade advice included for each release.\n\nRequires Erlang/OTP v21.0 and Elixir v1.11 or later.\n\n---\n\n#### Sponsors\n\n- [View sponsors \u0026 backers](BACKERS.md)\n\n[![Alembic](https://user-images.githubusercontent.com/3167/177830256-26a74e82-60ff-4c20-bd84-64ee7c12512c.svg \"Alembic\")](https://alembic.com.au/)\n\n---\n\n- [Changelog](CHANGELOG.md)\n- [Wiki](https://github.com/commanded/commanded/wiki)\n- [What is CQRS/ES?](https://kalele.io/blog-posts/really-simple-cqrs/)\n- [Frequently asked questions](https://github.com/commanded/commanded/wiki/FAQ)\n- [Getting help](https://github.com/commanded/commanded/wiki/Getting-help)\n- [Latest published Hex package](https://hex.pm/packages/commanded) \u0026 [documentation](https://hexdocs.pm/commanded/)\n\nMIT License\n\n[![Build Status](https://github.com/commanded/commanded/workflows/Test/badge.svg?branch=master)](https://github.com/commanded/commanded/actions) [![Join the chat at https://gitter.im/commanded/Lobby](https://badges.gitter.im/commanded/Lobby.svg)](https://gitter.im/commanded/Lobby?utm_source=badge\u0026utm_medium=badge\u0026utm_campaign=pr-badge\u0026utm_content=badge)\n\n---\n\n\u003e This README and the following guides follow the `master` branch which may not be the currently published version.\n\u003e\n\u003e [Read the documentation for the latest published version of Commanded on Hex](https://hexdocs.pm/commanded/).\n\n### Overview\n\n- [Getting started](guides/Getting%20Started.md)\n- [Choosing an event store](guides/Choosing%20an%20Event%20Store.md)\n  - [PostgreSQL-based EventStore](guides/Choosing%20an%20Event%20Store.md#postgresql-based-elixir-eventstore)\n  - [Greg Young's Event Store](guides/Choosing%20an%20Event%20Store.md#greg-youngs-event-store)\n- [Using Commanded](guides/Usage.md)\n  - [Aggregates](guides/Aggregates.md)\n    - [Example aggregate](guides/Aggregates.md#example-aggregate)\n    - [`Commanded.Aggregate.Multi`](guides/Aggregates.md#using-commandedaggregatemulti-to-return-multiple-events)\n    - [Aggregate state snapshots](guides/Aggregates.md#aggregate-state-snapshots)\n  - [Commands](guides/Commands.md)\n    - [Command handlers](guides/Commands.md#command-handlers)\n    - [Command dispatch and routing](guides/Commands.md#command-dispatch-and-routing)\n      - [Define aggregate identity](guides/Commands.md#define-aggregate-identity)\n      - [Multi-command registration](guides/Commands.md#multi-command-registration)\n      - [Dispatch timeouts](guides/Commands.md#timeouts)\n      - [Dispatch consistency guarantee](guides/Commands.md#command-dispatch-consistency-guarantee)\n      - [Dispatch returning execution result](guides/Commands.md#dispatch-returning-execution-result)\n      - [Aggregate lifespan](guides/Commands.md#aggregate-lifespan)\n      - [Composite command routers](guides/Commands.md#composite-command-routers)\n    - [Middleware](guides/Commands.md#middleware)\n      - [Example middleware](guides/Commands.md#example-middleware)\n    - [Composite command routers](guides/Commands.md#composite-command-routers)\n  - [Events](guides/Events.md)\n    - [Domain events](guides/Events.md#domain-events)\n    - [Event handlers](guides/Events.md#event-handlers)\n      - [Consistency guarantee](guides/Events.md#consistency-guarantee)\n      - [Error handling](guides/Events.md#handling-errors)\n    - [Upcasting events](guides/Events.md#upcasting-events)\n  - [Process managers](guides/Process%20Managers.md)\n    - [Example process manager](guides/Process%20Managers.md#example-process-manager)\n  - [Supervision](guides/Supervision.md)\n  - [Serialization](guides/Serialization.md)\n    - [Default JSON serializer](guides/Serialization.md#default-json-serializer)\n    - [Configuring JSON serialization](guides/Serialization.md#configuring-json-serialization)\n    - [Decoding event structs](guides/Serialization.md#decoding-event-structs)\n    - [Using an alternative serialization format](guides/Serialization.md#using-an-alternative-serialization-format)\n    - [Customising serialization](guides/Serialization.md#customising-serialization)\n  - [Read model projections](guides/Read%20Model%20Projections.md)\n- [Deployment](guides/Deployment.md)\n  - [Single node deployment](guides/Deployment.md#single-node-deployment)\n  - [Multi node cluster deployment](guides/Deployment.md#multi-node-cluster-deployment)\n  - [Multi node, but not clustered deployment](guides/Deployment.md#multi-node-but-not-clustered-deployment)\n- [Testing with Commanded](guides/Testing.md)\n- [Used in production?](#used-in-production)\n- [Example application](#example-application)\n- [Learn Commanded in 20 minutes](#learn-commanded-in-20-minutes)\n- [Choosing an event store provider](guides/Choosing%20an%20Event%20Store.md#writing-your-own-event-store-provider)\n- [Tooling](https://github.com/commanded/commanded/wiki/Tooling)\n- [Contributing](#contributing)\n- [Need help?](#need-help)\n\n---\n\n## Used in production?\n\nYes, see the [companies using Commanded](https://github.com/commanded/commanded/wiki/Companies-using-Commanded).\n\n## Example application\n\n[Conduit](https://github.com/slashdotdash/conduit) is an open source, example Phoenix 1.3 web application implementing the CQRS/ES pattern in Elixir. It was built to demonstrate the implementation of Commanded in an Elixir application for the [Building Conduit](https://leanpub.com/buildingconduit) book.\n\n## Learn Commanded in 20 minutes\n\n[Watch Bernardo Amorim introduce CQRS and event sourcing](https://www.youtube.com/watch?v=S3f6sAXa3-c) at Code Beam SF 2018. Including a tutorial on how to implement an Elixir application using these concepts with Commanded.\n\n## Contributing\n\nPull requests to contribute new or improved features, and extend documentation are most welcome.\n\nPlease follow the existing coding conventions, or refer to the [Elixir style guide](https://github.com/niftyn8/elixir_style_guide).\n\nYou should include unit tests to cover any changes. Run `mix test` to execute the test suite.\n\n### Contributors\n\nCommanded exists thanks to the following people who have contributed.\n\n\u003ca href=\"https://github.com/commanded/commanded/graphs/contributors\"\u003e\u003cimg src=\"https://opencollective.com/commanded/contributors.svg?width=890\u0026button=false\" width=\"890\" /\u003e\u003c/a\u003e\n\n- [Adil Yarulin](https://github.com/ayarulin)\n- [Alexandre de Souza](https://github.com/aleDsz)\n- [Andrey Akulov](https://github.com/astery)\n- [Andrzej Sliwa](https://github.com/andrzejsliwa)\n- [Ben Smith](https://github.com/slashdotdash)\n- [Benjamin Moss](https://github.com/drteeth)\n- [Bernardo Amorim](https://github.com/bamorim)\n- [Brenton Annan](https://github.com/brentonannan)\n- [Chris Brodt](https://github.com/uberbrodt)\n- [Chris Martin](https://github.com/trbngr)\n- [Christophe Juniet](https://github.com/cjuniet)\n- [Danilo Silva](https://github.com/silvadanilo)\n- [Dave Lucia](https://github.com/davydog187)\n- [David Carlin](https://github.com/davich)\n- [Damir Vandic](https://github.com/dvic)\n- [Danni Friedland](https://github.com/BlueHotDog)\n- [Dilaksun Bavarajan](https://github.com/DilaksunB)\n- [Ernesto](https://github.com/lex-mala)\n- [Fernando Mendes](https://github.com/justmendes)\n- [Florian Ebeling](https://github.com/febeling)\n- [Henry Hazan](https://github.com/henry-hz)\n- [JC](https://github.com/jccf091)\n- [Joan Zapata](https://github.com/JoanZapata)\n- [Joao Gilberto Moura](https://github.com/joaobalsini)\n- [João Thallis](https://github.com/joaothallis)\n- [John Wilger](https://github.com/jwilger)\n- [Joseph Lozano](https://github.com/joseph-lozano)\n- [Kian-Meng Ang](https://github.com/kianmeng)\n- [Kok J Sam](https://github.com/sammkj)\n- [Leif Gensert](https://github.com/leifg)\n- [Luís Ferreira](https://github.com/zamith)\n- [Marcelo Dominguez](https://github.com/marpo60)\n- [Matt Doughty](https://github.com/m-doughty)\n- [Matthew Boehlig](https://github.com/thetamind)\n- [Michael Herold](https://github.com/michaelherold)\n- [Miguel Palhas](https://github.com/naps62)\n- [Nigel Thorne](https://github.com/nigelthorne)\n- [Olafur Arason](https://github.com/olafura)\n- [Paolo Laurenti](https://github.com/PaoloLaurenti)\n- [Patrick Detlefsen](https://github.com/patrickdet)\n- [Phil Chen](https://github.com/fahchen)\n- [Raphaël Lustin](https://github.com/rlustin)\n- [Štefan Ľupták](https://github.com/EskiMag)\n- [Tobiasz Małecki](https://github.com/amatalai)\n- [Vladimir Drobyshevskiy](https://github.com/vheathen)\n- [Willy Wombat](https://github.com/octowombat)\n- [Yordis Prieto](https://github.com/yordis)\n- [Yuri de Figueiredo](https://github.com/y86)\n- [Zven](https://github.com/zven21)\n\n## Need help?\n\nPlease [open an issue](https://github.com/commanded/commanded/issues) if you encounter a problem, or need assistance. You can also seek help in the #commanded channel in the [official Elixir Slack](https://elixir-lang.slack.com/).\n","funding_links":["https://github.com/sponsors/slashdotdash","https://opencollective.com/commanded"],"categories":["Elixir","Clients by language","Libraries"],"sub_categories":["Erlang/OTP"],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommanded%2Fcommanded","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcommanded%2Fcommanded","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcommanded%2Fcommanded/lists"}