Table of Contents

Version 4.147.0

Preview only · Superseded by 4.148.0 · Never released as stable — these changes rolled up into 4.148.0 · NuGet

Highlights

All of the work in this preview rolled up into 4.148.0. The 127 PRs here represent a major milestone for SkiaSharp: the library's first major version bump (3.x → 4.x), three consecutive Skia engine updates (milestones 132, 133, and 147), and a wave of long-requested features including variable font support, animated WebP encoding, color font palettes, Linux Bionic native assets, and expanded Tizen architecture coverage. A large community contingent led by @ramezgerges, @4Darmygeometry, @SimonvBez, and @ebariche contributed core features, platform support, and a fully reworked Uno Platform gallery.

⚠️ Breaking Changes

  • Major version bump: 3.x → 4.x — SkiaSharp's major version was incremented for the first time. Package references must be updated from 3.x to 4.x. (#3640)

Engine

  • Skia milestone 132 — Updated the upstream Skia engine to milestone 132. ❤️ @ramezgerges (#3560)
  • Skia milestone 133 — Updated the upstream Skia engine to milestone 133. (#3660)
  • Skia milestone 147 — Updated the upstream Skia engine to the final milestone for this preview series. ❤️ @ramezgerges (#3702)

New Features

Text & Fonts

  • Variable font support — SkiaSharp and HarfBuzzSharp now expose variable font axis APIs, enabling full control over weight, width, and custom axes at runtime. ❤️ @ramezgerges (#3703)
  • Color font palette support — Added APIs for querying and applying color palettes from color fonts (e.g. emoji fonts), with improved variable font robustness. (#3742)
  • HBColor struct — Adds a proper managed HBColor struct to represent hb_color_t values, replacing raw integer handling. (#4000)
  • Default-typeface resolution moved to managed layer — Fixes typeface resolution edge cases by handling the default typeface fallback in C# rather than the native layer. ❤️ @ramezgerges (#3730)

Images & Encoding

  • Animated WebP encoding (SKWebpEncoder) — New SKWebpEncoder class supporting multi-frame animated WebP output, wrapping Skia's native animated WebP support. (#3771)
  • SKStream.GetData() zero-copy conversion — Adds SKStream.GetData() for converting a stream to SKData without copying when the underlying data is already contiguous. (#3772)

API Surface

  • SKSamplingOptions on SKSurface.Draw and SKCanvas.DrawSurface — Overloads accepting SKSamplingOptions bring these methods to parity with the rest of the drawing API. ❤️ @Copilot (#3491)
  • Missing API wrappers and naming fixes — Adds several previously missing C API wrapper methods and corrects naming convention violations. (#4001)

Platform & Build

  • Linux Bionic native assets — Adds native library support for Android Bionic-based Linux environments, broadening deployment options. ❤️ @4Darmygeometry (#3217)
  • Tizen x64 and arm64 native builds — New Tizen architectures are now built and packaged, with CI split into per-architecture jobs. (#3620)
  • C# 13 support on legacy TFMs via PolySharp — Legacy target frameworks (.NET Framework, netstandard) now support C# 13 language features through PolySharp polyfills. ❤️ @4Darmygeometry (#3642)
  • WASM: dropped pre-.NET 8 Emscripten builds — Native WASM builds for Emscripten versions targeting runtimes older than .NET 8 are no longer produced, reducing build matrix size. (#4022)
  • TreatWarningsAsErrors in binding/ — All compiler warnings in the binding layer are now treated as errors, and the backlog of existing warnings has been resolved. (#3752)

Bug Fixes

  • Fixed finalizer crash in SKPath when SKPathBuilder is collected first — A race condition between the finalizers of SKPath and SKPathBuilder could crash the process; the disposal order is now safe. ❤️ @ramezgerges (#3796)
  • Fixed SKGLView not rendering after tab switch in MAUI TabBar on Android — The GL view surface was not being recreated after the tab was hidden and re-shown. ❤️ @SimonvBez (#3076)
  • Fixed Apple platform TFMs — Library projects now use versioned TFMs (e.g. ios26.0) while app projects use the unversioned forms, resolving linker and deployment issues. (#3798)

Dependency Updates

Library New Version PR
freetype 2.14.3 #3726
libpng 1.6.58 #3718
libexpat 2.7.5 #3717
zlib 1.3.2.1-motley #3720
libjpeg-turbo 3.1.4.1 #4012
HarfBuzzSharp 8.3.1.6 #3780
  • Uno Platform WebAssembly gallery — New full gallery sample running on Uno Platform / WebAssembly, with a multi-page app structure and SkiaFiddle integration. ❤️ @ramezgerges (#3758, #3762, #3666)
  • SkiaFiddle WASM size reduced ~60% — Significant bundle-size reduction for the SkiaFiddle WebAssembly application. ❤️ @ebariche (#3849)
  • SkiaFiddle UX improvements — Usability and visual improvements to the SkiaFiddle interactive editor. ❤️ @ramezgerges (#3790)
  • Blazor gallery redesign with API Atlas — The Blazor gallery was redesigned with an API Atlas view featuring tag-cloud filtering, plus 5 new interactive samples (FillPath, TextToPath, Hero Image, Image Decoder, and more). (#3970, #3757, #3761, #3792)
  • Docs homepage redesign — The documentation landing page was rebuilt with a hero section, live code showcase, gallery preview, and resources grid. (#3668)

Plus extensive CI and automation improvements: content-based build caching, automated Skia upstream sync, AI-powered API docs pipeline, issue-triage workflows, release notes automation, and an agentic workflow data persistence system.

Platform Support

Platform What's New
🐧 Linux Bionic native assets; CI disk-space and Docker fixes
🌐 WebAssembly SkiaFiddle bundle −60 %; dropped pre-.NET 8 Emscripten targets
🎨 Tizen x64 and arm64 native builds
🍎 Apple TFM versioning fixes for libraries vs. apps
🤖 Android Fixed SKGLView blank after MAUI TabBar tab switch

Community Contributors ❤️

Contributor What They Did
@ramezgerges Variable font support; Skia milestone bumps (132, 147); Uno Platform gallery; SKPath finalizer fix; default-typeface resolution; SkiaFiddle UX
@4Darmygeometry Linux Bionic native assets; C# 13 PolySharp support on legacy TFMs
@SimonvBez Fixed SKGLView not rendering after tab switch in MAUI TabBar on Android
@ebariche Reduced SkiaFiddle WASM bundle size by ~60%
@Copilot Added SKSamplingOptions overloads to SKSurface.Draw and SKCanvas.DrawSurface
@sasakrsmanovic Updated Uno Platform link and description in README