Skip to content

Clamp too large bboxes instead of panicking - #989

Merged
LaurenzV merged 12 commits into
linebender:mainfrom
Its-Just-Nans:fix-unwrap
Aug 1, 2026
Merged

LaurenzV merged 12 commits into
linebender:mainfrom
Its-Just-Nans:fix-unwrap

Conversation

@Its-Just-Nans

@Its-Just-Nans Its-Just-Nans commented Dec 14, 2025 •

Copy link
Copy Markdown
Contributor

Fix #937
Fix #941

This change the API of render() but is still compatible I think
(returns None instead of crashing)

Maybe we could add #[must_use] ?

Comment thread crates/c-api/lib.rs Outdated
let mut pixmap = tiny_skia::PixmapMut::from_bytes(pixmap, width, height).unwrap();

resvg::render(&tree.0, transform.to_tiny_skia(), &mut pixmap)
.expect("Failed to render to pixmap");

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we panic or fail quielty?

Comment thread crates/resvg/tests/integration/main.rs Outdated
size.height() as f32 / tree.size().height() as f32,
);
resvg::render(&tree, render_ts, &mut pixmap.as_mut());
resvg::render(&tree, render_ts, &mut pixmap.as_mut()).expect("Failed to render");

@Its-Just-Nans Its-Just-Nans Dec 14, 2025 •

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The best would be to resturn a Option<usize> or a Result<usize, String>

I don't really like to .expect() but I do it now for this MR for no breaking change

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It's fine, it's just for testing.

@Its-Just-Nans Its-Just-Nans changed the title checked operations fix: remove dangerous unwrap Jan 13, 2026
@Its-Just-Nans

Copy link
Copy Markdown
Contributor Author

I understand that I made multiple MRs to improve safety but they contains breaking changes.

Another solution would be to add more public method which are safer instead of editing the current ones (I can do that).

Aka

Instead of modifying render.
Create a new method render_with_result

@Its-Just-Nans

Copy link
Copy Markdown
Contributor Author

I understand that I made multiple MRs to improve safety but they contains breaking changes.

Hi

With the upcoming release introducing breaking changes (#922), maybe resvg could also take the opportunity to fix some of the remaining unwraps (and others small issue like the assert!() no?

Thanks

@LaurenzV

LaurenzV commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

Hi, sorry, I know that the lack of response here is probably frustrating. Just to explain, your (and other) PRs are not being ignored, the problem is simply that no one has really had the bandwidth to work on resvg (at least for me it's lack of time but also a bit lack of motivation), we've managed to pull of the harfrust migration because it's pretty important, but that's about it. This is why there are so many unmerged PRs.

But anyway, a second reason is that even though replacing panics with errors is a good idea in general and seems easy to do on the surface, it still requires a bit more consideration about whether we really want to make that change, and that requires digging into the codebase again which I've not had the time to do!. While in general removing panics is good, we need to distinguish between unwraps that can actually fail (like the filter ones) and unwraps which shouldn't be able to fail and therefore are fine keeping. For example:

let target_size = tiny_skia::IntSize::from_wh(pixmap.width(), pixmap.height())?;

I don't think there is any point in removing the unwrap here because the pixmap size itself is already guaranteed to be non-zero IIRC, so this should never fail. For the filter case, I'm still unsure whether it's really worth it to make rendering fallible because of this single case, because other than that I don't think there are that many fallible operations in resvg. Maybe it is, but maybe it would be better to just clamp instead (because honestly, no one should really be rendering to u32::MAX...). I hope that explains why it's not super straight-forward to merge these changes and why it's been taking so long.

I'll try to make more time for resvg in the near future, but of course I can't make promises, because it's just in my free time after all. :)

@LaurenzV LaurenzV changed the title fix: remove dangerous unwrap Make render a fallible method Aug 1, 2026
@LaurenzV LaurenzV changed the title Make render a fallible method Clamp maximum bbox instead of panicking Aug 1, 2026
@LaurenzV

LaurenzV commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

I've decided to just clamp now. If you are trying to rasterize SVGs with millions of pixel in a single dimension, I think you have other problems to worry about. 😄

@LaurenzV

LaurenzV commented Aug 1, 2026

Copy link
Copy Markdown
Collaborator

#937 is not fixed by this, but this seems to be a bug in tiny-skia itself with very large paths.
#941 will run into all eternity now, but at least not panic.

The correct fix for both will be to introduce a fallible API and allow restricting the maximum dimensions, but that's a whole other can of worms we don't need to address in this PR now. Apart from that, users can also detect the SVG size themselves and not even start rendering if they want to.

So I think this is good enough for now, thanks!

@LaurenzV LaurenzV changed the title Clamp maximum bbox instead of panicking Clamp too large bboxes instead of panicking Aug 1, 2026
@LaurenzV
LaurenzV merged commit 35a9781 into linebender:main Aug 1, 2026
5 checks passed
@Its-Just-Nans

Copy link
Copy Markdown
Contributor Author

The correct fix for both will be to introduce a fallible API and allow restricting the maximum dimensions, but that's a whole other can of worms we don't need to address in this PR now.

On my side, I'm also interested in the render() function to return a Result<()> so that the user knows if there was a problem or not.

I think this could give the lib user some error and a way to know if the render failed ^^

Thanks

renovate Bot added a commit to gwennlbh/shapemaker that referenced this pull request Aug 9, 2026
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/vgvf that referenced this pull request Aug 9, 2026
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/shapemaker that referenced this pull request Aug 9, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/vgvf that referenced this pull request Aug 9, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/shapemaker that referenced this pull request Aug 26, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/vgvf that referenced this pull request Aug 26, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/shapemaker that referenced this pull request Sep 7, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/vgvf that referenced this pull request Sep 7, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/shapemaker that referenced this pull request Sep 15, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/vgvf that referenced this pull request Sep 15, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/vgvf that referenced this pull request Sep 24, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
renovate Bot added a commit to gwennlbh/shapemaker that referenced this pull request Sep 25, 2026
##### [v0.48.1](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0481-2026-08-02)

This release has an MSRV of 1.85.0 for `usvg` and `resvg` and the C API.

##### Changed

- MSRV lowered from 1.89 to 1.85. ([#1109](linebender/resvg#1109))
- Downgraded strict-num dependency to 0.1.1. This prevents duplicate versions from being included ([#1110](linebender/resvg#1110))

##### Fixed

- Fixed an `as_mut_slice` future-compatibility warning. ([#1108](linebender/resvg#1108))
##### [v0.48.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0480-2026-07-31)

This release has an MSRV of 1.89.0 for `usvg` and `resvg` and the C API.

The big change in this release is that text support is now backed by
[`skrifa`](https://github.com/googlefonts/fontations) and
[`harfrust`](https://github.com/harfbuzz/harfrust) rather than
[`ttf-parser`](https://github.com/harfbuzz/ttf-parser) and
[`rustybuzz`](https://github.com/harfbuzz/rustybuzz):

- Moves resvg onto an actively maintained font stack.
- Should have faster and more correct text rendering.
- Will enable further improvements to things like variable font rendering in future.
- May impact binary size (expected +\~500kb for people not otherwise including fontations dependencies in their tree).
- May result in small rendering changes compared to older versions of resvg.

##### Added

- New `svgz` and `writer` feature gates to reduce the number of required dependencies. ([#1088](linebender/resvg#1088) by [@reed-smout](https://github.com/reed-smout))
- Warnings when parsing malformed paths. ([#1011](linebender/resvg#1011))
- A `Display` implementation for `Units`. ([#986](linebender/resvg#986))

##### Changed

- MSRV bumped from 1.87 to 1.89. The requirement comes from `font-types`.
- Text shaping now uses `harfrust` instead of `rustybuzz`, and font parsing uses `skrifa` (fontations) instead of `ttf-parser`. ([#922](linebender/resvg#922) by [@nicoburns](https://github.com/nicoburns))
- Filter input dimension checks are now debug-only assertions. ([#991](linebender/resvg#991))

##### Fixed

- Glyph advances are now calculated correctly. ([#1043](linebender/resvg#1043) by [@fundon](https://github.com/fundon))
- Text nodes now inherit their absolute transform. ([#1040](linebender/resvg#1040) by [@fundon](https://github.com/fundon))
- Fixes related to non-finite values. ([#1049](linebender/resvg#1049) by [@SAY-5](https://github.com/SAY-5))
- Transforms are no longer applied twice in `abs_transform`. ([#1056](linebender/resvg#1056) by [@fundon](https://github.com/fundon))
- `fr` is now resolved for radial gradients referenced via `href`. ([#1098](linebender/resvg#1098) by [@T1mVo](https://github.com/T1mVo))
- Panic in `feComposite` with the `arithmetic` operator when the filter region is larger than the clamped layer. ([#1021](linebender/resvg#1021), [#1007](linebender/resvg#1007))
- Application of `transform` (and other group properties like `opacity`) on a nested `svg`
  element.
- The missing dimension of an `svg` with only `width` or `height` specified is now computed from its `viewBox` aspect ratio. ([#1045](linebender/resvg#1045))
- The `wght` variation coordinate is now set even when `font-weight` has its default value. ([#1099](linebender/resvg#1099))
- The unprefixed `href` attribute now takes precedence over the deprecated `xlink:href` when both are present, as required by SVG 2. ([#1015](linebender/resvg#1015))
- Incorrect y-axis offsets when transforming `feSpotLight` sources. ([#1052](linebender/resvg#1052))
- Panics caused by bounding boxes that exceed the supported integer range. ([#989](linebender/resvg#989))
##### [v0.47.0](https://github.com/linebender/resvg/blob/HEAD/CHANGELOG.md#0470-2026-02-05)

This release has an MSRV of 1.87.0 for `usvg` and `resvg` and the C API.

##### Added

- Focal radius (`fr`) supported for Radial Gradients. ([#1014](linebender/resvg#1014) by [@wmedrano](https://github.com/wmedrano))
- Support for variable fonts based on font-variation-settings CSS property. ([#997](linebender/resvg#997) by [@oetiker](https://github.com/oetiker))

##### Changed

- `tiny-skia` has a major version bump from 0.11 to 0.12.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Panic attempt to multiply with overflow in crates/resvg/src/lib.rs Panic called Option::unwrap() on a None value in crates/resvg/src/lib.rs

2 participants