[0.8.0] - 2026-06-06
Changed
- Bumped
yog_exrequirement to~> 0.98.2.- Mermaid rendering: Node IDs are now sanitized to
n_0,n_1, etc. by Yog for Mermaid compatibility. Labels and styles remain unchanged. - DOT rendering: HTML-like labels are now emitted with proper single-angle bracket syntax (
label=<TABLE...>) instead of the previous double-angle bracket form.
- Mermaid rendering: Node IDs are now sanitized to
Added
Choreo.ERD — Database Entity-Relationship Modeling:
- Implemented
Choreo.ERDschema builder with strictNimbleOptionscolumn and relationship constraint validation. - Implemented themed HTML-like table record visualization (
Choreo.ERD.Render.DOT) supporting standard crow's foot multiplicities and post-rendering unquoting. - Implemented native Mermaid
erDiagramvisual syntax rendering (Choreo.ERD.Render.Mermaid). - Implemented a topological analysis suite (
Choreo.ERD.Analysis) including undirected BFS join path discovery, DFS circular foreign key cycle detection, isolated orphan entity tracking, and table coupling metrics. - Implemented
Choreo.Viewableprotocol forChoreo.ERDto enable standard graph lens operations (focus,zoom,filter,collapse). - Added ExDoc groupings and a full interactive Livebook walkthrough guide (
livebooks/erd_walkthrough.livemd).
- Implemented
Choreo.UML — Class & Struct Diagrams:
- Implemented
Choreo.UMLschema builder with strictNimbleOptionsfield, arity, visibility, and relationship constraint validation. - Implemented themed three-compartment HTML record table visualization (
Choreo.UML.Render.DOT) supporting standard class/struct/interface/behavior/protocol types, visibilities (+,-,#), and proper hollow/solid arrowhead line layouts. - Implemented Mermaid visual syntax rendering (
Choreo.UML.Render.Mermaid) supporting both flowchart layouts and nativeclassDiagramrendering. - Implemented
Choreo.Viewableprotocol for standard graph lens operations (focus,zoom,filter,collapse). - Implemented a static analysis suite (
Choreo.UML.Analysis) including circular dependency detection, behavior contract validation, and Robert C. Martin's coupling & stability metrics. - Added ExDoc groupings and a full interactive Livebook walkthrough guide (
livebooks/uml_walkthrough.livemd).
- Implemented
Choreo.Planner — Project Planning Diagrams:
- Implemented
Choreo.Plannerbuilder for project planning with tasks, milestones, users, and labels. - Implemented relationship builders:
contains/3(milestone hierarchy),depends_on/3(finish-to-start),blocks/3(semantic blocker),assign/3(ownership),tag/3(categorization), andrelates/3(association). - Implemented native Mermaid rendering (
Choreo.Planner.Render.Mermaid) supporting:kanban,:kanban_compat,:gantt, and:flowchartsyntaxes with status columns, color coding, and dependency scheduling. - Implemented themed DOT flowchart rendering (
Choreo.Planner.Render.DOT) viaYog.Multi.DOT. - Implemented a planning analysis suite (
Choreo.Planner.Analysis) includingready/1,blocked/1,critical_path/2,bottlenecks/1, andvalidate/1. - Added a full interactive Livebook walkthrough guide (
livebooks/planner_walkthrough.livemd).
- Implemented
Choreo.C4 — C4 Model Architecture Diagrams:
- Implemented
Choreo.C4schema builder for L1–L3 C4 modeling withadd_person/3,add_software_system/3,add_container/3, andadd_component/3. - Implemented parent/child clustering with automatic container assignment from
:parentreferences. - Implemented zoom-aware rendering via
Choreo.Viewableprotocol, enabling level-based filtering (System Context, Containers, Components). - Implemented themed DOT rendering (
Choreo.C4.Render.DOT) with C4-specific visual conventions: persons as ellipses, systems as boxes, containers as rounded boxes, and components as dashed boxes. - Implemented native Mermaid rendering (
Choreo.C4.Render.Mermaid) with matching shapes and built-in theme support. - Implemented a structural analysis suite (
Choreo.C4.Analysis) including missing parent detection, missing description/technology detection, isolated node detection, missing relationship labels, and generalvalidate/1. - Added a full interactive Livebook walkthrough guide (
livebooks/c4_walkthrough.livemd).
- Implemented
Choreo.Sequence — Sequence Diagrams:
- Implemented
Choreo.Sequencebuilder for ordered participant interactions withadd_actor/3,add_participant/3,message/4,async/4,return/4, andself_message/3. - Implemented activation boxes via
activate/2anddeactivate/2, plus notes (note/3) and fragments (loop,opt,alt/else,par,break,critical). - Implemented native Mermaid
sequenceDiagramrendering (Choreo.Sequence.Render.Mermaid) with actors, participants, activation boxes, notes, and fragments. - Implemented a best-effort DOT timeline fallback (
Choreo.Sequence.Render.DOT) for static image and PDF pipelines. - Implemented a quality analysis suite (
Choreo.Sequence.Analysis) including missing labels, unknown participants, isolated participants, unbalanced activations, unclosed fragments, and generalvalidate/1. - Added a full interactive Livebook walkthrough guide (
livebooks/sequence_walkthrough.livemd).
- Implemented
Native Mermaid Visualizers & Syntaxes:
Choreo.FSM: Added native:state_diagram(stateDiagram-v2) syntax support mapping initial/final states to entry/acceptance targets ([*] --> stateandstate --> [*]) and mapping custom labels.Choreo.Dependency: Added native:class_diagram(classDiagram) syntax support mapping application/module/library types to standard UML stereotypes (e.g.<<module>>) and mapping relationships to standard UML connectors (..>,--|>,-->).- Updated all walkthrough Livebooks and the
README.mdto demonstrate and utilize these alternative syntaxes.
Structural & Heatmap Analysis Suite:
- Implemented
Choreo.Analysis.heatmap/2for automatic, data-driven diagram coloring using configurable color scales. - Structural Analysis Suite:
- Implemented
Choreo.Analysis.cut_vertices/1(Articulation Points) to identify Single Points of Failure. - Implemented
Choreo.Analysis.core_numbers/1using K-Core decomposition to isolate tightly-coupled architectural "nuclei." - Implemented
Choreo.Analysis.reduce_transitive/1for transitive reduction of dependency meshes. - Implemented
Choreo.Analysis.path/4for domain-aware pathfinding (Fastest Path, Widest Path, etc.). - Added support for Custom Weight Variables in pathfinding via arbitrary metadata keys or custom lambda functions.
- Added
Choreo.Analysis.highlight/1to easily visualize pathfinding results in rendered diagrams.
- Implemented
- Added domain-specific heatmap analysis:
Choreo.Workflow.Analysis.heatmap/2for identifying execution latency hotspots.Choreo.Dataflow.Analysis.heatmap/2for identifying throughput and data-volume hotspots.Choreo.ThreatModel.Analysis.heatmap/2for identifying security risk hotspots based on threat density.
- Added
Choreo.Analysis.legend/1to generate visual color-scale keys for diagrams. - Generalized
Choreo.Analysis.centrality/2to support all Choreo diagram types (Workflow, Dataflow, etc.). - Added standard color palettes to
Choreo.Theme::heat(Yellow-Red),:cool(Blue), and:spectral(Rainbow).
- Implemented
Structural Enhancements:
- Updated cluster schema to support both atom and string
:styleoptions, resolving rendering crashes inYog.Multi.DOT.
- Updated cluster schema to support both atom and string
[0.7.1] - 2026-05-04
Added
- Theming API Overhaul:
- Implemented
Choreo.Theme.override/2to allow non-destructive deep-merging of nested theme maps (colors,shapes) while replacing top-level attributes likegraph_rankdir. - Added a standardized
theme/2helper function across all core modules (Workflow,Dataflow,MindMap,FSM,DecisionTree,Dependency, andThreatModel) to easily apply specific overrides while preserving default module schemas.
- Implemented
- Added
:retentionoption toChoreo.ThreatModel.add_data_store/3for modeling data lifecycles.
Fixed
- Added
:noneto the allowedprivilegetypes inChoreo.ThreatModelprocesses to support modeling unprivileged services. Choreo.ThreatModel.Analysisnow correctly downgrades the base severity of STRIDE threats (Spoofing, Tampering, Information Disclosure, Denial of Service) for processes with:noneprivilege to reflect their lower impact surface.
[0.7.0] - 2026-05-03
Added
Cross-module diagram composition (
Choreo.embed/4):- Safely merge modular sub-diagrams (
Workflow,Dataflow, etc.) into root clusters. - Automatic cluster namespace isolation and node ID prefixing.
- Safely merge modular sub-diagrams (
Custom theme presets and per-node style overrides across all modules:
- Overriding shape, fillcolor, fontcolor, style, and penwidth for individual nodes.
- Global theme preset capabilities.
Automated validation parameter docs using
NimbleOptions.docs/1.Strict Schema Validation using
NimbleOptionsacross all core modules:- All diagram builders (
Choreo.FSM,Choreo.DecisionTree,Choreo.ThreatModel,Choreo.Workflow,Choreo.Dataflow, andChoreo.Dependency) now enforce compile-time and runtime options validation on nodes and edges.
- All diagram builders (
Multigraph support (parallel edges) for
ChoreoandChoreo.FSM:- Multiple distinct edges can now exist between the same pair of nodes
Choreo.edges_with_meta/1— returns[{from, to, cost, meta}]tuplesChoreo.to_simple_graph/2— collapses parallel edges for algorithm analysis (default combine:min/2)
Choreo.MindMap— concept-mapping builder with hierarchical branches and associative cross-links- Nodes:
set_root/3,add_topic/3,add_subtopic/3,add_note/3 - Edges:
branch/4(hierarchical),associate/4(cross-link with dashed, undirected rendering) - Analysis:
depth/1,breadth/1,leaves/1,orphan_nodes/1,max_width/1,paths/1,type_frequencies/1,cyclic?/1,validate/1 - 5 built-in themes (
:default,:dark,:warm,:forest,:ocean) with mind-map-specific colour palettes - Same-rank sibling alignment in DOT output
- Nodes:
Choreo.View— graph lens layer for zoom, focus, filter, and collapse transforms across diagram modulesfocus/3— ego-graph view (node + N-hop neighbourhood, bidirectional by default)focus_between/4— shortest-path view between two nodes, with optional neighbourhood radiuszoom/2— module-defined level-based filtering with optionaltransitive: truefor virtual edges through removed intermediatesfilter/3— predicate-based node filtering with optionaltransitive: truecollapse/4— aggregate multiple nodes into one, automatically rewiring all incoming/outgoing edges and removing duplicates/self-loops- Protocol-based design (
Choreo.Viewable) so each module defines its own rebuild, root-resolution, zoom-predicate, and virtual-edge styling - Virtual edges are automatically styled (dashed, pale) via the protocol's
virtual_edge_meta/1callback - Supports all diagram modules:
Choreo,Choreo.MindMap,Choreo.DecisionTree,Choreo.Dataflow,Choreo.ThreatModel,Choreo.Dependency, andChoreo.Workflow Choreo.Viewtransparently handles both simple graphs (Yog.Graph) and multigraphs (Yog.Multi.Graph) via internal dispatch helpers
Choreo.FSMenforces 100% DFA purity at build time:- Epsilon transitions (empty labels) are rejected with
ArgumentError - Different transition labels between the same state pair are now allowed (e.g.,
q0 --"a"--> q1andq0 --"b"--> q1) - Duplicate labels from the same state are still rejected (DFA determinism)
- Epsilon transitions (empty labels) are rejected with
Changed
- Breaking:
Choreocore module converted from simple graph (Yog.Graph) to multigraph (Yog.Multi.Graph):edge_metais now keyed byedge_id(integer) instead of{from, to}tuplesconnect/4andadd_dataflow/4useYog.Multi.add_edge/4Choreo.Render.DOTusesYog.Multi.DOTfor rendering parallel edgesChoreo.Analysisinternally collapses multigraphs to simple graphs before running algorithms
- Breaking:
Choreo.FSMconverted from simple graph to multigraph:add_transition/4usesYog.Multi.add_edge/4Choreo.FSM.Render.DOTusesYog.Multi.DOTChoreo.FSM.Analysisrewritten with multigraph-aware BFS and reverse-reachability helpers
- Bumped
yog_exrequirement to~> 0.97.1(providesYog.Multi.DOT) - Breaking: Restored pure DFA boundaries across execution engines.
- Dropped ambiguous NFA mappings (
Analysis.to_dfa/1). - Refactored
%Choreo.FSM{meta: %{initial_state: state}}singular state vectors. - All edge builders now raise
ArgumentErroron duplicate(from, to)pairs instead of silently overwriting: Choreo.FSM.add_transition/4no longer raises on duplicate(from, to)pairs — it allows parallel edges with different labels (DFA-compliant)- Removed obsolete "single-edge-per-pair limitation" notes from docstrings where multigraph is now supported.
0.6.0 — 2026-04-25
Added
Choreo.FSM.remove_initial_state/2— explicitly demotes a state from initial status without deleting the node.Choreo.FSM.remove_final_state/2— explicitly demotes a state from final status without deleting the node.
Changed
- Breaking:
Choreo.FSMstate typing moved from nodestate_typefield tometaMapSets (initial_statesandfinal_states).add_state/3withtype: :initialortype: :finalnow populates these sets directly. Choreo.FSM.add_state/3withtype: :normalnow explicitly clears a state from bothinitial_statesandfinal_statesin meta. Omitting the:typeoption (e.g. updating a label) preserves existing status.Choreo.FSM.Analysis.deterministic?/1now enforces a single initial state in addition to unique outgoing transition labels, aligning with classical DFA definition.
Fixed
add_state/3 with type: :initialnow correctly registers the state inmeta.initial_statesso thatreachable_states/1,accepts?/2, and rendering treat it as an entry point.- Fixed broken doctests in
Choreo.FSM.add_initial_state/2andChoreo.FSM.add_final_state/2that still referenced the removedstate_typenode field.
0.5.0 — 2026-04-24
Added
Choreo.Workflow— task orchestration builder with Saga-pattern compensation support- Nodes:
add_start/3,add_end/3,add_task/3,add_decision/3,add_fork/3,add_join/3,add_compensation/3,add_event/3 - Edge types:
:sequence,:compensation,:retry,:failure,:timeout - Swimlane grouping for visual organization
- Analysis:
critical_path/1,parallelizable_tasks/1,failure_scenarios/1,missing_compensations/1,bottlenecks/2,simulate/1,validate/1
- Nodes:
- Internal helpers module — shared
bfs_reachable/2,build_cluster_subgraphs/2,best_predecessor/3extracted to eliminate Credo duplicate-code warnings
Changed
- Breaking: Package and all modules renamed from
YogSystemtoChoreo Choreo.DecisionTree.set_root/3andbranch/4now returnt()directly (pipeable), raisingArgumentErroron invalid use. Removed redundantbranch!/4.
Fixed
- All
mix credo --strictwarnings resolved (double filters, deep nesting, unused aliases, list append inefficiencies,Enum.map_join/3usage,with→caseconversions) - Incorrect
@specreturn types for edge-returning functions (String.t()→number())
0.1.0 — 2026-04-24
Added
Choreo— infrastructure architecture diagrams with typed nodes (database, cache, service, queue, etc.), clusters, and MST/topological-sort analysisChoreo.FSM— finite-state machine builder with initial/final states, transitions, determinism checks, NFA simulation, equivalence checking, and pruningChoreo.Dataflow— pipeline / ETL diagram builder with sources, transforms, buffers, conditionals, merges, and sinks- Analysis: cycle detection, topological sort, orphan/dead-end detection, bottlenecks, critical-path (longest path), throughput simulation, backpressure detection
- Edge types: normal, error, retry, dead-letter
- Cluster support
Choreo.Dependency— software dependency graphs with applications, libraries, modules, interfaces, and tests- Analysis: circular dependency extraction (actual paths), impact analysis (
affected_by/2,depends_on/2), layer violation detection, centrality ranking, longest dependency chain - Cycle edge highlighting in DOT output
- Analysis: circular dependency extraction (actual paths), impact analysis (
Choreo.DecisionTree— classification tree builder with enforced tree invariants- Analysis:
decide/2evaluation, path enumeration, depth/breadth metrics, feature importance, redundant-branch pruning
- Analysis:
Choreo.ThreatModel— STRIDE threat modeling with automated threat generation- Analysis: auto-generated STRIDE threats per element type, trust-boundary crossing detection, exposed data stores, high-risk processes, unencrypted flow detection
- Severity scoring based on sensitivity, privilege, encryption, and trust level
- Shared DOT rendering pipeline with
:default,:dark, and customChoreo.Themesupport - Graphviz integration in ExDoc for inline diagram rendering
- Credo, Dialyzer, and ExCoveralls tooling