PackageTrack
Sign in Get early access

tiny-skia

A tiny Skia subset ported to Rust.

0.12.0 43M downloads/mo #1365 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 30 of 30 stable releases

Nothing withdrawn

no release was ever pulled

6 years old

30 releases · first in 2020

1 release in the last 12 months

see the full history below

Release timeline

30 releases · Jul 2020 to Feb 2026
2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 30
  1. 0.12.0 02 Feb 2026
    Release notes

    Update version numbers and changelog for v0.12.0 release.

    cargo-semver-checks says that tiny-skia-path also requires a
    semver-breaking release (and it looks like historically it's version has
    been locked to that of tiny-skia anyway), so I've also updated it's
    version number.

    Signed-off-by: Nico Burns [email protected]

    Open source →
    Release notes

    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_empty and join methods to Rect. Thanks to @danieldg
    • Implement Hash for PathVerb, Rect and Size and IntSize. Thanks to @LaurenzV
    • Add support for relaxed SIMD in WebAssembly. Thanks to @CryZe
    • Add the from_rgba_unchecked method to Color so it can be created in const contexts. Thanks to @jeffreyrosenbluth
    • Add the scale_by and scale_to method to Size. Thanks to @jermy
    • Add the take_demultiplied method to Pixmap. Thanks to @JustForFun88
    • Add the take method to Mask. Thanks to @valadaptive
    • Add the round_out method to Rect. Thanks to @valadaptive

    Changed

    • The RadialGradient::new requires a start radius now. Set the second argument to 0.0 to preserve the old behavior.
    Open source →
  2. 0.11.4 04 Feb 2024
    Release notes

    Fixed

    • Path::compute_tight_bounds calculation. Thanks to @qbcbyb
    Open source →
  3. 0.11.3 03 Dec 2023
    Release notes

    Added

    • Path::compute_tight_bounds
    Open source →
  4. 0.11.2 01 Oct 2023
    Release notes

    Changed

    • MSRV bumped to stable, because of the flate2 crate.

    Fixed

    • Transform::is_valid was treating 1/4096 as zero. We need a higher precision.
    • Build failure on AVX2 with --no-default-features. Thanks to @linkmauve
    Open source →
  5. 0.11.1 16 Jun 2023
    Release notes

    Changed

    • MSRV bumped to 1.60, because of the log crate.

    Fixed

    • LineJoin::MiterClip handling with small miter_limit. Thanks to @torokati44
    Open source →
  6. 0.11.0 08 Jun 2023
    Release notes

    Added

    Changed

    • Rect::inset and Rect::outset are no longer require a mutable self. Thanks to @wezm
    Open source →
  7. 0.10.0 27 May 2023
    Release notes

    Added

    • PathBuilder::push_path
    • NonZeroRect
    • Size
    • Rect::transform
    • Rect::bbox_transform
    • Transform::from_bbox
    • Transform::is_valid
    • Transform::get_scale
    • Transform::pre_rotate
    • Transform::post_rotate
    • Transform::pre_rotate_at
    • Transform::post_rotate_at
    • Transform::map_point

    Changed

    • ColorU8 and PremultipliedColorU8 are stored as [u8; 4] instead of u32. This fixes potential alignment issues and make the code easier to understand. Thanks to @e00E
    • PathBuilder::push_rect accepts Rect and not f32 numbers now.

    Removed

    • tiny_skia_path::ScreenIntRect. It become private.
    • Path::is_empty. Path cannot be empty by design.

    Removed

    • ColorU8::get and PremultipliedColorU8::get. Use the getters instead.
    Open source →
  8. 0.9.1 17 May 2023
    Release notes

    Added

    • Reexport tiny_skia_path::PathStroker in tiny-skia.
    Open source →
  9. 0.9.0 23 Apr 2023
    Release notes

    Added

    • Mask::from_vec
    • Mask::from_pixmap to convert Pixmap into Mask by extracting alpha or luminance.
    • Mask::width
    • Mask::height
    • Mask::data
    • Mask::data_mut
    • Mask::fill_path
    • Mask::decode_png
    • Mask::load_png
    • Mask::encode_png
    • Mask::save_png
    • Mask::invert
    • MaskType
    • Pixmap::apply_mask

    Changed

    • Rename ClipMask into Mask.
    • Mask is closer to a 8bit (A8) Pixmap now, rather than being its own thing.
    • Mask::new requires width and height arguments now.
    • Drawing on Mask using Mask::fill_path uses 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_alias is set to true by default.

    Removed

    • Mask::set_path. Use Mask::fill_path instead.
    • Mask::default(). Mask cannot be empty anymore.
    Open source →
  10. 0.8.4 22 Apr 2023
    Release notes

    Added

    • Implement PartialEq for Paint and subtypes. Thanks to @hecrj

    Changed

    • MSRV bumped to 1.57, mainly because of the png crate.

    Fixed

    • ClipMasks larger than 8191x8191 pixels. Previously, the creation of a large mask via ClipMask::set_path would have created an empty mask.
    Open source →
  11. 0.8.3 05 Feb 2023
    Release notes

    Fixed

    • Performance regression, probably due to LLVM update in Rust. Thanks to @mostafa-khaled775
    • Big-endian targets support. Thanks to @ids1024
    Open source →
  12. 0.8.2 22 Oct 2022
    Release notes

    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.
    Open source →
  13. 0.8.1 29 Aug 2022
    Release notes

    Fixed

    • Conditional compilation of FasterMinMax on fallback platforms. Thanks to @CryZe
    Open source →
  14. 0.8.0 27 Aug 2022
    Release notes

    Added

    • AArch64 Neon SIMD support. Up to 3x faster on Apple M1. Thanks to @CryZe

    Changed

    • FiniteF32, NormalizedF32 and NonZeroPositiveF32 types have been moved to the strict-num crate.
    • Rename NormalizedF32::from_u8 into NormalizedF32::new_u8.
    • Rename NormalizedF32::new_bounded into NormalizedF32::new_clamped.
    • Use explicit SIMD intrinsic instead of relying on safe_arch.
    • MSRV bumped to 1.51
    Open source →
  15. 0.7.0 03 Jul 2022
    Release notes

    Added

    • tiny-skia-path dependency that can be used independently from tiny-skia. It contains the tiny-skia Bezier path implementation, including stroking and dashing. As well as all the geometry primitives (like Point and Rect).

    Changed

    • When disabling the std feature, one have to enable no-std-float feature instead of libm now.
    Open source →
  16. 0.6.6 23 Jun 2022
    Release notes

    Fixed

    • Panic in Rect::round and Rect::round_out. Thanks to @Wardenfar
    Open source →
  17. 0.6.5 10 Jun 2022
    Release notes

    Fixed

    • Minimum arrayref version.
    Open source →
  18. 0.6.4 04 Jun 2022
    Release notes

    Fixed

    • Panic during non-aliased hairline stroking at the bottom edge of an image.
    Open source →
  19. 0.6.3 01 Feb 2022
    Release notes

    Fixed

    • SourceOver blend mode must not be optimized to Source when ClipPath is present.
    Open source →
  20. 0.6.2 30 Dec 2021
    Release notes

    Fixed

    • ClipMask::intersect_path alpha multiplying.
    Open source →
  21. 0.6.1 28 Aug 2021
    Release notes

    Added

    • Support rendering on pixmaps larger than 8191x8191 pixels. From now, Pixmap is limited only by the amount of memory caller has.
    • Transform::map_points
    • PathBuilder::push_oval
    Open source →
  22. 0.6.0 21 Aug 2021
    Release notes

    Added

    • WASM simd128 support. Thanks to @CryZe

    Changed

    • Transform::post_scale no longer requires &mut self.
    • Update png crate.
    Open source →
  23. 0.5.1 07 Mar 2021
    Release notes

    Fixed

    • Color memset optimizations should be ignored when clip mask is present.
    • ClipMask::intersect_path logic.
    Open source →
  24. 0.5.0 06 Mar 2021
    Release notes

    Added

    • ClipMask::intersect_path
    • no_std support. Thanks to @CryZe

    Changed

    • Reduce Transform strictness. It's no longer guarantee to have only finite values, therefore we don't have to check each operation.

    Removed

    • Canvas. Call Pixmap/PixmapMut drawing methods directly.
    Open source →
  25. 0.4.2 23 Jan 2021
    Release notes

    Fixed

    • Panic during path filling with anti-aliasing because of incorrect edges processing.
    Open source →
  26. 0.4.1 19 Jan 2021
    Release notes

    Fixed

    • Endless loop during stroke dashing.
    Open source →
  27. 0.4.0 02 Jan 2021
    Release notes

    Changed

    • Remove almost all unsafe. No performance changes.
    Open source →
  28. 0.3.0 19 Dec 2020
    Release notes

    Added

    • PixmapRef and PixmapMut, that can be created from Pixmap or from raw data.
    • Canvas::set_clip_mask, Canvas::get_clip_mask, Canvas::take_clip_mask.

    Changed

    • Canvas no longer owns a Pixmap.
    • Canvas::draw_pixmap and Pattern::new accept PixmapRef instead of &Pixmap now.
    • Improve clipping performance.
    • The internal ClipMask type become public.

    Fixed

    • Panic when path is drawn slightly past the Pixmap bounds.

    Removed

    • Canvas::new
    Open source →
  29. 0.2.0 16 Nov 2020
    Release notes

    Changed

    • Port to Rust.
    Open source →
  30. 0.1.0 04 Jul 2020
    Release notes

    Added

    • Bindings to a stripped down Skia fork.
    Open source →

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive