Back to Skiasharp

4.148.0

documentation/docfx/releases/4.148.0.md

4.150.031.2 KB
Original Source
<!-- RAW PR DATA — Do not remove this comment block. AI uses this data to generate the polished release notes below. Re-run the script to refresh this data from git history. Generated: 2026-06-23T19:20:22Z by generate-release-notes.py version: 4.148.0 status: stable supersedes: 4.147.0 (preview only, rolled up) branch: release/4.148.0 diff: release/3.119.4..release/4.148.0 prs: 163 api: self=4.148.0/index.md;hb=14.2.0 PRs grouped by the preview they first shipped in (newest first). Render each milestone as a trailing "## <label> (<date>)" section per TEMPLATE.md, and merge them all for the top-level Highlights: ## Unreleased — not yet in a tagged preview (1 PRs) - [v4] Promote remaining pre-v4 obsoletes to error and trim obsolete enums from the ref assembly (#4195) by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/4205 [community ✨] ## Release Candidate 1 · 4.148.0 · 2026-06-12 · https://github.com/mono/SkiaSharp/compare/v4.147.0-preview.3.1...v4.148.0-rc.1.2 (35 PRs) - docs: update release notes for 4.148.0 (unreleased) by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/4153 [community ✨] - Fix SKPixmap/SKBitmap GetPixelSpan to use RowBytes for stride by @mattleibow in https://github.com/mono/SkiaSharp/pull/4148 - release-notes: emit two-way supersede links on successor pages by @mattleibow in https://github.com/mono/SkiaSharp/pull/4152 - release-notes: roll up preview-only/skipped versions into their successor by @mattleibow in https://github.com/mono/SkiaSharp/pull/4149 - Fix SKIASHARP_VERSION yaml missed by the m148 bump by @mattleibow in https://github.com/mono/SkiaSharp/pull/4144 - Obsolete remaining legacy paint state-reading APIs by @mattleibow in https://github.com/mono/SkiaSharp/pull/4114 - [skia] Update to Skia milestone m148 by @mattleibow in https://github.com/mono/SkiaSharp/pull/4125 (skia: mono/skia#250) - Move native-compat gate from [ModuleInitializer] to SkiaApi cctor by @mattleibow in https://github.com/mono/SkiaSharp/pull/4133 - Fix SKPixmap.GetPixelSpan<T>(x,y) offset using Height instead of Width by @mattleibow in https://github.com/mono/SkiaSharp/pull/4128 - Rework the lifecycle of singleton instances by @ramezgerges in https://github.com/mono/SkiaSharp/pull/4080 [community ✨] - Promote SKPaint text/font obsolete members to error by @ramezgerges in https://github.com/mono/SkiaSharp/pull/4068 [community ✨] - Update expat to 2.8.1 by @mattleibow in https://github.com/mono/SkiaSharp/pull/4079 (skia: mono/skia#245) - [skia-sync] Merge upstream chrome/m147 bug fixes by @mattleibow in https://github.com/mono/SkiaSharp/pull/4081 - Migrate device and WASM tests from XHarness to DeviceRunners `dotnet test` by @mattleibow in https://github.com/mono/SkiaSharp/pull/4004 - feat(ci-status): add GitHub Actions tracking and restructure as collect → AI → render pipeline by @mattleibow in https://github.com/mono/SkiaSharp/pull/4099 - Add Chrome Releases blog integration to security-audit skill by @mattleibow in https://github.com/mono/SkiaSharp/pull/4097 - Fix WinUI Projection DLL not found for .NET 9 consumers by @mattleibow in https://github.com/mono/SkiaSharp/pull/4084 - Add ci-status skill for daily CI health dashboard by @mattleibow in https://github.com/mono/SkiaSharp/pull/4094 - Revert "Add --pull to Docker builds to ensure fresh base images (#4087)" by @mattleibow in https://github.com/mono/SkiaSharp/pull/4091 - Move .NET SDK install to common section for all builds by @mattleibow in https://github.com/mono/SkiaSharp/pull/4089 - Add --pull to Docker builds to ensure fresh base images by @mattleibow in https://github.com/mono/SkiaSharp/pull/4087 - Migrate Linux Docker builds to .NET official cross-compilation images by @mattleibow in https://github.com/mono/SkiaSharp/pull/4062 - Add es-metadata.yml to cache exclude list by @mattleibow in https://github.com/mono/SkiaSharp/pull/4077 - Add es-metadata.yml with initial configuration by @mattleibow in https://github.com/mono/SkiaSharp/pull/4075 - docs: force-push docs-live to prevent repo size bloat by @mattleibow in https://github.com/mono/SkiaSharp/pull/4073 - [skia-sync] Merge upstream chrome/m147 bug fixes by @mattleibow in https://github.com/mono/SkiaSharp/pull/4044 (skia: mono/skia#242) - Improve security-audit skill: schema enforcement, CG reliability, and report quality by @mattleibow in https://github.com/mono/SkiaSharp/pull/4070 - Update .NET SDK version to 10.0.108 by @mattleibow in https://github.com/mono/SkiaSharp/pull/4055 - Update skia submodule to disable unused dependency manifests by @mattleibow in https://github.com/mono/SkiaSharp/pull/4054 (skia: mono/skia#243) - Update release notes for 4.147.0 (unreleased/main) by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/4061 [community ✨] - [Security] Add Component Governance alert integration to security-audit skill by @mattleibow in https://github.com/mono/SkiaSharp/pull/4058 - Fix release notes workflow to always checkout main by @mattleibow in https://github.com/mono/SkiaSharp/pull/4059 - [docs] Update release notes for 4.147.0 (preview.3) by @mattleibow in https://github.com/mono/SkiaSharp/pull/4057 - Update harfbuzz to 14.2.0 by @mattleibow in https://github.com/mono/SkiaSharp/pull/4035 (skia: mono/skia#241) - Document ADO pipeline chain tracking in release skills by @mattleibow in https://github.com/mono/SkiaSharp/pull/4050 ## Preview 3 · 4.147.0 · 2026-05-24 · https://github.com/mono/SkiaSharp/compare/v4.147.0-preview.2.1...v4.147.0-preview.3.1 (37 PRs) - docs: update release notes for 4.147.0 (unreleased) by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/4049 [community ✨] - Add automated API diff workflow by @mattleibow in https://github.com/mono/SkiaSharp/pull/4036 - [docs] Update API diff for v3.119.2 by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/4046 [community ✨] - Fix ANGLE WinAppSDK download failure on 1ES agents by @mattleibow in https://github.com/mono/SkiaSharp/pull/4014 - Add GitHub Actions workflow for API diff by @mattleibow in https://github.com/mono/SkiaSharp/pull/4038 - [api-docs] Fix false-positive extraction and add merge guard by @mattleibow in https://github.com/mono/SkiaSharp/pull/4030 - docs: update release notes for 4.147.0 (unreleased) by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/4029 [community ✨] - Update libjpeg-turbo to 3.1.4.1 by @mattleibow in https://github.com/mono/SkiaSharp/pull/4012 (skia: mono/skia#237) - [WASM] Drop native builds for pre-.NET 8 Emscripten versions by @mattleibow in https://github.com/mono/SkiaSharp/pull/4022 - Add manifest generation to docs-tool.ps1 extract by @mattleibow in https://github.com/mono/SkiaSharp/pull/4025 - Fix font test failures in sync workflow by mounting /usr/share/fonts by @mattleibow in https://github.com/mono/SkiaSharp/pull/4023 - Move API docs workflow to docs repo and optimize skill architecture by @mattleibow in https://github.com/mono/SkiaSharp/pull/4024 - [Native/Alpine] Add retry and failure detection to apk.static download by @mattleibow in https://github.com/mono/SkiaSharp/pull/4013 - [CI] Use graceful skip for Skia Upstream Sync when nothing to sync by @mattleibow in https://github.com/mono/SkiaSharp/pull/4020 - Fix docs deploy race condition with retry loop by @mattleibow in https://github.com/mono/SkiaSharp/pull/4019 - Update cgmanifest.json to match actual DEPS pins by @mattleibow in https://github.com/mono/SkiaSharp/pull/3830 - Update freetype to 2.14.3 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3726 (skia: mono/skia#194) - [main] Update zlib to 1.3.2.1-motley by @mattleibow in https://github.com/mono/SkiaSharp/pull/3720 (skia: mono/skia#189) - Update Tizen SDK installer from 6.1 to 10.0 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3743 - Fix UnicodeEncodeError on Windows CI in repo-deps.py by @mattleibow in https://github.com/mono/SkiaSharp/pull/4006 - Add HBColor struct for proper hb_color_t representation by @mattleibow in https://github.com/mono/SkiaSharp/pull/4000 - Add missing API wrappers and fix naming convention violations by @mattleibow in https://github.com/mono/SkiaSharp/pull/4001 - Enable TreatWarningsAsErrors in binding/ and fix all warnings by @mattleibow in https://github.com/mono/SkiaSharp/pull/3752 - Blazor gallery redesign: API Atlas with tag cloud filtering by @mattleibow in https://github.com/mono/SkiaSharp/pull/3970 - Skip Skia sync workflow when upstream is already merged by @mattleibow in https://github.com/mono/SkiaSharp/pull/3971 - Update Uno Platform link and description n README.md by @sasakrsmanovic in https://github.com/mono/SkiaSharp/pull/3966 [community ✨] - [samples] Add Hero Image gallery sample by @mattleibow in https://github.com/mono/SkiaSharp/pull/3792 - Fix CI: samples, Docker, NanoServer, coverlet, and build chain by @mattleibow in https://github.com/mono/SkiaSharp/pull/3835 (skia: mono/skia#232) - Add automated API docs pipeline by @mattleibow in https://github.com/mono/SkiaSharp/pull/3918 - [samples] Reduce SkiaFiddle WASM application size by ~60% by @ebariche in https://github.com/mono/SkiaSharp/pull/3849 [community ✨] - Run stale staging sweep daily instead of weekly by @mattleibow in https://github.com/mono/SkiaSharp/pull/3911 - Add content-based build caching with ADO Cache@2 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3826 - Add automated Skia upstream sync workflow by @mattleibow in https://github.com/mono/SkiaSharp/pull/3825 - Add workflow to persist agentic workflow data to aw-data branch by @mattleibow in https://github.com/mono/SkiaSharp/pull/3907 - [docs] Release notes for 4.147.0 by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/3882 [community ✨] - Fix SkiaSharp references for Uno Platform's Gallery sample by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3867 [community ✨] - Keep raw PR data in release notes files as HTML comment by @mattleibow in https://github.com/mono/SkiaSharp/pull/3877 ## Preview 2 · 4.147.0 · 2026-05-06 · https://github.com/mono/SkiaSharp/compare/v4.147.0-preview.1.1...v4.147.0-preview.2.1 (27 PRs) - Add SKStream.GetData() for zero-copy stream-to-data conversion by @mattleibow in https://github.com/mono/SkiaSharp/pull/3772 (skia: mono/skia#200) - Add animated WebP encoding support (SKWebpEncoder) by @mattleibow in https://github.com/mono/SkiaSharp/pull/3771 (skia: mono/skia#199) - Fix finalizer crash in SKPath when SKPathBuilder is collected first by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3796 [community ✨] - docs: update release notes for 4.147.0 by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/3840 [community ✨] - fix: skip release notes workflow when only docs/releases change by @mattleibow in https://github.com/mono/SkiaSharp/pull/3839 - docs: update release notes for 4.147.0 by @github-actions[bot] in https://github.com/mono/SkiaSharp/pull/3837 [community ✨] - fix: add recreate-ref to release notes workflow for branch reuse by @mattleibow in https://github.com/mono/SkiaSharp/pull/3836 - [samples] Bump Basic Uno sample to Uno.Sdk/6.6.0-dev.208 by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3821 [community ✨] - Disable PR artifact retrieval in get-build-type.ps1 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3827 - Fix update-docs workflow: add missing mdoc assembly search paths for Tizen and Gtk4 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3824 - fix: preserve branch name in release notes workflow to reuse PRs by @mattleibow in https://github.com/mono/SkiaSharp/pull/3822 - [Gallery] Add 5 new interactive samples and redesign Blazor home page by @mattleibow in https://github.com/mono/SkiaSharp/pull/3757 - Fix Apple platform TFMs: use 26.0 for libraries, unversioned for apps by @mattleibow in https://github.com/mono/SkiaSharp/pull/3798 - Make release notes script fully git-based with cumulative rollup by @mattleibow in https://github.com/mono/SkiaSharp/pull/3815 - Add allowed-base-branches: [main] to release notes workflow by @mattleibow in https://github.com/mono/SkiaSharp/pull/3813 - Delete .github/workflows/skia-analyst.md by @mattleibow in https://github.com/mono/SkiaSharp/pull/3812 - Revert "Fix skia-analyst and sample-scout: no safe outputs generated (#3805)" by @mattleibow in https://github.com/mono/SkiaSharp/pull/3811 - Fix release notes script git fetch for CI shallow clones by @mattleibow in https://github.com/mono/SkiaSharp/pull/3808 - Fix skia-analyst and sample-scout: no safe outputs generated by @mattleibow in https://github.com/mono/SkiaSharp/pull/3805 - Simplify sample-scout to read GM files from local submodule by @mattleibow in https://github.com/mono/SkiaSharp/pull/3802 - Add skia-analyst and sample-scout skills with daily/weekly workflows by @mattleibow in https://github.com/mono/SkiaSharp/pull/3755 - Improve docs landing page layout and hero section by @mattleibow in https://github.com/mono/SkiaSharp/pull/3794 - Automate website release notes with branch-diffing script by @mattleibow in https://github.com/mono/SkiaSharp/pull/3787 - Dev/skiafiddle ux improvements by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3790 [community ✨] - [samples] Fix Skottie package downgrade NU1605 in Uno gallery by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3785 [community ✨] - [release-notes] Reuse single PR and add effort metrics to workflow by @mattleibow in https://github.com/mono/SkiaSharp/pull/3782 - Bump HarfBuzzSharp to 8.3.1.6 after release by @mattleibow in https://github.com/mono/SkiaSharp/pull/3780 ## Preview 1 · 4.147.0 · 2026-04-28 · https://github.com/mono/SkiaSharp/compare/v3.119.4...v4.147.0-preview.1.1 (63 PRs) - Update SKIASharp version to 4.147.0 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3774 - Delete samples/Gallery/Uno/nuget.config by @mattleibow in https://github.com/mono/SkiaSharp/pull/3765 - Bump skia to milestone 147 by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3702 [community ✨] (skia: mono/skia#184) - [samples] Add SkiaFiddle Uno Platform WebAssembly sample by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3762 [community ✨] - Add website release notes with AI-powered generation pipeline by @mattleibow in https://github.com/mono/SkiaSharp/pull/3763 - Update the icon for the new v4 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3764 - Add FillPath and TextToPath gallery samples by @mattleibow in https://github.com/mono/SkiaSharp/pull/3761 - Add download button and fix WASM text rendering in gallery by @mattleibow in https://github.com/mono/SkiaSharp/pull/3760 - [samples] Add Uno Platform WebAssembly gallery by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3758 [community ✨] - Add gallery sample guidance to api-add-review skill by @mattleibow in https://github.com/mono/SkiaSharp/pull/3756 - Expand API design docs and rename add-api skill to api-add-review by @mattleibow in https://github.com/mono/SkiaSharp/pull/3749 - Add SKSamplingOptions support to SKSurface.Draw and SKCanvas.DrawSurface by @Copilot in https://github.com/mono/SkiaSharp/pull/3491 [community ✨] - Fix review-skia-update skill: submodule fetch, stale paths, and robustness by @mattleibow in https://github.com/mono/SkiaSharp/pull/3753 - Add color font palette support and improve variable font robustness by @mattleibow in https://github.com/mono/SkiaSharp/pull/3742 (skia: mono/skia#197) - Fix x86 .NET Framework threading test OOM failures (#3608) by @mattleibow in https://github.com/mono/SkiaSharp/pull/3674 - Add variable font support to SkiaSharp and HarfBuzzSharp by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3703 [community ✨] (skia: mono/skia#185) - Upgrade SkiaSharp major version from 3.x to 4.x by @mattleibow in https://github.com/mono/SkiaSharp/pull/3640 - Fix YAML syntax error in build-site workflow by @mattleibow in https://github.com/mono/SkiaSharp/pull/3750 - Replace release-notes-audit with skia-feature-scout skill by @mattleibow in https://github.com/mono/SkiaSharp/pull/3746 - Add staging URL to docs deploy commit message by @mattleibow in https://github.com/mono/SkiaSharp/pull/3748 - Fix debian/13 Docker build for non-loong64/riscv64 architectures by @mattleibow in https://github.com/mono/SkiaSharp/pull/3747 - Update devcontainers: split into managed and native configs by @mattleibow in https://github.com/mono/SkiaSharp/pull/3745 - Bump externals/skia to include sk_fontmgr_legacy_create_typeface by @mattleibow in https://github.com/mono/SkiaSharp/pull/3744 (skia: mono/skia#198) - Fix #3693: move default-typeface resolution to the managed layer by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3730 [community ✨] (skia: mono/skia#195) - Add --milestone parameter: AI extracts, orchestrator validates by @mattleibow in https://github.com/mono/SkiaSharp/pull/3731 - [samples] Rewrite Uno Platform sample as multi-page app by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3666 [community ✨] - Add Suggested Repro Platform to auto-triage workflow by @mattleibow in https://github.com/mono/SkiaSharp/pull/3729 - [AI] Improve native-dependency-update skill with post-mortem fixes by @mattleibow in https://github.com/mono/SkiaSharp/pull/3727 - [CI] Improve Android CI disk space and emulator startup by @mattleibow in https://github.com/mono/SkiaSharp/pull/3676 - Update libpng to 1.6.58 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3718 (skia: mono/skia#188) - Update libexpat to 2.7.5 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3717 (skia: mono/skia#187) - Bump SkiaSharpGenerator to CppAst 0.21.4 and make it work on Linux by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3714 [community ✨] (skia: mono/skia#186) - [CI] Free disk space on hosted Linux agents by @mattleibow in https://github.com/mono/SkiaSharp/pull/3712 - Update SKIASHARP_VERSION to 3.133.0 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3713 - [auto-triage] Upload triage reports (JSON/MD/HTML) to agent artifact by @mattleibow in https://github.com/mono/SkiaSharp/pull/3711 - [issue-triage] Add auto-triage agentic workflow with gh-aw by @mattleibow in https://github.com/mono/SkiaSharp/pull/3710 - Add gh-aw agent config and actions lock by @mattleibow in https://github.com/mono/SkiaSharp/pull/3709 - Clean up issue-triage skill: semantic enum ordering, cost labels, schema fixes by @mattleibow in https://github.com/mono/SkiaSharp/pull/3708 - Use flat /tmp paths in issue-triage skill for gh-aw sandbox compatibility by @mattleibow in https://github.com/mono/SkiaSharp/pull/3707 - Fix auto-triage: set min-integrity=none for public issue access by @mattleibow in https://github.com/mono/SkiaSharp/pull/3706 - [issue-triage] Rewrite skill in Python + add auto-triage agentic workflow by @mattleibow in https://github.com/mono/SkiaSharp/pull/3704 - Move skills from .claude/ to .agents/ by @mattleibow in https://github.com/mono/SkiaSharp/pull/3697 - Revert "Add daily-digest agentic workflow (#3694)" by @mattleibow in https://github.com/mono/SkiaSharp/pull/3696 - Add daily-digest agentic workflow by @mattleibow in https://github.com/mono/SkiaSharp/pull/3694 - Move AI agent config to shared location for Claude Code and GitHub Copilot by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3692 [community ✨] - [build] Split Tizen native CI into per-architecture jobs by @mattleibow in https://github.com/mono/SkiaSharp/pull/3672 - Add release-notes-audit skill for Skia API gap analysis by @mattleibow in https://github.com/mono/SkiaSharp/pull/3675 - Add weekly sweep to clean stale PR staging directories by @mattleibow in https://github.com/mono/SkiaSharp/pull/3671 - Add Linux Bionic native assets support by @4Darmygeometry in https://github.com/mono/SkiaSharp/pull/3217 [community ✨] - Bump Skia to milestone 133 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3660 (skia: mono/skia#179) - Improve update-skia merge conflict guidance by @mattleibow in https://github.com/mono/SkiaSharp/pull/3662 - Fix docs deploy race condition by serializing Go Live deployments by @mattleibow in https://github.com/mono/SkiaSharp/pull/3670 - Redesign docs homepage: hero, code showcase, gallery, and resources by @mattleibow in https://github.com/mono/SkiaSharp/pull/3668 - [Gallery] Refine Image Decoder metadata overlay by @mattleibow in https://github.com/mono/SkiaSharp/pull/3669 - Add submodule init and DEPS sync to review orchestrator by @mattleibow in https://github.com/mono/SkiaSharp/pull/3667 - Fix review-skia-update milestone detection by @mattleibow in https://github.com/mono/SkiaSharp/pull/3665 - Improve the update-skia skill from m119→m133 lessons by @mattleibow in https://github.com/mono/SkiaSharp/pull/3658 - Fix cgmanifest.json version drift and overhaul security-audit skill by @mattleibow in https://github.com/mono/SkiaSharp/pull/3656 - [Android] Fix SKGLView not rendering after tab switch in MAUI TabBar by @SimonvBez in https://github.com/mono/SkiaSharp/pull/3076 [community ✨] - [build] Use PolySharp for C# 13 support on legacy TFMs by @4Darmygeometry in https://github.com/mono/SkiaSharp/pull/3642 [community ✨] - [tizen] Add x64 and arm64 native build support by @mattleibow in https://github.com/mono/SkiaSharp/pull/3620 (skia: mono/skia#175) - Update build-site workflow to remove path filters by @mattleibow in https://github.com/mono/SkiaSharp/pull/3653 - Bump SkiaSharp to Skia milestone 132 by @ramezgerges in https://github.com/mono/SkiaSharp/pull/3560 [community ✨] (skia: mono/skia#171) --> <!-- Generated: 2026-06-23T19:21:35Z by claude-sonnet-4.6 -->

Version 4.148.0

First stable v4 · Released June 22, 2026 · NuGet · GitHub Release

Supersedes 4.147.0 · Rolls up preview-only work that was never released as stable — those changes are included cumulatively below.

API changes · SkiaSharp API diff · HarfBuzzSharp 14.2.0

Highlights

SkiaSharp 4.148.0 is the first stable v4 release, rolling up all preview work from 4.147.0 cumulatively and completing the v4 API surface cleanup. This release delivers the Skia m148 engine upgrade, promotes legacy obsoletes to compile errors, reworks singleton object lifecycles for correctness, and ships several important bug fixes including SKPixmap stride and coordinate calculations. HarfBuzz 14.2.0 ships alongside — see HarfBuzzSharp 14.2.0 for the binding details. Notable community contributions from @ramezgerges, @4Darmygeometry, @SimonvBez, @ebariche, and @Copilot.

Engine

  • Skia milestone m148 — Upgrades the native Skia engine to Chrome milestone m148. (#4125)
  • Skia milestone m147 — Included from the 4.147.0 rollup. ❤️ @ramezgerges (#3702)

API Surface

  • Promoted remaining pre-v4 obsoletes to errors — Legacy members deprecated in v3 are now compile errors, and obsolete enum members are trimmed from the ref assembly, completing the v4 migration path. ❤️ @ramezgerges (#4195)
  • Promoted SKPaint text/font members to errors — The old font-on-paint APIs (deprecated in favour of SKFont) now produce compile errors. ❤️ @ramezgerges (#4068)
  • Obsoleted remaining legacy paint state-reading APIs — The few remaining state-reading convenience APIs on SKPaint are marked obsolete. (#4114)
  • Variable font support — Full variable font support in SkiaSharp and HarfBuzzSharp: HBFace/HBFont variation axes, font palette APIs. ❤️ @ramezgerges (#3703)
  • Color font palette support — Color palette APIs for emoji and color fonts. (#3742)
  • SKWebpEncoder — Animated WebP encoding — New encoder for multi-frame animated WebP files. (#3771)
  • SKStream.GetData() — Zero-copy stream-to-SKData conversion. (#3772)
  • SKSamplingOptions on SKSurface.Draw / SKCanvas.DrawSurface — Filtering-quality overloads. ❤️ @Copilot (#3491)
  • HBColor struct — Proper managed type for hb_color_t. (#4000)
  • Missing API wrappers and naming fixes (#4001)

Bug Fixes

  • Fixed SKPixmap/SKBitmap.GetPixelSpan strideGetPixelSpan now uses RowBytes for stride instead of width × bytes-per-pixel, fixing incorrect results on padded bitmaps. (#4148)
  • Fixed SKPixmap.GetPixelSpan<T>(x, y) coordinate offset — The typed overload was using Height instead of Width when computing the column offset. (#4128)
  • Fixed SKPath finalizer crash — Resolves a crash when SKPathBuilder is collected before the SKPath it created. ❤️ @ramezgerges (#3796)
  • Fixed default-typeface resolution — Moves default-typeface lookup to the managed layer, correcting typeface fallback. ❤️ @ramezgerges (#3730)
  • Fixed WinUI Projection DLL not found for .NET 9 — Resolves a build-time error when consuming SkiaSharp.Views.WinUI in .NET 9 projects. (#4084)
  • Fixed Android SKGLView rendering after MAUI tab switch ❤️ @SimonvBez (#3076)

Lifecycle & Internals

  • Reworked singleton lifecycle — Singleton native objects (default paints, fonts, etc.) now use a proper ref-counted lifecycle, preventing use-after-free crashes. ❤️ @ramezgerges (#4080)
  • Moved native-compat gate to SkiaApi static constructor — The native library version check now runs at startup, giving a clearer error when the wrong binary is loaded. (#4133)

Platform

  • Linux Bionic native assets ❤️ @4Darmygeometry (#3217)
  • Tizen x64 and ARM64 native builds (#3620)
  • WASM: Dropped pre-.NET 8 Emscripten builds (#4022)
  • Fixed Apple platform TFMs.26.0 for libraries, unversioned for apps. (#3798)
  • C# 13 support on legacy TFMs via PolySharp ❤️ @4Darmygeometry (#3642)

Security

  • libexpat updated to 2.8.1 (#4079)
  • HarfBuzz updated to 14.2.0 (#4035)
  • libjpeg-turbo updated to 3.1.4.1 (#4012)
  • freetype updated to 2.14.3 (#3726)
  • zlib updated to 1.3.2.1-motley (#3720)
  • libpng updated to 1.6.58 (#3718)
  • libexpat updated to 2.7.5 (#3717)

Platform Support

PlatformWhat's New
🍎 AppleFixed platform TFMs for libraries vs apps
🤖 AndroidFixed SKGLView blank after MAUI tab switch
🌐 WebAssemblyDropped pre-.NET 8 Emscripten builds
🐧 LinuxLinux Bionic native assets
🪟 WindowsFixed WinUI Projection DLL for .NET 9
📦 GeneralTizen x64/arm64 native builds; C# 13 support

Community Contributors ❤️

ContributorWhat They Did
@ramezgergesSkia m147 bump; variable fonts; v4 obsoletes promotion; SKPaint obsoletes; singleton lifecycle; SKPath crash fix; typeface fix; SkiaSharpGenerator on Linux
@CopilotSKSamplingOptions overloads for SKSurface.Draw and SKCanvas.DrawSurface
@4DarmygeometryLinux Bionic native assets; C# 13 support on legacy TFMs
@SimonvBezFixed Android SKGLView rendering after MAUI tab switch
@ebaricheReduced SkiaFiddle WASM application size by ~60%

Release Candidate 1 (June 12, 2026)

Upgraded Skia to m148, reworked singleton lifecycles, promoted legacy SKPaint text/font APIs and remaining v4 obsoletes to compile errors, fixed SKPixmap stride and coordinate calculations, and resolved a WinUI Projection DLL issue on .NET 9.

Full Changelog


Preview 3 (May 24, 2026)

Added HBColor struct, dependency updates (libjpeg-turbo, freetype, zlib), API wrappers and naming fixes, Blazor Gallery redesign, and dropped pre-.NET 8 WASM Emscripten support.

Full Changelog


Preview 2 (May 6, 2026)

Added SKWebpEncoder for animated WebP, SKStream.GetData() for zero-copy conversion, fixed SKPath finalizer crash, fixed Apple platform TFMs, and expanded the gallery with five new interactive samples.

Full Changelog


Preview 1 (April 28, 2026)

Launched SkiaSharp v4: upgraded to Skia m147, introduced variable font support, color font palettes, SKSamplingOptions overloads, Linux Bionic and Tizen native builds, fixed Android SKGLView rendering, fixed default-typeface resolution, and added C# 13 support on legacy TFMs.

Full Changelog