Releases: thorvg/thorvg
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
ThorVG 1.0.0-pre30
This release introduces a new text line-wrapping feature and significantly improves stability in the CPU and WebGL engines, especially for DropShadow and texture handling. Lottie rendering is more reliable with fixes for TrimPath, Slot management, and asset injection issues. Memory handling has been enhanced across image formats like SVG, JPG, and GIF. Additionally, memory leaks in the lottie2gif tool have been resolved.
🚀 Core
- [text] Introduced line-wrapping support. #3397
🚀 Engines
- [cpu] Fixed potential crashes caused by 32-bit integer overflow when handling large lines. #3842
- [cpu] Significantly improved DropShadow rendering stability. #3812 #3813 #3814
- [cpu] Added support for image texmap masking with 8-bit mask images. #3816
- [cpu] Improved memory safety in texmap handling.
- [cpu] Fixed incorrect behavior in 8-bit direct image rendering.
- [webgl] Enhanced stability during shader compilation.
- [webgl] Fixed issues with invalid composition operations. #3837
- [wgpu] Upgraded integration to wgpu-native v25/v27. #3422 #3835
✨Lottie
- Improved stability for TextDocument slot overriding.
- Fixed incorrect TrimPath multiplication logic. #2690
- Corrected DropShadow distance calculation. #3808
- Handled invalid slot values more gracefully for Slot rendering.
- Fixed missing Asset Resolver injection in non-threaded builds. #3851
- 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
- [gif] Fixed memory leaks.
🔤 TTF
- Added support for line feed (\n) handling in text rendering.
↔️ Tools
- [lottie2gif] Fixed memory leaks.
🧩 API Updates
- C++ API
+ enum TextWrap [None, Character, Word, Smart, Ellipsis]
+ Result Text::wrap(TextWrap mode)
- C API
+ enum Tvg_Text_Wrap [TVG_TEXT_WRAP_NONE, TVG_TEXT_WRAP_CHARACTER, TVG_TEXT_WRAP_SMART, TVG_TEXT_ELLIPSIS]
+ Tvg_Result tvg_text_wrap_mode(Tvg_Paint text, Tvg_Text_Wrap mode)
Full Changelog: v1.0-pre29...v1.0-pre30
ThorVG 1.0.0-pre29
This release improves ThorVG’s engines with stabilized DropShadow and Clipping on CPU, and adds Hit-Detection for GL/WGPU. WGPU rendering issues were fixed by correcting missing transforms, and text rendering is now faster thanks to a new Glyph Cache. Lottie support was enhanced with Layer Effects quality options, masking fixes, and an Asset Resolver, while MSVC build compatibility was also improved.
🚀 Engines
- [cpu] Improved stability for DropShadow and Clipping features.
- [gl/wgpu] Added Hit-Detection support.#3746
- [wgpu] Fixed a shape rendering issue caused by missing transform information. #3762
✨Lottie
- Added a Layer Effects quality option, allowing users to balance rendering quality and performance. #3795
- Improved support for a few Mask Inversion options that were previously omitted. #3302
- Introduced an Asset Resolver for flexible external asset handling. #3533
🔤 TTF
- Introduced a Glyph Cache to optimize rendering performance for repeated text drawing. #3397
🛠️ Portability
- Fixed min/max macro conflicts during builds with MSVC. https://github.com/orgs/thorvg/discussions/3794
🧩 API Updates
- C++ API
+ Result LottieAnimation::quality(uint8_t value)
+ Result Picture::resolver(std::function<bool(Paint* paint, const char* src, void* data)> func, void* data)
- C API
+ Tvg_Result tvg_lottie_animation_set_quality(Tvg_Animation animation, uint8_t value)
+ Tvg_Result tvg_picture_set_asset_resolver(Tvg_Paint picture, Tvg_Picture_Asset_Resolver resolver, void* data)
Full Changelog: v1.0-pre28...v1.0-pre29
ThorVG 1.0.0-pre28
This release enhances text layout handling and extends Paint::duplicate() functionality. CPU engine improvements include memory safety fixes and scalable CLAA logic. Lottie performance was optimized, with better Repeater handling and corrected Track Matte behavior.
C API now uses opaque pointer types, introducing potential breaking changes.
🔧 Core
- Enhanced text bounding box logic to improve layout accuracy.
- Enabled
Canvas::target()calls during paint object push/remove operations. (See Additional Notes) - Added support for previously missing properties in
Paint::duplicate().
🚀 Engines
- [cpu] Resolved memory violation in DropShadow. #3764
- [cpu] Enhanced to support scalable CLAA logic. #3307
✨Lottie
- Fixed memory violation related to color stops in slot overriding. #3766
- Optimized Repeater with memory pooling, improving performance by approximately 2.3% FPS in Lottie examples.
- Improved parsing logic to correctly handle
typroperties, even in deferred scenarios. #3611 #3562 - Corrected Track Matte behavior to ensure matte is applied only to the immediate target, preventing unintended chaining.
🖼️ Jpeg
- Fine-tuned jpg decoder with size and performance.
- Fixed MCU block offset handling. #3699
🔤 TTF
- Refined codepoint conversion logic for improved efficiency.
🧩 API Updates
- C++ API
+ enum EngineOption [None, Default, SmartRender]
* Result Picture::load(uint32_t* data, uint32_t w, uint32_t h, ColorSpace cs, bool copy = false)
-> Result Picture::load(const uint32_t* data, uint32_t w, uint32_t h, ColorSpace cs, bool copy = false)
* SwCanvas* SwCanvas::gen()
-> SwCanvas* SwCanvas::gen(EngineOption op = EngineOption::Default)
- C API
+ enum [TVG_ENGINE_OPTION_NONE, TVG_ENGINE_OPTION_DEFAULT, TVG_ENGINE_OPTION_SMART_RENDER]
* Tvg_Result tvg_picture_load_raw(Tvg_Paint* picture, uint32_t *data, uint32_t w, uint32_t h, Tvg_Colorspace cs, bool copy)
-> Tvg_Result tvg_picture_load_raw(Tvg_Paint* picture, const uint32_t *data, uint32_t w, uint32_t h, Tvg_Colorspace cs, bool copy)
* Tvg_Canvas* tvg_swcanvas_create()
-> Tvg_Canvas* tvg_swcanvas_create(Tvg_Engine_Option op)
✅ Additional Notes
- PR #3773 This update may introduce backward compatibility issues in scenarios where applications previously depended on stricter failure checks. Developers are advised to review error-handling logic accordingly.
- PR #3537 The C API interfaces have been updated to use opaque pointer types, resulting in intentional breaking changes. This redesign improves encapsulation but requires updates in all C-based integrations.
Full Changelog: v1.0-pre27...v1.0-pre28
ThorVG v0.15.15
In this release, core stability has been improved with fixes to paint effect duplication and clipping logic. The CPU engine received performance and memory optimizations, including a fix for a DropShadow memory violation. Lottie features were updated to better align with the spec, and JPEG decoding, Web/WASM bundling, and cross-platform compatibility were also enhanced.
🔧 Core
- Ensured correct duplication of paint effects. (#3631)
- Fixed incorrect clipping logic in fast-track rendering paths.
🚀 Engines
- [cpu] Improved memory efficiency when handling stroke and fill operations.
- [cpu] Fine-tuned image composition performance.
- [cpu] Resolved memory violation in DropShadow. #3764
- [cpu] Enhanced to support scalable CLAA logic. #3307
- [cpu] Fixed a clipping issue. #3713
✨Lottie
- Fixed
loop()expression behavior. #3652 - Aligned with Lottie spec: skipped time stretch when time remap is defined. #3591
- Corrected evaluation of the
valueproperty in Lottie expressions. #3693 - Stabilized GradientFill slot overrides. #3766
🖼️ Jpeg
- Fine-tuned jpg decoder with size and performance.
- Fixed MCU block offset handling. #3699
🌐 Web
- Reduced WASM bundle size by omitting default TTF font data when the TTF loader is disabled. #3481
🛠️ Portability
- Fixed compilation issues on Windows when building ThorVG as a subproject using static libraries.
- Corrected directory path parsing issues that prevented Lottie resources from loading properly on MSYS2. #3542
Full Changelog: v0.15.14...v0.15.15
ThorVG 1.0.0-pre27
The ThorVG canvas and text features have been significantly enhanced, with new support for text outlines, alignment, and picture origin.
Rendering engines (CPU, GL/ES, WGPU) have received performance and stability improvements, while Lottie support is now more robust with refactored slots and better expression handling.
🔧 Core
- Revised the ThorVG canvas interface for greater flexibility and improved efficiency. #3116
- Introduced support for rendering text outlines. #3397
- Added support for horizontal and vertical text alignment. #3397
- Enabled setting the origin point for picture elements. #1506
🚀 Engines
- [cpu] Resolved performance regressions introduced in v1.0-pre26.
- [cpu] Improved memory efficiency when handling stroke and fill operations.
- [gl/es] Implemented comprehensive scene-level blending support, including HSL-based blend modes. #3072
- [wgpu] Addressed rendering issues where fill and stroke data were sometimes omitted. #3716
- [wgpu/gl/es] Enhanced bounding box calculations for stroked paths. #3725
✨Lottie
- Simplified and standardized slot handling with reusable interfaces. #2591 #3099
- Corrected evaluation of the "value" property in Lottie expressions. #3693
- Various fixes to improve overall runtime stability.
🛠️ Portability
- Corrected directory path parsing issues that prevented Lottie resources from loading properly on MSYS2. #3542
🧩 API Updates
- C++ API
+ Result Text::outline(float width, uint8_t r, uint8_t g, uint8_t b)
+ Result Text::align(float x, float y)
+ Result Text::layout(float w, float h)
+ Result Picture::origin(float x, float y)
+ Result Picture::origin(float* x, float* y)
- C API
+ Tvg_Result tvg_text_set_outline(Tvg_Paint* paint, float width, uint8_t r, uint8_t g, uint8_t b)
+ Tvg_Result tvg_text_align(Tvg_Paint* paint, float x, float y)
+ Tvg_Result tvg_text_layout(Tvg_Paint* paint, float w, float h)
+ Tvg_Result tvg_picture_set_origin(Tvg_Paint* picture, float x, float y)
+ Tvg_Result tvg_picture_get_origin(Tvg_Paint* picture, float* x, float* y)
* Tvg_Result tvg_text_set_fill_color() -> Tvg_Result tvg_text_set_color()
✅ Additional Notes
- PR #3695 This change may break backward compatibility in cases where stricter failure checks were previously expected or relied upon.
Full Changelog: v1.0-pre26...v1.0-pre27
ThorVG 1.0.0-pre26
This release enhances rendering stability, introduces HSL blending modes, and improves Lottie compliance. It also optimizes the Web build with reduced bundle size and better TypeScript support, while fixing Windows build issues in the infrastructure.
🔧 Core
- Added a new API to control the visibility of Paint objects.
- Improved stability for partial rendering behavior. #3679, #3696
- Fixed incorrect clipping logic in fast-track rendering paths.
- Refined AABB/OBB bounding box behavior to more accurately include stroke regions in size calculations.
🚀 Engines
- [wgpu, gl/es] Fixed incorrect Gaussian blur border clamping. #3677
- [wgpu, gl/es] Added support for HSL-based blend modes: Hue, Saturation, Color, and Luminosity. #2701
- [gl/es] Adjusted blending logic to align with web standards. #3072
- [cpu] Improved multi-threaded clipping stability through proper synchronization.
- [cpu] Ensured rendering updates are triggered only when opacity changes occur.
✨Lottie
- Fixed loop() expression behavior. #3652
- Aligned with Lottie spec: skipped time stretch when time remap is defined. #3591
🖼️ GIF
- Fixed minor memory leaks of background paints.
🌐 Web
- Reduced WASM bundle size by omitting default TTF font data when the TTF loader is disabled. #3481
- Enabled closure optimization, reducing JavaScript code size by up to ~45%.
- Improved TypeScript compatibility by explicitly defining data types. thorvg.web#16
🛠️ Infra
- Fixed compilation issues on Windows when building ThorVG as a subproject using static libraries.
🧩 API Updates
- C++ API
+ Result Paint::visible(bool on)
+ bool Paint::visible()
- C API
+ Tvg_Result tvg_paint_set_visible(Tvg_Paint* paint, bool visible)
+ bool tvg_paint_get_visible(const Tvg_Paint* paint)
✅ Additional Notes
- Please note that the improvements to the bounds() APIs for AABB/OBB are currently applied only to the software engine. The GL and WebGPU engines still use the legacy behavior.
Full Changelog: v1.0-pre25...v1.0-pre26
ThorVG 1.0.0-pre25
This release improves stroke rendering quality and performance, adds new blend mode support across CPU and GPU engines, and enhances SVG and hit detection accuracy. Web compliance and effect duplication are now properly handled. Notable optimizations include a 5–25% FPS boost in the WGPU engine.
🔧 Core
- Improved bounding box calculation to properly account for stroke scalability.
- Ensured correct duplication of paint effects. (#3631)
- Added support for region-based hit detection.
🚀 Engines
- [cpu] Added support for
Hue,Color,Saturation, andLuminosityblend modes. (#2701) - [wgpu] Optimized the stroke tessellator, improving FPS by approximately 5–25%. (#3557)
- [wgpu] Enhanced the quality of stroke round joins. (#3288)
- [wgpu] Improved the visual quality of stroke dashes. (#3273)
- [wgpu] Revised blending functions to align with web standards. (#3072)
- [wgpu, gl/es] Introduced support for the
Compositionblend mode. (#3621) - [wgpu, gl/es] Fixed handling of zero-size blur
DropShadow. (#3602)
🖼️ SVG
- Fixed issues with nested node handling. (#3615)
🧩 API Updates
- C++ API
+BlendMethod::Composition
+bool Paint::intersects(int32_t x, int32_t y, int32_t w, int32_t h)
- C API
+Tvg_Blend_Method::TVG_BLEND_METHOD_COMPOSITION
+bool tvg_paint_intersects(Tvg_Paint* paint, int32_t x, int32_t y, int32_t w, int32_t h)
Full Changelog: v1.0-pre25...v1.0-pre25
ThorVG v0.15.14
This release includes several improvements and minor bug fixes:
🔧 Core
- Corrected an incorrect fill rule option in text rendering.
- Fixed incorrect calculation in multiple mask applications. #3600
- Improved radial gradient handling to conform with SVG 1.1 and address edge cases.
🚀 Engines
- [cpu] Improved the DropShadow effect stability
- [cpu] Updated the SoftLight blending equation to align with the W3C specification.
- [cpu] Added proper support for zero-size blur in DropShadow effects. #3602
- [cpu] Revised texture clipping logic to correctly support shapes with inner corners. #3520
- [cpu] Fixed an issue where lines were missing when a picture was rotated 90 degrees. #3452
- [gl/es] Fixed broken clipping behavior. #3448
✨Lottie
- Increased the quality level of GaussianBlur and DropShadow from low to medium.
- Adjusted DropShadow distance to match Adobe After Effects behavior.
- Fixed missing offset corners when using miter joins.
- Ensured proper star/polygon closure to prevent artifacts from inaccurate point comparisons.
- Corrected an issue causing inaccurate opacity when using the Repeater property.
- Fixed a specification mismatch when a null layer was applied to layer masking.
🌀 Svg
- Fix the nested use nodes #3615
✅ Additional Notes
Removed Lena resources previously used in ThorVG. #3499
Full Changelog: v0.15.13...v0.15.14
ThorVG 1.0.0-pre24
This release brings improved rendering quality, refined visual effects, and better Lottie compatibility. Updates to effects like Tritone, DropShadow, and SoftLight ensure more accurate behavior across platforms. Key adjustments were also made to better match Adobe After Effects, while internal engine tweaks enhance overall stability and performance.
🔧 Core
- Introduced a blending factor parameter for the Tritone effect.
- Fixed incorrect calculation in multiple mask applications. #3600
- Corrected an incorrect fill rule option in text rendering.
- Improved support for blending methods in the Picture instance.
🚀 Engines
- [cpu] Fixed a regression in partial rendering that omitted updates for zero opacity. #3570
- [cpu] Updated the SoftLight blending equation to align with the W3C specification.
- [cpu] Corrected blending pre-multiplication behavior to improve rendering quality. #1944
- [cpu] Added proper support for zero-size blur in DropShadow effects. #3602
- [gl/es] Fixed incorrect alpha multiplication in Tint and Tritone effects.
- [wgpu] Fixed incorrect alpha multiplication in Tint and Tritone effects.
✨Lottie
- Increased the quality level of Gaussian Blur and DropShadow from low to medium.
- Adjusted DropShadow distance to match Adobe After Effects behavior.
- Added proper support for the blending property in the Tritone layer effect.
🧩 API Updates
- C++ API
* Result Shape::fill(FillRule r)
-> Result Shape::fillRule(FillRule r)
- C API
+ Tvg_Result tvg_scene_reset_effects(Tvg_Paint* scene)
+ Tvg_Result tvg_scene_push_effect_gaussian_blur(Tvg_Paint* scene, double sigma, int direction, int border, int quality)
+ Tvg_Result tvg_scene_push_effect_drop_shadow(Tvg_Paint* scene, int r, int g, int b, int a, double angle, double distance, double sigma, int quality)
+ Tvg_Result tvg_scene_push_effect_fill(Tvg_Paint* scene, int r, int g, int b, int a)
+ Tvg_Result tvg_scene_push_effect_tint(Tvg_Paint* scene, int black_r, int black_g, int black_b, int white_r, int white_g, int white_b, double intensity)
+ Tvg_Result tvg_scene_push_effect_tritone(Tvg_Paint* scene, int shadow_r, int shadow_g, int shadow_b, int midtone_r, int midtone_g, int midtone_b, int highlight_r, int highlight_g, int highlight_b, int blend);
Full Changelog: v1.0-pre23...v1.0-pre24