Skip to content

Releases: brunoborges/jairosvg

v1.0.10

08 Apr 03:39

Choose a tag to compare

Changelog

🧰 Tasks

  • 1bfde42 remove --enable-preview flag from entire project

🛠 Build

  • 75a23e0 exclude CLI jar from Maven Central publishing
  • b5cf47b remove native image from release workflow

📝 Documentation

  • fb1e629 update README with CLI jar download and multi-file usage

Contributors

We'd like to thank the following people for their contributions:

  • Bruno Borges
  • github-actions[bot]

v1.0.8

02 Apr 14:00

Choose a tag to compare

Changelog

🐛 Fixes

  • 40a9d74 ensure release process updates benchmark.java and generate.java (#196), closes #196

Contributors

We'd like to thank the following people for their contributions:

  • GitHub
  • brunoborges
  • github-actions[bot]

v1.0.5

31 Mar 20:44

Choose a tag to compare

Changelog

🐛 Fixes

  • a5eb609 make benchmark workflow future-proof by syncing version from pom.xml
  • 0d82f1d update benchmark.java dependency to 1.0.5-SNAPSHOT

🧪 Tests

  • 8a451c0 push coverage to 98.1% (1089 tests, 460 missed instructions)
  • 9cdd56b push coverage to 97.9% (502 missed instructions)
  • eebc819 push coverage to 97.7% (1088 tests)
  • d8e66bc push JaCoCo coverage to 97.5% (1070 tests)
  • 991cc23 increase branch coverage for Surface, TextDrawer, FilterRenderer

  • e1d5c91 Release v1.0.5
  • af774e4 Read VERSION from Maven-filtered properties instead of hardcoding
  • afd21f9 Delete benchmark-2026-03-31_14-02-19.log
  • f2cb201 Move bump-version.sh to .github/workflows/scripts/, remove old scripts
  • 6ebf0cc Restore scripts/ folder needed by release workflow
  • fcd76d0 Fix file URI query/fragment handling on Windows
  • c107a11 Fix Windows path handling in UrlHelper and tests
  • 16ccf0e Regenerate comparison PNGs
  • 26f21d6 Implement feComposite filter primitive (#184), closes #184
  • a311de8 Fix patternTransform rendering for combined scale+rotate transforms (#185), closes #185
  • 9cab362 Fix useElement test: check blue channel instead of dark pixels
  • 5c8a639 Regenerate comparison PNGs
  • 7aa4ab7 Target precise uncovered branches — 98.7% coverage
  • dad1e77 Add tests for defensive paths across 7 classes
  • df8069f Remove dead code, add tests for defensive paths
  • 9dd49e3 Fix symbol+use rendering: path leak, width/height pollution, SVG 2 auto sizing (#183), closes #183
  • eda52f7 Add CODECOV_TOKEN to Codecov upload step
  • 53ed094 Integrate Codecov for dynamic coverage badge
  • 11e7ddd Add Benchmark, Native Image, and Coverage badges to README
  • 64803d1 Enhance README with comprehensive feature list and updated architecture
  • 3ca70e5 Increase warmup to 50, reduce measurement to 500 iterations
  • dd4115e Ignore requiredFeatures per SVG 2 to match modern browser rendering (#182), closes #182
  • e12eff5 Set JVM CompileThreshold=500 for earlier JIT compilation
  • bba0315 Optimize filter pipeline and CSS allocation hotspots
  • 00fb94b Optimize allocation hotspots in Node.applyCss and FilterRenderer
  • 4cfe72d old scripts
  • b8fc3f0 delete old specs
  • 42b5553 Fix SVG font: fall back to system font for undefined characters (#181), closes #181
  • 60fa393 Use Arial font in comparison SVGs for consistent cross-platform rendering, closes #178
  • 12ba8c7 Delete comparison/png/20_fe_tile_review.png
  • afc5bdd Add arrow markers on cubic curve to markers comparison
  • f08ef44 Fix marker orient=auto to use tangent direction at curve endpoints
  • 076f681 Delete .github/workflows/codeql.yml
  • d59ce78 delete old examples
  • 9e8d077 Add 11 visual comparison SVGs for untested features
  • 0def8e6 deleting session files
  • 3edd325 Extract benchmark section to BENCHMARK.md
  • d240e81 Move visual rendering comparison to separate file
  • 6d6a7cd Surface.java: 100% line coverage, remove dead code
  • ae3a9cd Hardcode named colors, remove colors.properties
  • e6ca5db upgrade gh aw
  • 0342dad Shrink benchmark images and make clickable to full size
  • 3afd338 Add benchmark chart and file size comparison to site
  • 4d342a2 Remove dead code and increase Helpers branch coverage
  • 5afed19 Cover CLI Main.java at 100% line/branch coverage
  • 618843c Cover PdfSurface at 100% line/branch coverage
  • 2dab509 clean up benchmark logs
  • dabd6f9 Update site documentation to reflect current codebase
  • ccf5ec2 Update workflows: Node.js 24, bump CodeQL action versions
  • fa34495 Add site deployment to CI workflow on push to main
  • 226e716 Add branch coverage tests for Helpers, Colors, CssProcessor, and Node
  • edf0a54 Add branch coverage tests for utility and rendering helper classes
  • 59df9de Fix CodeQL workflow: set upload=never to avoid conflict with default setup
  • b6f189b Initial plan
  • 94c245e Cover JairoSVG.ConversionBuilder at 100% line/branch/method coverage
  • 2d56405 Expand test coverage to 81.7% with 339 tests (+199)
  • cfb222b Improve code quality, tests, and documentation
  • cb2f9ae Initial plan
  • 3be2eb7 Refactor Defs.java and FilterRenderer into granular classes
  • 1399f0c Trigger site deployment after release
  • 6757f8c Fix release workflow: add issues:write permission for milestone management
  • 4903eac Make release workflow milestone step resilient to pre-existing milestones
  • 4e950a8 Refresh benchmark numbers and comparison charts
  • 922018e Bump version to 1.0.5-SNAPSHOT

Contributors

We'd like to thank the following people for their contributions:

  • Bruno Borges
  • GitHub
  • brunoborges
  • github-actions[bot]

v1.0.4

30 Mar 21:31

Choose a tag to compare

Changelog

🔄️ Changes

  • cbcc648 cache solid AWT Colors and skip strip/toLowerCase for hex colors, closes #142
  • dbe3ca8 reduce per-node overhead in draw() hot path, closes #142
  • cc222af optimize stroke rendering and skip unnecessary vertex computation, closes #145
  • 989d199 O(1) ID index for , eliminate AffineTransform allocations in skew/matrix transforms, closes #140 #142
  • a65a56a avoid caching sub-region maskBuffer; add sub-region mask test, closes #154

🧰 Tasks

  • 4856498 deps: bump github/gh-aw from 0.62.5 to 0.65.0
  • 25409b8 deps: bump actions/deploy-pages from 4 to 5

  • 8220af6 Release v1.0.4
  • 4433dd2 Make release version input optional, default to pom.xml
  • 1971282 deleted benchmark logs
  • 7899270 Bump version to 1.0.4-SNAPSHOT

Contributors

We'd like to thank the following people for their contributions:

  • Bruno Borges
  • GitHub
  • github-actions[bot]

v1.0.3

27 Mar 04:59

Choose a tag to compare

Changelog

🚀 Features

  • 721fdb1 add JSVG (com.github.weisj:jsvg:2.0.0) to benchmark and generate scripts
  • 7e76386 add feImage filter primitive support
  • 066bbdb add feBlend filter primitive support
  • 3f9687b add feTile filter primitive support

🐛 Fixes

  • bf57aba improve output format for performance comparison results
  • 6e0f364 clip filter output to filter region to prevent feFlood bleeding (#131), closes #130 #131
  • 4c14639 replace java.awt.* wildcard with explicit imports in benchmark.java
  • 67fa061 address review feedback for feImage support

🔄️ Changes

  • 9f93f7f eliminate unnecessary rendering work for zero-alpha and none fills
  • 3ad2520 revert mask loop to combined pass with BT.709 luminance
  • 6a2a73a optimize mask rendering — sub-region + DST_IN composite
  • 61893ca reduce per-render allocations and redundant string parsing
  • 82b220b bounds-aware sub-region filter processing (#152), closes #152
  • 4176873 optimize mask rendering pipeline (#151), closes #151
  • 823d86d optimize feBlend and feFlood filter primitives (#150), closes #137 #150
  • 3fb7ff2 optimize feTile with direct pixel operations (#149), closes #138 #149
  • 463452e switch benchmark to collective warmup across all test cases (#148), closes #147 #148
  • 73f135d optimize filter rendering - 37% faster (#146), closes #136 #146
  • e6171ff use MaxRAMPercentage=75% for benchmark heap sizing
  • d9d1177 match JSVG rendering defaults and expose renderingHint() API (#134), closes #134
  • 85fd314 replace ConvolveOp Gaussian blur with 3-pass box-blur approximation, closes #121
  • 52106a5 optimize feBlend with direct DataBufferInt access and integer math
  • 34473db optimize mask luminance compositing with integer math and direct raster buffers (#127), closes #127

🧪 Tests

  • 000b49f refine feBlend coverage and review feedback
  • 1964184 refine feTile support and verification

🧰 Tasks

  • f488dcc update benchmark numbers from CI run 2026-03-27
  • 54f74b3 regenerate comparison PNGs and README
  • 955408c deps-dev: bump com.diffplug.spotless:spotless-maven-plugin
  • 2d09be5 deps: bump github/gh-aw from 0.51.6 to 0.62.5
  • 376f7b8 deps: bump actions/download-artifact from 8.0.0 to 8.0.1
  • 706e670 deps: bump org.apache.pdfbox:pdfbox from 3.0.6 to 3.0.7
  • 7006a50 deps: bump actions/setup-python from 5 to 6
  • 4b68fc4 deps-dev: bump org.apache.maven.plugins:maven-shade-plugin
  • 26b6f38 regenerate JairoSVG PNGs with updated rendering defaults
  • 242befa regenerate comparison PNGs after filter region clipping fix
  • f11cc63 add feTile comparison example and rendered outputs

📝 Documentation

  • f09b1db update benchmark table with latest results (2026-03-27)
  • ae57667 fix JSVG minimum Java version from 11+ to 8+
  • 37a3f70 add JSVG to all multi-library comparisons
  • 58c9d86 update benchmark numbers from 2026-03-26 run with latest EchoSVG
  • 35268ec update PNG file sizes with new test cases
  • 8b142a8 update benchmark table with 23 test cases and JSVG column
  • be2ccd4 add feBlend comparison case and rendered outputs
  • 2b95808 add feImage comparison SVG examples and rendered PNGs
  • 1c4854d document intentional lack of SVG script support

  • e834a76 Release v1.0.3
  • a5a7a37 update benchmark charts with latest numbers and JSVG
  • 56a8039 add 22_localized_masks renders for cairosvg, echosvg, and jsvg
  • 3fe4a9d log benchmark to file
  • 1ff6f16 remove bench log
  • 832f751 Update comparison/README.md with accurate EchoSVG 2.4 information
  • c802039 Initial plan
  • b421f98 Run tests in headless mode to prevent AWT desktop window
  • 898ddfa new test case
  • b20fbc4 Bounds-aware sub-region effect buffers for masks and opacity, closes #152 #153
  • c32b6ba Potential fix for code scanning alert no. 1: Workflow does not contain permissions
  • 3677fbf Display deltas as percentages with 2 decimal points
  • 1643446 Update README with latest results after rendering hints change
  • 7535e2a Add --no-progress mode for benchmark output and enable it in CI (#133), closes #133
  • 6c7333b Merge perf/optimize-blend-direct-buffer: 2.2x faster feBlend
  • 16cf860 Merge origin/main into copilot/add-feimage-filter-support
  • f719165 Fix ambiguous List import in generate.java
  • 0f010fb Fix artifact size description: JairoSVG is not a fat JAR
  • bcdb8ce Fix porting fidelity table: JairoSVG supports .svgz input
  • 9bbf569 Add JSVG to Dependencies & Footprint and Security sections
  • b3b6423 Add JSVG to all comparison sections in README
  • 7342bfb Add EchoSVG to PNG output file size comparison table
  • d16c016 Add JSVG file sizes to PNG output comparison table
  • 2af169a Fix broken markdown table separator in benchmark section
  • e7c2c5a Normalize JSVG benchmark settings and add CLI args for warmup/iterations
  • d042ca1 Initial plan
  • f54c020 Update comparison README.md to include JSVG as fourth library; add README regeneration to generate.java
  • 260eef5 Add JSVG PNG renderings for all 19 comparison test cases
  • 6e587b7 Initial plan
  • d10d3a3 Initial plan
  • 33b22c1 Initial plan
  • 809f211 Initial plan
  • aba9cd0 Refine effort-labeler guard condition for issue comments
  • 316c125 Gate effort-labeler issue_comment runs to /effort commands
  • 1bb2b51 Document static renderer animation limitation
  • f8c9734 Initial plan
  • 4442e07 Initial plan
  • a5f12d5 Initial plan
  • c4e64fc Skip foreignObject content and document limitation
  • b9cfe38 Initial plan
  • b37e6b1 Add /effort slash command trigger to effort-labeler workflow
  • df307f6 Fix effort labeler: skip closed issues on manual dispatch
  • 37b927b Add effort labeler agentic workflow
  • d9e52d2 Support non-rendering SVG metadata tags
  • fd83e63 Initial plan
  • cf65f19 Auto-close released milestone and create next on release
  • 5e52039 Add Maven Central and Javadoc badges to README
  • 4769804 Refactor benchmark table formatting for improved readability in README
  • 6a5f113 Add section on ImageMagick's SVG support and performance comparison
  • d86afd5 Add calc() rendering examples (SVG + PNG demos)
  • 919c5bd Fix benchmark CI: update jairosvg version to 1.0.3-SNAPSHOT in comparison scripts
  • 1578980 Initial plan
  • 9fa44c9 Add CSS calc() function support in Helpers.size()
  • ff31161 Initial plan
  • 04dc94a Fix group opacity rendering and add nested SVG tests
  • 35b1c24 Initial plan
  • 167992e Update benchmark section in README.md to clarify JairoSVG's optional PDFBox dependency and add disk footprint details
  • fba1299 Add Table of Contents to README.md for improved navigation
  • 8f97a89 Update README.md to enhance benchmark comparison section with additional charts and improved layout
  • 2d7915b Update benchmark SVG and PNG files with improved rendering metrics and visual adjustments
  • 46b0350 Update benchmark SVG with new metrics and improved layout
  • 574cb95 Update performance benchmarks in README.md for SVG conversion times
  • 4cc6257 Bump version to 1.0.3-SNAPSHOT

Contributors

We'd like to thank the following people for their contributions:

  • Bruno Borges
  • GitHub
  • brunoborges
  • github-actions[bot]

v1.0.2

04 Mar 08:15

Choose a tag to compare

Changelog

🚀 Features

  • 7449c1c add graalvm native-image metadata for cli
  • dee22ce add Java module descriptor

🐛 Fixes

  • 758510f render luminance masks including gradient-filled mask content

🔄️ Changes

  • b2d4dda optimize mask luminance pixel processing

🛠 Build

  • cbf8144 harden native-image workflow permissions and jar detection
  • 271f0f5 enforce preview flags in native-image workflow
  • 50309dc add dedicated workflow for graalvm native-image cli build

📝 Documentation

  • 5a9829f clarify native-image metadata behavior

  • 3e3403f Release v1.0.2
  • aabb679 Fix element not inheriting presentation attributes like fill, closes #86
  • 84a5709 Update README.md to improve SVG benchmark table with clickable links and clarify filters/masks caveat
  • 9123ca0 Update performance benchmarks in README.md for filter processing times
  • 2d435db Update README.md to enhance SVG library comparison details and clarify performance metrics
  • d39c0e6 Update 15_masks.png to improve mask rendering
  • 497e86a Update performance benchmarks and key strengths in README.md
  • 428066c Fix embedded image rendering broken by MemoryCacheImageInputStream double-close
  • d43eb88 Strengthen svgz regression tests with pixel assertions
  • 37b2082 Add regression tests for gzip-compressed svg inputs
  • 082c7ff Initial plan
  • 2721b04 Initial plan
  • ff325bc Initial plan
  • 14a413b Initial plan
  • 459522f Add progress bar to benchmark using me.tongfei:progressbar
  • 36b7011 Optimize image decoding with data: URI fast path and raster cache
  • 7790801 Optimize image decoding with data: URI fast path and raster cache
  • 98f0ebd Optimize image decoding with data: URI fast path and raster cache
  • ec49739 Update embedded image for PNG comparison
  • de31c6c Add image-rendering property to SVG images for improved rendering
  • 1ee0dae Update PNG comparison images and remove outdated files
  • c2f417b Support image-rendering CSS property for raster images, closes #80
  • 8963481 Change default CLI output format from PDF to PNG, closes #78
  • 8850b5d Update README: Enhance benchmark section with detailed comparison and reference to full results
  • c2c19d7 Refactor PngSurface: Simplify import statements and method signatures for writePng
  • 4fb1996 Update comparison README with 19-file benchmark and PNG size data
  • 06a1afb Remove SVG re-rendering functionality and update documentation to reflect output format changes
  • 7dc0052 Implement command-line interface for JairoSVG and update main class reference in POM
  • 9cbefda Add --no-cairosvg, --no-echosvg and name filter args to benchmark
  • 1e6efd4 Update version to 1.0.1 and implement version bump script for releases
  • d48967f Bump version to 1.0.1
  • c9583df Update README to clarify JairoSVG's cross-platform capabilities
  • ea6efc4 Improve README formatting for benchmark and CLI options tables
  • d10f4ab Update project description and improve POM formatting
  • 6894496 Load benchmark SVGs from comparison/svg/ instead of hardcoded strings
  • ec88b82 Set PNG default compression level to 6, matching CairoSVG/libpng
  • f4972ca Revert "Replace ImageIO PNG writer with parallel PNG encoder"
  • 5e81770 Replace ImageIO PNG writer with parallel PNG encoder
  • 5c2c5b5 Replace DOM XML parsing with SAX direct-to-Node tree
  • 58b0c60 Update jairosvg script reference to version 1.0.1
  • 18d519e Update jairosvg version to 1.0.1 in README
  • cdb718f Update jairosvg version and add JBang installation
  • 7252cea updated png files
  • 56eba9e Add SVG to PNG benchmark implementation and update references
  • 76790ab Refactor comparison table formatting and improve readability in COMPARISON.md
  • f0dd48a Update benchmark table with all 5 test cases and fresh numbers
  • 18c09bf Bump version to 1.0.2-SNAPSHOT

Contributors

We'd like to thank the following people for their contributions:

  • Bruno Borges
  • GitHub
  • Max Rydahl Andersen
  • brunoborges
  • github-actions[bot]

v1.0.1

03 Mar 20:50

Choose a tag to compare

Changelog

🚀 Features

  • 941ab37 add additional benchmark SVG scenarios

🐛 Fixes

  • acfb23c render svg markers on stroked paths

🧪 Tests

  • 0158d21 cover marker rendering and refine marker placement

📝 Documentation

  • dd5a973 add rendered marker comparison images for PR comment

  • c4a58a2 Make release workflow idempotent for reruns
  • 8b72661 Fix JReleaser GPG env var names
  • 28e060b Release v1.0.1
  • 9c1eac0 Configure JReleaser to publish to Maven Central
  • 8dedc26 Bump version to 1.0.1-SNAPSHOT and auto-bump after release
  • 2d33035 Fix benchmark: update version from 1.0.0-SNAPSHOT to 1.0.0
  • 77e578f Rename Java package from com.jairosvg to io.brunoborges.jairosvg
  • 0c4536a Include JaCoCo report in Maven site by running tests first
  • 6bab0ab Fix JReleaser config: correct artifact paths and skip tag creation
  • fdbd40b Initial plan
  • 22bf387 Fix duplicate method/class definitions causing compilation failure
  • 33241ca Initial plan
  • 3e1c515 Initial plan
  • 10060cb Fix CI compilation failure: remove duplicate testTextPathFollowsCurve method in ShapeRenderingTest
  • 1a4a494 Initial plan
  • 6910157 Refine image opacity edge blending implementation
  • b620f10 Fix CI: add marker rendering code and correct test methods in ShapeRenderingTest
  • fdbc505 Improve raster image edge blending for opacity rendering
  • c30ea24 Initial plan
  • 0fd6db0 Fix duplicate testTextPathFollowsCurve method and swap test assertions to correct tests
  • d8466a7 Initial plan
  • dfdf66f Fix swapped test assertions and missing closing SVG tag in ShapeRenderingTest
  • c8e9f35 Initial plan
  • e7929e4 Refactor test for textPath rendering validation
  • e7f66b8 Add rendered embedded-image outputs for PR comparison
  • c860a52 Fix embedded SVG image opacity handling
  • b1472ab Initial plan
  • d55607e Initial plan

Contributors

We'd like to thank the following people for their contributions:

  • Bruno Borges
  • GitHub
  • brunoborges
  • github-actions[bot]

v1.0.0

03 Mar 17:06

Choose a tag to compare

What's Changed

  • Bump actions/upload-artifact from 4 to 7 by @dependabot[bot] in #1
  • Bump actions/upload-pages-artifact from 3 to 4 by @dependabot[bot] in #3
  • Bump org.junit.jupiter:junit-jupiter from 5.11.4 to 6.0.3 by @dependabot[bot] in #11
  • Bump actions/setup-java from 4 to 5 by @dependabot[bot] in #10
  • Bump org.apache.pdfbox:pdfbox from 3.0.4 to 3.0.6 by @dependabot[bot] in #2
  • Bump org.apache.maven.plugins:maven-shade-plugin from 3.6.0 to 3.6.1 by @dependabot[bot] in #6
  • Bump org.apache.maven.plugins:maven-surefire-plugin from 3.5.2 to 3.5.5 by @dependabot[bot] in #12
  • Bump org.apache.maven.plugins:maven-jar-plugin from 3.4.2 to 3.5.0 by @dependabot[bot] in #4
  • Bump actions/checkout from 4 to 6 by @dependabot[bot] in #5
  • Bump org.jacoco:jacoco-maven-plugin from 0.8.13 to 0.8.14 by @dependabot[bot] in #7
  • Bump org.apache.maven.plugins:maven-project-info-reports-plugin from 3.8.0 to 3.9.0 by @dependabot[bot] in #8
  • Bump org.apache.maven.plugins:maven-compiler-plugin from 3.14.0 to 3.15.0 by @dependabot[bot] in #9
  • Bump com.diffplug.spotless:spotless-maven-plugin from 2.44.5 to 3.2.1 by @dependabot[bot] in #13
  • docs: add COMPARISON.md — comprehensive JairoSVG vs EchoSVG feature comparison by @Copilot in #14
  • Add hsl()/hsla() color function support by @Copilot in #34
  • Add SVG Fonts support (<font>, <glyph>) by @Copilot in #33
  • Fix text-anchor="middle" centering for text elements containing tspan children by @Copilot in #37
  • Fix Windows file URI path resolution in UrlHelper by @Copilot in #39
  • Fix site workflow: maven-site-plugin incompatible with maven-fluido-skin 2.1.0 by @Copilot in #40
  • Add patternTransform attribute support by @Copilot in #41
  • Fix compile error: CssProcessor.resolveHref returns ParsedUrl instead of String by @Copilot in #43
  • Add benchmark workflow and jbang catalog entry for JairoSVG vs CairoSVG by @Copilot in #42
  • Add external CSS stylesheet loading via <?xml-stylesheet?> processing instruction by @Copilot in #38
  • Add CairoSVG as a third renderer in comparison assets and generator by @Copilot in #47
  • Add structural pseudo-selector support in CSS processor (:first-child, :last-child, :nth-child, :not) and accept pseudo-elements by @Copilot in #45
  • fix: run jbang on host runner to access local Maven repo in benchmark workflow by @Copilot in #48
  • Add JPEG output support across surface, builder API, and CLI by @Copilot in #49
  • Add TIFF output support to builder and CLI conversion paths by @Copilot in #52
  • Add text-decoration rendering for SVG text (underline, overline, line-through) by @Copilot in #44
  • Refresh docs to reflect current output formats and CLI/API feature set by @Copilot in #54
  • Add CSS custom property (var()) resolution for SVG style values by @Copilot in #55
  • Update feature matrix to reflect CSS custom properties support by @Copilot in #56
  • Fix clipped linearGradient stop offsets so clip-path fills preserve full color range by @Copilot in #62
  • Render <textPath> glyphs along referenced path geometry by @Copilot in #63
  • Render SVG blur and drop-shadow filters via off-screen filter pipeline by @Copilot in #64

New Contributors

Full Changelog: https://github.com/brunoborges/jairosvg/commits/v1.0.0