Table of Contents

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 overloads for SKMatrix and SKPath, and the final Skia m116 update. All breaking changes from the v3 preview series apply — check the change list before upgrading from v2.

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 Span overloads 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 overloads to SKMatrix and SKPath (#3030)
@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 overloads for SKMatrix and SKPath, and the final Skia m116 update.

Full changelog

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.

Full changelog

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.

Full changelog

Preview 3 (April 9, 2024)

Preview 3 of 3.0.0 added the Metal Mac Catalyst backend, WPF SKGLElement, and Metal Snapshot colour fix.

Full changelog

Preview 2 (February 20, 2024)

Preview 2 of 3.0.0 introduced the Skottie animation builder, SKImage.ToRawShader, and MSVC build support.

Full changelog

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.

Full changelog