<commit_before>---
# You don't need to edit this file, it's empty on purpose.
# Edit theme's home layout instead if you wanna make some changes
# See: https://jekyllrb.com/docs/themes/#overriding-theme-defaults
# layout: home
title: Hello Sequent
---

Sequent is a CQRS and event sourcing framework written in Ruby.

In short: This means instead of storing the current state of your domain model we only store what happened (events).

If you are unfamiliar with these concepts you can catch up with:

* [Event sourcing](http://martinfowler.com/eaaDev/EventSourcing.html)
* [<NAME>'s presentation at GOTO Amsterdam](http://gotocon.com/dl/goto-amsterdam-2013/slides/BobForma_and_LarsVonk_EventSourcingInProductionSystems.pdf)
* [Erik's blog series](http://blog.zilverline.com/2011/02/10/towards-an-immutable-domain-model-monads-part-5/)
* [Simple CQRS example by <NAME>](https://github.com/gregoryyoung/m-r)
* [Google](http://www.google.nl/search?ie=UTF-8&q=cqrs+event+sourcing)

## License

Sequent is released under the MIT License.<commit_msg>New content landing page sequent.io<commit_after>---
sidebar: false
title: Sequent 3.0
---
Sequent is a CQRS and event sourcing framework (ES) written in Ruby. This site is intended
to help you learn and develop CQRS / ES applications in Ruby (using Sequent).
Sequent **focusses** on the **domain logic** of your application. It is web framework agnostic.
You can use it with Rails, Sinatra or whatever framework you like.

There are several guides available

## Getting Started
New to Sequent? [Getting Started](/docs/getting-started.html) the place to start.

## Concepts

### AggregateRoot
An [AggregateRoot](/docs/concepts.html#AggregateRoot) is the class that encapsulates your domain logic. Your aggregates form the heart of your application.


### Event
[Events](/docs/concepts.html#Event) are domain events that are significant to your domain. An AggregateRoot is basically a stream of Events.


### Command
[Commands](/docs/concepts.html#Command) form the API of your domain.

### CommandHandler
Commands are handled by [CommmandHandlers](/docs/concepts.html#CommandHandler). Based on the incoming Command the CommandHandler decides what to do.

### Projector
[Projectors](/docs/concepts.html#Projector) respond to Events. They are responsible for update the Projections in the view schema.

### Workflow
[Workflows](/docs/concepts.html#Workflow) also respond to Events. They are typically used for anything else you want to do with events. (E.g. execute another command).


## Further reading

* [Event sourcing](http://martinfowler.com/eaaDev/EventSourcing.html)
* [<NAME> Bob's presentation at GOTO Amsterdam](http://gotocon.com/dl/goto-amsterdam-2013/slides/BobForma_and_LarsVonk_EventSourcingInProductionSystems.pdf)
* [Erik's blog series](http://blog.zilverline.com/2011/02/10/towards-an-immutable-domain-model-monads-part-5/)
* [Simple CQRS example by <NAME>](https://github.com/gregoryyoung/m-r)
* [Google](http://www.google.nl/search?ie=UTF-8&q=cqrs+event+sourcing)

## License

Sequent is released under the MIT License.
{'fraction_non_alphanumeric': 0.11190398962049951, 'fraction_numerical': 0.009730781706130393, 'mean_word_length': 4.988349514563107, 'pattern_counts': {'":': 0, '<': 7, '<?xml version=': 0, '>': 7, 'https://': 3, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5539092', 'n_tokens_mistral': 995, 'n_tokens_neox': 940, 'n_words': 308}