code-shoily
Choreo - a graph based diagram design and analysis tool
I’d love to share Choreo — a code-first toolkit designed to help map, visualize, and run metrics on your system architectures.
Choreo embraces the idea of architecture as data. You describe your workflows, pipelines, or data paths declaratively in Elixir, and Choreo builds them up using Yog underneath.
You get both customizable Graphviz DOT layouts, and utilize the built-in architectural validation and analysis.
Supported domains out of the box:
- Finite State Machines (
Choreo.FSM): Trace state transitions, detect terminal dead-ends, and identify unreachable states. - Workflows (
Choreo.Workflow): Map out critical execution paths, identify latency bottlenecks, and verify Saga pattern constraints (e.g. ensuring compensation paths safely reach termination targets). - Data Pipelines (
Choreo.Dataflow): Simulate backpressure scenarios, measure stage constraints, and flag unhandled error branches. - Dependency Trees (
Choreo.Dependency): Unpack cyclic bottlenecks, clean transitive bloat, and compute Uncle Bob’s structural Instability Metrics. - Threat Models (
Choreo.ThreatModel): Run stride evaluations automatically over mapped vectors.
Quick Example:
alias Choreo.FSM
fsm =
FSM.new()
|> FSM.add_state(:cart, initial: true)
|> FSM.add_state(:processing)
|> FSM.add_state(:completed, final: true)
|> FSM.add_state(:failed, final: true)
|> FSM.transition(:cart, :processing, "checkout")
|> FSM.transition(:processing, :completed, "success")
|> FSM.transition(:processing, :failed, "error")
# Export stunning diagrams with theming
IO.puts FSM.to_dot(fsm, theme: :dark)
Give the documentation a spin or check the source repo:
https://github.com/code-shoily/choreo
I am actively working with it and bug-fixes will be made, and new features will be added frequently.
Most Liked
mudasobwa
I checked FSMs and I wonder what does mean plural initial states? It kinda violates everything I know about FInite Automata.
code-shoily
I am removing support for NFAs and staying within DFA. My trying to avoid epsilon transitions added more headaches than otherwise.
Thank you again for making me rethink this.
Off-topic but just checked Cure. Wow. I’ll talk more on that channel.
code-shoily
I tried out Finitomata yesterday. A brilliant project. I was curious if I could use Choreo + Finitomata somehow. So was playing around a bit and got this Livebook. This should run as-is if you have runbook and helped me appreciate the project more!
Thanks for inspiring this @mudasobwa
Last Post!
code-shoily
Spot on with all your points! This is by no means a serious livebook, just an excuse to explore the API and checking out if I could test out the new analyses functions I came up with after lurking your blog. ![]()
I’ll update the guide, especialy the noisy Process.sleep-s.
Thank you.
Popular in Announcing
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #elixirconf-us
- #advent-of-code
- #distillery
- #processes
- #api
- #forms
- #metaprogramming
- #security
- #hex









