# Commanded

Use Commanded to build your own Elixir applications following the [CQRS/ES]( pattern.

Provides support for:

- Command registration and dispatch.
- Hosting and delegation to aggregate roots.
- Event handling.
- Long running process managers.

Use with one of the following event stores for persistence:

- [EventStore]( Elixir library, using PostgreSQL for persistence
- Greg Young's [Event Store](


- [Changelog](
- [Wiki](
- [Frequently asked questions](
- [Getting help](

MIT License

[![Build Status](]( [![Join the chat at](](


### Overview

- [Getting started](guides/
- [Choosing an event store](guides/
  - [PostgreSQL-based EventStore](guides/
  - [Greg Young's Event Store](guides/
- [Using Commanded](guides/
  - [Aggregate roots](guides/
  - [Commands](guides/
    - [Command handlers](guides/
    - [Command dispatch and routing](guides/
    - [Aggregate lifespan](guides/
    - [Middleware](guides/
  - [Events](guides/
    - [Event handlers](guides/
  - [Process managers](guides/
  - [Supervision](guides/
  - [Serialization](guides/
  - [Read model projections](guides/
- [Used in production?](#used-in-production)
- [Example application](#example-application)
- [Limitations](#limitations)
- [Event store provider](guides/
- [Contributing](#contributing)
- [Need help?](#need-help)


## Used in production?

Yes, Commanded is being used in production.

- Case Study: [Building a CQRS/ES web application in Elixir using Phoenix](

## Example application

[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]( book.

## Limitations

Commanded is currently limited to running on a single node. Support for running on a cluster of nodes ([#39]( is under active development.

## Contributing

Pull requests to contribute new or improved features, and extend documentation are most welcome.

Please follow the existing coding conventions, or refer to the [Elixir style guide](

You should include unit tests to cover any changes. Run `mix test` to execute the test suite.

### Contributors

- [Andrey Akulov](
- [Andrzej Sliwa](
- [Brenton Annan](
- [Henry Hazan](

## Need help?

Please [open an issue]( if you encounter a problem, or need assistance. You can also seek help in the [Gitter chat room]( for Commanded.

For commercial support, and consultancy, please contact [Ben Smith](