Version 4.147.0
Skia m147 and modern fonts · NuGet (prerelease)
Superseded by 4.148.0 · Never released as stable — these changes rolled up into 4.148.0.
API changes · SkiaSharp API diff · HarfBuzzSharp API diff
Highlights
SkiaSharp 4.147 previews Skia m147 with variable fonts, animated WebP encoding, and new platform assets. It introduces SKPathBuilder, color font palettes, CICP color spaces, and sampling-aware surface drawing. This preview also raises WebAssembly native assets to .NET 8 and removes 32-bit Tizen assets.
Breaking Changes
- WebAssembly native assets now require .NET 8 — Native assets for the Emscripten versions used by .NET 6 and .NET 7 are no longer shipped. Move Blazor WebAssembly and Uno Platform WebAssembly projects to .NET 8 or later. (#4022)
- Tizen native assets are now 64-bit only — The Skia m147 update removes the EOL 32-bit Tizen arm and x86 assets. Target tizen-arm64 or tizen-x64 when upgrading. (#3702)
- HarfBuzz palette colors use HBColor — Face.GetPaletteColors now returns HBColor values instead of raw uint values so HarfBuzz BGRA channels are represented correctly. Update preview code to use HBColor and the ColorExtensions conversions. (#4000)
- Preview API names align with .NET conventions — SKDocumentXpsOptions.DPI is now Dpi, and GRVkYcbcrConversionInfo replaces the differently-cased GrVkYcbcrConversionInfo in GRVkImageInfo. Update source references to the new names. (#4001)
- Large SKStream.Move offsets no longer truncate — SKStream.Move(long) is obsolete and now throws OverflowException when the offset does not fit in 32 bits. Use the int overload and validate larger offsets before calling it. (#3714)
Engine
- Bundled engine advances to Skia m147 — The engine update brings SKPathBuilder, additional HDR color types, codec and filter improvements, and CICP color-space support. — ❤️ @ramezgerges (#3560, #3660, #3702)
- Image and font dependencies are refreshed — The bundled engine updates libjpeg-turbo, FreeType, zlib, libpng, and libexpat. (#4012, #3726, #3720, #3718, #3717)
API Surface
- Variable and color fonts gain first-class APIs — SkiaSharp and HarfBuzzSharp can query variation axes and palettes, clone typefaces with coordinates or palette overrides, and convert correctly represented HBColor values. — ❤️ @ramezgerges (#3703, #3742, #4000)
- Animated WebP encoding arrives — SKWebpEncoder encodes single images or timed frame sequences through stream and span-friendly overloads. (#3771)
- Streams expose memory-backed data — SKStream.GetData returns ref-counted SKData when the stream can provide its contents cheaply. (#3772)
- Drawing and document controls expand — New APIs add sampling-aware surface drawing, XPS document creation, per-resource GPU flushing, and shader-backed mask filters. (#3491, #4001)
Bug Fixes
- Font and glyph handling is more robust — Default typeface resolution no longer crashes during Android or NanoServer initialization, and byte-span glyph checks no longer recurse until a stack overflow. — ❤️ @ramezgerges (#3730, #3744, #3742, #3835)
- Android GL views resume after navigation — SKGLView retains the correct dimensions when a MAUI tab or page is reattached, avoiding a blank surface. — ❤️ @SimonvBez (#3076)
- Apple library targets regain workload compatibility — Apple .NET 10 library TFMs use the base 26.0 platform version instead of requiring Xcode 26.2. (#3798)
Lifecycle & Internals
- SKPath finalization no longer races its builder — Pending path mutations are not flushed after disposal starts, preventing a finalizer-thread crash when SKPathBuilder is collected first. — ❤️ @ramezgerges (#3796)
Platform
- Linux Bionic native assets are available — SkiaSharp and HarfBuzzSharp now ship linux-bionic packages for x64 and arm64 environments. — ❤️ @4Darmygeometry (#3217)
- Tizen support moves to 64-bit architectures — New tizen-x64 and tizen-arm64 assets replace the retired 32-bit Tizen targets. — ❤️ @ramezgerges (#3620, #3702)
- WebAssembly support starts at .NET 8 — Native assets remain available for .NET 8 and later Emscripten toolchains, with a clear build error on unsupported .NET 6 and .NET 7 projects. (#4022)
HarfBuzzSharp 8.3.1.6
HarfBuzzSharp 8.3.1.6 adds variable-font and color-palette APIs with correctly represented HBColor values, plus Linux Bionic and 64-bit Tizen native assets.
Community Contributors ❤️
Thank you to everyone who contributed to this release!
| Contributor | Contributions |
|---|---|
| @ramezgerges | Skia milestone updates, variable fonts, default typeface reliability, and the SKPath finalizer fix (#3560, #3666, #3702, #3703, #3714, #3730, #3785, #3796) |
| @4Darmygeometry | Linux Bionic native assets and modern C# support for legacy target frameworks (#3217, #3642) |
| @SimonvBez | Android SKGLView rendering after tab and page navigation (#3076) |
Preview 3 (May 24, 2026)
Requires .NET 8 or later for WebAssembly native assets and replaces preview palette uint values with HBColor. It adds XPS, per-resource GPU flush, and shader mask-filter APIs, refreshes native dependencies, and prevents NanoServer font initialization crashes. (#4022, #4000, #4001, #4012, #3726, #3720, #3835)
Preview 2 (May 6, 2026)
Adds animated WebP encoding and SKStream.GetData, fixes SKPath finalizer crashes, and restores broad Apple .NET 10 workload compatibility. (#3771, #3772, #3796, #3798)
Preview 1 (April 28, 2026)
Updates the bundled engine to Skia m147 and adds SKPathBuilder, variable and color-font APIs, CICP color spaces, sampling-aware drawing, Linux Bionic, and 64-bit Tizen assets. It fixes Android typeface initialization, SKGLView reattachment, glyph-span recursion, and negative stream offsets while dropping 32-bit Tizen assets. (#3702, #3703, #3742, #3491, #3660, #3217, #3620, #3730, #3076, #3714)