Version 3.0.0
First stable v3 release · NuGet (prerelease)
Superseded by 3.116.0 · Never released as stable — these changes rolled up into 3.116.0.
API changes · SkiaSharp API diff · HarfBuzzSharp API diff
Highlights
SkiaSharp 3.0.0 is the first stable v3, built on Skia m116 with .NET 8 support and obsolete APIs removed. The line modernises the whole stack: LibraryImport-based P/Invokes, refreshed native dependencies (HarfBuzz, libjpeg-turbo, libwebp), new accelerated views on WinUI and WPF, Metal on Mac Catalyst, and dozens of MAUI/Uno/Blazor fixes.
Breaking Changes
- All v2 [Obsolete] members removed — Everything marked [Obsolete] during the v2 line — including the legacy SKPaint text/font members — is gone. Move text to SKFont, use the modern sampling and encoder overloads, and re-generate against the 3.0 APIs. (#2539, #2789, #2775)
- .NET Framework and workload targets modernised — The libraries now target .NET 8 and its MAUI/Uno/WinUI workloads. Projects still on older TFMs may need to update SDKs, workloads or PackageReferences to consume the new packages. (#2927, #2971, #2788, #2917)
- Metal is the default backend on Mac Catalyst — SkiaSharp.Views on Mac Catalyst now renders through Metal instead of the deprecated GL path. Custom hosts that assumed GL should switch to the Metal APIs or the shared SKCanvasView. (#2747, #3070)
Engine
- Skia rebased on milestone 116 — The bundled engine is Chrome/Skia m116, bringing years of upstream rendering, text and codec fixes into a stable release. — ❤️ @Redth (#2829, #2885, #3026)
- Native dependencies refreshed — HarfBuzz moved to 8.3.0, libjpeg-turbo to 3.0.0 (then rolled to 2.1.5.1 for stability), libwebp to 1.3.2, plus the usual codec and font engine bumps. (#2624, #2582, #2583, #2699, #2622)
API Surface
- SKBlender, extended color filters and picture APIs — Exposes SKBlender, adds the missing color-filter constructors, more SKPicture entry points and an R-Tree overload of BeginRecording for faster hit-testing. (#2830, #2879, #2883, #2889)
- Span overloads for hot paths — SetRectRadii, color filters and GetPixelSpan with offsets now accept Span
, so callers can avoid array allocations in tight rendering loops. — ❤️ @Youssef1313 (#2949, #2879, #2609) - Skottie animation builder and raw shaders — Binds Skottie's Animation Builder and adds SKImage.ToRawShader for advanced compositing scenarios. (#2630, #2748)
- Metal backend surfaced cross-platform — Adds the Metal GRBackendRenderTarget APIs on every Apple platform and unifies GRMtlTextureInfo with readonly getters. — ❤️ @maxkatz6 (#3070, #2833, #2788)
Bug Fixes
- Cloned SKPaint no longer crashes on dispose — Fixes an AccessViolationException when disposing a paint cloned from another paint. — ❤️ @jeremy-visionaid (#2904)
- Metal snapshot returns real pixels — Snapshot on the Metal backend no longer returns a magenta image on Apple platforms. — ❤️ @taublast (#2804)
- PNG encoder options behaviour restored — SKBitmap.Encode with SKPngEncoderOptions now matches the 2.88.8 behaviour that had regressed during the m11x work. — ❤️ @sungaila (#3014)
- MAUI, WinUI and Uno view fixes — Fixes memory leaks in MAUI views, WinUI XamlRoot handling, Uno canvas context activation, and background stretching in SKXamlCanvas. — ❤️ @jeromelaban, @Youssef1313 (#2955, #2854, #2559, #2922, #2918)
Platform
- New accelerated views for WinUI and WPF — Adds SKSwapChainPanel-backed WinUI views and a real SKGLElement for WPF, plus the SKGLView for MAUI on Windows. — ❤️ @gmurray81 (#2733, #2317, #2598)
- Metal-first Apple stack — Mac Catalyst renders with Metal by default, and iOS/tvOS/macOS all share the Metal backend APIs. (#2747, #3070)
Lifecycle & Internals
- LibraryImport-based interop — The P/Invoke layer moves to LibraryImport and function pointers for AOT-friendly, trim-safe interop, and PlatformConfiguration is trimmable. — ❤️ @maxkatz6 (#2917, #2717, #2920)
HarfBuzzSharp 8.3.0
HarfBuzzSharp 8.3.0 lands as part of the stable v3 line, tracking the HarfBuzz 8.3.0 upstream and getting the same LibraryImport/interop modernisation as SkiaSharp.
Community Contributors ❤️
Thank you to everyone who contributed to this release!
| Contributor | Contributions |
|---|---|
| @jeromelaban | A run of Uno and Blazor fixes — canvas context activation, XamlRoot handling, WASM fallback safety and the nosimd build restoration (#2559, #2563, #2612, #2854, #3010) |
| @maxkatz6 | Modernised the interop layer with function pointers and LibraryImport, unified the Metal TFM and made PlatformConfiguration trimmable (#2717, #2788, #2917) |
| @Youssef1313 | Uno Skia BGRA8888 fix, the SetRectRadii Span overload and the SKFilterQuality compatibility overloads (#2918, #2949, #2963) |
| @beto-rodriguez | Exposed the DPI properties on the Blazor components (#1832) |
| @Fxplorer | README typo fix (#2839) |
| @gmurray81 | Added the SKGLElement control to SkiaSharp.Views.WPF (#2317) |
| @jeremy-visionaid | Fixed the AccessViolationException when disposing a cloned SKPaint (#2904) |
| @lindexi | Removed the async void pattern from SKXamlCanvas (#2720) |
| @pdjonov | Fixed the GetKerningPairAdjustments API (#2858) |
| @Redth | Landed a Skia externals refresh (#3026) |
| @sungaila | Restored SKBitmap.Encode with SKPngEncoderOptions to its 2.88.8 behaviour (#3014) |
| @taublast | Fixed the magenta snapshot on the Apple Metal backend (#2804) |
Preview 5 (October 24, 2024)
Preview 5 rebased on Skia m116, cut the remaining v2 shims and moved to LibraryImport.
Preview 4 (July 18, 2024)
Preview 4 landed the accelerated WinUI and WPF views, more Skottie bindings and a raft of MAUI/Uno fixes.
Preview 3 (April 9, 2024)
Preview 3 focused on APIs — SKBlender, more SKPicture entry points and the R-Tree overload.
Preview 2 (February 20, 2024)
Preview 2 landed the codec dependency refresh (libjpeg-turbo, libwebp, HarfBuzz).
Preview 1 (February 6, 2024)
Preview 1 modernised the repository, brought the .NET 8 target family online and started deleting the v2 [Obsolete] surface.