estorm: Event Storming boards as plain text
Event Storming workshops are great. What comes after them usually isn’t: a few photos of a wall full of stickies that nobody looks at again, and that go stale the moment the model changes.
estorm is my attempt at fixing that. You write the flow as plain text and get a board of stickies, rendered as SVG:
== Sales ==
Customer: Place order -> (Order) -> OrderPlaced
after 30 minutes unless PaymentCaptured
then Cancel unpaid order -> (Order) -> OrderCancelled
== Payments ==
when OrderPlaced
then Charge card -> [Payment provider] -> PaymentCaptured
! What if the charge succeeds but our callback times out?Actors, commands, aggregates, external systems, policies, read models and hotspots each have a short notation, and bounded contexts become swimlanes.
It’s not meant to replace the workshop itself. Run that with paper or a whiteboard, then capture the result in text. The board lives in the repository next to the code, changes go through review, and the diffs are readable.
There are a few ways to use it:
- A browser editor, a single offline HTML file with live preview, SVG export and share links
- A command line tool for rendering and linting boards:
npm install -g @villev/estorm - Editor support for VS Code, and an LSP for Neovim and others
The source is on GitHub.