{"id":51070675,"url":"https://github.com/code-shoily/choreo","last_synced_at":"2026-06-23T10:01:42.756Z","repository":{"id":353718359,"uuid":"1220636581","full_name":"code-shoily/choreo","owner":"code-shoily","description":"Domain-specific diagram builders and graph analyzers on top of Yog","archived":false,"fork":false,"pushed_at":"2026-06-15T05:14:42.000Z","size":1143,"stargazers_count":23,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-15T06:26:42.489Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"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/code-shoily.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,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-25T06:08:28.000Z","updated_at":"2026-06-15T06:01:01.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/code-shoily/choreo","commit_stats":null,"previous_names":["code-shoily/choreo"],"tags_count":4,"template":false,"template_full_name":null,"purl":"pkg:github/code-shoily/choreo","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-shoily%2Fchoreo","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-shoily%2Fchoreo/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-shoily%2Fchoreo/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-shoily%2Fchoreo/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/code-shoily","download_url":"https://codeload.github.com/code-shoily/choreo/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/code-shoily%2Fchoreo/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34684686,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-23T02:00:07.161Z","response_time":65,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":[],"created_at":"2026-06-23T10:01:42.020Z","updated_at":"2026-06-23T10:01:42.751Z","avatar_url":"https://github.com/code-shoily.png","language":"Elixir","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Choreo\n\n[![Hex Version](https://img.shields.io/hexpm/v/choreo.svg)](https://hex.pm/packages/choreo)\n[![Hex Docs](https://img.shields.io/badge/hex-docs-ffaff3)](https://hexdocs.pm/choreo/)\n[![CI](https://github.com/code-shoily/choreo/actions/workflows/ci.yml/badge.svg)](https://github.com/code-shoily/choreo/actions)\n[![Coverage Status](https://coveralls.io/repos/github/code-shoily/choreo/badge.svg?branch=main)](https://coveralls.io/github/code-shoily/choreo?branch=main)\n[![License](https://img.shields.io/badge/License-MIT-blue.svg)](https://opensource.org/licenses/MIT)\n\n\u003e Domain-specific diagram builders and graph analyzers on top of [Yog](https://github.com/code-shoily/yog_ex).\n\nChoreo is a family of Elixir libraries that let you model, analyze, and render complex systems as graphs. Instead of drawing boxes and arrows by hand, you write code. Instead of static pictures, you get live analysis — reachability, cycles, bottlenecks, threat generation, and more.\n\n```elixir\nalias Choreo.Dataflow\n\n# A dataflow pipeline with one line of analysis\npipeline =\n  Dataflow.new()\n  |\u003e Dataflow.add_source(:sensor, label: \"IoT Sensor\")\n  |\u003e Dataflow.add_transform(:parse, label: \"JSON Parser\")\n  |\u003e Dataflow.add_sink(:db, label: \"TimescaleDB\")\n  |\u003e Dataflow.connect(:sensor, :parse, data_type: \"raw bytes\")\n  |\u003e Dataflow.connect(:parse, :db, data_type: \"event\")\n\nDataflow.Analysis.cyclic?(pipeline)      #=\u003e false\nDataflow.to_mermaid(pipeline)            #=\u003e Mermaid diagram\n```\n\n```mermaid\ngraph TD\n  classDef default color:white\n  parse[[\"JSON Parser\"]]\n  db[\"TimescaleDB\"]\n  sensor([\"IoT Sensor\"])\n  style parse fill:#3b82f6\n  style db fill:#f43f5e\n  style sensor fill:#10b981\n  sensor --\u003e|raw bytes| parse\n  parse --\u003e|event| db\n```\n\n---\n\n## Installation\n\nAdd `choreo` to your `mix.exs`:\n\n```elixir\ndef deps do\n  [\n    {:choreo, \"~\u003e 0.9\"}\n  ]\nend\n```\n\n---\n\n## Detailed Guides\n\nChoreo supports 13 different artifact modeling vocabularies. They are categorized and detailed in the following guides:\n\n1. **[Architecture \u0026 Design Modeling](guides/architecture_and_design.md)**\n   * System Architecture (`Choreo`)\n   * Cloud Network Topology (`Choreo.Infrastructure`)\n   * C4 Model Architecture (`Choreo.C4`)\n   * STRIDE Threat Modeling (`Choreo.ThreatModel`)\n   * Domain-Driven Design \u0026 Event Storming (`Choreo.Domain`)\n   * Database ERD Design (`Choreo.ERD`)\n   * UML Class \u0026 Struct Diagrams (`Choreo.UML`)\n\n2. **[Behavior \u0026 Flow Modeling](guides/behavior_and_flows.md)**\n   * Finite State Machines (`Choreo.FSM`)\n   * Sequence Diagrams (`Choreo.Sequence`)\n   * Saga Task Orchestration (`Choreo.Workflow`)\n   * Dataflow Pipelines (`Choreo.Dataflow`)\n\n3. **[Data \u0026 Structure Modeling](guides/data_and_structure.md)**\n   * Software Dependency Graphs (`Choreo.Dependency`)\n   * Decision Trees (`Choreo.DecisionTree`)\n   * Concept Mapping / Mind Maps (`Choreo.MindMap`)\n   * Project Task Planning (`Choreo.Planner`)\n\n---\n\n## Interactive Notebooks\n\nThe `livebooks/` directory contains interactive walkthroughs and integration examples that you can run directly in [Livebook](https://livebook.dev/):\n\n- **`livebooks/guides/`** — step-by-step introductions to each Choreo module and diagram type.\n- **`livebooks/integrations/`** — notebooks that bridge Choreo with third-party tools and data sources:\n  - [Finitomata](livebooks/integrations/choreo_finitomata.livemd) — design FSMs in Choreo, run them with Finitomata, and analyze them back in Choreo.\n  - [GitHub Issues](livebooks/integrations/github_issues_explorer.livemd) — turn a public repo's issues into a Planner and Mind Map.\n  - [Hex Dependencies](livebooks/integrations/hex_dependency_explorer.livemd) — crawl any Hex package's dependency tree.\n  - [Mix Xref](livebooks/integrations/mix_xref_explorer.livemd) — visualize and analyze internal Elixir project dependencies.\n  - [Ecto Schema ERD](livebooks/integrations/ecto_schema_erd.livemd) — introspect Ecto schemas and render them as an interactive ERD.\n  - [Phoenix LiveView Explorer](livebooks/integrations/phoenix_liveview_explorer.livemd) — discover LiveView modules and render their callback sequence and state machine.\n- **`livebooks/extending_choreo/`** — tutorials that walk through adding new diagram types, analysis vocabularies, and protocol implementations to Choreo:\n  - [Git Graph](livebooks/extending_choreo/git_graph.livemd) — extend Choreo with a Mermaid `gitGraph` renderer, from builder to real `git log` adapter.\n  - [Call Graph Analysis](livebooks/extending_choreo/call_graph_analysis.livemd) — extend Choreo with an analysis-first call graph: dead functions, cycles, hotspots, and impact analysis.\n  - [FSM Viewable](livebooks/extending_choreo/fsm_viewable.livemd) — add `Choreo.Viewable` support to `Choreo.FSM` so it can be zoomed, focused, and filtered.\n\n---\n\n## Graph Analysis \u0026 Heatmaps\n\nChoreo provides graph analysis tools to identify \"hotspots\" in your architecture, workflows, and pipelines. Use `heatmap/2` to automatically color nodes based on importance or performance metrics.\n\n| Metric | Measure | Question | Best for |\n|--------|---------|----------|----------|\n| **Structural Importance** | Betweenness Centrality | \"Which nodes are critical bridges/connectors?\" | `Choreo`, `Dependency` |\n| **Connectivity** | Degree Centrality | \"Which nodes have the most connections?\" | `MindMap`, `Dependency` |\n| **SPOF Detection** | Articulation Points | \"Which nodes would disconnect the system if they failed?\" | `Choreo`, `Dataflow` |\n| **Nucleus Detection** | K-Core Decomposition | \"Which nodes form the most tightly-coupled core?\" | `Choreo`, `Dependency` |\n| **Dependency Reduction** | Transitive Reduction | \"What is the minimal set of dependencies that preserve reachability?\" | `Dependency` |\n| **Path Analysis** | Dijkstra / Widest Path | \"What is the fastest or highest-throughput path between two points?\" | `Workflow`, `Dataflow` |\n| **Execution Hotspots** | Latency Heatmap | \"Which tasks slow down the entire workflow?\" | `Workflow` |\n| **Volume Hotspots** | Throughput Heatmap | \"Which stages handle the most data volume?\" | `Dataflow` |\n| **Security Hotspots** | Risk Heatmap | \"Which components have the most security threats?\" | `ThreatModel` |\n\n---\n\n## Themes \u0026 Rendering\n\nAll modules render to **DOT (Graphviz)** and **Mermaid.js** via a shared theming pipeline.\n\n```elixir\n# DOT output (Graphviz)\nChoreo.to_dot(system, theme: :default)\nChoreo.to_dot(system, theme: :dark)\n\n# Mermaid.js output (GitHub, GitLab, Notion, Livebook)\nChoreo.to_mermaid(system, theme: :default)\nChoreo.to_mermaid(system, theme: :ocean)\n\n# Custom theme\ntheme = Choreo.Theme.custom(\n  colors: %{database: \"#ff0000\", service: \"#00ff00\"},\n  graph_bgcolor: \"#0f172a\",\n  node_fontcolor: \"white\"\n)\nChoreo.to_dot(system, theme: theme)\nChoreo.to_mermaid(system, theme: theme)\n```\n\n---\n\n## Testing\n\n```bash\nmix test\n```\n\nAll modules ship with comprehensive ExUnit test suites covering builders, analysis, rendering, and doctests.\n\n---\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode-shoily%2Fchoreo","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcode-shoily%2Fchoreo","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcode-shoily%2Fchoreo/lists"}