Skip to content

Releases: kuml-dev/kUML

v0.14.0

17 Jun 09:04

Choose a tag to compare

[0.14.0] - 2026-06-17

Other

  • Structurizr migration showcase (V3.0.19) — bigbankplc fixture + 19 tests + handbook page (v0.14.0)

v0.13.0

17 Jun 08:10

Choose a tag to compare

[0.13.0] - 2026-06-17

CI

  • Switch to advanced setup with manual build — fix Kotlin daemon crash (codeql)- Add --no-build-cache to force recompilation for CodeQL tracing (codeql)

Documentation

  • Update to v0.12.0 — UML/C4 support sections, CLI commands, roadmap, modules (readme)

Other

  • Plugin ecosystem (SPI + loader + CLI + signatures + desktop UI + 5 reference plugins) + theme overhaul (nodeFill, Elegant redesign, KumlBrand white canvas) (v0.13.0)

v0.12.0 — Reverse Engineering, Desktop App, AI Assistant, XMI Import/Export

16 Jun 15:35

Choose a tag to compare

[0.12.0] - 2026-06-16

Bug Fixes

  • Add missing vault-examples-tests module files (ci)

Chore

  • CHANGELOG entry + version bump 0.11.0 → 0.12.0 (v0.12.0)

Other

  • Reverse engineering, desktop app, AI assistant, XMI/EMF import-export (v0.12.0)

v0.11.0

15 Jun 21:47

Choose a tag to compare

[0.11.0] - 2026-06-15

Bug Fixes

  • Disable kuml-asciidoc extension in Antora pipeline (handbook)- Use url: . for Antora content source (handbook)- Move Antora playbook to repo root (handbook)

Documentation

  • Publish to docs.kuml.dev via GitHub Pages (handbook)- Link to kuml.dev website and docs.kuml.dev handbook (readme)

Features

  • Add Project block to handbook nav with kuml.dev + GitHub (handbook)

Other

  • Squashed commit of the following:

commit aa63f1d65e2ae5a80e67b2ab3d03de00ba803996
Author: Irakli Betchvaia betschwa@web.de
Date: Mon Jun 15 06:53:34 2026 +0200

fix(renderer): SEQ-Fragment-Frame asymmetrisch — Nachbar-Nachrichten nicht mehr verschluckt

Die V3.0.x-Erstiteration hat `FRAGMENT_PADDING` von 8 auf 24 erhöht, um den
horizontalen Atemraum für Guard-Labels zu schaffen. Das war richtig in H,
aber es hat AUCH die vertikale Geometrie geändert: Frame-Top zog sich 24 px
über `(minSeq - 0.5)`-Pfeil-Mittelpunkt hinaus, Frame-Bottom 24 px darunter.

Symptom im Sample "Place Order — API Submit":
- POST /orders (Sequenz 2, direkt vor dem Fragment) saß in der ALT-Box
- confirmation (Sequenz 7, direkt nach dem Fragment) auch
- 400 Bad Request stand zu nah am unteren Rahmenrand und wurde von der
  Frame-Linie angeschnitten

Eigentliche Ursache: Die ursprüngliche Symmetrische-Padding-Formel
`(minSeq - 0.5) * ROW - V` / `(maxSeq + 0.5) * ROW + V` war geometrisch
falsch — auch mit V = 8 (vor V3.0.x). Im SysML-2-Test-Sample fiel das nicht
auf, weil dort KEINE Folge-Nachrichten ums Fragment lagen.

**Asymmetrische Geometrie**, weil Nachrichten-Labels 4 px ÜBER der Pfeillinie
sitzen (Baseline) und mit Ascent 11 + Descent 3 ein Label-Hintergrund-Band
von `arrow_y - 15` bis `arrow_y - 1` bilden. Der "freie Korridor" zwischen
zwei Pfeilen ist deshalb NICHT mittig zwischen den Pfeilen, sondern:

  prev_label_bottom = arrow_n - 1        (Label-Descent)
  next_label_top    = arrow_(n+1) - 15   (Label-Ascent)
  Korridor-Breite   = 18 px
  Korridor-Mitte    = arrow_n + 8

Für die Frame-Kanten:
- TOP: Mitte des oberen Korridors bei `arrow_minSeq - 24` → `FRAGMENT_TOP_OUTSET = 24`
- BOTTOM: Mitte des unteren Korridors bei `arrow_maxSeq + 8` → `FRAGMENT_BOTTOM_OUTSET = 8`

Beide Konstanten exportiert als private `const val`, neue Formel im UML- und
SysML-2-Renderer:

  // UML — Pfeil-Y bei `headBottom + seq * ROW`
  frameY      = headBottom + minSeq * ROW - FRAGMENT_TOP_OUTSET
  frameBottom = headBottom + maxSeq * ROW + FRAGMENT_BOTTOM_OUTSET

  // SysML-2 — Pfeil-Y bei `headBottom + (seqNo + 1) * ROW`
  frameY      = headBottom + (minStartSeqNo + 1) * ROW - FRAGMENT_TOP_OUTSET
  frameBottom = headBottom + (maxEndSeqNo + 1)   * ROW + FRAGMENT_BOTTOM_OUTSET

H-Padding (24 px) und der Canvas-Padding-Override im KumlSvgRenderer (28 px)
bleiben unverändert — die Rechts-Clipping-Korrektur aus dem vorigen Commit
hängt nicht von der V-Geometrie ab.

`./gradlew check` grün (618 Tasks). Visuelle Verifikation: POST /orders +
confirmation jetzt klar AUSSERHALB der ALT-Box, 400 Bad Request mittig in
der [invalid]-Region. SysML-2-Test-Sample `combined-fragment-alt-two-operands`
ebenfalls verifiziert — keine Regression in der ursprünglich-getesteten
Konfiguration.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

commit 6cb94e4fbda4de4051833b8f63bbae29f156ee25
Author: Irakli Betchvaia betschwa@web.de
Date: Mon Jun 15 06:31:03 2026 +0200

fix(renderer): SEQ-Frame nicht mehr von Canvas geclippt — Padding-Override

Die zwei vorherigen Commits haben `FRAGMENT_PADDING` von 8 auf 24 px erhöht,
damit der Frame links Atemraum für die Guard-Labels schafft. Symmetrisch
ragt der Frame jetzt aber auch 24 px rechts über die rechteste Lifeline
hinaus — und das Default-Canvas-Padding (`SvgRenderOptions.paddingPx = 16`)
reicht dafür nicht. Symptom: ALT-Box rechts in der SVG-`viewBox` abgeschnitten
(8 px Überstand am Beispiel `Place Order — API Submit`: Frame-Right-Edge bei
canvas.width + 56, viewBox-Edge bei canvas.width + 32).

Fix in beiden SEQ-Render-Pfaden (`renderUmlSequence` für UML und
`toSvg(SeqDiagram, …)` für SysML 2): wenn die Interaktion Combined Fragments
enthält, wird `options.paddingPx` auf `max(default, FRAGMENT_PADDING + 4)`
hochgesetzt — also 28 px. Das wirkt sowohl im Lifeline-Shift (Nodes wandern
um zusätzliche 12 px nach rechts) als auch in der Canvas-Größe in
`SvgDocument.render` (Breite + 24 px), weil beide `options.paddingPx` lesen.
Diagramme ohne Fragments bleiben bei 16 px Padding — kein unnötiges Bloat.

Padding-Mathematik:
  frame_right  = maxLifelineX_shifted + FRAGMENT_PADDING
               = canvas.width + padding + 24
  viewBox_right = canvas.width + 2 * padding
  frame_right ≤ viewBox_right  ⟺  padding ≥ FRAGMENT_PADDING
Mit `+4` Sicherheitsmarge (Stroke-Width / Anti-Aliasing) → 28 px.

Konstanten-Quellen: `UML_SEQ_FRAGMENT_PADDING` aus dem UmlSequenceSvg-Commit
und `SYSML2_SEQ_FRAGMENT_PADDING` aus dem Sysml2SequenceSvg-Commit. Doppelte
Wertfestlegung bewusst — die zwei Renderer sind unabhängig voneinander
versionierbar; ein gemeinsamer Konstanten-File hätte die Architektur-
Divergenz aus dem Sysml2SequenceSvg-Header-Kommentar nivelliert.

`./gradlew check` grün (618 Tasks). Visuelle Verifikation per `kuml render`
am Vault-Beispiel: ALT-Box rahmt jetzt symmetrisch um alle Lifelines, kein
Clipping rechts.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

commit 31fe37bcff9e9efa77956104a455e6950b2f86bd
Author: Irakli Betchvaia betschwa@web.de
Date: Mon Jun 15 06:30:38 2026 +0200

fix(renderer): SysML-2-Sequence-Frame — Guard-Labels nicht mehr von Lifeline abgeschnitten

Spiegelt den UML-Fix auf die parallele SysML-2-Seite. Die beiden Sequence-
Renderer sind seit V2.0.x bewusst getrennt (siehe `Sysml2SequenceSvg.kt`-
Header-Kommentar zur Architektur-Divergenz), tragen aber dieselbe Frame-
Geometrie und damit dieselben Defekte:

1. **Guard-Labels durch erste Lifeline geclippt.** Sample
   `combined-fragment-alt-two-operands.png` zeigte `[credentials valid]` und
   `[credentials invalid]` durch die dashed Zeit-Achse von Lifeline `a`
   zerschnitten. Fix identisch zum UML-Renderer: Guard auf `frameX + 4`,
   `tagY + tagH + 14`, `FRAGMENT_PADDING` von 8 auf 24.

2. **Labels von dashed Linien zerschnitten.** Neuer Helper
   `drawSeqLabelWithWhiteBackground()` mit derselben Höhen-Heuristik
   (`BODY_TEXT_ASCENT = 11`, `BODY_TEXT_DESCENT = 3`). Angewendet auf
   Message-Labels, Self-Call-Labels, Guard-Labels und die `messageLabel`-
   Komponente der `«create»` / `«destroy»` Lifecycle-Nachrichten. Die
   Stereotype-Marker selbst (`«create»` / `«destroy»`) bleiben ohne
   Hintergrund — sie sitzen 16 px über der Baseline, weit über der
   Pfeillinie, also kein Konflikt.

3. **`SYSML2_SEQ_FRAGMENT_PADDING` als `internal const` exportiert.**
   Vorbereitung für den Canvas-Padding-Override im Folge-Commit.

Sample-Output-Tests `SEQ renders alt fragment with two operands separated by
dashed line` etc. grün. Deterministischer Byte-Identitäts-Test (`combined
fragment + execution spec render byte-identically`) grün.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>

commit 378ec9085e9f9cc3c5f7d71e039c6e34295a03fb
Author: Irakli Betchvaia betschwa@web.de
Date: Mon Jun 15 06:30:16 2026 +0200

fix(renderer): UML-Sequence-Frame — Guard-Labels nicht mehr von Lifeline abgeschnitten

Drei eng verflochtene Defekte in `UmlSequenceSvg`:

1. **Guard-Labels durch erste Lifeline geclippt.** `[valid]` / `[invalid]`
   saßen rechts neben dem ALT-Pentagon bei `tagX + 50 + 6 = minLifelineX + 48`,
   während die dashed Zeit-Achse der linkesten Lifeline bei `minLifelineX + 70`
   (Lifeline-Width / 2) verläuft. Die Achse schnitt mitten durch die Bracket-
   Texte.

   Fix: Guard-Position auf `frameX + 4` (linker Frame-Rand), `tagY + tagH + 14`
   (unter dem ALT-Pentagon statt rechts daneben). `FRAGMENT_PADDING` von 8 px
   auf 24 px erhöht — der Frame ragt jetzt 24 px links über die linkeste
   Lifeline hinaus, in diesem Atemraum sitzt der Guard.

2. **Nachrichten-Labels von gestrichelten Linien zerschnitten.** Lifeline-
   Verticals und Operand-Separatoren kreuzten durch das Innere der Glyphen.
   Symptom: `400 Bad Request` saß exakt auf der Separator-Linie zwischen
   `[valid]`- und `[invalid]`-Operand.

   Fix: neuer Helper `drawLabelWithWhiteBackground()` zeichnet einen weißen
   `<rect>` hinter dem Text. Höhen-Heuristik (`BODY_TEXT_ASCENT = 11`,
   `BODY_TEXT_DESCENT = 3`) so dimensioniert, dass der Hintergrund die
   Glyphen abdeckt, aber knapp ÜBER der Baseline endet — der 4 px unterhalb
   der Baseline gezeichnete Pfeilschaft bleibt durchgezogen. Anwendung auf
   Message-Labels, Self-Call-Labels und Guard-Labels.

3. **`UML_SEQ_FRAGMENT_PADDING` als `internal const` exportiert.** Vorbereitung
   für den Canvas-Padding-Override im zentralen Renderer (Folge-Commit).

`./gradlew check` grün (618 Tasks). Visuelle Regression am Beispiel
`Place Order — API Submit` aus dem Vault verifiziert.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>- Renderer & layout overhaul — SEQ, STM, Activity, Component, Package, C4 (v0.11.0)

v0.10.0

14 Jun 22:20

Choose a tag to compare

[0.10.0] - 2026-06-14

Other

  • Kuml-desktop editor + live-preview + renderer improvements (v0.10.0)

v0.9.0

14 Jun 14:41

Choose a tag to compare

[0.9.0] - 2026-06-14

Bug Fixes

  • K2-Kompatibilität deklarieren — Plugin in K2-Mode wieder aktiv (jetbrains)- Plugin-Version explizit auf 0.8.0 + changeNotes vollständig (jetbrains)- V2.0.46 Renderer-Polish — port-label collision + edge-label routing (renderer)

Other

  • Reverse Engineering — Track B complete (V3.0.7 + V3.0.8 + V3.0.9) (v0.9.0)

v0.8.0

11 Jun 16:08

Choose a tag to compare

[0.8.0] - 2026-06-11

Bug Fixes

  • Renderer-Validierung 2026-06-11 — 15 von 17 Defekten behoben (renderer)

Chore

  • Ktlint formatting + UmlCollaborationSvgTest expectation update (renderer)- Bump version to 0.8.0 (release)

Documentation

  • Document V2.0.39–V2.0.43 + Renderer-Validierung 2026-06-11 (changelog)

Features

  • Kuml-runtime-trace — STM Trace-Replay + OTLP-JSON export (v2.0.39)- Sandbox-Garantien — EffectExecutor, TimeLimitedGuardEvaluator, SandboxValidator (v2.0.40)- JetBrains Autovervollständigung + Rename Refactoring (v2.0.41)- Activity-Trace-Replay (Stufe B) — ActivityTraceReplayer + TraceFlavourDetector (v2.0.42)- Executable Behaviour Widget (MVP) — BehaviourWidget + SvgHighlight (v2.0.43)- ELK back as default engine; kuml.grid opt-in via --layout=grid (layout)

v0.7.0

10 Jun 20:13

Choose a tag to compare

[0.7.0] - 2026-06-10

Features

  • Upgrade Kotlin 2.3.21 → 2.4.0 + fix K2 strictness in examples (kotlin-2.4)- StateMachineSnapshot/Restore + MigrationPolicy (v2.0.35)- Kuml-web LaTeX-Download — POST /api/render format=latex + standalone toggle (v2.0.36)- JetBrains Code Folding for .kuml.kts DSL blocks (v2.0.37)- Kuml run CLI — stdin/MCP/batch live event adapters (v2.0.38)

Other

  • Bump version + changelog for V2.0.34–38 (v0.7.0)

v0.6.0

10 Jun 16:49

Choose a tag to compare

[0.6.0] - 2026-06-10

Bug Fixes

  • Renderer correctness — 10 visual bugs fixed (z-order, missing edges, entity escaping, sizing, pin labels)- Update example scripts to current DSL API (operation returnType, message from/to, C4 relationship description)- Component diagram connector port IDs — UmlLayoutBridge splits "::" suffix into EndpointRef(nodeId, portId) so Grid layout no longer crashes- Upgrade com.gradleup.shadow 8.3.6 → 9.4.2 to fix Gradle 9.5.1 incompatibility- Kuml-web distTar duplicate + packaging CC + macOS jpackage version (v0.6.0-release)- Kuml-cli distTar/distZip duplicate runtime-desktop JAR (v0.6.0-release)- Replace softprops/action-gh-release@v2 with gh CLI in release.yml (ci)- Make release.yml idempotent for Maven Central + GitHub Release (ci)- Docker tag mismatch, portable SHA-256, native ARM64 runner (ci)

CI

  • Add Windows + Linux ARM64 to package-runtime matrix and SDKMAN! release

Chore

  • Update all dependencies to latest stable (deps)

Documentation

  • Add official kUML logo assets (light + dark/negative variants)- Update README.adoc + add examples index for kuml simulate/transform/validate features- Update kUML logo assets (70mm viewBox with inset padding)- Handbook V2.x catch-up — SysML 2, runtime-MCP, validate, CLI refresh, Car2x showcase (v2.0.33)- Update examples README.adoc — new directories (keysight, rest, k8s, docker, c4-to-uml) + all 5 transformers + Car2x simulate quickstart

Features

  • ActivityRuntime + Sysml2ActivityAdapter — kuml simulate now runs SysML 2 ACT diagrams end-to-end (v2.0.18)- Pepela thermostat showcase — STM+ACT demo of the executable behaviour runtime (v2.0.19)- Typed expression AST + parser + STM-guard integration (first half of expression refactor) (v2.0.20a)- Typed expression AST wired through ACT guards, PAR constraints, and STM/ACT effect bodies — single expression language across all producers (v2.0.20b)- KumlTransformer interface + rule-DSL + UmlToJpaTransformer + kuml transform CLI — opens M2M transformation track (v2.0.21)- UmlToRestTransformer — OpenAPI 3.0 YAML from UML class diagrams (v2.0.22)- UmlToK8sTransformer + UmlToDockerTransformer — K8s manifests and Dockerfiles from UML component diagrams (v2.0.23+v2.0.24)- C4ToUmlTransformer — C4 model to UML class diagram script (v2.0.25)- Kuml-runtime-mcp — kuml.run.start/event/snapshot/patch/stop MCP Tools (v2.0.27)- Grid-Layout als Default für Class/Component/UseCase/State + LayoutHintWriter (v2.0.26)- JetBrains Annotator + 4 Quick Fixes (missing param, unknown param, rename, suppress) (v2.0.28a)- Keysight Car2x Szenario — V2X intersection scenario as runnable SysML 2 state machine (v2.0.29)- JetBrains Live-SVG Split-View + StructureView (KumlSplitEditorProvider + KumlPreviewPanel) (v2.0.28b)- JetBrains live SVG preview — Batik JSVGCanvas + zoom/pan + full render pipeline (v2.0.30)- Kuml validate structural checks + --latex-standalone CLI flag (v2.0.31)- Distribution phase 1 — jpackage DEB/RPM/DMG/MSI tasks + Docker CLI image + release-installers CI workflow (v2.0.32)- UML SEQ + STATE renderer-direct paths + bridge support- Kuml-web — Ktor server with live SVG preview, code editor, and download buttons (v2.0.34)

Other

  • Bump version + changelog for V2.0.22–V2.0.33 (M2M transformers, JetBrains plugin, distribution, MCP runtime, handbook) (v0.6.0)

Tests

  • SVG sample-output tests now write PNG alongside SVG for visual regression verification- Update SVG test fixtures — correct edge maps, REQ width 280, BDD content-aware heights- PNG-Tests schreiben sample-output-Dateien auf Festplatte (analog zu SVG-Tests)

v0.5.1

07 Jun 17:36

Choose a tag to compare

[0.5.1] - 2026-06-07

Documentation

  • Add release choreography — kUML release implies kuml.dev sync (claude-md)

Features

  • SysML 2 edge labels — UC/REQ/STM/ACT/PAR stereotypes + guards + dashes via Sysml2EdgeAdapter (v2.0.13)- SysML 2 PNG export — alle acht Diagrammtypen via Batik-Transcoder (v2.0.14)- SEQ Combined Fragments + Execution Specs + Create/Destroy messages (v2.0.15)- ACT Activity Partitions (Swimlanes) + Pins (v2.0.16)- SysML 2 STM ↔ Behaviour-Runtime adapter — kuml simulate now accepts SysML 2 scripts (v2.0.17)

Other

  • Bump version + changelog for SysML 2 polish (V2.0.13–V2.0.17) (v0.5.1)