Microsoft and Uno Platform have released the first stable versions in the SkiaSharp 4 series, beginning with SkiaSharp 4.148.0 and followed shortly afterward by 4.150.0. A 4.151.0 prerelease line is also available, demonstrating the project’s new approach of aligning package versions and release cadence with upstream Skia milestones.

SkiaSharp provides .NET bindings for Google’s Skia 2D graphics engine across mobile, desktop, web, and server applications. The previous stable branch, SkiaSharp 3.119, had fallen several milestones behind upstream Skia. Version 4 modernizes the engine, removes older APIs, and introduces a more predictable model in which stable and preview packages track the Skia versions used by Chrome’s release channels.

The first stable release, SkiaSharp 4.148.0, moved the bundled engine to Skia m148. It added control over OpenType variable-font axes, color-font palette selection, animated WebP encoding through SKWebpEncoder, and zero-copy stream and text-shaping APIs. The project also reworked the lifecycle of shared native objects to reduce use-after-free failures caused when managed wrappers were finalized during native operations.

Microsoft reported improvements of up to 24% in initial OpenGL tests of GPU-rendered interfaces dominated by shadows and layered surfaces. CPU-based Perlin-noise shaders were approximately six times faster in the company’s tests. However, Microsoft noted that results depend on hardware and drivers, while scenes centered on text, charts, or vector maps showed little change.

SkiaSharp 4.150.0 followed on July 7, updating the engine to Skia m150 and adding several graphics diagnostics and filtering APIs. SKPaint.GetFastBounds() provides a conservative boundary for visibility culling, while SKImageFilter.CreateCrop() and CreateEmpty() support cropping and transparent no-op stages in filter chains. The release also added SKColorFilter.CreateOverdraw() for visualising rendering hotspots and cached the SKSurface.Canvas wrapper to avoid repeated managed allocations in rendering loops.

The 4.151.0 release moves to Skia m151 and focuses primarily on managed-code performance. Color conversion, premultiplication, tag parsing, and related hot paths now use managed integer operations instead of repeated P/Invoke calls. HarfBuzz UTF-8 encoding uses pooled buffers, while SKShaper exposes glyph results through zero-copy spans. The release also adds allocation-free ReadOnlySpan overloads for hexadecimal color parsing.

In addition, 4.151.0 version includes Emscripten 5.0.6 libraries for running SkiaSharp with .NET 11 WebAssembly’s exnref exception-handling model. It fixes a native handle leak in a cropped-image overload of SKImage.FromEncodedData, a CPU rasterization regression introduced during the m151 upgrade, and a macro conflict affecting some WebAssembly builds. Unlike the preceding releases, the 4.151.0 line lists no new breaking API changes.

SkiaSharp 4 remains a breaking upgrade from version 3. Obsolete SKPaint text and font members now produce compilation errors, requiring applications to use SKFont. A parameterless SKFont also uses SKTypeface.Empty, meaning text is not measured or rendered until developers assign a typeface explicitly. Version 4.150.0 additionally removed the project’s .NET Interactive and Polyglot Notebooks integration package.

The rapid progression from m148 to m150 and m151 indicates that milestone alignment is more than a roadmap commitment. Stable packages are intended to follow Skia milestones used by Chrome Stable and Extended Stable, while prereleases track Chrome Beta.

Developers can find the packages on NuGet and consult the official release notes, interactive gallery, and GitHub repository for examples and migration details.