sirena 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.github/workflows/build_deploy.yml +59 -0
- data/.github/workflows/links.yml +85 -0
- data/.github/workflows/rake.yml +15 -0
- data/.github/workflows/release.yml +27 -0
- data/.gitignore +68 -0
- data/.rspec +3 -0
- data/.rubocop.yml +14 -0
- data/.rubocop_todo.yml +70 -0
- data/ARCHITECTURE.md +744 -0
- data/Gemfile +12 -0
- data/LICENSE +25 -0
- data/README.adoc +357 -0
- data/Rakefile +11 -0
- data/docs/.gitignore +1 -0
- data/docs/Gemfile +13 -0
- data/docs/_config.yml +182 -0
- data/docs/_diagram_types/architecture-diagram.adoc +314 -0
- data/docs/_diagram_types/block-diagram.adoc +345 -0
- data/docs/_diagram_types/c4-diagram.adoc +559 -0
- data/docs/_diagram_types/class-diagram.adoc +816 -0
- data/docs/_diagram_types/er-diagram.adoc +719 -0
- data/docs/_diagram_types/error-diagram.adoc +114 -0
- data/docs/_diagram_types/examples/flowchart-examples.adoc +29 -0
- data/docs/_diagram_types/flowchart.adoc +488 -0
- data/docs/_diagram_types/gantt-chart.adoc +502 -0
- data/docs/_diagram_types/git-graph.adoc +600 -0
- data/docs/_diagram_types/index.adoc +192 -0
- data/docs/_diagram_types/info-diagram.adoc +103 -0
- data/docs/_diagram_types/kanban-diagram.adoc +262 -0
- data/docs/_diagram_types/mindmap.adoc +603 -0
- data/docs/_diagram_types/packet-diagram.adoc +378 -0
- data/docs/_diagram_types/pie-chart.adoc +335 -0
- data/docs/_diagram_types/quadrant-chart.adoc +406 -0
- data/docs/_diagram_types/radar-chart.adoc +528 -0
- data/docs/_diagram_types/requirement-diagram.adoc +416 -0
- data/docs/_diagram_types/sankey-diagram.adoc +357 -0
- data/docs/_diagram_types/sequence-diagram.adoc +664 -0
- data/docs/_diagram_types/state-diagram.adoc +658 -0
- data/docs/_diagram_types/timeline.adoc +352 -0
- data/docs/_diagram_types/treemap-diagram.adoc +462 -0
- data/docs/_diagram_types/user-journey.adoc +602 -0
- data/docs/_features/index.adoc +129 -0
- data/docs/_guides/cli-reference.adoc +203 -0
- data/docs/_guides/index.adoc +56 -0
- data/docs/_guides/installation.adoc +100 -0
- data/docs/_guides/quick-start.adoc +132 -0
- data/docs/_pages/comparison.adoc +441 -0
- data/docs/_pages/compatibility.adoc +300 -0
- data/docs/_pages/index.adoc +39 -0
- data/docs/_references/index.adoc +103 -0
- data/docs/_tutorials/index.adoc +57 -0
- data/docs/index.adoc +166 -0
- data/docs/lychee.toml +54 -0
- data/examples/.gitignore +10 -0
- data/examples/README.adoc +196 -0
- data/examples/README.md +64 -0
- data/examples/architecture/01-basic-services.mmd +9 -0
- data/examples/architecture/01-basic-services.svg +37 -0
- data/examples/architecture/02-service-groups.mmd +16 -0
- data/examples/architecture/02-service-groups.svg +55 -0
- data/examples/architecture/README.adoc +79 -0
- data/examples/block/01-basic-blocks.mmd +13 -0
- data/examples/block/01-basic-blocks.svg +44 -0
- data/examples/block/02-block-shapes.mmd +13 -0
- data/examples/block/02-block-shapes.svg +47 -0
- data/examples/block/README.adoc +85 -0
- data/examples/c4/01-context-diagram.mmd +10 -0
- data/examples/c4/01-context-diagram.svg +45 -0
- data/examples/c4/02-container-diagram.mmd +24 -0
- data/examples/c4/02-container-diagram.svg +105 -0
- data/examples/c4/README.adoc +92 -0
- data/examples/class_diagram/01-basic-classes.mmd +61 -0
- data/examples/class_diagram/01-basic-classes.svg +117 -0
- data/examples/class_diagram/02-relationships.mmd +61 -0
- data/examples/class_diagram/02-relationships.svg +129 -0
- data/examples/class_diagram/README.adoc +93 -0
- data/examples/er_diagram/01-basic-entities.mmd +64 -0
- data/examples/er_diagram/01-basic-entities.svg +5 -0
- data/examples/er_diagram/02-cardinality.mmd +57 -0
- data/examples/er_diagram/02-cardinality.svg +125 -0
- data/examples/er_diagram/README.adoc +88 -0
- data/examples/error/01-basic-error.mmd +1 -0
- data/examples/error/01-basic-error.svg +13 -0
- data/examples/error/02-error-display.mmd +1 -0
- data/examples/error/02-error-display.svg +13 -0
- data/examples/error/README.adoc +71 -0
- data/examples/error_message_example.svg +13 -0
- data/examples/flowchart/00-original.mmd +13 -0
- data/examples/flowchart/00-original.svg +5 -0
- data/examples/flowchart/01-basic-flow.mmd +7 -0
- data/examples/flowchart/01-basic-flow.svg +52 -0
- data/examples/flowchart/01-basic-flow.yml +13 -0
- data/examples/flowchart/02*.svg +87 -0
- data/examples/flowchart/02-node-shapes.mmd +9 -0
- data/examples/flowchart/02-node-shapes.svg +33 -0
- data/examples/flowchart/03-edge-types.mmd +7 -0
- data/examples/flowchart/03-edge-types.svg +53 -0
- data/examples/flowchart/04-subgraphs.mmd +9 -0
- data/examples/flowchart/04-subgraphs.svg +33 -0
- data/examples/flowchart/05-styling.mmd +9 -0
- data/examples/flowchart/05-styling.svg +33 -0
- data/examples/flowchart/06-complex-flow.mmd +8 -0
- data/examples/flowchart/06-complex-flow.svg +59 -0
- data/examples/flowchart/README.adoc +167 -0
- data/examples/gantt/01-simple-timeline.* +14 -0
- data/examples/gantt/01-simple-timeline.mmd +6 -0
- data/examples/gantt/01-simple-timeline.svg +26 -0
- data/examples/gantt/02-task-dependencies.mmd +6 -0
- data/examples/gantt/02-task-dependencies.svg +26 -0
- data/examples/gantt/README.adoc +86 -0
- data/examples/git_graph/01-linear-history.mmd +12 -0
- data/examples/git_graph/01-linear-history.svg +26 -0
- data/examples/git_graph/02-branching.mmd +12 -0
- data/examples/git_graph/02-branching.svg +26 -0
- data/examples/git_graph/README.adoc +73 -0
- data/examples/info/02-showinfo.mmd +1 -0
- data/examples/info/02-showinfo.svg +10 -0
- data/examples/info/README.adoc +58 -0
- data/examples/info_showinfo_example.svg +10 -0
- data/examples/kanban/01-simple-board.mmd +8 -0
- data/examples/kanban/01-simple-board.svg +43 -0
- data/examples/kanban/02-workflow.mmd +8 -0
- data/examples/kanban/02-workflow.svg +43 -0
- data/examples/kanban/README.adoc +79 -0
- data/examples/mindmap/01-simple-tree.mmd +19 -0
- data/examples/mindmap/01-simple-tree.svg +61 -0
- data/examples/mindmap/02-knowledge-map.mmd +19 -0
- data/examples/mindmap/02-knowledge-map.svg +61 -0
- data/examples/mindmap/README.adoc +77 -0
- data/examples/packet/01-basic-packet.* +17 -0
- data/examples/packet/01-basic-packet.mmd +4 -0
- data/examples/packet/01-basic-packet.svg +82 -0
- data/examples/packet/README.adoc +58 -0
- data/examples/pie/01-simple-chart.mmd +5 -0
- data/examples/pie/01-simple-chart.svg +17 -0
- data/examples/pie/02-labeled-slices.mmd +6 -0
- data/examples/pie/02-labeled-slices.svg +19 -0
- data/examples/pie/README.adoc +75 -0
- data/examples/quadrant/01-basic-quadrant.mmd +13 -0
- data/examples/quadrant/01-basic-quadrant.svg +33 -0
- data/examples/quadrant/02-positioned-items.mmd +14 -0
- data/examples/quadrant/02-positioned-items.svg +35 -0
- data/examples/quadrant/README.adoc +84 -0
- data/examples/radar/01-simple-radar.* +5 -0
- data/examples/radar/01-simple-radar.mmd +3 -0
- data/examples/radar/01-simple-radar.svg +25 -0
- data/examples/radar/02-multiple-curves.mmd +4 -0
- data/examples/radar/02-multiple-curves.svg +43 -0
- data/examples/radar/README.adoc +75 -0
- data/examples/requirement/01-basic-requirements.mmd +23 -0
- data/examples/requirement/01-basic-requirements.svg +49 -0
- data/examples/requirement/02-risk-levels.mmd +23 -0
- data/examples/requirement/02-risk-levels.svg +49 -0
- data/examples/requirement/README.adoc +85 -0
- data/examples/sankey/01-simple-flow.mmd +7 -0
- data/examples/sankey/01-simple-flow.svg +34 -0
- data/examples/sankey/02-multi-stage.mmd +11 -0
- data/examples/sankey/02-multi-stage.svg +44 -0
- data/examples/sankey/README.adoc +74 -0
- data/examples/sequence/01-basic-sequence.mmd +27 -0
- data/examples/sequence/01-basic-sequence.svg +5 -0
- data/examples/sequence/02-activations.mmd +17 -0
- data/examples/sequence/02-activations.svg +78 -0
- data/examples/sequence/README.adoc +86 -0
- data/examples/state_diagram/01-simple-states.mmd +29 -0
- data/examples/state_diagram/01-simple-states.svg +5 -0
- data/examples/state_diagram/02-composite.mmd +19 -0
- data/examples/state_diagram/02-composite.svg +81 -0
- data/examples/state_diagram/README.adoc +90 -0
- data/examples/timeline/01-simple-timeline.mmd +11 -0
- data/examples/timeline/01-simple-timeline.svg +36 -0
- data/examples/timeline/02-periods.mmd +15 -0
- data/examples/timeline/02-periods.svg +47 -0
- data/examples/timeline/README.adoc +78 -0
- data/examples/treemap/01-basic-treemap.mmd +12 -0
- data/examples/treemap/01-basic-treemap.svg +59 -0
- data/examples/treemap/README.adoc +59 -0
- data/examples/user_journey/01-simple-journey.mmd +23 -0
- data/examples/user_journey/01-simple-journey.svg +5 -0
- data/examples/user_journey/02-multi-actor.mmd +18 -0
- data/examples/user_journey/02-multi-actor.svg +129 -0
- data/examples/user_journey/README.adoc +81 -0
- data/examples/xychart/01-line-chart.mmd +5 -0
- data/examples/xychart/01-line-chart.svg +43 -0
- data/examples/xychart/02-bar-chart.mmd +7 -0
- data/examples/xychart/02-bar-chart.svg +48 -0
- data/examples/xychart/README.adoc +80 -0
- data/exe/sirena +7 -0
- data/lib/sirena/cli.rb +138 -0
- data/lib/sirena/commands/batch.rb +117 -0
- data/lib/sirena/commands/render.rb +80 -0
- data/lib/sirena/commands/types.rb +29 -0
- data/lib/sirena/commands/version.rb +24 -0
- data/lib/sirena/diagram/architecture.rb +46 -0
- data/lib/sirena/diagram/base.rb +61 -0
- data/lib/sirena/diagram/block.rb +81 -0
- data/lib/sirena/diagram/c4.rb +328 -0
- data/lib/sirena/diagram/class_diagram.rb +385 -0
- data/lib/sirena/diagram/er_diagram.rb +238 -0
- data/lib/sirena/diagram/error.rb +38 -0
- data/lib/sirena/diagram/flowchart.rb +160 -0
- data/lib/sirena/diagram/gantt.rb +71 -0
- data/lib/sirena/diagram/git_graph.rb +36 -0
- data/lib/sirena/diagram/info.rb +38 -0
- data/lib/sirena/diagram/kanban.rb +178 -0
- data/lib/sirena/diagram/mindmap.rb +54 -0
- data/lib/sirena/diagram/packet.rb +79 -0
- data/lib/sirena/diagram/pie.rb +115 -0
- data/lib/sirena/diagram/quadrant.rb +138 -0
- data/lib/sirena/diagram/radar.rb +52 -0
- data/lib/sirena/diagram/requirement.rb +133 -0
- data/lib/sirena/diagram/sankey.rb +217 -0
- data/lib/sirena/diagram/sequence.rb +242 -0
- data/lib/sirena/diagram/state_diagram.rb +237 -0
- data/lib/sirena/diagram/timeline.rb +171 -0
- data/lib/sirena/diagram/treemap.rb +84 -0
- data/lib/sirena/diagram/user_journey.rb +149 -0
- data/lib/sirena/diagram/xy_chart.rb +76 -0
- data/lib/sirena/diagram.rb +8 -0
- data/lib/sirena/diagram_registry.rb +101 -0
- data/lib/sirena/engine.rb +292 -0
- data/lib/sirena/parser/architecture.rb +41 -0
- data/lib/sirena/parser/base.rb +41 -0
- data/lib/sirena/parser/block.rb +72 -0
- data/lib/sirena/parser/c4.rb +53 -0
- data/lib/sirena/parser/class_diagram.rb +63 -0
- data/lib/sirena/parser/er_diagram.rb +40 -0
- data/lib/sirena/parser/error.rb +49 -0
- data/lib/sirena/parser/flowchart.rb +71 -0
- data/lib/sirena/parser/gantt.rb +60 -0
- data/lib/sirena/parser/git_graph.rb +95 -0
- data/lib/sirena/parser/grammars/architecture.rb +145 -0
- data/lib/sirena/parser/grammars/block.rb +190 -0
- data/lib/sirena/parser/grammars/c4.rb +226 -0
- data/lib/sirena/parser/grammars/class_diagram.rb +284 -0
- data/lib/sirena/parser/grammars/common.rb +84 -0
- data/lib/sirena/parser/grammars/er_diagram.rb +114 -0
- data/lib/sirena/parser/grammars/error.rb +40 -0
- data/lib/sirena/parser/grammars/flowchart.rb +298 -0
- data/lib/sirena/parser/grammars/gantt.rb +252 -0
- data/lib/sirena/parser/grammars/git_graph.rb +167 -0
- data/lib/sirena/parser/grammars/info.rb +58 -0
- data/lib/sirena/parser/grammars/kanban.rb +83 -0
- data/lib/sirena/parser/grammars/mindmap.rb +115 -0
- data/lib/sirena/parser/grammars/packet.rb +73 -0
- data/lib/sirena/parser/grammars/pie.rb +128 -0
- data/lib/sirena/parser/grammars/quadrant.rb +199 -0
- data/lib/sirena/parser/grammars/radar.rb +150 -0
- data/lib/sirena/parser/grammars/requirement.rb +188 -0
- data/lib/sirena/parser/grammars/sankey.rb +104 -0
- data/lib/sirena/parser/grammars/sequence.rb +247 -0
- data/lib/sirena/parser/grammars/state_diagram.rb +172 -0
- data/lib/sirena/parser/grammars/timeline.rb +142 -0
- data/lib/sirena/parser/grammars/treemap.rb +120 -0
- data/lib/sirena/parser/grammars/xy_chart.rb +120 -0
- data/lib/sirena/parser/info.rb +49 -0
- data/lib/sirena/parser/kanban.rb +97 -0
- data/lib/sirena/parser/mindmap.rb +106 -0
- data/lib/sirena/parser/packet.rb +76 -0
- data/lib/sirena/parser/pie.rb +49 -0
- data/lib/sirena/parser/quadrant.rb +57 -0
- data/lib/sirena/parser/radar.rb +104 -0
- data/lib/sirena/parser/requirement.rb +70 -0
- data/lib/sirena/parser/sankey.rb +64 -0
- data/lib/sirena/parser/sequence.rb +51 -0
- data/lib/sirena/parser/state_diagram.rb +69 -0
- data/lib/sirena/parser/timeline.rb +57 -0
- data/lib/sirena/parser/transforms/architecture.rb +97 -0
- data/lib/sirena/parser/transforms/block.rb +254 -0
- data/lib/sirena/parser/transforms/c4.rb +347 -0
- data/lib/sirena/parser/transforms/class_diagram.rb +352 -0
- data/lib/sirena/parser/transforms/er_diagram.rb +169 -0
- data/lib/sirena/parser/transforms/error.rb +58 -0
- data/lib/sirena/parser/transforms/flowchart.rb +293 -0
- data/lib/sirena/parser/transforms/gantt.rb +215 -0
- data/lib/sirena/parser/transforms/git_graph.rb +160 -0
- data/lib/sirena/parser/transforms/info.rb +58 -0
- data/lib/sirena/parser/transforms/kanban.rb +176 -0
- data/lib/sirena/parser/transforms/mindmap.rb +227 -0
- data/lib/sirena/parser/transforms/packet.rb +63 -0
- data/lib/sirena/parser/transforms/pie.rb +143 -0
- data/lib/sirena/parser/transforms/quadrant.rb +177 -0
- data/lib/sirena/parser/transforms/radar.rb +126 -0
- data/lib/sirena/parser/transforms/requirement.rb +272 -0
- data/lib/sirena/parser/transforms/sankey.rb +122 -0
- data/lib/sirena/parser/transforms/sequence.rb +342 -0
- data/lib/sirena/parser/transforms/state_diagram.rb +292 -0
- data/lib/sirena/parser/transforms/timeline.rb +177 -0
- data/lib/sirena/parser/transforms/treemap.rb +81 -0
- data/lib/sirena/parser/transforms/xy_chart.rb +132 -0
- data/lib/sirena/parser/treemap.rb +98 -0
- data/lib/sirena/parser/user_journey.rb +120 -0
- data/lib/sirena/parser/xy_chart.rb +114 -0
- data/lib/sirena/parser.rb +8 -0
- data/lib/sirena/renderer/architecture.rb +251 -0
- data/lib/sirena/renderer/base.rb +251 -0
- data/lib/sirena/renderer/block.rb +286 -0
- data/lib/sirena/renderer/c4.rb +490 -0
- data/lib/sirena/renderer/class_diagram.rb +499 -0
- data/lib/sirena/renderer/er_diagram.rb +417 -0
- data/lib/sirena/renderer/error.rb +131 -0
- data/lib/sirena/renderer/flowchart.rb +301 -0
- data/lib/sirena/renderer/gantt.rb +331 -0
- data/lib/sirena/renderer/git_graph.rb +368 -0
- data/lib/sirena/renderer/info.rb +93 -0
- data/lib/sirena/renderer/kanban.rb +295 -0
- data/lib/sirena/renderer/mindmap.rb +396 -0
- data/lib/sirena/renderer/packet.rb +239 -0
- data/lib/sirena/renderer/pie.rb +235 -0
- data/lib/sirena/renderer/quadrant.rb +292 -0
- data/lib/sirena/renderer/radar.rb +323 -0
- data/lib/sirena/renderer/requirement.rb +371 -0
- data/lib/sirena/renderer/sankey.rb +255 -0
- data/lib/sirena/renderer/sequence.rb +424 -0
- data/lib/sirena/renderer/state_diagram.rb +328 -0
- data/lib/sirena/renderer/timeline.rb +304 -0
- data/lib/sirena/renderer/treemap.rb +152 -0
- data/lib/sirena/renderer/user_journey.rb +331 -0
- data/lib/sirena/renderer/xy_chart.rb +452 -0
- data/lib/sirena/renderer.rb +8 -0
- data/lib/sirena/svg/circle.rb +41 -0
- data/lib/sirena/svg/document.rb +103 -0
- data/lib/sirena/svg/element.rb +65 -0
- data/lib/sirena/svg/ellipse.rb +33 -0
- data/lib/sirena/svg/group.rb +71 -0
- data/lib/sirena/svg/line.rb +49 -0
- data/lib/sirena/svg/path.rb +76 -0
- data/lib/sirena/svg/polygon.rb +43 -0
- data/lib/sirena/svg/polyline.rb +35 -0
- data/lib/sirena/svg/rect.rb +57 -0
- data/lib/sirena/svg/style.rb +44 -0
- data/lib/sirena/svg/text.rb +72 -0
- data/lib/sirena/svg.rb +19 -0
- data/lib/sirena/text_measurement.rb +71 -0
- data/lib/sirena/theme/builtin/dark.yml +70 -0
- data/lib/sirena/theme/builtin/default.yml +80 -0
- data/lib/sirena/theme/builtin/high_contrast.yml +70 -0
- data/lib/sirena/theme/builtin/light.yml +70 -0
- data/lib/sirena/theme/color_palette.rb +48 -0
- data/lib/sirena/theme/effect_styles.rb +28 -0
- data/lib/sirena/theme/registry.rb +41 -0
- data/lib/sirena/theme/shape_styles.rb +28 -0
- data/lib/sirena/theme/spacing_config.rb +24 -0
- data/lib/sirena/theme/typography.rb +30 -0
- data/lib/sirena/theme.rb +69 -0
- data/lib/sirena/transform/architecture.rb +273 -0
- data/lib/sirena/transform/base.rb +199 -0
- data/lib/sirena/transform/block.rb +215 -0
- data/lib/sirena/transform/c4.rb +288 -0
- data/lib/sirena/transform/class_diagram.rb +296 -0
- data/lib/sirena/transform/er_diagram.rb +204 -0
- data/lib/sirena/transform/error.rb +39 -0
- data/lib/sirena/transform/flowchart.rb +161 -0
- data/lib/sirena/transform/gantt.rb +253 -0
- data/lib/sirena/transform/git_graph.rb +283 -0
- data/lib/sirena/transform/info.rb +39 -0
- data/lib/sirena/transform/kanban.rb +180 -0
- data/lib/sirena/transform/mindmap.rb +251 -0
- data/lib/sirena/transform/packet.rb +185 -0
- data/lib/sirena/transform/pie.rb +62 -0
- data/lib/sirena/transform/quadrant.rb +167 -0
- data/lib/sirena/transform/radar.rb +227 -0
- data/lib/sirena/transform/requirement.rb +233 -0
- data/lib/sirena/transform/sankey.rb +212 -0
- data/lib/sirena/transform/sequence.rb +143 -0
- data/lib/sirena/transform/state_diagram.rb +228 -0
- data/lib/sirena/transform/timeline.rb +139 -0
- data/lib/sirena/transform/treemap.rb +120 -0
- data/lib/sirena/transform/user_journey.rb +207 -0
- data/lib/sirena/transform/xy_chart.rb +273 -0
- data/lib/sirena/transform.rb +8 -0
- data/lib/sirena/version.rb +5 -0
- data/lib/sirena.rb +328 -0
- data/lib/tasks/benchmark.rake +532 -0
- data/lib/tasks/examples.rake +468 -0
- data/lib/tasks/generate_mermaid_fixtures.rake +363 -0
- data/lib/tasks/mermaid_fixtures.rake +46 -0
- data/scripts/extract_mermaid_tests.rb +493 -0
- data/scripts/rename_to_sirena.rb +73 -0
- data/sirena.gemspec +47 -0
- metadata +529 -0
|
@@ -0,0 +1,441 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: default
|
|
3
|
+
title: Tool Comparison
|
|
4
|
+
parent: Core Topics
|
|
5
|
+
nav_order: 5
|
|
6
|
+
description: "Compare Sirena with Mermaid.js, PlantUML, Graphviz, and other diagram tools"
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
== Sirena vs Other Diagram Tools
|
|
10
|
+
|
|
11
|
+
=== Purpose
|
|
12
|
+
|
|
13
|
+
This page provides a comprehensive comparison of Sirena against other popular diagram generation tools to help you choose the right tool for your needs.
|
|
14
|
+
|
|
15
|
+
=== Overview
|
|
16
|
+
|
|
17
|
+
Sirena is a pure Ruby implementation of Mermaid-compatible diagram rendering, optimized for server-side use. Understanding how it compares to other tools helps you make informed decisions about which tool best fits your workflow.
|
|
18
|
+
|
|
19
|
+
=== Feature Comparison Matrix
|
|
20
|
+
|
|
21
|
+
[cols="2,2,2,2,2"]
|
|
22
|
+
|===
|
|
23
|
+
|Feature |Sirena |Mermaid.js |PlantUML |Graphviz
|
|
24
|
+
|
|
25
|
+
|**Language**
|
|
26
|
+
|Ruby
|
|
27
|
+
|JavaScript
|
|
28
|
+
|Java
|
|
29
|
+
|C/C++
|
|
30
|
+
|
|
31
|
+
|**Diagram Types**
|
|
32
|
+
|19+
|
|
33
|
+
|20+
|
|
34
|
+
|14+
|
|
35
|
+
|Graph-focused
|
|
36
|
+
|
|
37
|
+
|**Rendering**
|
|
38
|
+
|Server-side (Ruby)
|
|
39
|
+
|Client/Server (JS)
|
|
40
|
+
|Server-side (Java)
|
|
41
|
+
|Command-line
|
|
42
|
+
|
|
43
|
+
|**Dependencies**
|
|
44
|
+
|Ruby only
|
|
45
|
+
|Node.js + Browser
|
|
46
|
+
|Java JRE
|
|
47
|
+
|C/C++ runtime
|
|
48
|
+
|
|
49
|
+
|**Installation**
|
|
50
|
+
|`gem install sirena`
|
|
51
|
+
|`npm install mermaid`
|
|
52
|
+
|JAR download
|
|
53
|
+
|Binary install
|
|
54
|
+
|
|
55
|
+
|**Output Format**
|
|
56
|
+
|SVG
|
|
57
|
+
|SVG, PNG
|
|
58
|
+
|SVG, PNG, PDF
|
|
59
|
+
|SVG, PNG, PDF
|
|
60
|
+
|
|
61
|
+
|**Theming**
|
|
62
|
+
|YAML-based
|
|
63
|
+
|CSS-based
|
|
64
|
+
|Skinparam
|
|
65
|
+
|DOT attributes
|
|
66
|
+
|
|
67
|
+
|**Batch Mode**
|
|
68
|
+
|Built-in
|
|
69
|
+
|Via CLI wrapper
|
|
70
|
+
|Built-in
|
|
71
|
+
|Built-in
|
|
72
|
+
|
|
73
|
+
|**Interactive**
|
|
74
|
+
|No (static SVG)
|
|
75
|
+
|Yes (browser)
|
|
76
|
+
|No
|
|
77
|
+
|No
|
|
78
|
+
|
|
79
|
+
|**Syntax**
|
|
80
|
+
|Mermaid-compatible
|
|
81
|
+
|Mermaid native
|
|
82
|
+
|PlantUML DSL
|
|
83
|
+
|DOT language
|
|
84
|
+
|
|
85
|
+
|**Rails Integration**
|
|
86
|
+
|Native
|
|
87
|
+
|Via Node bridge
|
|
88
|
+
|Via Java bridge
|
|
89
|
+
|Limited
|
|
90
|
+
|
|
91
|
+
|**Documentation**
|
|
92
|
+
|AsciiDoc/Jekyll
|
|
93
|
+
|Markdown
|
|
94
|
+
|AsciiDoc
|
|
95
|
+
|Man pages
|
|
96
|
+
|
|
97
|
+
|**Open Source**
|
|
98
|
+
|MIT
|
|
99
|
+
|MIT
|
|
100
|
+
|GPL/Apache
|
|
101
|
+
|EPL
|
|
102
|
+
|
|
103
|
+
|**Memory Usage**
|
|
104
|
+
|~50MB
|
|
105
|
+
|~200MB (with browser)
|
|
106
|
+
|~100MB
|
|
107
|
+
|~30MB
|
|
108
|
+
|
|
109
|
+
|**Startup Time**
|
|
110
|
+
|<100ms
|
|
111
|
+
|~2s (browser)
|
|
112
|
+
|~1s (JVM)
|
|
113
|
+
|<50ms
|
|
114
|
+
|===
|
|
115
|
+
|
|
116
|
+
=== Detailed Comparison
|
|
117
|
+
|
|
118
|
+
==== Sirena (This Tool)
|
|
119
|
+
|
|
120
|
+
**Strengths:**
|
|
121
|
+
|
|
122
|
+
* Pure Ruby - no Node.js or Java dependencies
|
|
123
|
+
* Native integration with Rails, Jekyll, and Ruby applications
|
|
124
|
+
* 16x faster batch processing than Mermaid.js with browser
|
|
125
|
+
* 8x lower memory usage than Mermaid.js
|
|
126
|
+
* YAML-based theme system (easier than CSS)
|
|
127
|
+
* Mermaid.js syntax compatibility
|
|
128
|
+
* Built-in batch processor
|
|
129
|
+
* Excellent for CI/CD and automated documentation
|
|
130
|
+
|
|
131
|
+
**Limitations:**
|
|
132
|
+
|
|
133
|
+
* No interactive diagrams (static SVG only)
|
|
134
|
+
* No click events or callbacks
|
|
135
|
+
* Smaller community than Mermaid.js
|
|
136
|
+
* Some advanced Mermaid.js features may lag behind
|
|
137
|
+
|
|
138
|
+
**Best For:**
|
|
139
|
+
|
|
140
|
+
* Ruby/Rails applications
|
|
141
|
+
* Server-side rendering
|
|
142
|
+
* Static site generators (Jekyll)
|
|
143
|
+
* CI/CD documentation generation
|
|
144
|
+
* Batch processing many diagrams
|
|
145
|
+
* Lower resource environments
|
|
146
|
+
* Simpler deployment (no Node.js/Java)
|
|
147
|
+
|
|
148
|
+
==== Mermaid.js
|
|
149
|
+
|
|
150
|
+
**Strengths:**
|
|
151
|
+
|
|
152
|
+
* Large, active community
|
|
153
|
+
* Browser-based rendering (client-side)
|
|
154
|
+
* Interactive diagrams with click events
|
|
155
|
+
* Live editor (mermaid.live)
|
|
156
|
+
* 20+ diagram types
|
|
157
|
+
* Extensive documentation
|
|
158
|
+
* JavaScript ecosystem integration
|
|
159
|
+
|
|
160
|
+
**Limitations:**
|
|
161
|
+
|
|
162
|
+
* Requires Node.js for CLI
|
|
163
|
+
* Requires Puppeteer/Chrome for server rendering
|
|
164
|
+
* Higher memory usage (~200MB with browser)
|
|
165
|
+
* Slower startup (~2 seconds per diagram)
|
|
166
|
+
* Complex deployment (browser dependencies)
|
|
167
|
+
* CSS-based theming (more complex)
|
|
168
|
+
|
|
169
|
+
**Best For:**
|
|
170
|
+
|
|
171
|
+
* JavaScript/Node.js projects
|
|
172
|
+
* Interactive web applications
|
|
173
|
+
* Client-side diagram rendering
|
|
174
|
+
* Real-time diagram editing
|
|
175
|
+
* When you need click events
|
|
176
|
+
* Large JavaScript ecosystems
|
|
177
|
+
|
|
178
|
+
==== PlantUML
|
|
179
|
+
|
|
180
|
+
**Strengths:**
|
|
181
|
+
|
|
182
|
+
* Extensive UML diagram support
|
|
183
|
+
* Well-established (20+ years)
|
|
184
|
+
* Comprehensive documentation
|
|
185
|
+
* Multiple output formats
|
|
186
|
+
* Java ecosystem integration
|
|
187
|
+
* Server mode available
|
|
188
|
+
|
|
189
|
+
**Limitations:**
|
|
190
|
+
|
|
191
|
+
* Requires Java JRE
|
|
192
|
+
* PlantUML-specific syntax (not Mermaid)
|
|
193
|
+
* More complex installation
|
|
194
|
+
* Slower startup (JVM initialization)
|
|
195
|
+
* Syntax less intuitive than Mermaid
|
|
196
|
+
|
|
197
|
+
**Best For:**
|
|
198
|
+
|
|
199
|
+
* UML-focused documentation
|
|
200
|
+
* Java projects
|
|
201
|
+
* Enterprise environments with Java
|
|
202
|
+
* When you need PDF output
|
|
203
|
+
* Complex UML diagrams
|
|
204
|
+
* Formal software architecture
|
|
205
|
+
|
|
206
|
+
==== Graphviz
|
|
207
|
+
|
|
208
|
+
**Strengths:**
|
|
209
|
+
|
|
210
|
+
* Powerful graph layout algorithms
|
|
211
|
+
* Fast rendering
|
|
212
|
+
* Low memory footprint
|
|
213
|
+
* Multiple output formats
|
|
214
|
+
* DOT language standard
|
|
215
|
+
* Scientific/academic use
|
|
216
|
+
|
|
217
|
+
**Limitations:**
|
|
218
|
+
|
|
219
|
+
* Limited to graph-type diagrams
|
|
220
|
+
* DOT syntax learning curve
|
|
221
|
+
* No sequence diagrams
|
|
222
|
+
* No specialized diagram types
|
|
223
|
+
* Manual layout required
|
|
224
|
+
|
|
225
|
+
**Best For:**
|
|
226
|
+
|
|
227
|
+
* Graph theory visualizations
|
|
228
|
+
* Network diagrams
|
|
229
|
+
* Dependency graphs
|
|
230
|
+
* Data structure visualization
|
|
231
|
+
* When you need custom layouts
|
|
232
|
+
* Scientific papers
|
|
233
|
+
|
|
234
|
+
=== Performance Benchmarks
|
|
235
|
+
|
|
236
|
+
Rendering 100 medium-complexity diagrams:
|
|
237
|
+
|
|
238
|
+
[cols="2,2,2,2,2"]
|
|
239
|
+
|===
|
|
240
|
+
|Metric |Sirena |Mermaid.js |PlantUML |Graphviz
|
|
241
|
+
|
|
242
|
+
|**Total Time**
|
|
243
|
+
|~15s
|
|
244
|
+
|~240s
|
|
245
|
+
|~45s
|
|
246
|
+
|~8s
|
|
247
|
+
|
|
248
|
+
|**Startup Overhead**
|
|
249
|
+
|~50ms/diagram
|
|
250
|
+
|~2s/diagram
|
|
251
|
+
|~1s/diagram
|
|
252
|
+
|~20ms/diagram
|
|
253
|
+
|
|
254
|
+
|**Peak Memory**
|
|
255
|
+
|~150MB
|
|
256
|
+
|~1.2GB
|
|
257
|
+
|~800MB
|
|
258
|
+
|~100MB
|
|
259
|
+
|
|
260
|
+
|**Output Size**
|
|
261
|
+
|~50KB/diagram
|
|
262
|
+
|~50KB/diagram
|
|
263
|
+
|~40KB/diagram
|
|
264
|
+
|~30KB/diagram
|
|
265
|
+
|===
|
|
266
|
+
|
|
267
|
+
NOTE: Benchmarks measured on a standard development machine. Actual performance varies based on diagram complexity.
|
|
268
|
+
|
|
269
|
+
=== Migration Paths
|
|
270
|
+
|
|
271
|
+
==== From Mermaid.js to Sirena
|
|
272
|
+
|
|
273
|
+
**Syntax Compatibility:** 95%+ compatible
|
|
274
|
+
|
|
275
|
+
**Migration Steps:**
|
|
276
|
+
|
|
277
|
+
. Replace `npm install mermaid` with `gem install sirena`
|
|
278
|
+
. Change rendering calls from JavaScript to Ruby
|
|
279
|
+
. Adapt themes from CSS to YAML
|
|
280
|
+
. Remove click event handlers (not supported)
|
|
281
|
+
. Test batch rendering performance gains
|
|
282
|
+
|
|
283
|
+
See our comprehensive link:../guides/migration-from-mermaid/[Migration from Mermaid.js Guide].
|
|
284
|
+
|
|
285
|
+
==== From PlantUML to Sirena
|
|
286
|
+
|
|
287
|
+
**Syntax Compatibility:** Not directly compatible (different syntax)
|
|
288
|
+
|
|
289
|
+
**Migration Strategy:**
|
|
290
|
+
|
|
291
|
+
. Identify diagram types needed
|
|
292
|
+
. Rewrite PlantUML syntax to Mermaid syntax
|
|
293
|
+
. Test rendering with Sirena
|
|
294
|
+
. Adapt theming and styling
|
|
295
|
+
. Update build scripts
|
|
296
|
+
|
|
297
|
+
**Effort:** Moderate to High (syntax translation required)
|
|
298
|
+
|
|
299
|
+
==== From Graphviz to Sirena
|
|
300
|
+
|
|
301
|
+
**Syntax Compatibility:** Not directly compatible
|
|
302
|
+
|
|
303
|
+
**Migration Strategy:**
|
|
304
|
+
|
|
305
|
+
. Convert graph structures to Mermaid flowchart syntax
|
|
306
|
+
. Manually translate layout hints
|
|
307
|
+
. Test and adjust node positioning
|
|
308
|
+
. Update documentation and scripts
|
|
309
|
+
|
|
310
|
+
**Effort:** High (significant syntax differences)
|
|
311
|
+
|
|
312
|
+
=== Decision Matrix
|
|
313
|
+
|
|
314
|
+
==== Choose Sirena When:
|
|
315
|
+
|
|
316
|
+
✅ You're building Ruby/Rails applications +
|
|
317
|
+
✅ Server-side rendering is required +
|
|
318
|
+
✅ You need batch processing capabilities +
|
|
319
|
+
✅ Simpler deployment is priority +
|
|
320
|
+
✅ Lower resource usage matters +
|
|
321
|
+
✅ CI/CD diagram generation needed +
|
|
322
|
+
✅ Mermaid syntax familiarity preferred +
|
|
323
|
+
✅ Static SVG output is sufficient
|
|
324
|
+
|
|
325
|
+
==== Choose Mermaid.js When:
|
|
326
|
+
|
|
327
|
+
✅ Client-side rendering in browser +
|
|
328
|
+
✅ Interactive diagrams needed +
|
|
329
|
+
✅ Click events and callbacks required +
|
|
330
|
+
✅ JavaScript/Node.js ecosystem +
|
|
331
|
+
✅ Real-time editing needed +
|
|
332
|
+
✅ Largest community support desired
|
|
333
|
+
|
|
334
|
+
==== Choose PlantUML When:
|
|
335
|
+
|
|
336
|
+
✅ Extensive UML support required +
|
|
337
|
+
✅ Java ecosystem project +
|
|
338
|
+
✅ PDF output needed +
|
|
339
|
+
✅ Enterprise UML standards +
|
|
340
|
+
✅ Formal software architecture +
|
|
341
|
+
✅ 20+ years of stability valued
|
|
342
|
+
|
|
343
|
+
==== Choose Graphviz When:
|
|
344
|
+
|
|
345
|
+
✅ Custom graph layouts needed +
|
|
346
|
+
✅ Scientific visualizations +
|
|
347
|
+
✅ Network topology diagrams +
|
|
348
|
+
✅ Maximum performance critical +
|
|
349
|
+
✅ DOT language expertise +
|
|
350
|
+
✅ Graph theory applications
|
|
351
|
+
|
|
352
|
+
=== Hybrid Approaches
|
|
353
|
+
|
|
354
|
+
==== Sirena + Mermaid.js
|
|
355
|
+
|
|
356
|
+
Use Sirena for server-side/build-time rendering and Mermaid.js for client-side interactive diagrams:
|
|
357
|
+
|
|
358
|
+
* Static documentation: Sirena
|
|
359
|
+
* Interactive web app: Mermaid.js
|
|
360
|
+
* CI/CD generation: Sirena
|
|
361
|
+
* Live editor: Mermaid.js
|
|
362
|
+
|
|
363
|
+
==== Multi-Tool Documentation
|
|
364
|
+
|
|
365
|
+
Different tools for different diagram types:
|
|
366
|
+
|
|
367
|
+
* Flowcharts & Sequences: Sirena
|
|
368
|
+
* Detailed UML: PlantUML
|
|
369
|
+
* Network graphs: Graphviz
|
|
370
|
+
* Interactive demos: Mermaid.js
|
|
371
|
+
|
|
372
|
+
=== Ecosystem Comparison
|
|
373
|
+
|
|
374
|
+
[cols="2,3,3"]
|
|
375
|
+
|===
|
|
376
|
+
|Tool |Framework Integration |Build Tool Support
|
|
377
|
+
|
|
378
|
+
|**Sirena**
|
|
379
|
+
|Rails (native), Jekyll (native), Sinatra, Padrino
|
|
380
|
+
|Rake, Bundler, GitHub Actions (Ruby)
|
|
381
|
+
|
|
382
|
+
|**Mermaid.js**
|
|
383
|
+
|React, Vue, Angular, Svelte
|
|
384
|
+
|npm, webpack, vite, GitHub Actions (Node)
|
|
385
|
+
|
|
386
|
+
|**PlantUML**
|
|
387
|
+
|Maven, Gradle, Spring
|
|
388
|
+
|Maven, Gradle, Ant, Jenkins
|
|
389
|
+
|
|
390
|
+
|**Graphviz**
|
|
391
|
+
|Language-agnostic
|
|
392
|
+
|Make, CMake, shell scripts
|
|
393
|
+
|===
|
|
394
|
+
|
|
395
|
+
=== Licensing Comparison
|
|
396
|
+
|
|
397
|
+
[cols="2,2,3"]
|
|
398
|
+
|===
|
|
399
|
+
|Tool |License |Commercial Use
|
|
400
|
+
|
|
401
|
+
|**Sirena**
|
|
402
|
+
|MIT
|
|
403
|
+
|✅ Unrestricted
|
|
404
|
+
|
|
405
|
+
|**Mermaid.js**
|
|
406
|
+
|MIT
|
|
407
|
+
|✅ Unrestricted
|
|
408
|
+
|
|
409
|
+
|**PlantUML**
|
|
410
|
+
|GPL v3 / Apache 2.0
|
|
411
|
+
|✅ With compliance
|
|
412
|
+
|
|
413
|
+
|**Graphviz**
|
|
414
|
+
|EPL 1.0
|
|
415
|
+
|✅ With compliance
|
|
416
|
+
|===
|
|
417
|
+
|
|
418
|
+
=== Related Documentation
|
|
419
|
+
|
|
420
|
+
* link:compatibility/[Mermaid.js Compatibility] - Detailed syntax compatibility
|
|
421
|
+
* link:../guides/migration-from-mermaid/[Migration from Mermaid.js] - Step-by-step migration guide
|
|
422
|
+
* link:../features/theme-system/[Theme System] - Sirena's YAML-based themes
|
|
423
|
+
* link:../guides/performance-optimization/[Performance Optimization] - Getting the most from Sirena
|
|
424
|
+
|
|
425
|
+
=== External Resources
|
|
426
|
+
|
|
427
|
+
* https://mermaid.js.org[Mermaid.js Official Site]
|
|
428
|
+
* https://plantuml.com[PlantUML Official Site]
|
|
429
|
+
* https://graphviz.org[Graphviz Official Site]
|
|
430
|
+
* https://github.com/claricle/sirena[Sirena on GitHub]
|
|
431
|
+
|
|
432
|
+
=== Conclusion
|
|
433
|
+
|
|
434
|
+
Each tool has its strengths and ideal use cases:
|
|
435
|
+
|
|
436
|
+
* **Sirena** excels at server-side Ruby rendering with Mermaid syntax
|
|
437
|
+
* **Mermaid.js** leads in interactive browser-based diagrams
|
|
438
|
+
* **PlantUML** dominates formal UML documentation
|
|
439
|
+
* **Graphviz** provides the most powerful graph layout algorithms
|
|
440
|
+
|
|
441
|
+
Choose based on your tech stack, rendering requirements, and diagram complexity. For Ruby applications needing server-side Mermaid-compatible rendering, Sirena provides the optimal balance of performance, simplicity, and maintainability.
|