tiny-skia-path
A tiny-skia Bezier path implementation
0.12.0
44M downloads/mo
#1332 most downloaded on crates.io
linebender/tiny-skia
What this package is like to depend on
Last release 6 months ago
02 Feb 2026
Ships unpredictably
gaps range from 8 days to 2.0 years
Nearly every release is documented
notes for 14 of 14 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
14 releases · first in 2022
1 release in the last 12 months
see the full history below
Release timeline
14 releases · Jul 2022 to Feb 2026Releases
latest 14-
0.12.002 Feb 2026Release notes
Open source →Update version numbers and changelog for v0.12.0 release.
cargo-semver-checkssays thattiny-skia-pathalso requires a
semver-breaking release (and it looks like historically it's version has
been locked to that oftiny-skiaanyway), so I've also updated it's
version number.Signed-off-by: Nico Burns [email protected]
Release notes
Open source →Fixed
- Fixed a panic when drawing small anti-aliased rectangles. Thanks to @nwhitehead
Added
- 2-point conical gradient support for (
RadialGradient). Thanks to @wmedrano - Sweep gradient support (
SweepGradient). Thanks to @wmedrano - Support for a small number of color spaces. Thanks to @danieldg
- Added the
is_emptyandjoinmethods toRect. Thanks to @danieldg - Implement
HashforPathVerb,RectandSizeandIntSize. Thanks to @LaurenzV - Add support for relaxed SIMD in WebAssembly. Thanks to @CryZe
- Add the
from_rgba_uncheckedmethod toColorso it can be created inconstcontexts. Thanks to @jeffreyrosenbluth - Add the
scale_byandscale_tomethod toSize. Thanks to @jermy - Add the
take_demultipliedmethod toPixmap. Thanks to @JustForFun88 - Add the
takemethod toMask. Thanks to @valadaptive - Add the
round_outmethod toRect. Thanks to @valadaptive
Changed
- The
RadialGradient::newrequires a start radius now. Set the second argument to 0.0 to preserve the old behavior.
-
0.11.404 Feb 2024 -
0.11.303 Dec 2023 -
0.11.201 Oct 2023Release notes
Open source →Changed
- MSRV bumped to stable, because of the
flate2crate.
Fixed
Transform::is_validwas treating 1/4096 as zero. We need a higher precision.- Build failure on AVX2 with
--no-default-features. Thanks to @linkmauve
- MSRV bumped to stable, because of the
-
0.11.116 Jun 2023Release notes
Open source →Changed
- MSRV bumped to 1.60, because of the
logcrate.
Fixed
LineJoin::MiterCliphandling with smallmiter_limit. Thanks to @torokati44
- MSRV bumped to 1.60, because of the
-
0.11.008 Jun 2023Release notes
Open source →Added
LineJoin::MiterClip. Thanks to @torokati44
Changed
Rect::insetandRect::outsetare no longer require a mutableself. Thanks to @wezm
-
0.10.027 May 2023Release notes
Open source →Added
PathBuilder::push_pathNonZeroRectSizeRect::transformRect::bbox_transformTransform::from_bboxTransform::is_validTransform::get_scaleTransform::pre_rotateTransform::post_rotateTransform::pre_rotate_atTransform::post_rotate_atTransform::map_point
Changed
ColorU8andPremultipliedColorU8are stored as[u8; 4]instead ofu32. This fixes potential alignment issues and make the code easier to understand. Thanks to @e00EPathBuilder::push_rectacceptsRectand notf32numbers now.
Removed
tiny_skia_path::ScreenIntRect. It become private.Path::is_empty.Pathcannot be empty by design.
Removed
ColorU8::getandPremultipliedColorU8::get. Use the getters instead.
-
0.9.023 Apr 2023Release notes
Open source →Added
Mask::from_vecMask::from_pixmapto convertPixmapintoMaskby extracting alpha or luminance.Mask::widthMask::heightMask::dataMask::data_mutMask::fill_pathMask::decode_pngMask::load_pngMask::encode_pngMask::save_pngMask::invertMaskTypePixmap::apply_mask
Changed
- Rename
ClipMaskintoMask. Maskis closer to a 8bit (A8)Pixmapnow, rather than being its own thing.Mask::newrequires width and height arguments now.- Drawing on
MaskusingMask::fill_pathuses our SIMD pipeline now instead of a scalar code that should make it a bit faster. - Painting API no longer returns
Option<()>, but simply adds a warning to the log. Paint::anti_aliasis set totrueby default.
Removed
Mask::set_path. UseMask::fill_pathinstead.Mask::default(). Mask cannot be empty anymore.
-
0.8.422 Apr 2023Release notes
Open source →Added
- Implement
PartialEqforPaintand subtypes. Thanks to @hecrj
Changed
- MSRV bumped to 1.57, mainly because of the
pngcrate.
Fixed
ClipMasks larger than 8191x8191 pixels. Previously, the creation of a large mask viaClipMask::set_pathwould have created an empty mask.
- Implement
-
0.8.305 Feb 2023Release notes
Open source →Fixed
- Performance regression, probably due to LLVM update in Rust. Thanks to @mostafa-khaled775
- Big-endian targets support. Thanks to @ids1024
-
0.8.222 Oct 2022Release notes
Open source →Added
Pixmap::from_vec.
Fixed
- Increase Conic to Quad conversion precision. This allows us to produce nicer round caps. Previously, they were not as round as needed.
-
0.8.129 Aug 2022Release notes
Open source →Fixed
- Conditional compilation of
FasterMinMaxon fallback platforms. Thanks to @CryZe
- Conditional compilation of
-
0.8.027 Aug 2022Release notes
Open source →Added
- AArch64 Neon SIMD support. Up to 3x faster on Apple M1. Thanks to @CryZe
Changed
FiniteF32,NormalizedF32andNonZeroPositiveF32types have been moved to thestrict-numcrate.- Rename
NormalizedF32::from_u8intoNormalizedF32::new_u8. - Rename
NormalizedF32::new_boundedintoNormalizedF32::new_clamped. - Use explicit SIMD intrinsic instead of relying on
safe_arch. - MSRV bumped to 1.51
-
0.7.003 Jul 2022Release notes
Open source →Added
tiny-skia-pathdependency that can be used independently fromtiny-skia. It contains thetiny-skiaBezier path implementation, including stroking and dashing. As well as all the geometry primitives (likePointandRect).
Changed
- When disabling the
stdfeature, one have to enableno-std-floatfeature instead oflibmnow.