Releases: kymostudio/kymostudio
Releases · kymostudio/kymostudio
v0.4.6
v0.4.5
Added
-
Homebrew install for the
kymoCLI. Prebuilt binaries (macOS arm64/x86_64,
Linux x86_64/arm64) are now built on each release via cargo-dist and published
as a formula in this repo:brew tap kymostudio/brew https://github.com/kymostudio/kymostudio brew install kymostudio # the command stays `kymo`
v0.4.4
Changed
- New slogan across every package description and README: "Prompt it. See it
appear. Watch it animate." (replaces "Type it. …").
Added
- Pure-Rust flowchart SVG rendering + D2 / DOT importers — the core's first
flowchart renderer.kymostudio-coregains importers for D2 (crate::d2)
and Graphviz DOT (crate::dot) — the inverses of the d2/dot emitters: they parse
each language's flowchart subset (direction, node shapes, edges with labels/dash,
containers → subgraphs) into the shared flowchart IR — and a pure-Rust flowchart
SVG renderer (crate::flowchart_svg— outline shapes with interior labels,
anchor-routed orthogonal edges, cluster regions). Together:d2_to_svg,
dot_to_svgandmermaid_to_svgrender entirely in Rust (no externald2/
dotbinary) — the Rust CLI can now render flowcharts, not just convert. Also
d2_to_kymojson/dot_to_kymojson(D2/DOT as kymo import sources). Surfaced on
thekymoCLI (kymo flow.d2/kymo flow.dot→flow.svg;kymo flow.mmd flow.svg) and via PyO3 + wasm (d2ToSvg/dotToSvg/mermaidToSvg+ the
*ToKymoJsonimporters). Output is the core's own flowchart look (not
byte-identical to the Python/JS renderers). Validated by rasterizing through resvg. - draw.io export (
Diagram → mxGraph XML), a source-agnostic encoder. A new
kymostudio-coreencoder (drawio::to_drawio) turns any resolved diagram into a
draw.io document that opens directly in app.diagrams.net — shaped (rectangle /
ellipse / rhombus / hexagon / cylinder / stadium), laid-out, subgraph-clustered,
edges auto-routed (dashed / no-arrow honoured). Per RES-PIPELINE-001 this is a
pure encoder (it consumes only the positionedDiagram). Two entry points:
mermaid_to_drawio(kymo flow.mmd flow.drawio) anddrawio_from_kymojson
(any.kymo.jsonmodel). Reaches every source via a--drawioflag on the
Python CLI and a.drawiooutput on the JS CLI, both delegating to the one Rust
encoder — so draw.io output is byte-identical across Python and JS. PyO3 + wasm
bindings; non-flowchart shapes (icons / BPMN / AWS) degrade to a labelled
rectangle. The RustkymoCLI's converter dispatch is now a small{ext → fn}
registry (a first step toward RES-PIPELINE-001's "registry, not if/elif"). - Native
flowchart [DIR] { … }DSL block. Author a flowchart inline in a
.kymofile — the block body is Mermaid flowchart syntax, laid out by the core
(mirrors thebpmn { }block). Direction is optional (flowchart LR { … },
defaultTD). Implemented in both Python (dsl.py) and JS (dsl.ts); see the
KYMO-DSL grammar §6.11. - Flowchart transpilation:
mmd → {Mermaid, D2, DOT}. The core's flowchart
parse model was lifted into a format-neutral flowchart IR (crate::flowchart)
— a positionless node/edge/subgraph hub. New text emitters convert a Mermaid
flowchart to D2, Graphviz DOT, or Mermaid (round-trip / normalize);
each target lays the graph out itself, so no geometry is involved. Surfaced as
Rust APIs (mermaid_to_d2/mermaid_to_dot/mermaid_to_mermaid), thekymo
CLI (output extension picks the target:kymo flow.mmd flow.d2/flow.dot/
norm.mmd), and PyO3 + wasm bindings (Pythonkymo._core.mermaid_to_d2…; JS
mermaidToD2/mermaidToDot/normalizeMermaid). Golden + round-trip-fixpoint- determinism tests; DOT output validated against Graphviz.
v0.4.3
Added
- Mermaid rendering + CLI parity (Python/JS). The Phase-1 Mermaid importer
is now usable end-to-end from both front-ends. The Python and JS renderers
gain adiamondglyph and an icon-less flowchart-node path
(box/circle/cylinder/badge/hex/diamonddrawn with the label inside);
flowchart CSS is injected conditionally so existing output stays byte-identical.
kymo foo.mmdnow renders in the Python CLI (cli.py→_core.import_mermaid)
and JS CLI (render-cli.mjs→parseMermaid), and the vscode-extension
previews/exports.mmd/.mermaid. The core'smermaid_to_kymojsonbinding
ships in this release. - Mermaid flowchart import (Rust core).
kymostudio-coregains a Mermaid
importer — the first parser/model/layout subsystem to live in the Rust engine
(rather than being duplicated in Python and JS like BPMN). It parses Mermaid
graph/flowchartsource (directionsTD/TB/BT/LR/RL; node shapes
[]()([])[[]][()](()){}{{}}; edges-->----.->
==>with|labels|;subgraph … end) and emits the resolved model as
.kymo.json(the interchange format Python/JS already load). A layered
(Sugiyama) layout — ported frombpmn_layout.py— positions the
coordinate-less graph deterministically. Decision nodes ({}) introduce a new
diamondshape. Exposed as a Rust API (mermaid_to_kymojson), thekymoCLI
(kymo flow.mmd → flow.kymo.json), PyO3 (mermaid_to_kymojson) and wasm
(mermaidToKymoJson). The output is byte-conformant withto_kymojson.
Rendering it to SVG (thediamondglyph + icon-less flowchart nodes in the
Python/JS renderers, and.mmdCLI dispatch) is a follow-up parity phase. See
docs/specs/mermaid/(FEAT-MERMAID-001) anddocs/formats/mermaid/mermaid-mapping.md
(MERMAID-MAP-001); samplessamples/pipeline.mmd,samples/approval.mmd.
v0.4.2
Changed
- BPMN is now a single source of truth in
kymostudio-core(Rust). Python and
JS no longer carry their own BPMN ports — import, export, layout and rendering
all delegate to the core (the wheel for Python, the wasm build for JS). The core
gains BPMN bindings (bpmn_import/bpmn_export/bpmn_layout/bpmn_render,
and the wasmbpmnImport/bpmnExport/bpmnLayout/bpmnRender) plus a
model-JSON →Diagramdeserializer. BPMN output is byte-identical across Python,
JS and Rust.
Notes
- The JS library's synchronous BPMN entry points (
parseBpmn/toBpmn/
bpmnLayout, andparseDiagramon abpmn { }source) now require the wasm core
to be initialized once:await init()(browser) orinitSync(bytes)(Node).
renderSVGauto-initializes; thekymoCLI and the VS Code extension do it for
you. Thekymostudio-coredependency requirement is unchanged (^0.4).
v0.4.1
Changed
- Python & JS now require
kymostudio-core^0.4(>=0.4,<0.5/^0.4),
up from^0.3. This activates thekymo … out.pdfSVG → vector PDF path in
the Python and JS CLIs (it calls the core'ssvg_to_pdf, new in 0.4.0). The
floor raise lands one release after 0.4.0 so the floor always points at an
already-published core (docs/RELEASING.md); 0.4.0 published the core, so CI
and installs now resolve it cleanly. No API changes.
v0.4.0
Added
- SVG → vector PDF. New
svg_to_pdfinkymostudio-core(built on
svg2pdf) converts an SVG to a one-page vector PDF — crisp at any zoom,
selectable text, no--scale. CSS-class-aware like the PNG path.svg2pdf
brings its ownusvg0.45, kept behind apdfcargo feature alongside the
resvg 0.47 PNG path (native only; the wasm build also enables it for the JS
CLI). Exposed to Python (PyO3svg_to_pdf) and JS (wasmsvgToPdf). kymo <input> out.pdfin all three CLIs. The output format follows the
output extension (.pdf→ vector PDF, otherwise PNG). An existing.svg
converts directly; a.kymo/.bpmn/.kymo.jsonsource is rendered then
converted. Live now in the RustkymoCLI (it depends on the 0.4 core).
The Python and JS CLIs ship the.pdfpath here too, but it activates once
they run on a 0.4 core — theirkymostudio-corefloor is raised to^0.4in
0.4.1 (until thenkymo … out.pdfprints a "needs kymostudio-core ≥ 0.4"
hint). Seedocs/RELEASING.mdfor why the floor lags one release.
v0.3.6
Added
kymo <input> [output.png] [--scale N]SVG → PNG CLI in all three impls.
An existing.svgrasterizes directly; a.kymo/.bpmn/.kymo.jsonsource
is rendered then rasterized (Python + JS). All three route through the one
resvgengine inkymostudio-core, producing byte-identical PNG output.- New
packages/rust/kymostudiocrate — thekymoCLI binary now lives in
its own crate (published askymostudioon crates.io →cargo install kymostudio);kymostudio-coreis now a pure library.release-crate.yml
gained apublish-clijob (publishes the CLI after the core, with retry for
crates.io index lag).
Changed
- Python now depends only on
kymostudio-core— droppedcairosvg; SVG→PNG
(CLI + Excalidraw icon embedding) goes through the sharedresvgengine. - JS adds
kymostudio-core(wasm) as its sole runtime dependency for the
kymoCLI's PNG output; the library itself remains dependency-free.
Fixed
- PyPI
kymostudio-corewas stuck at 0.3.3.pyproject.tomlpinned the
version statically, so maturin rebuilt 0.3.3 every release. The version is now
sourced dynamically fromCargo.toml(one source of truth), so each release
publishes the correct wheel.
v0.3.5
Fixed
release-crate.ymlmacOS wheel build — themacos-13(Intel) runner was
retired by GitHub on 2025-12-08, so that job queued forever and blocked the
PyPI publish forkymostudio-core0.3.4. Switched tomacos-latest(arm64) +
macos-15-intel(x86_64), matching linebender/resvg's CI. This release lands
kymostudio-coreon PyPI for the first time.
v0.3.4
Added
- New
packages/rust/kymostudio-core— a pure-Rust SVG → PNG rasterizer
built onresvg(no browser, no C deps). One core crate compiled to three
targets via feature flags: the nativekymoCLI, a Python extension (abi3
wheel,_kymostudio_core), and a wasm package for browser + Node. Published
to crates.io, PyPI, and npm askymostudio-core. CI build matrix in
.github/workflows/rust.yml; release viarelease-crate.yml.
Changed
packages/pythonto_webp.pynow prefers the in-repo_kymostudio_core
rasterizer when installed, falling back toresvg-py— same engine, no
behavior change.