Releases: thorvg/thorvg
ThorVG 1.0.4
This release improves overall engine performance, stability, and memory efficiency while resolving rendering issues across GPU and CPU backends. It expands Lottie capabilities with new features, better standards compliance, and a ~19% performance boost, along with multiple bug and memory leak fixes. SVG and TTF handling have been enhanced for greater accuracy and broader standards support. Additionally, the engine structure and macros have been reorganized to improve portability and maintainability.
🚀 Engines
- [gl/es] Improved image rendering performance by optimizing texture sharing when identical resources are used multiple times. #4074
- [gpu] Suppressed sub-quantum thin-fill fallback, eliminating thin-line artifacts in certain visuals. #4245
- [gpu] Updated hue blend behavior to align with the W3C specification instead of After Effects. #4190
- [cpu] Improved thread safety in multi-canvas environments.
- [cpu] Prevented stack overflow caused by large path coordinate values.
- [cpu] Fixed incorrect buffer stride configuration in post-processing effects. #4325
- [core] Introduced an internal RenderPath scratch buffer to reduce memory spikes.
✨Lottie
- Fixed Local Font Text Range Selector factor and world-space translation issues. #4158
- Reduced binary size by changing expression engine number precision from float64 to float32 (-2.5 KB).
- Fixed custom effect index mismatch for unsupported types. #4215
- Added support for TextDoc value types in expressions. #4298
- Fixed word-boundary line wrapping for local font text boxes.
- Added support for 3D orientation (
or) transform property. - Revamped masking behavior with blur effects to correct clipping issues. #3125
- Fixed heap buffer overflow in Lottie gradient slot overriding. #4315
- Fixed missing opacity slot overriding in Solid Stroke.
- Improved URL font text handling to properly support tracking, line height, fill order, and word wrap.
- Improved expression performance by
~19%using optimized string handling for faster property lookup. - Enhanced Rounded Corner to handle previously unsupported sharp corner cases.
- Fixed several memory leaks.
🖼️ Picture
- [svg] Added support for
mix-blend-mode. #4243 - [svg] Fixed infinite loop caused by circular
<use>element references. #4244 - [svg] Ignored invalid children of gradient elements to ensure correct rendering output. #3485 #3502
- [svg] Fixed incorrect behavior of
userSpaceOnUsegradients. #1331 - [svg] Added support for
emandexlength units. #2713 - [svg] Added support for retrieving accessor names. #4217
- [svg] Fixed several minor issues.
🔤 TTF
- Fixed space detection in word wrapping using Unicode code points.
🛠️ Portability
- Improved portability by replacing PATH_MAX-dependent buffers with dynamic allocation.
- Fixed minor portability issues with ESP32 in Lottie.
🧩API Updates
- C++ APIs:
+ const char* Accessor::name(uint32_t id)
+ bool Picture::accessible
- C APIs:
+ tvg_picture_set_accessible()
+ tvg_accessor_name()
✅ Additional Notes
The render backend directory structure has been reorganized (build configuration updated accordingly):
sw_engine -> cpu_engine
gl_engine -> gpu_engine/gl
wg_engine -> gpu_engine/wg
Additionally, engine definition macros have been renamed from RASTER to ENGINE:
THORVG_SW_RASTER_SUPPORT -> THORVG_CPU_ENGINE_SUPPORT
THORVG_GL_RASTER_SUPPORT -> THORVG_GL_ENGINE_SUPPORT
THORVG_WG_RASTER_SUPPORT -> THORVG_WG_ENGINE_SUPPORT
Full Changelog: v1.0.3...v1.0.4
ThorVG 1.0.3
In this release, engine-wide improvements enhance thread safety and rendering quality across GPU and CPU, including reduced rendering burdens and up to ~7% FPS gains. Lottie gains new features like Pucker/Bloat support alongside improved path handling, blending, and text alignment. Additionally, fixes in SVG and TTF strengthen rendering correctness and overall stability.
🚀 Engines
- [core] Improved thread safety for multi-canvas rendering on worker threads #4120
- [gpu] Enhanced Soft Light and color blending accuracy to better align with W3C specifications. #4190
- [gpu] Fine-tuned Black/White tessellators, resulting in ~7% FPS performance improvement. #4141
- [cpu] Fine-tuned nested blending in masking composition, eliminating one render pass.
- [cpu] Fixed unintended halo artifacts by properly handling degenerate radial gradients with near-zero radius. #4253
- [cpu] Fixed radial gradient rendering to produce correct visuals for near-zero radius. #3803
✨Lottie
- Corrected image asset path resolution to prevent unintended subdirectory inclusion. #4208
- Added support for Pucker/Bloat shape modifier. #3801 #2681
- Fixed incorrect height alignment in URL-based text.
- Optimized blending and matte handling in all-in-one composition scenarios.
- Improved visual accuracy of the OffsetPath shape modifier.
🖼️ Picture
- [svg] Fixed incorrect clip-path and filter rendering when processing the normal scene tree. #4213
- [svg] Assigned appropriate IDs to grouped paints for improved user accessibility. #4218
🔤 TTF
- Improved robustness by resolving a minor memory violation issue.
Full Changelog: v1.0.2...v1.0.3
ThorVG 1.0.2
This release improves ThorVG’s rendering engines with enhanced performance, thread-safety, and multiple visual artifact fixes across CPU, WebGPU, and OpenGL backends. Lottie support has been expanded with better text rendering, animation stability improvements, and additional expression features. Several APIs and rendering pipeline refinements were introduced to improve flexibility and correctness. Additionally, third-party license notices were added to the LICENSE file to clarify the licensing of bundled components that may be conditionally included at build time.
🚀 Engines
- [core] Added Image Filter API for rendering quality control. #4126
- [core] Added Glyph Metrics API support. #3397
- [core] Fine-tuned the SceneEffect & blending composition pipeline and fixed premultiplied pixel issues.
- [core] Added missing custom new[] / delete[] allocators. #4153
- [core] Fixed incorrect TextMetrics scale computation.
- [cpu] Improved thread-safety in partial rendering.
- [cpu] Enhanced memory pool strategy to support running engines across multiple threads.
- [gpu] Fixed rendering artifact regression caused by the colinear merge optimization. #4154
- [wgpu] Baked transforms into geometry and decoupled solid from paint UBO, resulting in ~4% FPS improvement. #4134
- [gl/es] Fixed broken shape blending inconsistency. #4171
- [gl/es] Fixed additional visual artifact regression caused by scene blend source/extent mismatch. #4187
- [gl/es] Improved performance by batching compatible solid-color draw calls, achieving ~12% FPS improvement. #4002
✨Lottie
- Fixed solid fill color distortion with proper interpolation clamping.
- Added italic text rendering support for URL fonts.
- Corrected gradient fill transform compensation in fragmented rendering contexts.
- Fixed stale scene data when rebuilding animations while paused. #4169
- Added marker segment query APIs. #4167
- Improved overall stability with additional bug fixes. #4196
- [expressions] Aligned
wiggleeffect behavior with After Effects. - [expressions] Added
.valueaccessor for numeric types. #3896 - [expressions] Fixed
toFixed()rounding bug. - [expressions] Added support for
$bm_modandtangentOnPath().
🧩API Updates
- C++APIs:
+ Result Text::metrics(const char* ch, GlyphMetrics& metrics)
+ const char* Text::text() const
+ uint32_t Text::lines()
+ enum struct FilterMethod::Bilinear
+ enum struct FilterMethod::Nearest
+ Result Picture::filter(FilterMethod method)
+ const char* LottieAnimation::marker(uint32_t idx, float* begin, float* end);
- C APIs:
* Tvg_Result tvg_text_get_metrics(const Tvg_Paint text, Tvg_Text_Metrics* metrics)
-> Tvg_Result tvg_text_get_text_metrics(const Tvg_Paint text, Tvg_Text_Metrics* metrics)
+ Tvg_Result tvg_text_get_glyph_metrics(const Tvg_Paint text, const char* ch, Tvg_Glyph_Metrics* metrics)
+ const char* tvg_text_get_text(Tvg_Paint text)
+ uint32_t tvg_text_line_count(Tvg_Paint text)
+ enum TVG_FILTER_METHOD_BILINEAR
+ enum TVG_FILTER_METHOD_NEAREST
+ Tvg_Result tvg_picture_set_filter(Tvg_Paint picture, Tvg_Filter_Method method)
+ const char* marker(uint32_t idx, float* begin, float* end)
+ uint32_t tvg_paint_get_id(const Tvg_Paint paint);
+ Tvg_Result tvg_paint_set_id(Tvg_Paint paint, uint32_t id)
✅ Additional Notes
Please note that in this release, ThorVG added third-party license notices to the LICENSE file to clarify the licensing of bundled third-party components that may be conditionally included during the build process.
- src/loaders/lottie/rapidjson/ RapidJSON (MIT) license
- src/loaders/lottie/jerryscript/ JerryScript (Apache-2.0) license
- src/loaders/webp/ WebP/libwebp (BSD-3-Clause) license
Full Changelog: v1.0.1...v1.0.2
ThorVG 1.0.1
This release improves GL/ES rendering performance with CPU-based model transforms and introduces experimental text metrics APIs in Core. Lottie support has been enhanced with better slot overriding, improved font handling, URL font layout support, and multiple stability fixes.
🚀 Engines
- [core] Added basic text metrics support through experimental APIs. #3896
- [gl/es] Applied model transformations on the CPU to optimize the rendering pipeline, resulting in ~5% fps improvement. #4134
✨Lottie
- Improved compliance with Text Style and Skew Transform slot overriding.
- Enhanced the font asset resolver with support for the "name" prefix to designate system fonts usages. #3961
- Resolved multiple crash issues, improving overall stability. #4128 #4146
- Implemented layout feature support for URL-based fonts. #3397
🧩 API Updates
- C++APIs:
+ Result Text::metrics(TextMetrics& metrics)
- C APIs:
+ Tvg_Result tvg_text_get_metrics(const Tvg_Paint text, Tvg_Text_Metrics* metrics)
Full Changelog: v1.0.0...v1.0.1
ThorVG 1.0.0
A new generation logo for ThorVG - designed by LottieFiles (Celcea)
After one and a half years of continuous development, ThorVG reaches a major milestone with version 1.0, marking a generational leap from v0 to v1. This is not just an update — it's a rebuilt foundation for high-performance, scalable, and portable 2D vector graphics across platforms and devices. Throughout its development, ThorVG has evolved into a mature, production-ready graphics engine, demonstrating proven quality and performance in real-world applications.
In the meanwhile, ThorVG has gained rapid adoption and growing community interest, reflecting its evolution from an early-stage project into a widely recognized and practically adopted vector graphics engine — ready for real-world, cross-platform use.
ThorVG GitHub stars leading up to version 1.0
It has already been successfully integrated into several commercial and embedded products — most notably as the Vector Canvas engine behind the Artboard output in LottieCreator, and as a vector rendering backend for IoT platforms from companies like Espressif. These real-world integrations highlight ThorVG’s suitability for resource-constrained environments, reinforcing its value as a lightweight, scalable, and high-performance vector solution for both embedded and cross-platform use.
ThorVG is powering the Artboard engine behind Lottie Creator
What’s New in v1.0?
ThorVG v1.0 marks a major step forward since v0.15. This release brings comprehensive improvements across the engine — from rendering backends to visual fidelity and usability — making it more powerful, expressive, and production-ready than previous version.
- Advanced text rendering, rich visual effects, and precise blending support for enhanced graphical expression
- Expanded Lottie animation capabilities for cross-platform playback, including modular Web Player presets optimized for size, performance, and rendering mode (CPU/GPU)
- Significant performance improvements, across CPU-/GPU-bound and embedded environments
- A new era of Web integration with WebGL, WebGPU, and the lightweight WebCanvas for seamless browser rendering
- A more precise, elegant, and developer-friendly API design for real-world application needs
- Official Swift integration and supplement with a plenty of examples and a playground for easy and fast onboarding.
- Numerous bug fixes and improved stability for production use.
Please read the full release notes here: thorvg-v1-0-a-new-generation-released
Full Changelog: v0.15.0...v1.0.0
Contributors & Supporters
We would like to extend our deepest thanks to all the contributors, developers, and early adopters who helped shape ThorVG v1.0. Your code, feedback, and passion have been instrumental in making this release possible.
@andyf-canva @baszczewski @BenjaminHalko @bkmgit @Chubercik @dragostis @elcritch @faxe1008 @franramirez688 @hermet @Howl-Kim @huming2207 @jjm2317 @jiggyjiggy @JSUYA @jsoref @kkocdko @kisvegabor @kunyoungparkk @lmdsp @lpogic @mgrudzinska @MewPurPur @nikitalita @niklasf @Nor-s @pharuxtan @Popolon @QuLogic @Repiteo @RuiwenTang @SergeyLebedkin @StephanTLavavej @theashraf @timmy471 @tinyjin @umerov1999 @wenjieshen @Xune @reallynattu
A special thank you goes to LottieFiles for their continued support and collaboration. Their insights, technical feedback, and real-world use cases have been invaluable in guiding ThorVG’s evolution — particularly in shaping its Lottie animation capabilities and web integration. ThorVG has grown stronger and more versatile thanks to their active engagement.
Together, we’re building something powerful — lightweight, open, and ready for the future of vector graphics.
ThorVG 1.0.0-pre34
This release brings engine improvements across all backends, including enhanced text spacing support, performance boosts in GL, and improved stability in CPU and WGPU renderers. Lottie rendering sees more accurate effects and better edge-case handling for rounded corners. SVG parsing is now more robust, with fixes for class duplication and proper support for xml:space in text. Additionally, ThorVG examples have been moved to a dedicated repository to streamline the core project.
🚀 Engines
- [core] Added support for text spacing functions. #3397
- [cpu] Fixed unexpected clipping by enforcing zero clipping when any clip shape is present.
- [cpu] Improved stability in edge blending scenarios.
- [cpu] Applied minor rendering stabilizations.
- [gl] Improved FPS by ~10% by skipping stencil operations for convex fills.
- [gl/wgpu] Enhanced arc tessellation stability by adjusting tolerance handling.
- [gl/es] Optimized matrix pipeline, reducing uniform buffer memory usage by ~25%. #3824
- [wgpu] Added support for rendering degenerate (2-point) paths as strokes, enhancing line quality. #2920
- [wgpu] Fixed regressions related to
Trimpathrendering. #3990 #3991 - [wgpu] Corrected clipping behavior. #3561
- [wgpu] Resolved a crash issue. #4037
- [wgpu] Eliminated unexpected rendering artifacts. #3528
✨Lottie
- Improved rendering quality of rounded corners in edge cases. #2682
- Revised the
wiggleeffect for better alignment with After Effects behavior.
🖼️ Pictures
- [svg] Prevented duplicate class declarations from overriding already-applied classes. #4017
- [svg] Properly support the
xml:spaceattribute in<text>elements. #2710
🧩 API Updates
- C++ API
+ Result Text::spacing(float letter, float line)
- C API
+ Tvg_Result tvg_text_spacing(Tvg_Paint text, float letter, float line)
✅ Additional Notes
ThorVG examples have been moved to a separate repository: thorvg.example, helping to slim down the core engine repository size.
Full Changelog: v1.0-pre33...v1.0-pre34
ThorVG 1.0.0-pre33
This release improves performance by 3% through optimized trim path handling and fixes issues with radial gradients and text kerning.
New feature include support for propertyIndex, pointOnPath in Expressions, and automatic text wrapping in Lottie. SVG style class handling is enhanced, and non-POSIX system compatibility has been improved.
🚀 Engines
- [gl/es] Optimized trim path application, improving FPS by 3%. #3653
- [gl/es] Resolved a regression in
TrimPathrendering. #3999 - [gl/wgpu] Fixed an edge case causing broken radial gradients. #3953
- [gl/wgpu] Enhanced stroke join rendering with angle-based interpolation for smoother rounding. #3344
- [core] Fixed a minor memory issue.
✨Lottie
- Added support for
propertyIndexandpointOnPathinExpressions. #2233 - Implemented automatic line wrapping when text reaches the bounding box edge.
🖼️ Pictures
- [svg] Improved support for CSS class declarations. #3662
- [svg] Added support for setting style classes. #2095
🔤 TTF
- Fixed broken text kerning and positioning of composite glyphs. #3977
🛠️ Portability
- Removed
alloca()usage to ensure compatibility with non-POSIX systems. #3945
Full Changelog: v1.0-pre32...v1.0-pre33
ThorVG 1.0.0-pre32
This release brings improved text rendering stability and enhanced thread safety. Rendering issues with masking and blending on GL/ES have been resolved, and WGPU performance is improved by ~3% at TrimPath. Lottie now handles missing fonts better and supports basic text styling. Web platform gains asset resolver support for better font/image handling.
🚀 Engines
- [core] Improved text rendering stability.
- [core] Enhanced thread safety across the core engine.
- [gl/es] Fixed rendering issues related to masking and blending compositions. #3793
- [gl/es] Added support for rendering degenerate (2-point) paths as strokes, improving line quality. #2920
- [wgpu] Optimized TrimPath rendering for both fill and stroke, resulting in ~3% FPS improvement. #3653
✨ Lottie
- Default font is now applied when a specified font is missing. #3930
- Improved URL text rendering with basic support for fill and stroke Text-Range styles. #3867
🌐 Web
- Added Asset Resolver binding for resolving images and fonts. thorvg/thorvg.web#153
- Correctly displays number glyphs using a fallback font when needed. #3956
🛠️ Portability
- Fixed a debug build error on MSVC. #3821
🧩 API Updates
- C API
+ Tvg_Result tvg_saver_save_animation(Tvg_Saver saver, Tvg_Animation animation, const char* path, uint32_t quality, uint32_t fps)
* Tvg_Result tvg_saver_save(Tvg_Saver saver, Tvg_Paint paint, const char* path, uint32_t quality);
-> TVG_API Tvg_Result tvg_saver_save_paint(Tvg_Saver saver, Tvg_Paint paint, const char* path, uint32_t quality);
Full Changelog: v1.0-pre31...v1.0-pre32
ThorVG 1.0.0-pre31
This release brings notable improvements across all rendering engines, enhances Lottie text and slot handling, and optimizes SVG image performance through smarter resource sharing.
🔩 Core
- Added exception handling for the blur effect when the direction value is out of range. #3889
🚀 Engines
- [gl/es] Enhanced stroke tessellation quality for better visual fidelity. #3665
- [wgpu] Fixed broken rendering issues related to masking and blending compositions. #3793
- [cpu] Resolved a regression causing broken image clippings. #3910
✨ Lottie
- Improved the stability of slot overriding.
- Enhanced text rendering by supporting custom font paths and font asset resolvers. #3866
🖼️ Pictures
- [svg] Optimized memory usage and loading performance by sharing data across instances of identical SVG resources.
🧩 API Updates
- C++ API
+ void Paint::rel(Paint* paint)
- C API
* Tvg_Result tvg_paint_del(Tvg_Paint paint)
-> Tvg_Result tvg_paint_rel(Tvg_Paint paint)
✅ Additional Notes
To ensure consistent and safe management of Paint instances, a dedicated API Paint::rel() has been introduced. This API safely releases Paint objects and handles nullptr gracefully. Direct use of delete on Paint instances is now prohibited.
Full Changelog: v1.0-pre30...v1.0-pre31
ThorVG v0.15.16
This release brings enhanced stability to the CPU engine, addressing issues in DropShadow, Clipping, rendering composition, and memory handling. Lottie improvements include more accurate handling of ty properties, correct Track Matte behavior, support for mask inversion options, and fixes for TrimPath and DropShadow calculations. Picture parsing has been improved with better SVG URL handling and multiple memory-related fixes for JPEG images. Additionally, the release resolves macro conflicts in MSVC builds and includes a minor optimization in TTF codepoint conversion.
🚀 Engines
- [cpu] Improved stability for DropShadow and Clipping features.
- [cpu] Fixed a regression bug about rendering composition.
- [cpu] Fixed potential crashes caused by 32-bit integer overflow when handling large lines. #3842
- [cpu] Improved memory safety in texmap handling.
- [cpu] Fixed incorrect behavior in 8-bit direct image rendering.
✨Lottie
- Improved parsing logic to correctly handle ty properties, even in deferred scenarios. #3611 #3562
- Corrected Track Matte behavior to ensure matte is applied only to the immediate target, preventing unintended chaining.
- Improved support for a few Mask Inversion options that were previously omitted. #3302
- Fixed incorrect TrimPath multiplication logic. #2690
- Corrected DropShadow distance calculation. #3808
- Aligned behaviors for masking and effects combinations.
🖼️ Pictures
- [svg] Fixed improper parsing of URL strings with improved quote trimming. #3834
- [jpg] Resolved several memory-related issues. #3836 #3872
🔤 TTF
- Minor optimization about codepoint conversion.
🛠️ Portability
- Fixed min/max macro conflicts during builds with MSVC. https://github.com/orgs/thorvg/discussions/3794
Full Changelog: v0.15.15...v0.15.16