Version 3.116.0
First stable v3 release · Released December 2, 2024 · NuGet · GitHub Release
Supersedes 3.0.0 · Rolls up preview-only work that was never released as stable — those changes are included cumulatively below.
API changes · SkiaSharp API diff · HarfBuzzSharp API diff
Highlights
SkiaSharp 3.116.0 is the first stable v3 release, built on Skia m116 with multi-thread SIMD WebAssembly support. This release graduates the v3 preview series to stable, adding WebAssembly multi-thread/SIMD builds, Span
Breaking Changes
- All v2 obsolete API members removed — Every member marked [Obsolete] in SkiaSharp 2.x has been removed. Migrate to the v3 replacements before upgrading — the compilation errors will guide you to the new APIs. (#2539)
- SKBitmap.Encode with SKPngEncoderOptions uses 2.88.8 behaviour — The encoding output for SKBitmap.Encode when called with SKPngEncoderOptions matches the 2.88.8 behaviour. Code that depended on the interim v3 preview behaviour should verify output. (#3014)
Engine
- Skia updated to m116 — The bundled Skia engine is at milestone m116, bringing upstream rendering improvements, bug fixes, and the latest Skia features. — ❤️ @Redth (#2829, #2885, #3026)
API Surface
- Span
overloads for SKMatrix and SKPath — SKMatrix.MapPoints, MapVectors, and SKPath.AddPoly now have Spanoverloads for allocation-free batch transforms. — ❤️ @alexandrvslv (#3030) - SKBlender, Skottie animation builder, and new picture APIs — SKBlender exposes custom blend modes; the Skottie animation builder enables Lottie playback; SKPicture gains additional APIs. (#2830, #2630, #2883)
- SKImage.ToRawShader, color filter spans, and GetPixelSpan offsets — New convenience APIs include ToRawShader on SKImage, Span overloads on color filter factories, and offset parameters on GetPixelSpan. (#2748, #2879, #2609)
- SKFilterQuality compatibility overloads added — Compatibility overloads for the removed SKFilterQuality enum are provided to ease migration. — ❤️ @Youssef1313 (#2963)
- Metal APIs unified across .NET TFMs — Metal-specific APIs for GRBackendRenderTarget are now available on a single .NET TFM, simplifying cross-platform Metal code. — ❤️ @maxkatz6 (#2788)
- R-Tree overload for SKPicture.BeginRecording added — An overload of BeginRecording that uses an R-Tree spatial index is now available for improved rendering performance on complex scenes. (#2889)
Bug Fixes
- AccessViolationException when disposing cloned SKPaint fixed — Disposing a cloned SKPaint was causing an access violation due to incorrect native ownership tracking; this is now corrected. — ❤️ @jeremy-visionaid (#2904)
- Memory leaks in MAUI views fixed — Several native handle leaks in MAUI's SKCanvasView and SKGLView have been resolved. (#2955)
- Metal Snapshot returning magenta on Apple platforms fixed — SKSurface.Snapshot was returning a magenta image when using the Metal backend; colour space handling is now correct. — ❤️ @taublast (#2804)
- GetKerningPairAdjustments API corrected — The native call signature for GetKerningPairAdjustments was wrong, causing incorrect kerning values; this is now fixed. — ❤️ @pdjonov (#2858)
- Uno and WASM canvas rendering fixes — Uno Skia canvas context activation, WASM canvas null-safety, and correct Bgra8888 format for SKXamlCanvas on Uno are all addressed. — ❤️ @jeromelaban, @Youssef1313 (#2559, #2563, #2918)
- SKXamlCanvas XamlRoot null reference fixed — SKXamlCanvas no longer throws a NullReferenceException when XamlRoot is null during unload. — ❤️ @jeromelaban (#2854)
Lifecycle & Internals
- LibraryImport and function pointers for faster P/Invoke — The native interop layer uses LibraryImport source generators and function pointers, reducing managed-to-native call overhead and improving AoT compatibility. — ❤️ @maxkatz6 (#2917)
Platform
- Multi-thread and SIMD WebAssembly builds added — WebAssembly targets now support multi-threaded and SIMD execution modes, enabling significant performance gains in browser and WASM environments. (#2620)
- WinUI, WPF GL, Blazor DPI, and WinForms GLControl added — Hardware-accelerated views for WinUI 3 and WPF, DPI-aware Blazor components, and updated WinForms GLControl packages are all included. — ❤️ @gmurray81, @beto-rodriguez (#2733, #2317, #1832, #2989)
- Metal backend on Mac Catalyst and Apple platform improvements — Mac Catalyst uses the Metal backend by default; Metal APIs are unified across .NET TFMs; Metal Snapshot colour fix is included. — ❤️ @maxkatz6, @taublast (#2747, #2788, #2804)
- nosimd WASM builds restored for security-sensitive environments — Non-SIMD WebAssembly builds are restored for environments requiring edge-enhanced security or Safari compatibility. — ❤️ @jeromelaban (#2612)
Security
- Native dependencies updated — HarfBuzz updated to 8.3.0, WebP to 1.3.2, libjpeg-turbo to 2.1.5.1, .NET updated to 8.0. (#2624, #2622, #2699, #2927)
HarfBuzzSharp 8.3.0
Ships HarfBuzzSharp 8.3.0 with the v3 stable foundation including LibraryImport P/Invoke, .NET 8 support, and new WebAssembly platform coverage.
Community Contributors ❤️
Thank you to everyone who contributed to this release!
| Contributor | Contributions |
|---|---|
| @jeromelaban | Uno platform rendering fixes including canvas context activation, XamlRoot null handling, and WASM stability (#2559, #2563, #2612, #2854, #3010) |
| @maxkatz6 | PlatformConfiguration trimming, async void removal from SKXamlCanvas, and HarfBuzz function-pointer P/Invoke (#2717, #2788, #2917) |
| @Youssef1313 | SKFilterQuality compatibility overloads, Span overloads for SetRectRadii, and Bgra8888 fix for Uno Skia (#2918, #2949, #2963) |
| @alexandrvslv | Added Span |
| @beto-rodriguez | Blazor DPI support for canvas components (#1832) |
| @Fxplorer | Enabled MSVC build configuration (#2839) |
| @gmurray81 | Added SKGLElement for WPF (#2317) |
| @jeremy-visionaid | Fixed the AccessViolationException when disposing a cloned SKPaint (#2904) |
| @lindexi | Avoided async void in SKXamlCanvas event handlers (#2720) |
| @pdjonov | Fixed the GetKerningPairAdjustments API (#2858) |
| @Redth | Final Skia m116 milestone update (#3026) |
| @sungaila | Reverted SKBitmap.Encode with SKPngEncoderOptions to the 2.88.8 behaviour (#3014) |
| @taublast | Fixed SKXamlCanvas when XamlRoot is null during unload (#2804) |
Preview 6 (November 5, 2024)
Preview 6 added multi-thread/SIMD WebAssembly support, Span
Preview 5 (October 24, 2024)
Preview 5 of 3.0.0 stabilized the release with LibraryImport/function pointers, SKFilterQuality compat overloads, .NET 8 update, and ANGLE support.
Preview 4 (July 18, 2024)
Preview 4 of 3.0.0 fixed the SKPaint dispose AVE, MAUI memory leaks, Uno/WASM canvas bugs, and added SKBlender and expanded SKPicture APIs.
Preview 3 (April 9, 2024)
Preview 3 of 3.0.0 added the Metal Mac Catalyst backend, WPF SKGLElement, and Metal Snapshot colour fix.
Preview 2 (February 20, 2024)
Preview 2 of 3.0.0 introduced the Skottie animation builder, SKImage.ToRawShader, and MSVC build support.
Preview 1 (February 6, 2024)
Preview 1 of 3.0.0 established the v3 foundation: WinUI and WPF views, Blazor DPI, HarfBuzz 8.3.0, and removal of all v2 obsoletes.