Releases: V1rg1lee/svg-to-drawio
Version v3.10.0
v3.10.0
Version 3.10.0 expands Mermaid compatibility, introduces multi-file merge workflows, and improves consistency across the CLI, Python API, and desktop app.
Highlights
Improved Mermaid support
- Better handling of Mermaid root-scoped and nested CSS selectors.
- Correct accumulation of nested group transforms.
- Improved recursive
<tspan>layout, whitespace measurement, and centered multi-style labels. - Zero-size Mermaid layout rectangles are no longer emitted as visible shapes.
- Filled triangle markers retain their appearance and reach the correct visual endpoint.
- Textual XHTML inside
<foreignObject>is converted into editable draw.io labels.
Merge multiple SVG files
Multiple SVGs can now be combined into one .drawio document:
- one draw.io page per SVG
- one labeled tile grid containing all SVGs
- optional notes legend
- optional page background color
These features are available through the desktop app, CLI, and Python API.
svg-to-drawio logos/ \
--merge grid \
--grid-columns 3 \
--merge-output logos.drawio \
--legend \
--overwriteInterface parity and reliability
- Watch mode now preserves rendering and post-processing settings.
- CLI watch sessions can export reports and apply quality gates when stopped.
- Merge supports cooperative cancellation and consistent overwrite behavior.
- Parallel cache updates are now thread-safe and atomic.
- Quality gates fail safely when skipped files have no cached diagnostics.
- Python API validation now matches CLI and desktop validation.
- Public watch helpers are now exported from the Python package.
- A new interface-parity guide documents equivalent features and intentional differences between the CLI, API, and desktop app.
Documentation and testing
- Added Mermaid and
<foreignObject>cases to the visual regression fixture. - Updated README and GitHub Pages compatibility documentation.
- Expanded integration coverage for watch mode, merge cancellation, cache concurrency, overwrite behavior, and quality gates.
- 240 automated tests pass.
Upgrade
pip install --upgrade svg-to-drawioThere are no intentional breaking API changes in this release.
Version v3.9.1
v3.9.1
This patch release fixes the macOS DMG presentation introduced in version 3.9.0.
Fixed
- Corrected the Finder background dimensions to match the
660x400DMG window. - Restored the mounted-volume icon by installing
.VolumeIcon.icnsdirectly on the writable volume. - Applied the required Finder creator, invisible, and custom-volume attributes to the volume icon.
- Added CI validation for the DMG background dimensions and mounted-volume icon.
- Preserved the separate custom icon used by the
.dmgfile itself.
There are no engine, CLI, Python API, or SVG conversion output changes in this release.
Version v3.9.0
v3.9.0
This release improves conversion performance, CLI reliability, desktop usability, CI efficiency, and the macOS installation experience.
Highlights
- Added a polished macOS DMG with a custom Finder background, positioned application and
/Applicationsicons, and dedicated volume and DMG file icons. - Improved CSS processing performance through indexed rule lookup while preserving cascade behavior.
- Added Escape-key cancellation to the desktop app.
- Improved equivalent CLI command generation from desktop settings.
- Reduced unnecessary CI usage by running desktop packaging only when relevant files change.
CLI improvements
--require-nativenow supports comma-separated capability names and repeated flags.- Fixed input paths being accidentally consumed by
--require-native. --stdoutnow rejects incompatible report, watch, analysis, and quality-gate options.- Non-interactive execution without an input now reports a clean error.
- The CLI now explains when
--workersis ignored in watch or analysis modes.
Engine improvements
- Added indexed CSS rule lookup for faster style resolution.
- Centralized diagnostic issue codes.
- Reduced duplicated rendering-policy and compatibility logic.
- Improved converter state isolation and repeated bounds calculations.
- Added warnings and recovery coverage for malformed SVG path data.
- Expanded regression coverage for CSS, rendering caches, converter reuse, paths, and quality gates.
Desktop improvements
- Pressing Escape now cancels an active conversion.
- Forced shutdown briefly waits for cooperative cancellation, reducing the risk of truncated output files.
- Equivalent CLI command generation is now isolated and independently testable.
- Preview text rendering follows the selected text metrics policy more consistently.
- Persisted desktop settings are parsed more defensively across platforms.
macOS packaging
- DMGs now use a writable staging image so Finder layout metadata can be applied before final UDZO compression.
- Added a custom Finder background and arranged drag-and-drop installation layout.
- Preserved separate icons for the mounted volume and the
.dmgfile. - Finder styling targets the exact mount point to avoid volume-name collisions.
- Styling failures now produce clear warnings without preventing creation of a usable DMG.
- Added
.DS_Storevalidation and retry-based DMG detachment.
CI and maintenance
- Desktop packaging jobs are skipped when changes cannot affect desktop deliverables.
- Ruff and mypy versions now match the versions used by pre-commit.
- Desktop dependencies now use bounded major-version ranges.
- Added packaging and desktop conversion regression tests.
Version v3.8.1
v3.8.1
This release is a focused macOS packaging follow-up to 3.8.0.
What changed
- macOS DMG builds now keep the app icon and DMG icon separate.
- The DMG build now also attempts to apply the dedicated
dmg_volume.icnsicon to the.dmgfile itself, not just to the mounted volume contents.
Why this is better
- The macOS application icon and DMG presentation no longer interfere with each other.
- The DMG now aims for a more polished Finder experience, closer to what users expect from native macOS software.
Scope
- No SVG conversion behavior changed in this release.
- This is a packaging/presentation update for macOS desktop deliverables only.
Version v3.8.0
v3.8.0
This release improves the desktop deliverables for both Windows and macOS.
What changed
- Windows portable releases now ship as direct standalone
.exefiles instead of.ziparchives. - macOS releases now ship as universal2
.dmgdisk images, so the same download works on both Apple Silicon and Intel Macs. - The macOS app bundle now uses a more native Finder-friendly name:
SVG to draw.io.app.
Why this is better
- Windows portable downloads are simpler: users can download and run the executable directly.
- macOS downloads now follow a more standard install flow with a DMG instead of a plain archive.
- The macOS app naming looks cleaner and more natural in Finder and mounted disk images.
Packaging and validation
- The CI smoke tests were updated accordingly so the new Windows portable executables and macOS DMG artifacts are validated as part of the release pipeline.
Version v3.7.0
v3.7.0
This release focuses on desktop previewing, engine hardening, and CI/packaging cleanup.
Highlights
- Added an interactive desktop preview experience with:
- source SVG rendering
- draw.io-oriented preview rendering
- zoom support
- compatibility highlights
- batch preview file selection
- Added preview-specific text rendering for advanced cases such as
textPath, positioned glyphs, and compatibility annotations. - Hardened several engine edge cases around transforms, polygon clipping, CSS/style resolution, shape emission, and preview asset handling.
- Improved CLI and Python API validation, and clarified quality gate messaging around score thresholds and rendering requirements.
- Consolidated desktop packaging into a shared reusable workflow for both CI and release builds.
- Added site fingerprinting to avoid unnecessary GitHub Pages deployments when generated documentation is unchanged.
Desktop App
- Improved preview usability and rendering fidelity.
- Polished selectors, dialogs, expandable sections, preview controls, and logging behavior.
- Reduced noisy runtime warnings and improved desktop error handling.
CI and Packaging
- Fixed reusable workflow permission issues that could prevent CI from starting correctly.
- Simplified desktop packaging maintenance by sharing the same workflow logic across validation and release jobs.
- Expanded regression and smoke-test coverage for preview rendering, packaging, quality gates, polygon clipping, and docs fingerprinting.
Dependency Updates
- Updated PyInstaller.
- Updated PySide6.
- Updated mkdocstrings.
- Updated pinned GitHub Actions dependencies and release tooling.
Version v3.6.0
v3.6.0
This release focuses on rendering compatibility, packaging confidence, and overall project maturity.
Highlights
- Added a shared capability registry and clearer compatibility reporting across the engine, CLI, Python API, and desktop app.
- Improved text handling with expanded metrics coverage and more advanced
textPathsupport. - Added native support for simple clipping and simple editable patterns, with safer SVG fallback behavior for unsupported cases.
- Extended filter handling while restoring faithful fallback behavior for plain Gaussian blur.
- Added cross-platform smoke tests for packaged desktop deliverables and improved Linux packaging helper scripts.
- Expanded regression coverage and updated visual fixtures for rendering, diagnostics, packaging, and text behavior.
Interface Improvements
- Better alignment between the desktop app, CLI, and Python API for rendering presets and advanced rendering policies.
- Clearer compatibility messaging so users can better understand what stays editable, what is approximated, and what falls back to embedded SVG.
Packaging and Release Quality
- Improved Linux packaging and validation flows for AppImage, Debian, RPM, Flatpak, and archive deliverables.
- Added smoke-test coverage for packaged artifacts across Linux, Windows, and macOS release outputs.
Project Maturity
- Added
CONTRIBUTING.mdandCONTRIBUTORS.md. - Added issue templates for bug reports and feature requests.
- Added a Code of Conduct and a Security Policy.
Fixes
- Restored faithful fallback behavior for plain Gaussian blur cases instead of forcing an inaccurate native approximation.
- Hardened simple pattern handling so unsupported artwork falls back safely instead of producing misleading native output.
- Fixed Linux smoke-test validation to match the actual archive layout produced by the build pipeline.
Version v3.5.1
v3.5.1 - Linux packaging and release pipeline fixes
This release improves the reliability of desktop Linux deliverables and resolves several packaging issues discovered during end-to-end testing.
Fixed
-
Fixed RPM compatibility on Fedora and other RPM-based distributions.
- The
.rpmpackage is now built from a Fedora-based containerized bundle instead of reusing the Ubuntu-built Linux bundle. - This resolves runtime/dependency mismatches such as the
libtiff.so.5installation failure seen on Fedora.
- The
-
Fixed Flatpak packaging and export issues.
- Corrected source layout handling during Flatpak assembly.
- Added the missing Linux tooling required by
flatpak-builder(elfutils/eu-strip) in CI. - Fixed AppStream metadata integration and icon validation.
- Ensured the Flatpak branch/export flow is consistent during bundle generation.
-
Fixed Linux desktop asset issues.
- The packaged application icon is now a real square
256x256PNG, which fixes Flatpak/AppStream validation errors. - Added a regression test to prevent invalid Linux icons from being published again.
- The packaged application icon is now a real square
-
Improved Linux desktop integration.
- Refined Qt application identity setup (
application name,display name, anddesktop file ID) to better match Linux desktop environments and packaged desktop entries.
- Refined Qt application identity setup (
-
Fixed release signing workflow issues.
- Corrected GPG home handling so imported secret keys are actually reused during signing.
- Fixed release asset upload in the signing job by explicitly targeting the repository when no Git checkout is present.
CI / build pipeline improvements
- Linux packaging scripts now report exactly which required assets are missing instead of failing with a generic error.
- The desktop build workflow is now more robust across:
- Debian packages
- RPM packages
- Flatpak bundles
- AppImage signing
- release verification asset upload
Notes
.deb,.flatpak, and.tar.gzcontinue to come from the standard Linux bundle..rpmnow follows a dedicated Fedora-based build path to better match RPM-family distributions.
Version v3.5.0
v3.5.0
This release brings a major step forward for both the conversion engine and desktop distribution.
Smarter SVG conversion and stronger quality controls
- Added new native/editable handling for more SVG cases, including simple
clipPath/maskrewrites and custom marker endpoint shapes. - Expanded compatibility reporting so it is clearer what stayed native, what was approximated, and what required fallback rendering.
- Added quality gates for CLI and API workflows, including checks for warnings, fallbacks, minimum compatibility score, and required native capability families.
- Improved batch conversion flows with better parallel conversion coverage and stronger structured result/report helpers for automation.
Better API, CLI, and desktop experience
- Expanded the public Python API with richer conversion result helpers and quality-gate utilities.
- Improved CLI support for advanced rendering and quality enforcement scenarios.
- Continued polishing the desktop app around compatibility visibility, worker behavior, and release packaging integration.
Real desktop packaging for Windows, Linux, and macOS
- Added dedicated packaging scripts for:
- Windows installer builds
- Linux
.deb - Linux
.rpm - Linux
.flatpak - Linux
.AppImage
- Improved release output so users can download packages that better match their platform and architecture.
- Added Linux AppStream metadata and packaging helpers for a more complete desktop distribution story.
Release verification and provenance
- Added release verification assets based on:
SHA256SUMS.txt- Sigstore provenance for the checksum manifest
- optional GPG signing material
- AppImage signing support
- Grouped advanced per-artifact verification files into a single verification archive to keep releases cleaner.
Documentation and GitHub Pages
- Added a full GitHub Pages documentation site with:
- quick start
- CLI reference
- Python API guide
- advanced rendering guide
- compatibility reference
- API reference
- Added a release downloads page explaining which desktop package to choose and how to verify release assets.
- Added the project demo GIF directly to the documentation home page.
Test and maintenance improvements
- Added broad new test coverage for:
- CLI quality gates
- API helpers and conversion results
- compatibility reporting
- structure and transform handling
- XML security cases
- Improved docs build stability by pinning the MkDocs toolchain to the compatible 1.x line and using a dedicated docs build wrapper.
Version 3.4.0
v3.4.0
Installable PyPI package
svg-to-drawiocan now be installed as a proper Python package (pip install svg-to-drawio), with PEP 621 metadata and a dynamic version sourced fromsvg_to_drawio.__version__.- Two equivalent entry points after install: the
svg-to-drawioconsole script andpython -m svg_to_drawio. - The package ships a
py.typedmarker so type checkers (mypy, pyright) treat its annotations as authoritative. main.pyis kept as a thin backward-compatible wrapper for running straight from a repository checkout without installing anything.- New CI/CD: a dedicated package-build job validates the wheel/sdist on every push, and a Trusted Publishing workflow (OIDC, no stored PyPI token) builds, validates, and publishes automatically whenever a GitHub release is published, with a release-tag/package-version consistency check shared with the desktop build workflow.
Desktop app redesign
- Full visual and structural overhaul into a 3-page layout: Convert, Results, Settings, built on a new minimalist design system, with no loss of existing functionality.
- The dark/light theme toggle now also matches the native Windows title bar to the in-app theme via the DWM API, instead of silently following the OS-wide setting only.
More accurate compatibility reporting
- New
compatibilitymodule shared by the engine, CLI, and desktop app: every conversion now produces a plain-English compatibility overview and a per-feature matrix (native / approximated / embedded fallback / not carried over). - Several rendering paths now report their real fidelity instead of staying silent:
- sheared
<image>elements are flagged as approximated (draw.io images can't skew) - remote (non-embedded) image references are flagged as staying linked
dominant-baselineis now actually used to position text instead of always assuming an alphabetic baseline- non-zero
letter-spacingis flagged as not preserved, since draw.io text doesn't support it natively <textPath>text now reports as an approximation- marker usage (
marker-start/marker-mid/marker-end) on lines, polylines, and paths is now tracked and reported
- sheared
- SVG-fallback bounding-box padding for filtered elements is now estimated from the actual filter primitives (
feGaussianBlurstandard deviation,feDropShadowoffset/blur) instead of a flat 15% margin, reducing unnecessary clipping or oversized fallback boxes. - New dedicated
tests/unit/test_compatibility.pysuite, plus CLI integration tests asserting the compatibility overview/matrix actually appear in command output.