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.xto4.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)
HBColorstruct — Adds a proper managedHBColorstruct to representhb_color_tvalues, 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) — NewSKWebpEncoderclass supporting multi-frame animated WebP output, wrapping Skia's native animated WebP support. (#3771) SKStream.GetData()zero-copy conversion — AddsSKStream.GetData()for converting a stream toSKDatawithout copying when the underlying data is already contiguous. (#3772)
API Surface
SKSamplingOptionsonSKSurface.DrawandSKCanvas.DrawSurface— Overloads acceptingSKSamplingOptionsbring 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)
TreatWarningsAsErrorsin 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
SKPathwhenSKPathBuilderis collected first — A race condition between the finalizers ofSKPathandSKPathBuildercould crash the process; the disposal order is now safe. ❤️ @ramezgerges (#3796) - Fixed
SKGLViewnot rendering after tab switch in MAUITabBaron 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 |
Gallery & Documentation
- 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 |