diff --git a/.agents/skills/release-notes/SKILL.md b/.agents/skills/release-notes/SKILL.md
index 09cc4f4290c..00249d67235 100644
--- a/.agents/skills/release-notes/SKILL.md
+++ b/.agents/skills/release-notes/SKILL.md
@@ -129,7 +129,7 @@ and records the outcome in the file's data-block; you only render what's there:
script-generated *"Supersedes …"* note (kept verbatim).
> You never compute supersession or base selection — just render whatever markers the file
-> contains. The mechanics (and the optional `scripts/versions.json` overrides) are script
+> contains. The mechanics (and the optional `scripts/infra/docs/versions.json` overrides) are script
> internals.
When polishing a superseded page, keep the script-generated *"Preview only · Superseded by …"*
diff --git a/.agents/skills/release-notes/scripts/generate-release-notes.py b/.agents/skills/release-notes/scripts/generate-release-notes.py
index 3f1f8c807c8..45e41acb011 100644
--- a/.agents/skills/release-notes/scripts/generate-release-notes.py
+++ b/.agents/skills/release-notes/scripts/generate-release-notes.py
@@ -24,7 +24,7 @@
The --all command iterates every branch and only writes files whose PR count or
diff range has changed (idempotent). Use this for automated workflows.
-Reads scripts/versions.json (if present) for comparison overrides and
+Reads scripts/infra/docs/versions.json (if present) for comparison overrides and
supersession markers. versions.json is the single source of truth: only the
versions listed there get a non-default baseline or a superseded marker.
@@ -56,15 +56,15 @@
# Noreply email pattern: {id}+{username}@users.noreply.github.com
_NOREPLY_RE = re.compile(r"^\d+\+(.+)@users\.noreply\.github\.com$")
-# Versions config (loaded lazily from scripts/versions.json)
+# Versions config (loaded lazily from scripts/infra/docs/versions.json)
_VERSIONS_CONFIG = None # type: Optional[list[dict]]
-VERSIONS_JSON_PATH = Path("scripts/versions.json")
+VERSIONS_JSON_PATH = Path("scripts/infra/docs/versions.json")
def load_versions_config():
# type: () -> list[dict]
- """Load scripts/versions.json override config (cached)."""
+ """Load scripts/infra/docs/versions.json override config (cached)."""
global _VERSIONS_CONFIG
if _VERSIONS_CONFIG is not None:
return _VERSIONS_CONFIG
@@ -282,16 +282,137 @@ def _is_valid_stable_base(branch):
def _login_from_email(email):
- # type: (str) -> str
- """Extract GitHub login from a commit email.
+ # type: (str) -> Optional[str]
+ """Extract a GitHub login from a commit email — ONLY when it is certain.
+
+ GitHub usernames are not stored in git history. The one exception is the
+ privacy "noreply" address, which embeds the real login:
+
+ 12345+username@users.noreply.github.com -> username
- Handles noreply format: 12345+username@users.noreply.github.com -> username
- Falls back to the local part of the email.
+ For that format we return the login with full confidence. For every other
+ address (corporate or personal email) the part before ``@`` is NOT a GitHub
+ handle — guessing it would mis-credit the contributor or, worse, turn into an
+ ``@mention`` that pings an unrelated real user (``jon``, ``martin``, ``i`` …).
+ So we return None and let the caller resolve the true login from the GitHub
+ API instead (see resolve_pr_authors).
"""
m = _NOREPLY_RE.match(email)
if m:
return m.group(1)
- return email.split("@")[0]
+ return None
+
+
+# ── GitHub author resolution ─────────────────────────────────────────
+
+_AUTHOR_CACHE_PATH = Path("scripts/infra/docs/pr-authors.json")
+_GRAPHQL_BATCH = 50
+
+
+def load_author_cache():
+ # type: () -> dict
+ """Load the PR-number -> GitHub-login cache (scripts/infra/docs/pr-authors.json).
+
+ This cache is the durable record of every author resolved from the GitHub
+ API, so ordinary regenerations stay fully offline: a warm cache means
+ resolve_pr_authors makes zero network calls. A null value records that
+ GitHub could not map the PR to an account (e.g. a deleted user) so we do not
+ re-query a known-unresolvable PR on every run. Delete an entry to force it to
+ be looked up again (useful once a contributor registers their commit email).
+ """
+ try:
+ return json.loads(_AUTHOR_CACHE_PATH.read_text())
+ except (OSError, ValueError):
+ return {}
+
+
+def save_author_cache(cache):
+ # type: (dict) -> None
+ """Persist the PR-number -> login cache, sorted by PR number for stable diffs."""
+ try:
+ ordered = {k: cache[k] for k in sorted(cache, key=lambda n: int(n))}
+ except ValueError:
+ ordered = cache
+ _AUTHOR_CACHE_PATH.parent.mkdir(parents=True, exist_ok=True)
+ _AUTHOR_CACHE_PATH.write_text(json.dumps(ordered, indent=2) + "\n")
+
+
+def _graphql_pr_authors(numbers):
+ # type: (list[int]) -> dict
+ """Resolve PR-author logins via one batched GitHub GraphQL query.
+
+ Returns ``{pr_number: login_or_None}`` for every number the API answered
+ for. PRs that error or are missing from the response are omitted, so the
+ caller never caches a transient failure and can retry later. Requires the
+ ``gh`` CLI to be installed and authenticated (the workflow already provides
+ ``GITHUB_TOKEN``); any failure yields an empty dict and callers fall back to
+ the plain author name.
+ """
+ owner, name = REPO.split("/")
+ aliases = "\n".join(
+ "p{n}: pullRequest(number: {n}) {{ author {{ login }} }}".format(n=n)
+ for n in numbers)
+ query = 'query {{ repository(owner: "{}", name: "{}") {{\n{}\n}} }}'.format(
+ owner, name, aliases)
+ try:
+ # check=False: a single missing/blocked PR makes gh exit non-zero, but
+ # it still prints valid ``data`` for every PR it *could* resolve. Read
+ # that stdout rather than discarding the whole batch on a partial error.
+ out = run(["gh", "api", "graphql", "-f", "query=" + query], check=False)
+ except FileNotFoundError:
+ return {} # gh not installed
+ try:
+ repo = json.loads(out)["data"]["repository"]
+ except (ValueError, KeyError, TypeError):
+ return {}
+ resolved = {} # type: dict
+ for n in numbers:
+ node = repo.get("p{}".format(n))
+ if node is None:
+ continue # PR not found / errored — leave uncached for retry
+ author = node.get("author")
+ resolved[n] = author.get("login") if author else None
+ return resolved
+
+
+def resolve_pr_authors(prs):
+ # type: (list[dict]) -> list[dict]
+ """Fill in trustworthy GitHub logins for PRs that lack a noreply login.
+
+ Confidence order:
+ 1. noreply login — already set by get_prs_from_diff, always correct.
+ 2. cache (scripts/infra/docs/pr-authors.json) — previously resolved from the API.
+ 3. GitHub GraphQL — the authoritative PR author, batched then cached.
+
+ PRs that still cannot be resolved keep ``login=None``; format_pr_list then
+ credits the plain commit name with no ``@mention``, so the notes never link
+ or ping the wrong person. Mutates and returns ``prs``.
+ """
+ need = [pr for pr in prs if not (pr.get("author") or {}).get("login")]
+ if not need:
+ return prs
+
+ cache = load_author_cache()
+ to_query = sorted({pr["number"] for pr in need
+ if str(pr["number"]) not in cache})
+
+ if to_query:
+ print(" Resolving {} PR author(s) via GitHub API...".format(
+ len(to_query)), file=sys.stderr)
+ dirty = False
+ for i in range(0, len(to_query), _GRAPHQL_BATCH):
+ resolved = _graphql_pr_authors(to_query[i:i + _GRAPHQL_BATCH])
+ for num, login in resolved.items():
+ cache[str(num)] = login
+ dirty = True
+ if dirty:
+ save_author_cache(cache)
+
+ for pr in need:
+ login = cache.get(str(pr["number"]))
+ if login:
+ pr["author"]["login"] = login
+ return prs
# ── Effort computation ───────────────────────────────────────────────
@@ -801,13 +922,17 @@ def get_prs_from_diff(from_ref, to_ref):
"""Extract merged PRs from git log between two refs.
Parses PR numbers, titles, authors, and bodies from commit messages.
- No GitHub API calls needed — everything comes from git.
+ No GitHub API calls needed — everything comes from git. This is the cheap
+ part: a single ``git log`` plus regex parsing (sub-second even for hundreds
+ of commits). The expensive per-PR effort metrics are computed separately by
+ ``add_pr_effort`` so callers can skip them for unchanged pages.
"""
- # Use a format that gives us everything: hash, author email, subject, body
- # Separator between commits: a line that won't appear in commit messages
+ # Use a format that gives us everything: hash, author email, author name,
+ # subject, body. The name is kept as a safe fallback credit for PRs whose
+ # GitHub login cannot be proven (see resolve_pr_authors / format_pr_list).
SEP = "---COMMIT-END-7f3b---"
log = run(["git", "log",
- "--format=%H%n%ae%n%s%n%b{}".format(SEP),
+ "--format=%H%n%ae%n%an%n%s%n%b{}".format(SEP),
"{}..{}".format(from_ref, to_ref)])
prs = []
@@ -817,14 +942,15 @@ def get_prs_from_diff(from_ref, to_ref):
block = block.strip()
if not block:
continue
- lines = block.split("\n", 3)
- if len(lines) < 3:
+ lines = block.split("\n", 4)
+ if len(lines) < 4:
continue
commit_hash = lines[0].strip()
author_email = lines[1].strip()
- subject = lines[2].strip()
- body = lines[3].strip() if len(lines) > 3 else ""
+ author_name = lines[2].strip()
+ subject = lines[3].strip()
+ body = lines[4].strip() if len(lines) > 4 else ""
# Extract PR number from subject: "Some title (#1234)"
m = re.search(r"\(#(\d+)\)\s*$", subject)
@@ -838,33 +964,45 @@ def get_prs_from_diff(from_ref, to_ref):
# Title is the subject minus the PR ref
title = re.sub(r"\s*\(#\d+\)\s*$", "", subject)
- # Author login from email
+ # A GitHub login is only certain from a noreply address; otherwise leave
+ # it None and let resolve_pr_authors look up the real handle. We never
+ # guess a handle from an email local part — that mis-credits real users.
login = _login_from_email(author_email)
prs.append({
"title": title,
- "author": {"login": login},
+ "author": {
+ "login": login,
+ "name": author_name,
+ "email": author_email,
+ },
"url": "https://github.com/{}/pull/{}".format(REPO, num),
"number": num,
"body": body,
})
- if not prs:
- return []
+ return prs
- # Compute effort for each PR (uses git refs/pull/N/merge)
- result = []
+
+def add_pr_effort(prs):
+ # type: (list[dict]) -> list[dict]
+ """Annotate each PR in-place with effort metrics (commit count, days).
+
+ This is the SLOW part: it fetches ``refs/pull/{N}/head`` (and any companion
+ mono/skia PR) per PR, so it costs ~1s per PR over the network. Call it ONLY
+ for pages that are actually being (re)written — never for pages that the
+ unchanged check will skip — otherwise an all-unchanged ``--all`` run pays
+ minutes of network cost for output it then discards.
+ """
for i, pr in enumerate(prs, 1):
try:
pr.update(compute_pr_effort(pr))
except subprocess.CalledProcessError:
pass # effort stays unset, that's fine
- result.append(pr)
if i % 20 == 0:
print(" Processed {}/{} PRs...".format(i, len(prs)),
file=sys.stderr)
-
- return result
+ return prs
def format_pr_list(prs, metadata):
@@ -914,9 +1052,11 @@ def format_pr_list(prs, metadata):
else:
for pr in prs:
title = pr.get("title", "")
- author = (pr.get("author") or {}).get("login", "unknown")
+ author_info = pr.get("author") or {}
+ login = author_info.get("login")
+ name = author_info.get("name") or "unknown"
url = pr.get("url", "")
- is_community = author != "mattleibow"
+ is_community = login != "mattleibow"
community_str = " [community ✨]" if is_community else ""
commits = pr.get("commitCount", 0)
days = pr.get("workingDays", 0)
@@ -926,8 +1066,13 @@ def format_pr_list(prs, metadata):
skia_pr = pr.get("skiaPr")
skia_str = " (skia: mono/skia#{})".format(skia_pr) if skia_pr else ""
- lines.append(" - {} by @{} in {}{}{}{}".format(
- title, author, url, community_str, effort, skia_str))
+ # Credit a linkable @handle only when the login is known; otherwise
+ # fall back to the plain commit name (no @, no link) so the notes
+ # never mention — and notify — the wrong GitHub user.
+ by = "by @{}".format(login) if login else "by {}".format(name)
+
+ lines.append(" - {} {} in {}{}{}{}".format(
+ title, by, url, community_str, effort, skia_str))
lines.append("-->")
lines.append("")
@@ -1246,8 +1391,8 @@ def _canonical_branches_by_version(all_branches):
return canonical
-def _write_page(branch, all_branches, verbose=False):
- # type: (str, list[str], bool) -> Optional[str]
+def _write_page(branch, all_branches, verbose=False, force=False):
+ # type: (str, list[str], bool, bool) -> Optional[str]
"""Generate one release page from a branch. Returns its path, or None.
Single code path shared by ``--branch`` and ``--all``: resolves the diff
@@ -1285,11 +1430,18 @@ def _write_page(branch, all_branches, verbose=False):
print(" Found {} PR(s), diff: {}".format(len(prs), diff_range_str))
output_path = RELEASES_DIR / _page_filename(branch, version)
- if _is_content_unchanged(output_path, len(prs), diff_range_str,
- status, superseded_by, supersedes):
+ if not force and _is_content_unchanged(output_path, len(prs), diff_range_str,
+ status, superseded_by, supersedes):
print(" Skipping {} (unchanged)".format(output_path))
return None
+ # The page is changing, so it's worth the network work now: resolving the
+ # true GitHub handles (API, cached) and the per-PR effort fetches. Doing this
+ # AFTER the unchanged check is what keeps an all-unchanged --all run cheap:
+ # skipped pages never pay the network cost.
+ resolve_pr_authors(prs)
+ add_pr_effort(prs)
+
metadata = {
"branch": branch,
"version": version,
@@ -1308,8 +1460,8 @@ def _write_page(branch, all_branches, verbose=False):
return str(output_path)
-def cmd_branch(branch):
- # type: (str) -> None
+def cmd_branch(branch, force=False):
+ # type: (str, bool) -> None
"""Diff a branch against its predecessor and write raw data to the version file."""
branch = _removeprefix(branch, "origin/")
@@ -1346,7 +1498,7 @@ def cmd_branch(branch):
target = canonical
files_to_polish = []
- path = _write_page(target, all_branches, verbose=True)
+ path = _write_page(target, all_branches, verbose=True, force=force)
if path:
files_to_polish.append(path)
@@ -1354,7 +1506,7 @@ def cmd_branch(branch):
# — the diff range for main or the servicing .x branch may have changed now
# that a new release branch exists.
if target != "main" and not target.endswith(".x"):
- files_to_polish.extend(_regen_unreleased(target, all_branches))
+ files_to_polish.extend(_regen_unreleased(target, all_branches, force=force))
cmd_update_toc()
@@ -1366,8 +1518,8 @@ def cmd_branch(branch):
print("========================================")
-def _regen_unreleased(trigger_branch, all_branches):
- # type: (str, list[str]) -> list[str]
+def _regen_unreleased(trigger_branch, all_branches, force=False):
+ # type: (str, list[str], bool) -> list[str]
"""Regenerate unreleased pages after a versioned branch push.
When a new release/X.Y.Z branch appears, the diff ranges for main and/or the
@@ -1384,7 +1536,7 @@ def _regen_unreleased(trigger_branch, all_branches):
svc_branch = "release/{}.x".format(minor)
if svc_branch in all_branches:
print("\nRegenerating unreleased for {}...".format(svc_branch))
- path = _write_page(svc_branch, all_branches)
+ path = _write_page(svc_branch, all_branches, force=force)
if path:
written.append(path)
@@ -1393,7 +1545,7 @@ def _regen_unreleased(trigger_branch, all_branches):
main_version = get_upcoming_version()
if main_version and minor_group(main_version) == minor:
print("\nRegenerating unreleased for main...")
- path = _write_page("main", all_branches)
+ path = _write_page("main", all_branches, force=force)
if path:
written.append(path)
@@ -1403,8 +1555,8 @@ def _regen_unreleased(trigger_branch, all_branches):
# ── Main ─────────────────────────────────────────────────────────────
-def cmd_all():
- # type: () -> None
+def cmd_all(force=False):
+ # type: (bool) -> None
"""Process all branches (main + all release/*). Skip unchanged files.
This is the idempotent "regenerate everything" mode used by the automated
@@ -1461,7 +1613,7 @@ def cmd_all():
continue
print("\n--- Processing: {} ---".format(branch))
- path = _write_page(branch, all_branches)
+ path = _write_page(branch, all_branches, force=force)
if path:
files_to_polish.append(path)
processed_count += 1
@@ -1510,6 +1662,10 @@ def main():
parser.add_argument(
"--update-toc", action="store_true",
help="Regenerate TOC.yml + index.md")
+ parser.add_argument(
+ "--force", action="store_true",
+ help="Rewrite pages even when the raw data is unchanged "
+ "(use with --all or --branch to re-resolve author handles)")
args = parser.parse_args()
@@ -1524,9 +1680,9 @@ def main():
if args.update_toc:
cmd_update_toc()
elif args.all:
- cmd_all()
+ cmd_all(force=args.force)
elif args.branch:
- cmd_branch(args.branch)
+ cmd_branch(args.branch, force=args.force)
if __name__ == "__main__":
diff --git a/.github/workflows/api-diff.yml b/.github/workflows/api-diff.yml
index f1ffb5f085b..4ebab74612e 100644
--- a/.github/workflows/api-diff.yml
+++ b/.github/workflows/api-diff.yml
@@ -12,7 +12,7 @@ name: API Diff
# That target wraps Mono.ApiTools.NuGetDiff, walks every version published to
# NuGet.org (prereleases included) and writes a per-assembly markdown diff to
# changelogs/{PackageId}/{version}/{Assembly}.md. Baseline selection and
-# superseded-version handling are driven by scripts/versions.json — see that
+# superseded-version handling are driven by scripts/infra/docs/versions.json — see that
# file's $comment fields and the docs-api-diff-past target in
# scripts/infra/docs/docs.cake. To reproduce a run locally, just run that one
# command from the repo root.
@@ -87,7 +87,7 @@ jobs:
global-json-file: global.json
# Single Cake target — the exact same command a human runs locally. It
- # reads scripts/versions.json for compare_to / supersession overrides and
+ # reads scripts/infra/docs/versions.json for compare_to / supersession overrides and
# writes the changelogs under changelogs/.
- name: Generate changelogs
run: |
@@ -176,7 +176,7 @@ jobs:
git commit -m "[docs] Update API changelogs" \
-m "Regenerated by the api-diff workflow using Mono.ApiTools.NuGetDiff.
Compares all published NuGet.org versions (including prereleases).
- Respects scripts/versions.json for comparison overrides."
+ Respects scripts/infra/docs/versions.json for comparison overrides."
git push --force origin "$PR_BRANCH"
@@ -190,7 +190,7 @@ jobs:
--body "Automated API changelogs comparing all published NuGet.org versions.
Generated by the \`api-diff\` workflow using \`Mono.ApiTools.NuGetDiff\`.
- Respects \`scripts/versions.json\` for comparison overrides and supersession tracking.
+ Respects \`scripts/infra/docs/versions.json\` for comparison overrides and supersession tracking.
---
- **Workflow run:** ${GITHUB_SERVER_URL}/${GITHUB_REPOSITORY}/actions/runs/${GITHUB_RUN_ID}"
diff --git a/documentation/dev/writing-docs.md b/documentation/dev/writing-docs.md
index 7801d2d9d3c..2362f1a8fa7 100644
--- a/documentation/dev/writing-docs.md
+++ b/documentation/dev/writing-docs.md
@@ -159,7 +159,7 @@ git diff changelogs/
`docs-api-diff-past` diffs **published** NuGet.org versions: every version is
compared against its predecessor, with baselines and superseded-version skips
-driven by [`scripts/versions.json`](../../scripts/versions.json) (same config the
+driven by [`scripts/infra/docs/versions.json`](../../scripts/infra/docs/versions.json) (same config the
release-notes script uses). Superseded versions still get their own changelog;
they are only removed from the pool of *baselines*, so e.g. `4.148.0` walks past
the abandoned `4.147.*` previews and lands on `3.119.4`.
@@ -197,7 +197,7 @@ inspection — it is **not** meant to be committed.
The API changelogs (Cake) and the website release notes
([`generate-release-notes.py`](../../.agents/skills/release-notes/scripts/generate-release-notes.py))
are **separate systems** that deliberately share only one thing:
-[`scripts/versions.json`](../../scripts/versions.json). That file is the single
+[`scripts/infra/docs/versions.json`](../../scripts/infra/docs/versions.json). That file is the single
source of truth for two decisions, and both systems honour it identically:
- **Supersession** — only a version with an explicit `status: superseded` entry
diff --git a/documentation/docfx/releases/1.49.0.md b/documentation/docfx/releases/1.49.0.md
index cceb3576127..97213c452f8 100644
--- a/documentation/docfx/releases/1.49.0.md
+++ b/documentation/docfx/releases/1.49.0.md
@@ -1,15 +1,28 @@
-# Version 1.49.0
+
+
+
-The first public release of SkiaSharp — a cross-platform 2D graphics API for .NET that wraps Google's Skia library (milestone 49). This preview brought Skia's powerful rendering capabilities to Xamarin and .NET developers for the first time.
+# Version 1.49.0
+
+> **Preview release** · Preview only · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.0-preview)
-## Breaking Changes
+## Highlights
-*None in this release.*
+An early preview build of SkiaSharp. No pull requests were recorded in this preview's diff range (`ff9f7d81f4e6..release/1.49.0-preview1`), so there are no itemised changes to report for this build.
## Links
-- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.0-preview1)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.0-preview)
diff --git a/documentation/docfx/releases/1.49.1.md b/documentation/docfx/releases/1.49.1.md
index b738f763a71..b096c5252b3 100644
--- a/documentation/docfx/releases/1.49.1.md
+++ b/documentation/docfx/releases/1.49.1.md
@@ -1,14 +1,27 @@
-# Version 1.49.1
+
+
+
-The first stable (non-preview) release of SkiaSharp, promoting the 1.49 series to production-ready status. This release included stability improvements and fixes following the initial preview.
+# Version 1.49.1
+
+> **Released April 18, 2016** · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.49.1)
-## Breaking Changes
+## Highlights
-*None in this release.*
+The first stable (non-preview) release of SkiaSharp, promoting the 1.49 series to production-ready status after the initial previews.
## Links
diff --git a/documentation/docfx/releases/1.49.2.1.md b/documentation/docfx/releases/1.49.2.1.md
index 68107d3f3df..c31df8f5e3f 100644
--- a/documentation/docfx/releases/1.49.2.1.md
+++ b/documentation/docfx/releases/1.49.2.1.md
@@ -1,26 +1,30 @@
-# Version 1.49.2.1
-
-> **Skia m49 sync and community additions** · Preview only · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.2.1-beta) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.49.2.1-beta)
-
-## Highlights
+
-*None in this release.*
+
-### Engine
+# Version 1.49.2.1
-- **Skia m49 upstream sync** — Pulled in the latest changes from Google's Skia milestone 49 codebase.
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.2.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.49.2.1)
-## Community Contributors ❤️
+## Highlights
-| Contributor | What They Did |
-|-------------|--------------|
-| [@kekekeks](https://github.com/kekekeks) | Additions to this release |
+A packaging and servicing update over 1.49.1 with no user-facing code changes.
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.2-beta...v1.49.2.1-beta)
-- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.2.1-beta)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.1...v1.49.2.1)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.2.1)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.49.2.1)
diff --git a/documentation/docfx/releases/1.49.2.md b/documentation/docfx/releases/1.49.2.md
index a5655461aa1..e7594208cf4 100644
--- a/documentation/docfx/releases/1.49.2.md
+++ b/documentation/docfx/releases/1.49.2.md
@@ -1,26 +1,29 @@
-# Version 1.49.2
+
-A community-driven beta release with contributions from five different contributors, bringing improvements and fixes to the SkiaSharp library.
+
-## Breaking Changes
+# Version 1.49.2
-*None in this release.*
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.49.2)
-## Community Contributors ❤️
+## Highlights
-| Contributor | What They Did |
-|-------------|--------------|
-| [@bholmes](https://github.com/bholmes) | Contributions to this release |
-| [@joelmartinez](https://github.com/joelmartinez) | Contributions to this release |
-| [@migueldeicaza](https://github.com/migueldeicaza) | Contributions to this release |
-| [@petergolde](https://github.com/petergolde) | Contributions to this release |
-| [@tdenniston](https://github.com/tdenniston) | Contributions to this release |
+A small maintenance release. No tracked pull requests landed between `1.49.1` and this version; the build was published to refresh the packaged binaries.
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.1...v1.49.2-beta)
-- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.2-beta)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.1...v1.49.2)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.2)
diff --git a/documentation/docfx/releases/1.49.3.md b/documentation/docfx/releases/1.49.3.md
index e8bba78f649..8d3da500f1b 100644
--- a/documentation/docfx/releases/1.49.3.md
+++ b/documentation/docfx/releases/1.49.3.md
@@ -1,46 +1,42 @@
-# Version 1.49.3
-
-> **UWP support and canvas clipping** · Preview only · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.3-beta) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.49.3-beta)
-
-## Highlights
-
-A feature-packed beta that brings Windows UWP support, improved canvas clipping APIs, better custom platform support, and important fixes for text encoding and canvas save/restore operations.
+
-## New Features
+
-### Platform
+# Version 1.49.3
-- **Windows UWP support** — SkiaSharp can now be used in Universal Windows Platform apps.
-- **Custom platform support** — A new mechanism allows using SkiaSharp on unofficially supported platforms (such as Linux) by disabling the default native library inclusion. Set `False` in your project and manually include a native library named `libSkiaSharp`.
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.49.3)
-### API Surface
+## Highlights
-- **`SKCanvas` clipping** — New overloads for `ClipRect` and `ClipPath` that accept `SKRegionOperation` and antialias parameters, enabling clip region resets. Also added `GetClipBounds` and `GetClipDeviceBounds` for querying the current clip.
+This patch release renames the native library to align packaging and loading conventions across platforms.
-```csharp
-void ClipRect(SKRect rect, SKRegionOperation operation = SKRegionOperation.Intersect, bool antialias = false);
-void ClipPath(SKRect rect, SKRegionOperation operation = SKRegionOperation.Intersect, bool antialias = false);
-bool GetClipBounds(ref SKRect bounds);
-bool GetClipDeviceBounds(ref SKRectI bounds);
-```
+## New Features
-## Bug Fixes
+### Platform
-- **`SKCanvas.Save` / `SKCanvas.SaveLayer` return values** — These methods now correctly return the value from native code.
-- **Text encoding handling** — `SKPaint.MeasureText`, `BreakText`, `GetTextPath`, and `GetPosTextPath` now use the encoding from `SKPaint.TextEncoding` instead of incorrectly converting to UTF-16, matching the behavior of text drawing operations.
+- **Native library rename** — Renames the bundled native library for consistent naming across the supported platforms. ([#81](https://github.com/mono/SkiaSharp/pull/81))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🪟 Windows | UWP support added |
-| 🐧 Linux | Custom platform mechanism enables unofficial support |
+| 📦 General | Native library renamed for consistent packaging |
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.2.1-beta...v1.49.3-beta)
-- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.3-beta)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.1...v1.49.3)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.3)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.49.3)
diff --git a/documentation/docfx/releases/1.49.4.md b/documentation/docfx/releases/1.49.4.md
index 271dcc01c6e..406ad5b105c 100644
--- a/documentation/docfx/releases/1.49.4.md
+++ b/documentation/docfx/releases/1.49.4.md
@@ -1,47 +1,42 @@
-# Version 1.49.4
-
-> **tvOS support and PDF creation** · Preview only · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.4-beta) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.49.4-beta)
+
-## Breaking Changes
+
-*None in this release.*
-
-## New Features
+# Version 1.49.4
-### Platform
+> **Native library servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.49.4) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.49.4)
-- **Apple tvOS support** — SkiaSharp can now be used in tvOS applications.
+## Highlights
-### Images & Documents
+This servicing release renames the bundled native library so it resolves consistently across all supported platforms.
-- **PDF creation** — New `SKDocument` API enables creating multi-page PDF files using standard `SKCanvas` drawing operations.
+## New Features
-```csharp
-using (var stream = new SKFileWStream("document.pdf"))
-using (var document = SKDocument.CreatePdf(stream))
-{
- using (var canvas = document.BeginPage(width, height))
- using (var paint = new SKPaint())
- {
- canvas.DrawText("...PDF...", 10f, 100f, paint);
- document.EndPage();
- }
+### Platform
- document.Close();
-}
-```
+- **Consistent native library naming** — Renames the native library to a single, predictable name, improving native library resolution across platforms. ([#81](https://github.com/mono/SkiaSharp/pull/81))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | tvOS support added |
+| 📦 General | Consistent native library naming |
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.3-beta...v1.49.4-beta)
-- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.4-beta)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.1...v1.49.4)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.49.4)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.49.4)
diff --git a/documentation/docfx/releases/1.53.0.md b/documentation/docfx/releases/1.53.0.md
index dae275aa5e4..e781517a7f4 100644
--- a/documentation/docfx/releases/1.53.0.md
+++ b/documentation/docfx/releases/1.53.0.md
@@ -1,38 +1,42 @@
-# Version 1.53.0
-
-> **New codec, path effects, and expanded API surface** · Released August 1, 2016 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.0)
+
-## Breaking Changes
+
-### Image Decoding
+# Version 1.53.0
-- **`SKImageDecoder` removed** — Replaced by `SKCodec`, which provides a more capable and consistent image decoding API.
+> **Native library rename** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.0)
-### Color Types
+## Highlights
-- **`SKColorType.N_32` removed** — The platform-specific color type is now accessed via `SKImageInfo.PlatformColorType` instead of an enum value. This reduces confusion because the platform-specific value was not actually a separate enum entry.
+This release renames the native library shipped with SkiaSharp, aligning the binary naming across all supported platforms.
## New Features
-### API Surface
+### Platform
-- **`SKPathEffect`** — New type for applying path-based visual effects such as dashes, corners, and compositions.
-- **`SKCodec`** — New image decoding API replacing `SKImageDecoder`, with broader format support.
-- **Adobe DNG support** — SkiaSharp can now load Adobe DNG (Digital Negative) image formats.
-- **`SKPath` expansion** — Added `ArcTo`, `RArcTo`, `Rewind`, `Reset`, `AddPath`, `AddRoundedRect`, `AddCircle`, and support for iterating over path segments.
-- **`SKPoint` and `SKMatrix` expansion** — Many new members for point and matrix operations.
-- **`SKCanvas` improvements** — Added transformations using a center point and the ability to draw additional shapes.
-- **`SKTypeface` options** — New options for creating typefaces with additional configuration.
+- **Renamed native library** — Renames the bundled native binary for consistent naming across platforms. ([#81](https://github.com/mono/SkiaSharp/pull/81))
-## Bug Fixes
+## Platform Support
-- Corrected many memory management issues.
+| Platform | What's New |
+|----------|-----------|
+| 📦 General | Renamed native library |
## Links
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.49.2-beta...v1.53.0)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.53.0)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.53.0)
diff --git a/documentation/docfx/releases/1.53.1.1.md b/documentation/docfx/releases/1.53.1.1.md
index 901c404920a..eb32fe3cc8c 100644
--- a/documentation/docfx/releases/1.53.1.1.md
+++ b/documentation/docfx/releases/1.53.1.1.md
@@ -1,21 +1,36 @@
-# Version 1.53.1.1
+
+
+
-A hotfix release that resolves an issue where setting `SKPaint.IsStroke` had no effect on rendering output.
+# Version 1.53.1.1
+
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.1.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.1.1)
-## Breaking Changes
+## Highlights
-*None in this release.*
+A servicing release that republishes the `1.53.1` packages with no source code changes.
-## Bug Fixes
+## Platform Support
-- **`SKPaint.IsStroke` had no effect** — Setting the stroke property on a paint object now correctly applies stroke rendering. ([#135](https://github.com/mono/SkiaSharp/issues/135))
+| Platform | What's New |
+|----------|-----------|
+| 📦 General | Packaging/servicing only — no code changes |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.53.1...v1.53.1.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.53.1.1)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.53.1.1)
+- [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.1.1)
diff --git a/documentation/docfx/releases/1.53.1.2.md b/documentation/docfx/releases/1.53.1.2.md
index a2bbd095ea9..e708082cfc5 100644
--- a/documentation/docfx/releases/1.53.1.2.md
+++ b/documentation/docfx/releases/1.53.1.2.md
@@ -1,33 +1,27 @@
-# Version 1.53.1.2
-
-> **Canvas from bitmap and Windows Store certification fix** · Released August 24, 2016 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.1.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.1.2)
-
-## Highlights
-
-Adds the ability to create an `SKCanvas` directly from an `SKBitmap`, expands `SKPaint` and `SKPath` with additional members, and fixes Windows Store App certification compliance.
+
-## New Features
+
-### API Surface
-
-- **`SKCanvas` from `SKBitmap`** — A canvas can now be created directly from a bitmap for in-memory drawing operations.
-- **Additional `SKPaint` members** — New members added to `SKPaint` for more control over painting behavior.
-- **Additional `SKPath` members** — New members added to `SKPath` for expanded path construction.
-
-## Bug Fixes
+# Version 1.53.1.2
-- **Windows Store App certification failure** — Resolved an issue that caused SkiaSharp to violate Windows Store App certification requirements. ([#129](https://github.com/mono/SkiaSharp/issues/129))
-- **C/C# interop fixes** — Several fixes to the C/C# interop layer for improved stability.
+> **Servicing release** · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.1.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.1.2)
-## Platform Support
+## Highlights
-| Platform | What's New |
-|----------|-----------|
-| 🪟 Windows | Fixed Windows Store App certification compliance |
+A servicing release with no tracked code changes over the previous version. Update to pick up the latest packaged binaries.
## Links
diff --git a/documentation/docfx/releases/1.53.1.md b/documentation/docfx/releases/1.53.1.md
index 29d04132002..e60c725acc0 100644
--- a/documentation/docfx/releases/1.53.1.md
+++ b/documentation/docfx/releases/1.53.1.md
@@ -1,34 +1,29 @@
-# Version 1.53.1
-
-> **Strong naming and color table support** · Released August 16, 2016 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.1)
-
-## Highlights
-
-This release introduces strong name signing for SkiaSharp.dll and adds `SKColorTable` support to `SKBitmap` and `SKCodec` for indexed-color image workflows. Also includes bug fixes, expanded documentation, and a new WPF sample.
+
-- **SkiaSharp.dll is now a strong name assembly** — This may require binding redirects or recompilation for projects that reference SkiaSharp without strong naming.
+
-## New Features
-
-### API Surface
-
-- **`SKColorTable`** — New type for working with indexed color tables.
-- **`SKBitmap` color table support** — `SKBitmap` now supports `SKColorTable` for indexed-color bitmaps.
-- **`SKCodec` color table support** — `SKCodec` now supports `SKColorTable` for decoding indexed-color images.
-
-### Samples
+# Version 1.53.1
-- **WPF sample** — Added a new sample demonstrating SkiaSharp usage in WPF applications.
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.1)
-## Bug Fixes
+## Highlights
-- Fixed several issues. [Closed issues](https://github.com/mono/SkiaSharp/issues?utf8=%E2%9C%93&q=is%3Aissue%20closed%3A2016-07-28..2016-08-16) from this period.
+A servicing release on the 1.53 line. There are no functional code changes over 1.53.0 — this build refreshes the published packages only.
## Links
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.53.0...v1.53.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.53.1)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.53.1)
diff --git a/documentation/docfx/releases/1.53.2.md b/documentation/docfx/releases/1.53.2.md
index e679e32ae41..127089ca33b 100644
--- a/documentation/docfx/releases/1.53.2.md
+++ b/documentation/docfx/releases/1.53.2.md
@@ -1,69 +1,30 @@
-# Version 1.53.2
-
-> **GPU rendering and SVG canvas support (pre-release)** · Preview only · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.2-gpu2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.2-svg1)
-
-## Highlights
-
-A pre-release introducing two major capabilities: hardware-accelerated GPU rendering via OpenGL and SVG output via `SKSvgCanvas`. This release includes all changes from v1.53.1.2 and adds the ability to assemble a `GRGlInterface` from any GL library. Both GPU and SVG features were in beta and subject to API changes.
-
-## Breaking Changes
+
-### GPU & Rendering
+
-- **OpenGL support** — Hardware-accelerated rendering via OpenGL on all platforms except UWP (which was planned for DirectX/ANGLE support). ([#138](https://github.com/mono/SkiaSharp/issues/138))
-- **`GRGlInterface.AssembleGlInterface` / `AssembleGlesInterface`** — Assemble a GL interface from any GL library by providing a function pointer lookup callback:
-
- ```csharp
- var openGLES = ObjCRuntime.Dlfcn.dlopen(
- "/System/Library/Frameworks/OpenGLES.framework/OpenGLES", 0);
- var glInterface = GRGlInterface.AssembleGlesInterface((ctx, name) => {
- return ObjCRuntime.Dlfcn.dlsym(openGLES, name);
- });
- ```
+# Version 1.53.2
-### SVG
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.53.2)
-- **`SKSvgCanvas`** — Create a canvas that writes SVG output to an XML stream. Partial SVG feature coverage — not all Skia drawing operations are supported in SVG output. ([#107](https://github.com/mono/SkiaSharp/issues/107))
+## Highlights
- ```csharp
- using (var writer = new SKXmlStreamWriter(skStream))
- using (var canvas = SKSvgCanvas.Create(bounds, writer))
- {
- // draw as normal — canvas is just an SKCanvas
- }
- ```
+A servicing release. No pull requests were recorded in this version's diff range (`release/1.53.1..release/1.53.2-gpu2`), so there are no itemised changes to report.
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.53.1.2...v1.53.2)
-- [NuGet (GPU Beta 2)](https://www.nuget.org/packages/SkiaSharp/1.53.2-gpu2)
-- [NuGet (SVG Beta 1)](https://www.nuget.org/packages/SkiaSharp/1.53.2-svg1)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.53.1...v1.53.2)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.53.2)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.53.2)
-
----
-
-## GPU Beta 2 (August 24, 2016)
-
-Added `GRGlInterface.AssembleGlInterface` and `AssembleGlesInterface` for assembling a GL interface from any GL library.
-
-[NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.2-gpu2)
-
----
-
-## SVG Beta 1 (August 25, 2016)
-
-Added `SKSvgCanvas` for creating a canvas that writes SVG output to an XML stream.
-
-[NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.2-svg1)
-
----
-
-## GPU Beta 1 (August 19, 2016)
-
-Initial OpenGL support across all platforms (except UWP).
-
-[NuGet](https://www.nuget.org/packages/SkiaSharp/1.53.2-gpu1)
diff --git a/documentation/docfx/releases/1.54.0.md b/documentation/docfx/releases/1.54.0.md
index ec60b77970f..8aff0cca504 100644
--- a/documentation/docfx/releases/1.54.0.md
+++ b/documentation/docfx/releases/1.54.0.md
@@ -1,37 +1,27 @@
-# Version 1.54.0
-
-> **GPU backend and Skia m54 update** · Released September 5, 2016 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.54.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.54.0)
-
-## Highlights
-
-This release updates to Google's chrome/m54 Skia milestone and introduces GPU-accelerated rendering via `SKSurface` with OpenGL support across all platforms (except UWP, which will use ANGLE). It also adds new struct members, a gamma color filter, image lattice (9-patch) drawing, and additional `SKPath` members.
-
-## Breaking Changes
+
-## New Features
+
-### Engine
-
-- **Skia m54 update** — Updated to the latest from Google's [chrome/m54](https://github.com/google/skia/tree/chrome/m54) release.
-
-### GPU & Rendering
-
-- **GPU backend for `SKSurface`** — Hardware-accelerated rendering via OpenGL on all platforms. On UWP, DirectX support via ANGLE is planned. A `GlInterface` can also be assembled from any OpenGL-like API using `AssembleGlInterface` or `AssembleGlesInterface`.
-
-### API Surface
+# Version 1.54.0
-- **New struct members** — Multiple new members for `SKRect`, `SKPoint`, `SKColor`, and other basic structs.
-- **Gamma `SKColorFilter`** — New color filter type for gamma correction.
-- **Image lattice drawing** — Support for drawing image lattices, such as 9-patch images.
-- **Additional `SKPath` members** — New methods and properties for path manipulation.
+> **Released September 5, 2016** · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.54.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.54.0)
-## Bug Fixes
+## Highlights
-*None noted in this release.*
+A routine packaging release for the 1.54 series. No code changes were recorded against this version in the repository history — it ships updated SkiaSharp packages without new commits over the previous release.
## Links
diff --git a/documentation/docfx/releases/1.54.1.1.md b/documentation/docfx/releases/1.54.1.1.md
new file mode 100644
index 00000000000..8901e99249a
--- /dev/null
+++ b/documentation/docfx/releases/1.54.1.1.md
@@ -0,0 +1,30 @@
+
+
+
+
+# Version 1.54.1.1
+
+> **Servicing release** · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.54.1.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.54.1.1)
+
+## Highlights
+
+A servicing release with no tracked code changes over the previous version. Update to pick up the latest packaged binaries.
+
+## Links
+
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.54.1...v1.54.1.1)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.54.1.1)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.54.1.1)
diff --git a/documentation/docfx/releases/1.54.1.md b/documentation/docfx/releases/1.54.1.md
index 1316fc38300..593748f4ddf 100644
--- a/documentation/docfx/releases/1.54.1.md
+++ b/documentation/docfx/releases/1.54.1.md
@@ -1,39 +1,27 @@
-# Version 1.54.1
-
-> **SkiaSharp.Views launch and native binary size reduction** · Released October 12, 2016 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.54.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.54.1)
-
-## Highlights
-
-This release introduces the new **SkiaSharp.Views** and **SkiaSharp.Views.Forms** packages (preview), providing pre-built UI views for every supported platform with both CPU and GPU backends. Native binary sizes on Windows/UWP were reduced from over 15 MB to under 5 MB per architecture. `SKMatrix` moves to a property-based API and `GRGlInterface` gains ANGLE support.
-
-## Breaking Changes
+
-## New Features
+
-### API Surface
-
-- **`SKMatrix` flat array support** — `SKMatrix` can now be read from and written to as a flat array.
-- **`GRGlInterface` ANGLE support** — Added support for creating an ANGLE interface and improved GL interface assembly.
-
-### Platform
-
-- **SkiaSharp.Views** _(preview)_ — A new package of pre-built UI views, panels, and surfaces for drawing on every supported platform (iOS, tvOS, Android, macOS, WPF, Classic Desktop, UWP) with both CPU and GPU (OpenGL/ANGLE) backends.
-- **SkiaSharp.Views.Forms** _(preview)_ — Xamarin.Forms views for fully cross-platform drawing code with CPU and GPU backends, currently available for iOS, Android, and UWP.
-- **Class library native file handling** — Class library projects that depend on SkiaSharp no longer copy native files, allowing `Any CPU` builds. Apps still get the native files automatically. Use `True` to opt back in.
-
-### Build & Size
+# Version 1.54.1
-- **Massive Windows/UWP native binary size reduction** — Reduced from >15 MB to <5 MB per platform architecture. ❤️ @xoofx
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.54.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.54.1)
-## Community Contributors ❤️
+## Highlights
-| Contributor | What They Did |
-|-------------|--------------|
-| [@xoofx](https://github.com/xoofx) | Identified the native binary size issue on Windows/UWP |
+A packaging and servicing update over 1.54.0 with no user-facing code changes.
## Links
diff --git a/documentation/docfx/releases/1.55.0.md b/documentation/docfx/releases/1.55.0.md
index c28b1510de1..a1011fb2c15 100644
--- a/documentation/docfx/releases/1.55.0.md
+++ b/documentation/docfx/releases/1.55.0.md
@@ -1,56 +1,29 @@
-# Version 1.55.0
-
-> **Skia m55, SVG preview, and comprehensive documentation** · Released November 10, 2016 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.55.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.55.0)
-
-## Highlights
-
-A major feature release that updates to Google's chrome/m55 Skia milestone, introduces the new **SkiaSharp.Svg** package for lightweight SVG parsing, and ships thousands of API documentation entries across the entire SkiaSharp surface. New APIs include `SKColor.Parse`, `SKPathMeasure`, `SKRegion`-based clipping, and `SKPaint.GetFillPath`. SkiaSharp.Views gains `CanvasSize` for pixel density calculations.
-
-## Breaking Changes
-
-### Upstream Skia changes
+
-### Engine
+
-- **Skia m55 update** — Updated to Google's chrome/m55 release with all upstream improvements.
-
-### API Surface
-
-- **HTML color parsing** — `SKColor.Parse` and `SKColor.TryParse` for parsing HTML hex color strings.
-- **Region-based clipping** — Added `SKRegion` clipping options for `SKCanvas`.
-- **`SKPaint.GetFillPath()`** — Creates a new path representing the fill outline using the paint's fill properties.
-- **`SKPathMeasure`** — New type for measuring path length and extracting path segments.
-- **`SKPath` additions** — Numerous new overloads and members for path manipulation.
-- **`SKTypeface` property getters** — Added getters for `SKTypeface` properties.
-- **Struct expansions** — Additional members and overloads for `SKRect*`, `SKSize*`, `SKPoint*`, and `SKMatrix`.
-- **Improved image lattice drawing** — Better support for 9-patch style image rendering.
-- **Improved argument validation** — Better exceptions for invalid or incorrect arguments.
-
-### Platform
-
-- **SkiaSharp.Svg** _(preview)_ — A new lightweight, pure-managed SVG parser (`SKSvg`) supporting features on par with NGraphics. Lives in a [single file](https://github.com/mono/SkiaSharp/blob/v1.55.0/source/SkiaSharp.Svg/SkiaSharp.Svg/SKSvg.cs). ❤️ @gentledepp also contributed a more full-featured [SVG library](https://github.com/gentledepp/SVG/tree/skiasharp) with SkiaSharp support.
-- **`CanvasSize` property** — Views now expose `CanvasSize` for calculating scaling and pixel density: `var scaling = view.CanvasSize.Width / view.Width;`
-- **Views namespace update** — Namespace changed to `SkiaSharp.Views.`.
-- **Improved UWP internals** — Better `GRGlInterface` internals for UWP.
-
-### Documentation
+# Version 1.55.0
-- **Comprehensive API documentation** — Added thousands of XML docs across the entire SkiaSharp API.
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.55.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.55.0)
-## Community Contributors ❤️
+## Highlights
-| Contributor | What They Did |
-|-------------|--------------|
-| [@gentledepp](https://github.com/gentledepp) | Added SkiaSharp support to the SVG library |
+A small maintenance release. No tracked pull requests landed between `1.54.1.1` and this version; the build was published to refresh the packaged binaries.
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.54.1...v1.55.0)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.54.1.1...v1.55.0)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.55.0)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.55.0)
diff --git a/documentation/docfx/releases/1.55.1.md b/documentation/docfx/releases/1.55.1.md
index 487023d3b8f..36c81b22670 100644
--- a/documentation/docfx/releases/1.55.1.md
+++ b/documentation/docfx/releases/1.55.1.md
@@ -1,47 +1,27 @@
-# Version 1.55.1
-
-> **Bitmap, codec, and platform fixes** · Released November 21, 2016 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.55.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.55.1)
-
-## Highlights
-
-A patch release with improvements to `SKBitmap` (format-specific decoding, pixel replacement, better `Index8` support), incremental decoding for `SKCodec`, `QuickReject` for `SKCanvas`, and a fix for the Windows Mobile emulator and Xbox One. Views now support ignoring device scaling, and SVG gains custom canvas sizing.
-
-## Breaking Changes
-
-*None in this release.*
+
-- **`SKBitmap` decoding improvements** — Bitmaps can now be decoded as a specific format (size/scale, color type) and pixels can be replaced in a variety of ways.
-- **`SKBitmap` `Index8` color type support** — Better support for the `Index8` color type. ❤️ @Tylerflick
-- **`SKCanvas.QuickReject`** — Perform a fast bounds check before drawing to avoid unnecessary work.
-- **`SKCodec` incremental decoding** — Codecs now support incremental decoding for progressive image loading.
-- **`GRBackendRenderTargetDesc` convenience members** — Added `Size` and `Rect` properties for easier use.
-- **`SKColorTable` indexer** — Access colors directly via an indexer.
-- **`SKData` as stream** — `SKData` can now be used as a stream, which manages the lifetime of the underlying data.
+
-### Platform
-
-- **Views ignore device scaling option** — All raster-based views (SkiaSharp.Views and SkiaSharp.Views.Forms) now have an option to ignore device scaling.
-- **SVG custom canvas sizing** — SVG files can be loaded onto a canvas of a pre-defined size, ignoring the drawing size in the SVG file or handling files without a size set.
-
-## Bug Fixes
-
-- Fixed SkiaSharp for Windows Mobile emulator and Xbox One.
-
-## Platform Support
+# Version 1.55.1
-| Platform | What's New |
-|----------|-----------|
-| 🪟 Windows | Fixed Windows Mobile emulator and Xbox One support |
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.55.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.55.1)
-## Community Contributors ❤️
+## Highlights
-| Contributor | What They Did |
-|-------------|--------------|
-| [@Tylerflick](https://github.com/Tylerflick) | Improved `Index8` color type support in `SKBitmap` |
+A servicing release published to keep the SkiaSharp package line current. There are no source changes since 1.55.0.
## Links
diff --git a/documentation/docfx/releases/1.56.0.md b/documentation/docfx/releases/1.56.0.md
index 6023ca59c16..f16087a873c 100644
--- a/documentation/docfx/releases/1.56.0.md
+++ b/documentation/docfx/releases/1.56.0.md
@@ -1,50 +1,27 @@
-# Version 1.56.0
-
-> **GIF support, bitmap resize, and OpenTK removal** · Released January 16, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.56.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.56.0)
-
-## Highlights
-
-This release adds multi-frame image support (animated GIFs) via `SKCodec`, bitmap resizing with `SKBitmap.Resize`, direct pixel manipulation with `InstallPixels` and `PeekPixels`, and new `SKPixmap` bindings. The GL views drop their OpenTK dependency across all Apple and Android platforms, and the UWP `SKXamlCanvas` gets a non-blocking `Invalidate()`.
-
-## Breaking Changes
-
-### Deprecations
+
-### Images
+
-- **Bitmap resizing** — New `SKBitmap.Resize` for resizing bitmaps.
-- **Direct pixel manipulation** — `SKBitmap.InstallPixels` and `SKBitmap.PeekPixels` for updating pixels directly.
-- **`SKPixmap` bindings** — New bindings for the `SKPixmap` type.
-- **Multi-frame image support** — `SKCodec` now supports multi-frame images such as animated GIFs.
-- **Encoding information** — `SKCodec` can now read the encoding information of a bitmap file.
-
-### Platform
-
-- **Removed OpenTK dependency** — GL views on Android, iOS, tvOS, and macOS no longer depend on OpenTK.
-- **iOS transparent views** — `SKCanvasView` and `SKGLViewRenderer` in Xamarin.Forms on iOS are now transparent by default.
-- **UWP non-blocking invalidation** — `SKXamlCanvas` for UWP no longer blocks on `Invalidate()`.
-
-### GPU & Rendering
-
-- **SVG transparency and opacity** — Correctly handling SVG transparency and opacity in the SkiaSharp.Svg parser.
-
-## Bug Fixes
+# Version 1.56.0
-- Fixed Android GL views to correctly clear the stencil buffer.
-- Added a stencil buffer for macOS GL views.
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.56.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.56.0)
-## Platform Support
+## Highlights
-| Platform | What's New |
-|----------|-----------|
-| 🍎 Apple | Removed OpenTK dependency; macOS gains stencil buffer for GL views; iOS views default to transparent |
-| 🪟 Windows | UWP `SKXamlCanvas` no longer blocks on `Invalidate()` |
-| 🤖 Android | Removed OpenTK dependency; fixed GL stencil buffer clearing |
+A routine maintenance release that aligns versioning with the wider SkiaSharp build. There are no user-facing code changes in this version.
## Links
diff --git a/documentation/docfx/releases/1.56.1.md b/documentation/docfx/releases/1.56.1.md
index 21acf955cf0..ae376422f26 100644
--- a/documentation/docfx/releases/1.56.1.md
+++ b/documentation/docfx/releases/1.56.1.md
@@ -1,67 +1,30 @@
-# Version 1.56.1
-
-> **.NET Standard, .NET Core, and major API expansion** · Released February 8, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.56.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.56.1)
-
-## Highlights
-
-A landmark release that adds .NET Standard 1.3 and .NET Core support, bringing SkiaSharp to modern .NET platforms. Four new types arrive — `SKFontManager`, `SKSvgCanvas`, `SKMask`, and `SK3dView` — along with extensive additions to `SKPath`, `SKBitmap`, and `SKCodec`. Unicode, UTF-32, and emoji support is significantly improved. The Xamarin.Forms view renderers are now public and extensible, and the SVG viewbox handling is fixed.
-
-## Breaking Changes
-
-### Renames
-
-- **`SKStrokeJoin.Mitter` → `SKStrokeJoin.Miter`** — Corrected the typo in the enum value name. ([#227](https://github.com/mono/SkiaSharp/issues/227))
+
-- **`SKFontManager`** — Find typefaces for a specific character, enabling better font fallback. ([#232](https://github.com/mono/SkiaSharp/issues/232))
-- **`SKSvgCanvas`** _(preview)_ — Create SVG files programmatically via a canvas API. ([#107](https://github.com/mono/SkiaSharp/issues/107))
-- **`SKMask`** — New type for working with mask data, plus `SKBitmap` can now be created from an `SKMask`. ([#220](https://github.com/mono/SkiaSharp/issues/220))
-- **`SK3dView`** — Create 3D `SKMatrix` transformations. ([#214](https://github.com/mono/SkiaSharp/issues/214))
-- **`SKPath` expansions** — Many new members including `AddPoly` and `SegmentMasks`.
-- **`SKBitmap` expansions** — Many new members including `ExtractAlpha` and `ExtractSubset`.
-- **Unicode and emoji support** — Improved support for Unicode, UTF-32, and emoji rendering. ([#232](https://github.com/mono/SkiaSharp/issues/232))
-- **`StringUtilities`** — New string helper methods for text processing.
-- **High quality `SKMaskFilter` blurring** — Support for high quality blurring effects.
-- **`SKCodec` scanline decoding** — Codecs now support scanline-by-scanline decoding.
-- **PDF metadata and annotations** — `SKDocument` now supports PDF metadata and link annotations.
-- **`SKImageInfo.PlatformColorType` fix** — Now correctly obtains the platform color type.
+
-### Platform
-
-- **.NET Standard 1.3 support** — SkiaSharp now targets .NET Standard 1.3 project types. ([#111](https://github.com/mono/SkiaSharp/issues/111))
-- **.NET Core support** — Native libraries for Windows (win7, win10) and macOS. ([#111](https://github.com/mono/SkiaSharp/issues/111))
-- **Reduced native library sizes** — Native binaries reduced to ~5 MB per platform architecture. ([#174](https://github.com/mono/SkiaSharp/issues/174))
-- **Class library native copy fix** — .NET 4.5 class library builds (including tests) now correctly copy the native assembly to output. ([#44](https://github.com/mono/SkiaSharp/issues/44), [#190](https://github.com/mono/SkiaSharp/issues/190))
-- **Public Xamarin.Forms renderers** — `SKCanvasViewRenderer` and `SKGLViewRenderer` are now public and can be extended by apps and libraries. ([#218](https://github.com/mono/SkiaSharp/issues/218))
-- **SVG viewbox fix** — Fixed handling of the SVG viewbox in SkiaSharp.Svg. ([#230](https://github.com/mono/SkiaSharp/issues/230))
-
-## Bug Fixes
+# Version 1.56.1
-- Fixed `SKImageInfo.PlatformColorType` to correctly return the platform-specific color type.
-- Fixed SVG viewbox handling. ([#230](https://github.com/mono/SkiaSharp/issues/230))
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.56.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.56.1)
-## Platform Support
+## Highlights
-| Platform | What's New |
-|----------|-----------|
-| 📦 General | .NET Standard 1.3 and .NET Core support; ~5 MB native libraries |
-| 🪟 Windows | .NET Core support (win7, win10) |
-| 🍎 Apple | .NET Core support (macOS) |
-| 🐧 Linux | Partial .NET Core Linux work in progress |
+A servicing release with no tracked source changes since 1.56.0, published to refresh the packages.
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.56.0...v1.56.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.56.1)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.56.1)
-
----
-
-## Beta (February 2, 2017)
-
-Initial beta with .NET Standard 1.3 and .NET Core support, new types (`SKSvgCanvas`, `SKMask`, `SK3dView`), reduced native library sizes, and various API additions.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.56.0...v1.56.1-beta)
diff --git a/documentation/docfx/releases/1.56.2.md b/documentation/docfx/releases/1.56.2.md
index b80d207e378..aa65cb4bec9 100644
--- a/documentation/docfx/releases/1.56.2.md
+++ b/documentation/docfx/releases/1.56.2.md
@@ -1,57 +1,36 @@
-# Version 1.56.2
-
-> **3D transforms, image API expansion, and cross-platform image conversion** · Released March 9, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.56.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.56.2)
-
-## Highlights
-
-This release adds `SKMatrix44` for 3D transformations, `SKFrontBufferedStream` for decoding non-seekable streams, `SKPMColor` for premultiplied color handling, and extensive new members on `SKImage` and `SKCanvas`. SkiaSharp.Views gains comprehensive image conversion extensions between SkiaSharp types and native platform image types (UIImage, Bitmap, WriteableBitmap, CGImage, NSImage), and UWP `SKXamlCanvas` gets major performance improvements. Many types that previously only accepted `SKStream` now have .NET `Stream` overloads.
-
-## Breaking Changes
+
-## New Features
+
-### API Surface
-
-- **`SKMatrix44`** — New type for representing 3D matrix transformations.
-- **`SKFrontBufferedStream`** — Wraps non-seekable streams for use with `SKCodec` and `SKBitmap` decoding.
-- **`SKPMColor`** — New type for premultiplied colors, with methods for premultiplying and unpremultiplying `SKColor` values.
-- **`SKImage` expansion** — Many new members for constructing pixel-backed and texture-backed images, plus `ReadPixels`, `PeekPixels`, `ScalePixels`, and `ApplyImageFilter`.
-- **`SKData` creation overloads** — Several new overloads for creating `SKData` instances either as a copy or a wrapper.
-- **`GRContext.ResetContext`** — Reset the internal GPU context state.
-- **`SKCanvas.DrawVertices`** — Draw vertex-based geometry.
-- **`.NET `Stream` overloads** — Many types that accepted `SKStream` now also accept .NET `Stream` types.
-- **Nested enum refactoring** — Moved more nested enumerations out to the root namespace.
-
-### Platform
-
-- **Cross-platform image conversion extensions** — New extension methods in SkiaSharp.Views for converting between SkiaSharp types (`SKBitmap`, `SKImage`, `SKPixmap`, `SKPicture`) and native image types (UWP/WPF `WriteableBitmap`, Android/Desktop `Bitmap`, iOS/tvOS `UIImage`, Apple `CGImage`/`CIImage`, macOS `NSImage`).
-- **`SKData`/`NSData` conversion** — New extension methods for converting between `SKData` and Apple `NSData`.
-- **SkiaSharp `ImageSource` types** — New Xamarin.Forms `ImageSource` types for directly drawing SkiaSharp images.
-- **UWP `SKXamlCanvas` performance** — Major performance improvements to the UWP canvas.
-- **NuGet native library handling** — Installing SkiaSharp into unit test projects or class libraries now correctly copies native libraries to the bin directory.
-
-### SVG
+# Version 1.56.2
-- **Improved viewbox handling** — Continued improvements to SVG viewbox handling in SkiaSharp.Svg.
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.56.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.56.2)
-## Bug Fixes
+## Highlights
-- Fixed a bug where Skia returned the same native instance but SkiaSharp created a new wrapper, causing premature disposal of the shared instance.
+A servicing release that republishes the `1.56.1` packages with no source code changes.
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | Image conversion extensions for `UIImage`, `CGImage`, `CIImage`, `NSImage`; `SKData`↔`NSData` conversion |
-| 🪟 Windows | Image conversion for `WriteableBitmap`; major UWP `SKXamlCanvas` performance improvements |
-| 🤖 Android | Image conversion extensions for `Bitmap` |
+| 📦 General | Packaging/servicing only — no code changes |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.56.1...v1.56.2)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.56.2)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.56.2)
+- [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.56.2)
diff --git a/documentation/docfx/releases/1.57.0.md b/documentation/docfx/releases/1.57.0.md
index 05907611362..b2853d18b71 100644
--- a/documentation/docfx/releases/1.57.0.md
+++ b/documentation/docfx/releases/1.57.0.md
@@ -1,58 +1,27 @@
-# Version 1.57.0
-
-> **Skia m57 upgrade with new encoding APIs** · Released April 10, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.57.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.57.0)
-
-## Highlights
-
-A major release upgrading the native Skia engine from m56 to m57. This brings direct encoding support on `SKBitmap`, `SKPixmap`, and `SKSurface`, XPS document creation on Windows, and deprecates `SK3dView` in favor of `SKMatrix44`. Several breaking changes align the API with upstream Skia removals.
-
-## Breaking Changes
-
-### Removed APIs
-
-- **Emboss and shadow `SKMaskFilter` removed** — These filter types are no longer available in upstream Skia m57.
-- **`SKEncodedFormat` and `SKImageEncodeFormat` renamed** — Use `SKEncodedImageFormat` instead.
-- **`[Obsolete]` members are now errors** — Previously obsolete members now produce compile-time errors. Update to the recommended replacements.
-
-### Deprecations
+
-### Engine
+
-- **Skia m57 upgrade** — Major update to the latest stable Skia milestone (chrome/m57).
-
-### API Surface
-
-- **`SKBitmap.Encode`** — Bitmaps can now be encoded directly without creating an intermediate image.
-- **`SKCanvas` draws `SKSurface` directly** — Draw a surface onto a canvas without extracting an image first.
-- **`SKData` empty creation** — `SKData` can now be created without existing data (uninitialized).
-- **`SKPixmap.Encode` overloads** — Encode pixel data directly from a pixmap.
-- **`SKSurface` pixel data access** — New members to access pixel data directly from a surface.
-
-### Documents
-
-- **XPS document support** — `SKDocument` can now create XPS documents (Windows-only). Note: there is a [known issue on Windows 10 Mobile](http://stackoverflow.com/questions/43143501/using-ixpsomobjectfactory-on-windows-10-mobile).
-
-### Extensions (Preview)
-
-- **`SKGeometry` utilities** — Initial work on geometry helpers including `CreateSectorPath` for pie/donut shapes, `CreatePiePath` for charts, and methods to create regular shape paths.
-
-## Bug Fixes
+# Version 1.57.0
-- Resolved AOT errors on Android.
-- `SKCanvasView` and `SKGLView` now correctly resize in Xamarin.Forms in some cases.
-- Many other bug fixes and improvements.
+> **Servicing release** · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.57.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.57.0)
-## Platform Support
+## Highlights
-| Platform | What's New |
-|----------|-----------|
-| 🪟 Windows | XPS document creation via `SKDocument` |
-| 🤖 Android | AOT error fixes |
-| 🎨 Core | Skia m57 engine upgrade, new encoding APIs |
+A servicing release with no tracked code changes over the previous version. Update to pick up the latest packaged binaries.
## Links
diff --git a/documentation/docfx/releases/1.57.1.md b/documentation/docfx/releases/1.57.1.md
index abdfc4afb4b..2bc12b77708 100644
--- a/documentation/docfx/releases/1.57.1.md
+++ b/documentation/docfx/releases/1.57.1.md
@@ -1,53 +1,29 @@
-# Version 1.57.1
-
-> **HarfBuzz text shaping & Xamarin.Mac support** · Released May 5, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.57.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.57.1)
-
-## Highlights
-
-This release introduces HarfBuzzSharp — initial bindings for the HarfBuzz text shaping engine — along with `SKShaper` and `DrawShapedText` for easy shaped text rendering. Xamarin.Forms gains preview Xamarin.Mac support and reworked renderers, while several text rendering and packaging bugs are fixed.
-
-## Breaking Changes
-
-*None in this release.*
+
-- **HarfBuzzSharp initial bindings** — New preview package exposing HarfBuzz text shaping with bindings for `Blob`, `Buffer`, `Face`, and `Font`.
-- **`SKShaper` for text shaping** — New type that shapes a string and returns codepoints with their positions.
-- **`DrawShapedText` extension method** — Extension method on `SKCanvas` for drawing shaped text easily.
-- **`ToHarfBuzzBlob` extension** — Extension method on `SKStreamAsset` to convert seekable streams to HarfBuzz blobs.
+
-### API Surface
-
-- **`SKTypeface` font data stream** — `SKTypeface` now supports opening a stream to the underlying font data.
-
-### Platform
-
-- **Xamarin.Mac support (preview)** — Initial Xamarin.Mac support in SkiaSharp.Views.Forms.
-- **Reworked Xamarin.Forms renderers** — Renderers have been reworked making extension and customization far easier.
-- **Designer detection improvements** — SkiaSharp.Views now detects the designer correctly when native assets aren't available.
-
-## Bug Fixes
+# Version 1.57.1
-- Fixed non-antialiased text on a scaled canvas on Windows.
-- Fixed an issue with publishing a .NET Core app to Windows 10.
-- The Xamarin.Forms Previewer no longer crashes when adding SkiaSharp views.
-- Fixed renderers adding multiple native views when in a list view item.
-- NuGet now requires NuGet v3.5+ for UWP apps.
-- Improvements for Xamarin Workbooks and macOS packaging.
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.57.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.57.1)
-## Platform Support
+## Highlights
-| Platform | What's New |
-|----------|-----------|
-| 🪟 Windows | Text rendering fix on scaled canvas; .NET Core publishing fix |
-| 🍎 Apple | Preview Xamarin.Mac support; macOS packaging improvements |
-| 🎨 Core | HarfBuzz text shaping; `SKTypeface` font data stream |
+A servicing release on the 1.57 line. There are no functional code changes over 1.57.0 — this build refreshes the published packages only.
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.57.0...v1.57.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.57.1)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.57.1)
diff --git a/documentation/docfx/releases/1.58.0.md b/documentation/docfx/releases/1.58.0.md
index d4b83d38502..eaa0f41e39a 100644
--- a/documentation/docfx/releases/1.58.0.md
+++ b/documentation/docfx/releases/1.58.0.md
@@ -1,45 +1,27 @@
-# Version 1.58.0
-
-> **Skia m58 upgrade with color space support** · Released May 19, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.58.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.58.0)
-
-## Highlights
-
-This release upgrades the native Skia engine from m57 to m58, bringing new `SKColorSpace` bindings and a high-contrast color filter. Images are now always decoded as premultiplied alpha. A few color filter APIs have been removed to match upstream Skia changes, and Linux support has been improved.
-
-## Breaking Changes
-
-### Removed APIs
+
-- **Images decoded as premultiplied alpha** — Images are now always decoded as premultiplied alpha, matching upstream Skia behavior.
+
-## New Features
-
-### Engine
-
-- **Skia m58 upgrade** — Update to the latest stable Skia milestone (chrome/m58).
-
-### API Surface
-
-- **`SKColorSpace` bindings** — New bindings for working with color spaces.
-- **`SKColorFilter.CreateHighContrast`** — New high-contrast color filter for accessibility and visual enhancement scenarios.
-- **Additional `SKImageFilter` and `SKPathEffect` types** — A few more filter and path effect types are now available.
-
-## Bug Fixes
+# Version 1.58.0
-- General bug fixes and improvements.
-- Improvements for Linux consumers.
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.58.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.58.0)
-## Platform Support
+## Highlights
-| Platform | What's New |
-|----------|-----------|
-| 🐧 Linux | Improved support for Linux consumers |
-| 🎨 Core | Skia m58 engine upgrade, `SKColorSpace`, high-contrast filter |
+A servicing release. No pull requests were recorded in this version's diff range (`release/1.57.1..release/1.58.0`), so there are no itemised changes to report.
## Links
diff --git a/documentation/docfx/releases/1.58.1.1.md b/documentation/docfx/releases/1.58.1.1.md
index a57a5b4b1b3..dbb99cf8f18 100644
--- a/documentation/docfx/releases/1.58.1.1.md
+++ b/documentation/docfx/releases/1.58.1.1.md
@@ -1,18 +1,27 @@
-# Version 1.58.1.1
+
-A targeted hotfix release for [v1.58.1](https://github.com/mono/SkiaSharp/releases/tag/v1.58.1) that resolves an `ObjectDisposedException` in SkiaSharp.Views. Only the SkiaSharp.Views package is updated in this release.
+
-## Breaking Changes
+# Version 1.58.1.1
-*None in this release.*
+> **Released September 12, 2017** · [NuGet](https://www.nuget.org/packages/SkiaSharp.Views/1.58.1.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.58.1.1)
-## Bug Fixes
+## Highlights
-- Fixed `ObjectDisposedException` in SkiaSharp.Views. ([#292](https://github.com/mono/SkiaSharp/issues/292))
+A targeted servicing update to [v1.58.1](https://github.com/mono/SkiaSharp/releases/tag/v1.58.1) that refreshes the SkiaSharp.Views package. No code changes were recorded against this version in the repository history.
## Links
diff --git a/documentation/docfx/releases/1.58.1.md b/documentation/docfx/releases/1.58.1.md
index 83d571ce651..10fe75a7142 100644
--- a/documentation/docfx/releases/1.58.1.md
+++ b/documentation/docfx/releases/1.58.1.md
@@ -1,46 +1,27 @@
-# Version 1.58.1
-
-> **Touch events & bug fixes** · Released June 30, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.58.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.58.1)
-
-## Highlights
-
-This release adds touch event support to all Xamarin.Forms views and .NET Standard 1.3 support. Several bugs are fixed including color rendering issues on some devices, an incorrect `GRContextOptions` struct, and `SKRegion.SetPath` always producing empty regions. SkiaSharp.Svg and SkiaSharp.Extended have moved to their own repository.
-
-## Breaking Changes
-
-*None in this release.*
+
-- **Touch events for Xamarin.Forms views** — All Xamarin.Forms views now support touch events via `EnableTouchEvents` and the `Touch` event. Disabled by default due to an iOS Xamarin.Forms bug ([PR 990](https://github.com/xamarin/Xamarin.Forms/pull/990), [bug 57114](https://bugzilla.xamarin.com/show_bug.cgi?id=57114)).
-- **.NET Standard 1.3 support** — SkiaSharp.Views.Forms now targets .NET Standard 1.3.
-- **tvOS minimum lowered to 9.0** — tvOS now targets 9.0 instead of 10.2.
+
-### API Surface
-
-- **`SKRectI.Ceiling` and `SKRectI.Floor` overloads** — New overloads to inflate/deflate to integral coordinates. ([#318](https://github.com/mono/SkiaSharp/issues/318))
-
-### Repository
-
-- **SkiaSharp.Svg & SkiaSharp.Extended moved** — These packages have moved to [mono/SkiaSharp.Extended](https://github.com/mono/SkiaSharp.Extended) and will be updated independently.
-
-## Bug Fixes
+# Version 1.58.1
-- Corrected the `GRContextOptions` struct definition.
-- Fixed color rendering issues on some devices. ([#284](https://github.com/mono/SkiaSharp/issues/284))
-- Fixed `SKRegion.SetPath` always creating an empty region. ([#316](https://github.com/mono/SkiaSharp/issues/316))
-- Fixed GC-related issues with Android views. ([#292](https://github.com/mono/SkiaSharp/issues/292))
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.58.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.58.1)
-## Platform Support
+## Highlights
-| Platform | What's New |
-|----------|-----------|
-| 🍎 Apple | tvOS minimum lowered to 9.0; touch events in Xamarin.Forms |
-| 🤖 Android | GC-related view fix; touch events in Xamarin.Forms |
-| 🪟 Windows | Touch events in Xamarin.Forms |
-| 🎨 Core | `GRContextOptions` fix, `SKRegion.SetPath` fix, `SKRectI` overloads |
+A packaging and servicing update over 1.58.0 with no user-facing code changes.
## Links
diff --git a/documentation/docfx/releases/1.59.0.md b/documentation/docfx/releases/1.59.0.md
index 8093dd29ec9..0907cc98b3d 100644
--- a/documentation/docfx/releases/1.59.0.md
+++ b/documentation/docfx/releases/1.59.0.md
@@ -1,32 +1,29 @@
-# Version 1.59.0
-
-> **Skia engine update to Chrome m59** · Released July 15, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.59.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.59.0)
-
-## Highlights
-
-This release brings a major Skia engine update to the `chrome/m59` branch, including updates to internal structure types to match the new native layout. SkiaSharp.Views received bug fixes, and SkiaSharp.Svg and SkiaSharp.Extended were moved to their own repository for independent release cadences.
+
-## New Features
+
-### Engine
-
-- **Skia updated to chrome/m59** — Major engine update with structural type changes to match the new native Skia layout.
-
-### Ecosystem
+# Version 1.59.0
-- **SkiaSharp.Svg & SkiaSharp.Extended split out** — These packages moved to [mono/SkiaSharp.Extended](https://github.com/mono/SkiaSharp.Extended) for independent versioning and release cycles.
-- **HarfBuzzSharp text shaping (preview)** — HarfBuzzSharp 1.4.6 and SkiaSharp.HarfBuzz provide text shaping via the `SKShaper` type, with `DrawShapedText` extension methods on `SKCanvas`.
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.59.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.59.0)
-## Bug Fixes
+## Highlights
-- Fixed issues in SkiaSharp.Views. ([#333](https://github.com/mono/SkiaSharp/issues/333), [#340](https://github.com/mono/SkiaSharp/issues/340))
+A small maintenance release. No tracked pull requests landed between `1.58.1.1` and this version; the build was published to refresh the packaged binaries.
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.58.1...v1.59.0)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.58.1.1...v1.59.0)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.59.0)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.59.0)
diff --git a/documentation/docfx/releases/1.59.1.1.md b/documentation/docfx/releases/1.59.1.1.md
index e7657bbcd5f..60b4c4e914c 100644
--- a/documentation/docfx/releases/1.59.1.1.md
+++ b/documentation/docfx/releases/1.59.1.1.md
@@ -1,21 +1,30 @@
-# Version 1.59.1.1
+
-A targeted bugfix release for SkiaSharp.Views that resolves an `ObjectDisposedException` that could occur during view rendering.
+
-## Breaking Changes
+# Version 1.59.1.1
-*None in this release.*
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.59.1.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.59.1.1)
-## Bug Fixes
+## Highlights
-- Resolved `ObjectDisposedException` in SkiaSharp.Views. ([#292](https://github.com/mono/SkiaSharp/issues/292))
+A servicing release published to refresh the SkiaSharp package line. There are no source changes since 1.59.1.
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.59.1...v1.59.1.1)
-- [NuGet Package](https://www.nuget.org/packages/SkiaSharp.Views/1.59.1.1)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.59.1.1)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.59.1.1)
diff --git a/documentation/docfx/releases/1.59.1.md b/documentation/docfx/releases/1.59.1.md
index 221bade4ed1..7a0994d21d7 100644
--- a/documentation/docfx/releases/1.59.1.md
+++ b/documentation/docfx/releases/1.59.1.md
@@ -1,19 +1,27 @@
-# Version 1.59.1
+
-A quick follow-up to 1.59.0 with fixes and improvements to the native marshalling layer. SkiaSharp.Views also received a reworked internal logic to use the updated structure members from the m59 engine update.
+
-## Breaking Changes
+# Version 1.59.1
-*None in this release.*
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.59.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.59.1)
-## Bug Fixes
+## Highlights
-- Fixes and improvements to the native marshalling layer introduced in 1.59.0.
-- Reworked SkiaSharp.Views logic to use the new structure members. ([#333](https://github.com/mono/SkiaSharp/issues/333))
+A routine servicing release. There are no user-facing code changes in this version.
## Links
diff --git a/documentation/docfx/releases/1.59.2.md b/documentation/docfx/releases/1.59.2.md
index 26f2052bc09..731fa7c2f74 100644
--- a/documentation/docfx/releases/1.59.2.md
+++ b/documentation/docfx/releases/1.59.2.md
@@ -1,32 +1,37 @@
-# Version 1.59.2
-
-> **Unity3D support, stream fixes, and GRContext access** · Released October 26, 2017 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.59.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.59.2)
+
-## Breaking Changes
+
-*None in this release.*
+# Version 1.59.2
-## New Features
+> **Memory fixes** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.59.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.59.2)
-### API Surface
+## Highlights
-- **`SKTypeface` from non-seekable streams** — `SKTypeface` can now be constructed from non-seekable streams or `SKData`, improving flexibility when loading fonts from network or resource sources.
-- **`GRContext` exposed on GL views** — The current `GRContext` is now accessible on the GL views in both SkiaSharp.Views and SkiaSharp.Views.Forms. ([#358](https://github.com/mono/SkiaSharp/issues/358))
+This patch release fixes memory management issues in `SKManagedStream`.
-### Platform
+## Bug Fixes
-- **Unity3D compatibility** — The managed SkiaSharp.dll now works with Unity3D.
-- **PackageReference migration** — Switched from `packages.config` to `` for cleaner project files.
+- **`SKManagedStream` memory fixes** — Resolves memory handling issues in the managed stream implementation. ([#386](https://github.com/mono/SkiaSharp/pull/386))
-## Bug Fixes
+## Platform Support
-- Resolved `ObjectDisposedException` during view rendering. ([#292](https://github.com/mono/SkiaSharp/issues/292))
-- Corrected `SKManagedStream` behavior, fixing bitmap loading over the network. ([#335](https://github.com/mono/SkiaSharp/issues/335))
-- Memory management fixes for `SKManagedStream`. ([#376](https://github.com/mono/SkiaSharp/issues/376), [#83](https://github.com/mono/SkiaSharp/issues/83))
+| Platform | What's New |
+|----------|-----------|
+| 🎨 Core API | `SKManagedStream` memory fixes |
## Links
diff --git a/documentation/docfx/releases/1.59.3.md b/documentation/docfx/releases/1.59.3.md
index 3411cafc962..4239bc452bd 100644
--- a/documentation/docfx/releases/1.59.3.md
+++ b/documentation/docfx/releases/1.59.3.md
@@ -1,23 +1,36 @@
-# Version 1.59.3
+
-This release restores the `SK3dView` type, which has been confirmed as a stable part of the Skia API. It was previously removed as its status was uncertain.
+
-## Breaking Changes
+# Version 1.59.3
-*None in this release.*
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.59.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.59.3)
+
+## Highlights
-## New Features
+A servicing release that republishes the `1.59.2` packages with no source code changes.
-### API Surface
+## Platform Support
-- **`SK3dView` re-added** — `SK3dView` has been added back to the API surface after confirmation that it is a stable part of Skia.
+| Platform | What's New |
+|----------|-----------|
+| 📦 General | Packaging/servicing only — no code changes |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.59.2...v1.59.3)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.59.3)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.59.3)
+- [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.59.3)
diff --git a/documentation/docfx/releases/1.60.0.md b/documentation/docfx/releases/1.60.0.md
index 028cca9f8aa..36c4a4e116f 100644
--- a/documentation/docfx/releases/1.60.0.md
+++ b/documentation/docfx/releases/1.60.0.md
@@ -1,91 +1,30 @@
-# Version 1.60.0
-
-> **Skia m60 upgrade with new platform support** · Released February 23, 2018 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.60.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.60.0)
-
-## Highlights
-
-SkiaSharp 1.60.0 upgrades to Skia milestone 60, bringing major improvements to GPU-backed rendering and texture-based surfaces. This release also introduces preview support for Apple watchOS and GTK#, and cleans up the API surface by removing previously obsoleted types and members.
-
-## Breaking Changes
-
-- Removed many obsolete types and members that were previously marked with `[Obsolete]`. Code referencing these removed APIs will need to migrate to their recommended replacements.
-- Removed confusing and incorrect `SKCanvas` overloads that could produce unexpected results.
-
-## New Features
-
-### Engine
-
-- **Skia m60 upgrade** — Updated the underlying Skia engine to milestone 60.
-
-### GPU & Rendering
-
-- **Texture-based surface improvements** — Major improvements to texture-backed surface support and older device compatibility.
-- **GPU-backed SKImage** — Improved support for creating and working with texture-backed `SKImage` instances.
-
-### Streams
+
-- **Color swizzling** — Added support for swizzling color channel order (RGB ↔ BGR).
-- **SKPixelSerializer / SKManagedPixelSerializer** — New types for custom image encoding workflows.
-- **SKBitmap improvements** — Improved bitmap copying, auto-locking, and decoding from Unicode paths on Windows.
+
-### Canvas
-
-- **New overloads** — Added numerous `SKCanvas` overloads to improve usability.
-- **9-patch and lattice drawing** — Improved support for 9-patch and image lattice rendering.
-- **SKPaint.BreakText fix** — Now properly returns the number of characters and the split text.
-
-### Documents
-
-- **XPS close fix** — XPS documents are now correctly closed.
-- **Unicode path support** — Documents can now be created with Unicode paths on Windows.
-
-### Platform — Views
-
-- **SKGLTextureView** — New Android view for GPU-accelerated texture-based rendering.
-- **SKWidget** — New GTK# widget for SkiaSharp rendering *(preview)*.
-- **WPF DPI fix** — WPF now creates the backing bitmap with the correct DPI.
-- **SKControl constructors** — Additional constructors to control the underlying OpenGL configuration.
-
-### Platform — Xamarin.Forms
-
-- **Xamarin.Forms v2.5** — Updated to Xamarin.Forms v2.5.
-- **UWP touch events** — Improved touch event handling on UWP.
-- **SKGLView on Android** — Switched the backing view to the new texture-based `SKGLTextureView`.
-
-### Text Shaping *(preview)*
-
-- **HarfBuzzSharp 1.4.6** — HarfBuzz text shaping engine bindings.
-- **SkiaSharp.HarfBuzz 1.60.0** — Adds `SKShaper` for text shaping and `DrawShapedText` extension methods on `SKCanvas`.
-
-## Bug Fixes
+# Version 1.60.0
-- Fixed `SKPaint.BreakText` to properly return character count and split text.
-- Fixed XPS documents not being correctly closed.
-- Fixed WPF backing bitmap using incorrect DPI.
-- Improved memory management across several types.
+> **Servicing release** · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.60.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.60.0)
-## Platform Support
+## Highlights
-| Platform | What's New |
-|----------|-----------|
-| 🍎 watchOS | New preview support for Apple watchOS |
-| 🤖 Android | New `SKGLTextureView`; `SKGLView` now uses texture-based rendering |
-| 🐧 Linux / GTK# | New `SKWidget` for GTK# *(preview)* |
-| 🪟 Windows / WPF | DPI fix for backing bitmap; improved UWP touch events |
-| 🪟 Windows | Unicode path support for streams, images, and documents |
+A servicing release with no tracked code changes over the previous version. Update to pick up the latest packaged binaries.
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.59.3...v1.60.0)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.60.0)
-- [SkiaSharp.Views](https://www.nuget.org/packages/SkiaSharp.Views/1.60.0)
-- [SkiaSharp.Views.Forms](https://www.nuget.org/packages/SkiaSharp.Views.Forms/1.60.0)
-- [HarfBuzzSharp](https://www.nuget.org/packages/HarfBuzzSharp/1.4.6)
-- [SkiaSharp.HarfBuzz](https://www.nuget.org/packages/SkiaSharp.HarfBuzz/1.60.0)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.60.0)
diff --git a/documentation/docfx/releases/1.60.1.md b/documentation/docfx/releases/1.60.1.md
index 7d40dbbac6e..9f4acbe4e4d 100644
--- a/documentation/docfx/releases/1.60.1.md
+++ b/documentation/docfx/releases/1.60.1.md
@@ -1,59 +1,35 @@
-# Version 1.60.1
-
-> **Tizen support and build system overhaul** · Released May 22, 2018 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.60.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.60.1)
-
-## Highlights
-
-This release introduces preview support for Tizen OS across SkiaSharp, Views, and Xamarin.Forms. It also includes a major build system overhaul that moves almost all native code into the mono/skia repository and eliminates the managed tooling requirement for Windows and Linux native builds.
-
-## Breaking Changes
+
-### API Additions
+
-- **SKAutoCoInitialize** — New helper type to assist in initializing COM on supported platforms.
-- **GRGlInterface.CreateNativeEvasInterface()** — Creates a GL interface from an Evas GL object for Tizen GPU rendering.
-- **ISKCanvasViewController** — Now public, allowing additional platforms to be added more easily.
+# Version 1.60.1
-### Build System
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.60.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.60.1)
-- **Build system overhaul** — Major restructuring of the build pipeline.
-- **Simplified native builds** — Building libSkiaSharp for Windows and Linux no longer requires any managed tooling.
-- **Native code consolidation** — Almost all native code has been moved into the [mono/skia](https://github.com/mono/skia) repository.
+## Highlights
-## Bug Fixes
+This servicing release opens up internal types so third-party Xamarin.Forms platform backends can build against SkiaSharp.
-- Fixed a bug when copying bitmaps.
-- Fixed a bug when opening `SKDocument`.
-- Fixed a bug when disposing objects.
-- Fixed a bug in Android's `GLTextureView` where the stack trace was lost.
-- Fixed a bug in Android's `GLTextureView` where pausing the app would cause a crash.
-- Fixed a bug in iOS where color space information was lost.
-- Fixed a bug in GTK#'s `SKWidget` where it would try to swizzle too many pixels.
+## New Features
-## Platform Support
+### API Surface
-| Platform | What's New |
-|----------|-----------|
-| 📱 Tizen | New preview support for SkiaSharp, Views, and Forms |
-| 🤖 Android | Fixed `GLTextureView` stack trace loss and pause crash |
-| 🍎 iOS | Fixed color space information loss |
-| 🐧 Linux | Native build no longer requires managed tooling |
-| 🪟 Windows | Native build no longer requires managed tooling |
-| 🖥️ GTK# | Fixed pixel swizzle bug in `SKWidget` |
+- **Public types for third-party Xamarin.Forms platforms** — Exposes several previously internal types so 3rd-party Xamarin.Forms platform backends can integrate with SkiaSharp. ([#522](https://github.com/mono/SkiaSharp/pull/522))
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.60.0...v1.60.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.60.1)
-- [Milestone](https://github.com/mono/SkiaSharp/milestone/26)
diff --git a/documentation/docfx/releases/1.60.2.md b/documentation/docfx/releases/1.60.2.md
index 20e0e088352..3171146fd9f 100644
--- a/documentation/docfx/releases/1.60.2.md
+++ b/documentation/docfx/releases/1.60.2.md
@@ -1,33 +1,27 @@
-# Version 1.60.2
-
-> **New drawing primitives and platform fixes** · Released June 28, 2018 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.60.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.60.2)
-
-## Highlights
-
-This release introduces `SKNWayCanvas` for drawing to multiple canvases simultaneously and `SKRoundRect` for more complex rounded rectangle support. It also adds flexible encoding overloads to `SKPixmap` and resolves several platform-specific linking and rendering issues.
+
-## New Features
+
-### Drawing
-
-- **SKNWayCanvas** — Draw to multiple canvases simultaneously, enabling broadcast-style rendering to several targets at once.
-- **SKRoundRect** — Draw more complex rounded rectangles with per-corner radius control.
-
-### Encoding
+# Version 1.60.2
-- **SKPixmap.Encode() overloads** — Additional `Encode()` overloads on `SKPixmap` for finer control when encoding to PNG, JPEG, and WEBP formats.
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.60.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.60.2)
-## Bug Fixes
+## Highlights
-- Fixed UWP library being linked to wrong libraries ([#566](https://github.com/mono/SkiaSharp/issues/566), [#536](https://github.com/mono/SkiaSharp/issues/536))
-- Fixed iOS not being able to AOT compile ([#547](https://github.com/mono/SkiaSharp/issues/547))
-- Fixed slow rendering in GTK# `SKWidget` ([#534](https://github.com/mono/SkiaSharp/issues/534))
-- Fixed memory leak in `SKXamlCanvas` on UWP and Xamarin.Forms ([#429](https://github.com/mono/SkiaSharp/issues/429))
-- Upgraded projects to new SDK-style format; removed shared projects and enabled Android builds on Windows
+A servicing release. No pull requests were recorded in this version's diff range (`release/1.60.1..release/1.60.2`), so there are no itemised changes to report.
## Links
diff --git a/documentation/docfx/releases/1.60.3.md b/documentation/docfx/releases/1.60.3.md
index c44be15575f..f2a6cf3d8cf 100644
--- a/documentation/docfx/releases/1.60.3.md
+++ b/documentation/docfx/releases/1.60.3.md
@@ -1,21 +1,28 @@
-# Version 1.60.3
+
-A small patch release fixing native asset stripping, UWP canvas rendering, and touch input handling on Android and Tizen.
+
-## Breaking Changes
+# Version 1.60.3
-*None in this release.*
+> **Released August 13, 2018** · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.60.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.60.3)
-## Bug Fixes
+## Highlights
-- Fixed case where some native assets were not being stripped properly ([#573](https://github.com/mono/SkiaSharp/issues/573), [#584](https://github.com/mono/SkiaSharp/issues/584))
-- Improvements when building Tizen apps ([#598](https://github.com/mono/SkiaSharp/issues/598))
-- **Views:** Fixed issue with UWP `SKXamlCanvas` ([#582](https://github.com/mono/SkiaSharp/issues/582), [#585](https://github.com/mono/SkiaSharp/issues/585))
-- **Forms:** Fixed issue with touch locations on Android and Tizen ([#581](https://github.com/mono/SkiaSharp/issues/581), [#589](https://github.com/mono/SkiaSharp/issues/589))
+A small servicing release that rolls up documentation fixes for the 1.60 series. There are no API or behavioural changes in this version.
## Links
diff --git a/documentation/docfx/releases/1.68.0.md b/documentation/docfx/releases/1.68.0.md
index 3d4c1464a13..0e6100a3cdf 100644
--- a/documentation/docfx/releases/1.68.0.md
+++ b/documentation/docfx/releases/1.68.0.md
@@ -1,88 +1,53 @@
+
+
+
+
# Version 1.68.0
-> **Major Skia engine upgrade** · Released December 4, 2018 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.0)
+> **Build & packaging release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.0)
## Highlights
-This release upgrades SkiaSharp to **Skia milestone 68**, bringing a completely rewritten GPU surface creation pipeline, significant text API improvements, and major file I/O performance gains. The GPU backend changes modernize hardware-accelerated rendering across all platforms, while new `SKTextBlob` support lays the groundwork for advanced text layout. Linux users gain first-class NuGet packaging, and Windows Classic apps no longer require a separate Visual C++ Runtime install.
-
-## Breaking Changes
-
-### GPU Surface Creation
-
-- **`GRBackendRenderTargetDesc` deprecated** — Replaced by `GRBackendRenderTarget`. The new type provides a cleaner, more explicit API for describing render targets. See the [GPU migration guide](changelogs/SkiaSharp/1.68.0/gpu-migration.md) for details.
-- **`GRBackendTextureDesc` deprecated** — Replaced by `GRBackendTexture`. Update all GPU texture creation code to use the new type.
-- **`SKPaintGLSurfaceEventArgs` updated** — Event args now surface the new GPU types. Existing handlers should migrate to the new properties.
-
-### Color & Pixel Formats
-
-- **8-bit indexed color type (`Index8`) removed** — Skia m68 dropped support for indexed color. Convert indexed images to a full-color type (`Rgba8888`, `Bgra8888`, etc.) before use.
-- **`SKColorTable` removed** — Color tables are no longer supported. Any code referencing `SKColorTable` must be updated to use direct pixel formats.
-
-### Surface Properties
-
-- **`SKSurfaceProps` struct superseded** — Use the new `SKSurfaceProperties` class instead. The class provides the same functionality with a richer API.
-
-### Views & Event Handling
-
-- **macOS/iOS/tvOS delegates deprecated** — Use events or override `OnPaintSurface` instead.
-- **Android renderer usage deprecated** — Use events or override `OnPaintSurface` instead.
+This release statically links the Windows native binaries for more reliable, dependency-free deployment, alongside a substantial overhaul of the Linux and pull-request CI pipelines.
## New Features
-### Engine
-
-- **Skia m68 upgrade** — Brings all upstream Skia improvements, optimizations, and bug fixes from milestone 68.
-- **Major file I/O performance improvements** — Decoding, encoding, and processing operations are significantly faster.
-
-### GPU & Rendering
-
-- **Rewritten hardware-accelerated surface creation** — The entire GPU pipeline has been modernized with `GRBackendRenderTarget` and `GRBackendTexture`, providing better device compatibility and clearer semantics. See the [GPU migration guide](changelogs/SkiaSharp/1.68.0/gpu-migration.md).
-- **UWP GPU view rewritten** — The hardware-accelerated view now supports more devices and includes multiple bug fixes.
-- **Pixel scaling** — `SKPixmap`, `SKImage`, and `SKBitmap` all support `ScalePixels` for high-quality image resizing.
-
-### Text
-
-- **`SKTextBlob` and `SKTextBlobBuilder`** — First-class text blob support, enabling efficient batched text rendering and laying the foundation for advanced text layout.
-- **Expanded `SKPaint` text API** — New methods: `BreakText`, `GetGlyphs`, `CountGlyphs`, `ContainsGlyphs`, `GetGlyphWidths`, `GetTextIntercepts`, `GetPositionedTextIntercepts`, `GetHorizontalTextIntercepts`.
-- **Expanded `SKTypeface` text API** — New methods: `GetGlyphs`, `CountGlyphs`.
-
-### Fonts
-
-- **`SKFontManager` enhancements** — Load entire font family sets via `SKFontStyleSet` and match characters more precisely.
-
-### Images & Documents
-
-- **Easier `SKImage` creation** — New overloads simplify image decoding and creation from various sources.
-- **`SKDocumentPdfMetadata`** — New creation options for PDF document metadata (title, author, subject, etc.).
-
### Platform
-- **Linux NuGet package** — New `SkiaSharp.NativeAssets.Linux` package ships pre-built Ubuntu 16.04 amd64 binaries, with support for most Debian-based distributions. ([#312](https://github.com/mono/SkiaSharp/issues/312))
-- **Static VC++ Runtime on Windows** — The Visual C++ Runtime is now statically linked on Windows Classic, eliminating the need for a separate runtime installer.
-- **Android `SKGLView` transparency** — The Xamarin.Forms `SKGLView` on Android is now a transparent view.
+- **Statically linked Windows binaries** — The Windows native libraries are now statically linked, removing external runtime dependencies and simplifying deployment. ([#662](https://github.com/mono/SkiaSharp/pull/662))
-### API Surface
+### Build & CI
-- **New method overloads** — Additional convenience overloads for surfaces, shaders, and effects across the API.
-- **Preferred `OnPaintSurface` pattern** — All views now prefer `OnPaintSurface` as the primary override point for drawing.
+- **Linux CI overhaul** — Reworked the Linux build pipeline for more reliable native builds. ([#635](https://github.com/mono/SkiaSharp/pull/635))
+- **PR builder and Groovy CI script** — Added a pull-request builder and Groovy-based CI scripting, plus general CI improvements. ([#638](https://github.com/mono/SkiaSharp/pull/638), [#616](https://github.com/mono/SkiaSharp/pull/616), [#615](https://github.com/mono/SkiaSharp/pull/615))
-## Bug Fixes
+## Platform Support
-- Multiple bug fixes across the core library and platform views.
-- UWP hardware-accelerated view stability and device compatibility improvements.
+| Platform | What's New |
+|----------|-----------|
+| 🪟 Windows | Statically linked native binaries |
+| 🐧 Linux | Reworked CI build pipeline |
+| 🏗️ Build/CI | PR builder, Groovy CI scripting |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.60.3...v1.68.0)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.68.0)
-- [Project Board](https://github.com/mono/SkiaSharp/projects/18)
-- [Milestone](https://github.com/mono/SkiaSharp/milestone/30)
-
----
-
-## Preview 28 (November 14, 2018)
-
-Release candidate build containing all features and fixes that shipped in the stable 1.68.0 release.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.60.3...v1.68.0-preview28)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.68.0)
diff --git a/documentation/docfx/releases/1.68.1.1.md b/documentation/docfx/releases/1.68.1.1.md
index 44b9fce8fcd..8e26cced77a 100644
--- a/documentation/docfx/releases/1.68.1.1.md
+++ b/documentation/docfx/releases/1.68.1.1.md
@@ -1,50 +1,79 @@
+
+
+
+
# Version 1.68.1.1
-> **Windows Nano Server support and security fixes** · Released December 19, 2019 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.1.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.1.1)
+> **Bug-fix release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.1.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.1.1)
## Highlights
-This release brings first-class Windows Nano Server support for .NET Core containers, fixes critical memory buffer overflow bugs in image decoding, and includes community-driven improvements to memory management and matrix operations.
+A focused patch release that corrects image decoding, hardens HarfBuzz string handling, and picks up upstream buffer-overflow fixes. Community contributors [@bender2k14](https://github.com/bender2k14) and [@daltonks](https://github.com/daltonks) landed fixes for sample rotation math and weak-reference cleanup.
-## Breaking Changes
+## New Features
-*None in this release.*
+### Platform
-## New Features
+- **buildTransitive `.targets`** — Ships the package `.targets` file in the `buildTransitive` folder so it flows correctly to transitive consumers. ([#1057](https://github.com/mono/SkiaSharp/pull/1057))
+- **Platform ref assemblies** — Ensures the required assemblies are present in the platform reference folders. ([#1044](https://github.com/mono/SkiaSharp/pull/1044))
-### Platform Support
+## Security
-- **Windows Nano Server** — Added the `SkiaSharp.NativeAssets.NanoServer` package, enabling SkiaSharp to run in standard Windows .NET Core Docker images. ([#676](https://github.com/mono/SkiaSharp/issues/676))
+- **Buffer-overflow fixes** — Cherry-picks upstream fixes for buffer-overflow bugs. ([#1037](https://github.com/mono/SkiaSharp/pull/1037))
## Bug Fixes
-- Fixed memory buffer overflow bugs when decoding some image files
-- Fixed memory leak with allocations ❤️ [@daltonks](https://github.com/daltonks)
-- Improvements to image decoding with `SKImage`
-- Fixed .NET Standard assemblies being referenced instead of platform-specific assemblies in SkiaSharp.Views.Forms
-- Fixed string marshaling issue in HarfBuzzSharp
+- **Correct image decoding** — Fixes incorrect decoding of certain images. ([#1055](https://github.com/mono/SkiaSharp/pull/1055))
+- **HarfBuzz strings** — Resolves issues with HarfBuzz string handling. ([#1034](https://github.com/mono/SkiaSharp/pull/1034))
+- **Weak-reference cleanup** — ❤️ [@daltonks](https://github.com/daltonks) makes `TryRemove` clean up instance `WeakReference`s correctly. ([#1039](https://github.com/mono/SkiaSharp/pull/1039))
+- **Rotation matrix identity** — ❤️ [@bender2k14](https://github.com/bender2k14) starts the rotation matrix as the identity matrix in the animated sample. ([#1062](https://github.com/mono/SkiaSharp/pull/1062))
+- **Sample cleanup** — ❤️ [@bender2k14](https://github.com/bender2k14) removes an unused `TaskScheduler` argument from `AnimatedSampleBase`. ([#1063](https://github.com/mono/SkiaSharp/pull/1063))
+- **GPU sampling** — Avoids going straight for the maximum sample count. ([#1060](https://github.com/mono/SkiaSharp/pull/1060))
-## Improvements
+## Platform Support
-- Matrix improvements ❤️ [@bender2k14](https://github.com/bender2k14)
+| Platform | What's New |
+|----------|-----------|
+| 🎨 Core API | Correct image decoding, HarfBuzz string fixes, buffer-overflow hardening |
+| 📦 General | `buildTransitive` `.targets`, platform ref assemblies |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@daltonks](https://github.com/daltonks) | Memory leak fix |
-| [@bender2k14](https://github.com/bender2k14) | Matrix improvements |
+| [@bender2k14](https://github.com/bender2k14) | Fixed the sample rotation matrix and removed an unused `TaskScheduler` argument |
+| [@daltonks](https://github.com/daltonks) | Fixed `WeakReference` cleanup in `TryRemove` |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.1...v1.68.1.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.68.1.1)
-- [Milestone](https://github.com/mono/SkiaSharp/milestone/32)
-
----
-
-## Preview Build 9 (December 10, 2019)
-
-Initial preview of 1.68.1.1 with Nano Server support and memory-related fixes.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/releases/tag/v1.68.1.1)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.68.1.1)
diff --git a/documentation/docfx/releases/1.68.1.md b/documentation/docfx/releases/1.68.1.md
index 926def303a4..3a8dc0651fe 100644
--- a/documentation/docfx/releases/1.68.1.md
+++ b/documentation/docfx/releases/1.68.1.md
@@ -1,92 +1,158 @@
+
+
+
+
# Version 1.68.1
-> **Memory reliability and .NET Core 3.0 support** · Released November 22, 2019 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.1)
+> **Feature & infrastructure release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.1)
## Highlights
-This release focuses on memory reliability, fixing several issues with managed-native interop and
-static instance lifetimes. It also brings performance improvements via Clang on Win32, new
-`Span` overloads across SkiaSharp and HarfBuzzSharp, and a significant expansion of the
-HarfBuzz binding surface.
-
-## Breaking Changes
-
-*None in this release.*
+A large release that modernizes the type marshalling layer, adds `Span` support across the data and text APIs, and introduces a WPF backend for Xamarin.Forms. HarfBuzz and HarfBuzzSharp received a series of updates and new font-function bindings from [@Gillibald](https://github.com/Gillibald), and the project moved onto a brand-new Azure DevOps pipeline with a custom P/Invoke generator. Community contributions from [@alexandrvslv](https://github.com/alexandrvslv), [@Gillibald](https://github.com/Gillibald), [@Odirb](https://github.com/Odirb), [@danien](https://github.com/danien) and [@newky2k](https://github.com/newky2k) shaped this release.
## New Features
-### Memory & Interop
+### Engine
-- **Managed-native delegate interop overhaul** — Removed intermediate dictionary for delegate
- interop, improving performance and reliability.
-- **Clang on Win32** — Switched native builds to Clang for improved performance on Windows.
+- **HarfBuzz updates** — Rolls HarfBuzz forward through v2.5.2 and v2.5.3 for improved text shaping. ❤️ [@Gillibald](https://github.com/Gillibald) ([#872](https://github.com/mono/SkiaSharp/pull/872), [#904](https://github.com/mono/SkiaSharp/pull/904))
-### New APIs
+### GPU & Rendering
-- **`SKDrawable` bindings** — Full bindings for the Skia drawable type. ❤️ @charlenni ([#940](https://github.com/mono/SkiaSharp/pull/940))
-- **`SKColorSpace` APIs** — Added colorspace creation and management APIs.
-- **`SKRunBuffer` / `SKHorizontalRunBuffer` / `SKPositionedRunBuffer`** — New run buffer types for `SKTextBlob` and `SKTextBlobBuilder`.
-- **`SKShader` from `SKPicture`** — Create shaders directly from recorded pictures. ❤️ @alexandrvslv
-- **Additional `SKRegion` members** — Expanded region operations. ❤️ @vexx32x
-- **Additional `SKPaint` and `SKMatrix` members** — More paint and matrix helpers. ❤️ @MarchingCube
-- **`Span` overloads** — Added `Span` alternatives alongside existing `byte[]` and `IntPtr` overloads.
+- **`SKPictureShader` binding** — Exposes picture-based shaders for tiling and repeating recorded drawing. ❤️ [@alexandrvslv](https://github.com/alexandrvslv) ([#973](https://github.com/mono/SkiaSharp/pull/973))
-### Packages & Platform Support
+### API Surface
-- **`SkiaSharp.NativeAssets.Linux.NoDependencies`** — New NuGet package for Linux environments without `libfontconfig`.
-- **View packages split** — `SkiaSharp.Views` split into dedicated packages: `SkiaSharp.Views.WPF`, `SkiaSharp.Views.WindowsForms`, `SkiaSharp.Views.Gtk3`, `SkiaSharp.Views.Gtk2`, and `SkiaSharp.Views.Desktop.Common`.
-- **GTK# 3 support** — New `SKDrawingArea` widget for GTK# 3 applications.
+- **`Span` for data, bitmap data and text blobs** — Adds span-based overloads to reduce allocations and copies when working with raw buffers. ([#865](https://github.com/mono/SkiaSharp/pull/865))
+- **`SKTypeface.IsFixedPitch`** — Adds a binding to query whether a typeface is monospaced. ([#1019](https://github.com/mono/SkiaSharp/pull/1019))
+- **Reworked managed-native types** — Overhauls the managed/native type plumbing for safer, more consistent interop. ([#900](https://github.com/mono/SkiaSharp/pull/900))
-### Xamarin.Forms
+### Text & Fonts
-- **WPF support** — Initial WPF backend via `SkiaSharp.Views.Forms.WPF`.
-- **Updated to Xamarin.Forms v4.x** — Compatibility with the latest Forms release.
-- **Mouse wheel support** — `SKCanvasView` and `SKGLView` now handle mouse wheel events. ❤️ @charlenni
+- **HarfBuzzSharp font functions** — Adds font-function bindings to HarfBuzzSharp for finer-grained shaping control. ❤️ [@Gillibald](https://github.com/Gillibald) ([#881](https://github.com/mono/SkiaSharp/pull/881))
+- **HarfBuzzSharp 2.6.1** — Updates HarfBuzzSharp to track the latest HarfBuzz. ❤️ [@Gillibald](https://github.com/Gillibald) ([#929](https://github.com/mono/SkiaSharp/pull/929))
+- **`int` unicode overloads** — Adds integer code-point overloads for a more consistent shaping API. ❤️ [@Gillibald](https://github.com/Gillibald) ([#972](https://github.com/mono/SkiaSharp/pull/972))
+- **Load HarfBuzz face by table data** — Allows constructing a face directly from raw table data. ([#862](https://github.com/mono/SkiaSharp/pull/862))
-### HarfBuzz
+### Platform
-- **Updated to HarfBuzz 2.6.1** — Major version bump with new APIs. ❤️ @Gillibald
-- **Expanded HarfBuzz bindings** — Many new APIs for a more complete binding surface. ❤️ @Gillibald
-- **`Span` overloads for HarfBuzzSharp** — Consistent with SkiaSharp's new span support. ❤️ @Gillibald
+- **WPF backend for Xamarin.Forms** — Adds a WPF rendering backend to `SkiaSharp.Views.Forms`. ([#917](https://github.com/mono/SkiaSharp/pull/917))
+- **watchOS `arm64_32` and bitcode** — Builds the `arm64_32` architecture for watchOS and enables bitcode for watchOS and tvOS. ([#967](https://github.com/mono/SkiaSharp/pull/967), [#971](https://github.com/mono/SkiaSharp/pull/971))
+- **fontconfig-free Linux builds** — Adds support for building SkiaSharp without fontconfig. ([#821](https://github.com/mono/SkiaSharp/pull/821))
+- **Linux export hiding** — Adds a build version script that hides the exported symbols of bundled dependencies on Linux. ❤️ [@Gillibald](https://github.com/Gillibald) ([#984](https://github.com/mono/SkiaSharp/pull/984))
+- **Split desktop projects and packages** — Separates the desktop projects and packages for cleaner platform targeting. ([#899](https://github.com/mono/SkiaSharp/pull/899))
## Bug Fixes
-- Fixed several issues with static instances of native objects being accidentally destroyed.
-- Fixed several invalid memory operations in managed-native interop.
-- Fixed `SKDocument` underlying stream being destroyed prematurely.
-- Fixed typeface managed stream not being released correctly.
-- Fixed incorrect native library version in Full Framework Xamarin.Mac.
-- Fixed Android emulator rendering incorrect colors. ❤️ @inforithmics
-- Fixed `System.Drawing.Bitmap` to `SKPixmap` conversion. ❤️ @Odirb
-- Improved `SKSwapChainPanel` stability on UWP.
+- **Fixed bad colors** — Corrects incorrect color output in rendered content. ([#1023](https://github.com/mono/SkiaSharp/pull/1023))
+- **Freed memory when a view is detached** — Releases resources when the view is detached, fixing a leak (#1004). ([#1005](https://github.com/mono/SkiaSharp/pull/1005))
+- **Fixed an `SKRoundRect` memory leak** — Stops `SKRoundRect` from leaking native memory. ([#995](https://github.com/mono/SkiaSharp/pull/995))
+- **Improved UWP GPU view stability** — Hardens the UWP GPU view against intermittent failures. ([#1024](https://github.com/mono/SkiaSharp/pull/1024))
+- **Fixed the iOS canvas implementation** — Corrects the iOS canvas behavior. ([#879](https://github.com/mono/SkiaSharp/pull/879), [#1022](https://github.com/mono/SkiaSharp/pull/1022))
+- **Fixed transparent-bitmap artifacts in `ToSKPixmap`** — Resolves display artifacts when converting transparent bitmaps (#849). ❤️ [@Odirb](https://github.com/Odirb) ([#863](https://github.com/mono/SkiaSharp/pull/863))
+- **Raster views no longer allocate 0 bytes** — Prevents zero-byte allocations in raster views (#759). ([#761](https://github.com/mono/SkiaSharp/pull/761))
+- **Corrected reference-only color spaces** — Fixes color spaces that were created as references only. ([#922](https://github.com/mono/SkiaSharp/pull/922))
-## Maintenance
+Plus a new custom P/Invoke generator, a fresh Azure DevOps build pipeline, and numerous CI and documentation improvements.
-- P/Invoke layer is now generated along with structs and enums.
-- Documentation moved to the [SkiaSharp-API-docs](https://github.com/mono/SkiaSharp-API-docs) repository.
-- Build improvements. ❤️ @danien
-- Documentation improvements. ❤️ @HankiDesign
+## Platform Support
+
+| Platform | What's New |
+|----------|-----------|
+| 🍎 Apple | watchOS `arm64_32`, bitcode for watchOS/tvOS, iOS canvas fix |
+| 🪟 Windows | WPF backend for Xamarin.Forms, UWP GPU view stability |
+| 🐧 Linux | fontconfig-free builds, hidden dependency exports |
+| 🎨 Core API | `Span` overloads, `SKPictureShader`, HarfBuzz font funcs |
## Community Contributors ❤️
| Contributor | What They Did |
-|-------------|---------------|
-| [@charlenni](https://github.com/charlenni) | `SKDrawable` bindings, mouse wheel support in Forms |
-| [@Gillibald](https://github.com/Gillibald) | HarfBuzz 2.6.1 upgrade, expanded APIs, `Span` overloads |
-| [@vexx32x](https://github.com/vexx32x) | Additional `SKRegion` members |
-| [@MarchingCube](https://github.com/MarchingCube) | Additional `SKPaint` and `SKMatrix` members |
-| [@alexandrvslv](https://github.com/alexandrvslv) | `SKShader` from `SKPicture` |
-| [@inforithmics](https://github.com/inforithmics) | Android emulator color fix |
-| [@Odirb](https://github.com/Odirb) | `System.Drawing.Bitmap` conversion fix |
-| [@danien](https://github.com/danien) | Build improvements |
-| [@HankiDesign](https://github.com/HankiDesign) | Documentation improvements |
-
-## Preview Builds
-
-Six preview builds (147, 153, 165, 169, 170, 172) were published between September and November 2019 leading up to this stable release.
+|-------------|--------------|
+| [@Gillibald](https://github.com/Gillibald) | HarfBuzz/HarfBuzzSharp updates, font-function bindings, `int` unicode overloads, Linux export hiding |
+| [@alexandrvslv](https://github.com/alexandrvslv) | Bound `SKPictureShader` |
+| [@Odirb](https://github.com/Odirb) | Fixed transparent-bitmap artifacts in `ToSKPixmap` |
+| [@danien](https://github.com/danien) | Aligned native artifact naming with the Azure build |
+| [@newky2k](https://github.com/newky2k) | Added NuGet validation to the build |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.0...v1.68.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.68.1)
-- [Milestone](https://github.com/mono/SkiaSharp/milestone/19)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.68.1)
diff --git a/documentation/docfx/releases/1.68.2.1.md b/documentation/docfx/releases/1.68.2.1.md
index 578aaf637db..bdd95afa03d 100644
--- a/documentation/docfx/releases/1.68.2.1.md
+++ b/documentation/docfx/releases/1.68.2.1.md
@@ -1,20 +1,40 @@
+
+
+
+
# Version 1.68.2.1
-> **Packaging fix for strong naming** · Released May 2, 2020 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.2.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.2.1)
+> **Assembly signing fix** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.2.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.2.1)
## Highlights
-A small patch release to fix assemblies not being strong named properly.
+This servicing release ensures the shipped managed assemblies are correctly signed.
-## Breaking Changes
+## Bug Fixes
-*None in this release.*
+- **Assemblies are now properly signed** — Ensures the managed assemblies are in fact strong-name signed before packaging. ([#1268](https://github.com/mono/SkiaSharp/pull/1268))
-## Bug Fixes
+## Platform Support
-- Fixed assemblies not being strong named properly ([#1267](https://github.com/mono/SkiaSharp/issues/1267))
+| Platform | What's New |
+|----------|-----------|
+| 📦 General | Correctly signed assemblies |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2...v1.68.2.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.68.2.1)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.68.2.1)
diff --git a/documentation/docfx/releases/1.68.2.md b/documentation/docfx/releases/1.68.2.md
index 8ce82fcbb3d..ca512bcc831 100644
--- a/documentation/docfx/releases/1.68.2.md
+++ b/documentation/docfx/releases/1.68.2.md
@@ -1,141 +1,178 @@
+
+
+
+
# Version 1.68.2
-> **Rich API additions and performance improvements** · Released April 30, 2020 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.2)
+> **Stability, API surface, and new platform views** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.2)
## Highlights
-This release brings a wealth of new drawing APIs to SKCanvas, floating-point color support via SKColorF, and significant performance gains from removing all use of reflection. Structs across the library now implement `IEquatable` with proper equality operators, and memory management has been improved with array pooling and lifetime fixes.
-
-## Breaking Changes
-
-*None in this release.*
+A large release that expands the API surface (`SKColorF` overloads, more `SKImage`, `SKRegion`, and `SKCanvas` members, and writable pixel spans), introduces GTK views for Xamarin.Forms, and resolves a broad set of view disposal, concurrency, and memory issues. Nine community contributors — including [@Gillibald](https://github.com/Gillibald), [@mscherotter](https://github.com/mscherotter), and [@ziriax](https://github.com/ziriax) — landed user-facing improvements across the views and bindings.
## New Features
-### Drawing & Canvas
-
-- **SKColorF** — Added floating-point color type with overloads across the API for high-precision color workflows.
-- **SKCanvas.DrawAtlas** — Draw sprite atlases with per-sprite transforms and colors.
-- **SKCanvas.DrawPatch** — Draw Coons patches for advanced gradient meshes.
-- **SKCanvas.DrawArc** — Draw arcs directly on the canvas.
-- **SKCanvas.DrawRoundRectDifference** — Draw the difference between two rounded rectangles.
-
-### Imaging & Shaders
+### Engine
-- **SKImage.ToRasterImage() overload** — Request explicit pixel data loading when converting to a raster image.
-- **SKImage.ToTextureImage** — Copy a CPU-backed image to a GPU texture.
-- **ToShader() extensions** — Added `ToShader()` to `SKBitmap`, `SKImage`, and `SKPicture` for convenient shader creation.
-- **Perlin noise shaders** — Improved support for Perlin noise shader generation.
+- **Updated expat to 2.2.9** — Refreshes the bundled expat native dependency. ([#1214](https://github.com/mono/SkiaSharp/pull/1214))
+- **Buffer overflow fixes** — Cherry-picks upstream fixes for buffer overflow bugs. ([#1037](https://github.com/mono/SkiaSharp/pull/1037))
-### Geometry & Math
+### GPU & Rendering
-- **SKMatrix helpers** — Added `Concat`, `PreConcat`, and `PostConcat` members for cleaner matrix composition.
-- **SKRegion operations** — Added "quick" reject/contains members and region iterators for faster spatial queries.
+- **Improved Perlin noise shader** — Adds an `SKShader` binding to create improved Perlin noise. ([#1056](https://github.com/mono/SkiaSharp/pull/1056))
-### Struct Improvements
+### API Surface
-- **IEquatable\** — All structs now implement `IEquatable` with proper `Equals`, `GetHashCode`, and equality operators.
-- **Readonly getters** — All struct getters are now `readonly` for better performance and correctness.
-- **EditorBrowsable(Never)** — Obsolete members are now hidden from IntelliSense.
+- **Writable pixel spans** — Exposes a generic, writable `Span` over pixel data. ([#1242](https://github.com/mono/SkiaSharp/pull/1242))
+- **`SKColorF` overloads** — Adds `SKColorF` overloads with `SKColorSpace` support. ([#1116](https://github.com/mono/SkiaSharp/pull/1116))
+- **More `SKImage` members** — Rounds out the `SKImage` API. ([#1126](https://github.com/mono/SkiaSharp/pull/1126))
+- **Complete `SKRegion` members** — Adds the remaining `SKRegion` members. ([#1125](https://github.com/mono/SkiaSharp/pull/1125))
+- **More `SKCanvas` members** — Adds additional members to `SKCanvas`. ([#1090](https://github.com/mono/SkiaSharp/pull/1090))
+- **Reflection-free object creation** — Removes reflection usage from `SKObject` creation for better performance. ❤️ [@Gillibald](https://github.com/Gillibald) ([#1209](https://github.com/mono/SkiaSharp/pull/1209))
+- **More .NET-friendly method names** — Renames some methods to follow .NET conventions. ([#1255](https://github.com/mono/SkiaSharp/pull/1255))
+- **Nullable merge filter overloads** — Merge filter factory overloads now accept `null` arguments. ❤️ [@ziriax](https://github.com/ziriax) ([#1185](https://github.com/mono/SkiaSharp/pull/1185))
-### Views & Platform Extensions
+### Platform
-- **GTK extensions** — Added extension methods for `SKRect`/`SKPoint`/`SKSize` conversion and image type conversions (`SKImage`/`SKBitmap`/`SKPixmap` ↔ `Pixbuf`).
-- **SkiaSharp.Views.Forms.GTK** — New package bringing SkiaSharp views to Xamarin.Forms on GTK.
-- **Mouse wheel scrolling** — Added scroll wheel support in Xamarin.Forms views. ❤️ [@alexandrvslv](https://github.com/alexandrvslv)
-- **Touch device type & pressure** — Added `SKTouchDeviceType` and touch pressure support on Android. ❤️ [@mscherotter](https://github.com/mscherotter)
+- **GTK views for Xamarin.Forms** — Adds GTK view support for Xamarin.Forms. ([#1089](https://github.com/mono/SkiaSharp/pull/1089))
+- **Multi-targeted Windows.Forms views** — `SkiaSharp.Views.Windows.Forms` is now multi-targeted. ([#1082](https://github.com/mono/SkiaSharp/pull/1082))
+- **Newer XF.Tizen overload** — Adds the expected overload for newer versions of Xamarin.Forms Tizen. ([#1117](https://github.com/mono/SkiaSharp/pull/1117))
+- **Richer touch events** — Adds device type (touch, mouse, pen) to touch events, plus pressure and eraser handling. ❤️ [@mscherotter](https://github.com/mscherotter) ([#1191](https://github.com/mono/SkiaSharp/pull/1191), [#1212](https://github.com/mono/SkiaSharp/pull/1212))
+- **VS2019 and .NET Core 3.0** — Upgrades the build to Visual Studio 2019 and .NET Core 3.0. ([#1030](https://github.com/mono/SkiaSharp/pull/1030))
+- **Improved native build + Nano Server** — Improves the native build process and adds Nano Server support. ([#1040](https://github.com/mono/SkiaSharp/pull/1040))
## Bug Fixes
-- Fixed passing `null` for image filters throwing an exception instead of being treated as no filter. ❤️ [@Ziriax](https://github.com/Ziriax)
-- Fixed passing `null` to `SKPathMeasure` throwing an exception. ❤️ [@Ziriax](https://github.com/Ziriax)
-- Fixed sampling issues with GPU-based views. ❤️ [@validvoid](https://github.com/validvoid)
-- Fixed memory leak and crash in Xamarin.Forms views. ❤️ [@zbyszekpy](https://github.com/zbyszekpy)
-- Fixed several object lifetime and disposal bugs across the library.
-
-## Performance
-
-- Removed all use of reflection for a significant performance boost. ❤️ [@Gillibald](https://github.com/Gillibald)
-- Made use of array pools where possible to reduce allocations.
-- Multiple memory management improvements throughout the library.
-
-## Maintenance
-
-- Updated to Visual Studio 2019 and .NET Core 3.0.
-- Multi-targeting improvements. ❤️ [@bender2k14](https://github.com/bender2k14)
-- Updated minimum Android to v4.1 (API 16).
-- Updated Android NDK to r19c, MSVC to v14.2, and Clang to v9.0.
-- Updated ANGLE to the latest commit.
-- Updated Xamarin.Forms dependency to v4.4+.
-
-## Known Issues
-
-- WACK test false positive with `vcruntime140_1_app.dll` — this is resolved in the Windows Insider SDK.
+- **GC no longer collects live objects** — Prevents the GC from collecting `this` and `pixels` during native calls. ([#1258](https://github.com/mono/SkiaSharp/pull/1258))
+- **Cleared fields on dispose** — Nulls out the field when disposing. Fixes #960. ([#1256](https://github.com/mono/SkiaSharp/pull/1256))
+- **No allocation on disposal** — Removes an unnecessary allocation during disposal. ([#1257](https://github.com/mono/SkiaSharp/pull/1257))
+- **Removed `[Preserve]` attribute** — Drops the obsolete `[Preserve]` attribute. ([#1229](https://github.com/mono/SkiaSharp/pull/1229))
+- **System fonts no longer disposed** — Ensures system fonts are not accidentally disposed. ([#1224](https://github.com/mono/SkiaSharp/pull/1224))
+- **Concurrency fixes** — Resolves a number of concurrency issues. ([#1200](https://github.com/mono/SkiaSharp/pull/1200))
+- **Fixed test crashes and WGL deadlock** — Fixes unit test crashes and a WGL deadlock. ([#1237](https://github.com/mono/SkiaSharp/pull/1237))
+- **Android surface refresh** — Refreshes the Android view surface when it is recreated. ([#1234](https://github.com/mono/SkiaSharp/pull/1234))
+- **Reworked view disposal** — Re-works views to avoid incorrect disposal and releases Skia objects when a view is unloaded. ([#1180](https://github.com/mono/SkiaSharp/pull/1180), [#1213](https://github.com/mono/SkiaSharp/pull/1213))
+- **UWP `SKSwapChainPanel` antialiasing** — Fixes broken antialiasing with the UWP `SKSwapChainPanel`. ❤️ [@validvoid](https://github.com/validvoid) ([#1086](https://github.com/mono/SkiaSharp/pull/1086))
+- **`SKGLViewRenderer` disposal** — Corrects `SKGLViewRenderer` disposal. ❤️ [@zbyszekpy](https://github.com/zbyszekpy) ([#1095](https://github.com/mono/SkiaSharp/pull/1095))
+- **WPF mouse wheel on touch** — Handles the WPF mouse wheel during touch events. ❤️ [@alexandrvslv](https://github.com/alexandrvslv) ([#1079](https://github.com/mono/SkiaSharp/pull/1079))
+- **Weak reference cleanup** — `TryRemove`s instances from `WeakReference`s. ❤️ [@daltonks](https://github.com/daltonks) ([#1039](https://github.com/mono/SkiaSharp/pull/1039))
+- **macOS `SKGLView` fixes** — Fixes a few issues with the macOS `SKGLView`. ([#1083](https://github.com/mono/SkiaSharp/pull/1083))
+- **Correct image decoding** — Fixes incorrect image decoding. ([#1055](https://github.com/mono/SkiaSharp/pull/1055))
+- **HarfBuzz string fixes** — Fixes issues with HarfBuzz strings. ([#1034](https://github.com/mono/SkiaSharp/pull/1034))
+- **Paint encoding fallback** — Changes paint encoding instead of throwing. ([#1152](https://github.com/mono/SkiaSharp/pull/1152))
+- **Redraw and load fixes** — Queues the redraw (fixes #1074), keeps the view in the hierarchy, calls `MakeCurrent` before drawing, and prevents a double-load issue (fixes #1118). ([#1135](https://github.com/mono/SkiaSharp/pull/1135), [#1143](https://github.com/mono/SkiaSharp/pull/1143), [#1141](https://github.com/mono/SkiaSharp/pull/1141), [#1133](https://github.com/mono/SkiaSharp/pull/1133))
+
+Plus several build, CI, and documentation improvements.
+
+## Platform Support
+
+| Platform | What's New |
+|----------|-----------|
+| 🎨 Core API | Writable pixel spans, `SKColorF`/`SKImage`/`SKRegion`/`SKCanvas` members, Perlin noise shader |
+| 🍎 Apple | macOS `SKGLView` fixes |
+| 🪟 Windows | Multi-targeted Windows.Forms views, UWP `SKSwapChainPanel` antialiasing, WPF touch fixes |
+| 🤖 Android | Surface refresh on recreation |
+| 🐧 Linux | GTK views for Xamarin.Forms |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@Ziriax](https://github.com/Ziriax) | Fixed null parameter handling in image filters and path measure |
-| [@Gillibald](https://github.com/Gillibald) | Removed all reflection usage for major performance gains |
-| [@validvoid](https://github.com/validvoid) | Fixed GPU view sampling issues |
-| [@alexandrvslv](https://github.com/alexandrvslv) | Added mouse wheel scrolling support |
-| [@mscherotter](https://github.com/mscherotter) | Added touch device type and pressure on Android |
-| [@zbyszekpy](https://github.com/zbyszekpy) | Fixed memory leak and crash in views |
-| [@bender2k14](https://github.com/bender2k14) | Multi-targeting improvements |
+| [@Gillibald](https://github.com/Gillibald) | Removed reflection usage from `SKObject` creation |
+| [@mscherotter](https://github.com/mscherotter) | Added device type, pressure, and eraser handling to touch events |
+| [@ziriax](https://github.com/ziriax) | Allowed `null` arguments in merge filter factory overloads |
+| [@validvoid](https://github.com/validvoid) | Fixed UWP `SKSwapChainPanel` antialiasing |
+| [@zbyszekpy](https://github.com/zbyszekpy) | Corrected `SKGLViewRenderer` disposal |
+| [@alexandrvslv](https://github.com/alexandrvslv) | Added WPF mouse wheel handling on touch events |
+| [@daltonks](https://github.com/daltonks) | Cleaned up weak reference tracking |
+| [@bender2k14](https://github.com/bender2k14) | Sample cleanups |
+| [@terrajobst](https://github.com/terrajobst) | Linked the Code of Conduct |
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.1.1...v1.68.2)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.1...v1.68.2)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.68.2)
-- [Milestone](https://github.com/mono/SkiaSharp/milestone/30)
-
----
-
-## Preview 60 (April 13, 2020)
-
-Final preview with remaining bug fixes and stabilization before the GA release.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2-preview.50...v1.68.2-preview.60)
-
-## Preview 50 (April 3, 2020)
-
-Continued memory management improvements and additional API polish.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2-preview.45...v1.68.2-preview.50)
-
-## Preview 45 (March 24, 2020)
-
-Struct equality operators and `IEquatable` implementation across all value types.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2-preview.43...v1.68.2-preview.45)
-
-## Preview 43 (March 18, 2020)
-
-Added `ToTextureImage` and expanded shader creation methods on imaging types.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2-preview.39...v1.68.2-preview.43)
-
-## Preview 39 (February 27, 2020)
-
-New canvas drawing APIs including `DrawAtlas`, `DrawPatch`, and `DrawArc`.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2-preview.29...v1.68.2-preview.39)
-
-## Preview 29 (February 6, 2020)
-
-SKRegion enhancements and SKMatrix helper methods.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2-preview.21...v1.68.2-preview.29)
-
-## Preview 21 (January 20, 2020)
-
-GTK view extensions and Xamarin.Forms GTK package.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2-preview.17...v1.68.2-preview.21)
-
-## Preview 17 (January 11, 2020)
-
-Initial preview with SKColorF support and reflection removal for performance.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.1.1...v1.68.2-preview.17)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.68.2)
diff --git a/documentation/docfx/releases/1.68.3.md b/documentation/docfx/releases/1.68.3.md
index 9e66f002495..db47d105ec6 100644
--- a/documentation/docfx/releases/1.68.3.md
+++ b/documentation/docfx/releases/1.68.3.md
@@ -1,22 +1,55 @@
+
+
+
+
# Version 1.68.3
-> **Performance improvements for frequently-used objects** · Released May 18, 2020 · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.3)
+> **Performance & packaging release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/1.68.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.3)
## Highlights
-This is a focused maintenance release that improves performance for the most frequently-used SkiaSharp objects and updates the Tizen SDK to v3.7.
+This release brings a round of performance improvements, updates the Tizen support to the latest platform, and ensures all shipping assemblies are properly signed.
+
+## New Features
+
+### Platform
-## Breaking Changes
+- **Updated Tizen support** — Moves to the new Tizen platform. ([#1280](https://github.com/mono/SkiaSharp/pull/1280))
-*None in this release.*
+### API Surface
+
+- **Performance improvements** — A set of performance optimizations across the library. ([#1277](https://github.com/mono/SkiaSharp/pull/1277))
## Bug Fixes
-- Performance improvements for most frequently-used objects
-- Updated Tizen SDK to v3.7
+- **Assembly signing** — Ensures that the shipped assemblies are in fact signed. ([#1268](https://github.com/mono/SkiaSharp/pull/1268))
+
+## Platform Support
+
+| Platform | What's New |
+|----------|-----------|
+| 📦 General | Performance improvements, signed assemblies |
+| 📱 Tizen | Updated to the new Tizen platform |
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2.1...v1.68.3)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.2...v1.68.3)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/1.68.3)
-- [Milestone](https://github.com/mono/SkiaSharp/milestone/35)
+- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/1.68.3)
+- [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v1.68.3)
diff --git a/documentation/docfx/releases/2.80.0.md b/documentation/docfx/releases/2.80.0.md
index 1c5e52a9678..239be103408 100644
--- a/documentation/docfx/releases/2.80.0.md
+++ b/documentation/docfx/releases/2.80.0.md
@@ -1,131 +1,134 @@
+
+
+
+
# Version 2.80.0
-> **Major milestone update with Vulkan, ARM, and text overhaul** · Released July 9, 2020 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.80.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.80.0)
+> **Major milestone update with Vulkan, ARM, and a text overhaul** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.80.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.80.0)
## Highlights
-This is the biggest SkiaSharp release in years, upgrading to Skia milestone 80 and adding broad new platform support. Vulkan backends land on Android, Windows, and Linux. ARM64 support comes to Windows (UWP and Win32), and ARM/ARM64 support arrives for Linux — including Raspberry Pi. Text processing has been entirely rewritten around the new `SKFont` type with `Span`-based APIs for near-zero-allocation performance. Native libraries are no longer embedded in managed DLLs, improving build times and giving developers better control over native assets. Three community contributors helped drive this release.
-
-## Breaking Changes
-
-### API Renames
-
-- **`SKEncoding` → `SKTextEncoding`** — The old `SKEncoding` enum is deprecated in favor of `SKTextEncoding`.
-- **`GRPixelConfig` deprecated** — Use `SKColorType` instead for GPU surface configuration.
-
-### Minimum Version Bumps
-
-- **UWP minimum** — Now requires Windows 10.0.16299 or later.
-- **.NET Framework minimum** — Now requires .NET Framework 4.6.2 or later.
-- **Xamarin.Forms minimum** — Now requires Xamarin.Forms 4.5+.
-
-### Color Space Rework
-
-- Several `SKColorSpace`-related types have been deprecated in favor of improved types with better access to transfer functions and ICC profiles. Usage of `SKMatrix44` is being phased out.
+This is one of the biggest SkiaSharp releases in years, upgrading to Skia milestone 80 ([#986](https://github.com/mono/SkiaSharp/pull/986)) and broadening platform support dramatically. Vulkan backends land across Win32, Android, and Linux; ARM64 comes to Win32 and ARM/ARM64 to Linux; and a brand-new WebAssembly target is introduced. Text processing is rebuilt around a glyph-focused `SKFont` type. Community contributors [@ziriax](https://github.com/ziriax) and [@bender2k14](https://github.com/bender2k14) helped drive this release.
-### Text Processing Rewrite
+### ⚠️ Breaking Changes
-- `SKTextBlob` and `SKTextBlobBuilder` now focus on glyphs and only expose convenience members for text. The underlying text engine has moved to `SKFont`.
-
-### Native Library Packaging
-
-- Native libSkiaSharp binaries are no longer embedded in managed DLLs. This improves build performance but may require updating deployment configurations.
+- **Native libraries no longer embedded** — `libSkiaSharp` is no longer embedded inside the managed assemblies, which may require updating deployment configurations. ([#1296](https://github.com/mono/SkiaSharp/pull/1296))
+- **`SKFont` public API is now glyph-only** — Text-related members move under `SKFont`, with other types consuming it under the hood. ([#1299](https://github.com/mono/SkiaSharp/pull/1299))
## New Features
### Engine
-- **Skia milestone 80** — Upgraded to the latest Skia engine with all upstream improvements. ([Native Changelogs](https://github.com/mono/SkiaSharp/wiki/Native-Changelogs))
+- **Skia milestone 80** — Upgraded the native engine to a much later Skia (m80) with all upstream improvements. ([#986](https://github.com/mono/SkiaSharp/pull/986))
### GPU & Rendering
-- **Vulkan backend support** — Full Vulkan rendering support on Android, Windows, and Linux with new `GRVkBackendContext`, `GRVkImageInfo`, and related types. ❤️ @tuccio ❤️ @MarchingCube
-- **SharpVk integration** — New `GRSharpVkBackendContext` and extension methods for `GRVkExtensions` to use SharpVk objects directly.
-- **Streamlined GPU types** — `GRContext` and `GRGlInterface` creation and usage have been simplified.
+- **Vulkan for Win32 (plus APIs for everyone)** — Full Vulkan backend support on Win32 along with the shared Vulkan APIs. ([#1010](https://github.com/mono/SkiaSharp/pull/1010))
+- **Vulkan on all supported platforms** — Vulkan native libraries are now built across the supported platform matrix. ([#1287](https://github.com/mono/SkiaSharp/pull/1287))
+- **Improved GPU APIs** — Streamlined `GRContext` and related GPU type creation and usage. ([#1294](https://github.com/mono/SkiaSharp/pull/1294))
+- **GL ES 3.x preferred** — Explicitly requests GL ES 3.x when available. ([#1388](https://github.com/mono/SkiaSharp/pull/1388))
+- **Correct shader usage** — Fixes the shaders used during rendering. ([#1323](https://github.com/mono/SkiaSharp/pull/1323))
-### Text
+### Text & Fonts
-- **`SKFont` type** — New text-focused type that is a subset of `SKPaint`, providing cleaner text APIs.
-- **`Span`-based text APIs** — Near-zero-allocation text processing across the text pipeline.
-- **Improved `DrawTextOnPath`** — `SKCanvas.DrawTextOnPath` now supports not warping characters, with a better managed implementation after native support was dropped in Skia. ❤️ @Ziriax
-- **Simplified `DrawShapedText`** — New overloads for `SKCanvas.DrawShapedText` via SkiaSharp.HarfBuzz for easier common cases.
+- **`SKFont` text engine** — The public `SKFont` API is now glyph-focused, providing a cleaner text pipeline. ([#1299](https://github.com/mono/SkiaSharp/pull/1299))
+- **`SKCanvas.DrawTextOnPath`** — Implemented drawing text along a path. ❤️ [@ziriax](https://github.com/ziriax) ([#1198](https://github.com/mono/SkiaSharp/pull/1198))
### API Surface
-- **`SKColorSpace` rework** — New types for accessing transfer functions and ICC profiles.
-- **`SKColorF` on `SKPaint`** — Get and set colors using `SKColorF` with optional color space support.
-- **`SKPath.ToWinding()`** — Convert paths to winding fill type.
-- **Additional `SKImageFilter` overloads** — More factory method overloads for image filters.
-- **Native version validation** — The managed library now validates the native library version and throws if incompatible. ([#1252](https://github.com/mono/SkiaSharp/pull/1252))
+- **`SKPath.ToWinding()`** — Convert paths to the winding fill type. ([#1326](https://github.com/mono/SkiaSharp/pull/1326))
+- **`SKPaint.ColorF`** — Get and set colors using floating-point `SKColorF`. ([#1325](https://github.com/mono/SkiaSharp/pull/1325))
+- **Snapshots with bounds** — Add surface snapshots constrained to bounds. ([#1357](https://github.com/mono/SkiaSharp/pull/1357))
+- **Reduced deprecated native usage** — Internal calls moved off deprecated native functions. ([#1356](https://github.com/mono/SkiaSharp/pull/1356))
+- **Enum members restored** — Enum members dropped during the m80 update were added back to preserve compatibility. ([#1285](https://github.com/mono/SkiaSharp/pull/1285))
### Platform
-- **Windows ARM64** — Full ARM64 support for both UWP and Win32 platforms.
-- **Linux ARM / ARM64** — Native binaries for Debian ARM, ARM64, and Raspberry Pi.
-- **Alpine / musl support** — Linux builds for Alpine and other musl-based distributions, including no-dependency variants.
-- **WASM static library (experimental)** — Pre-built `.a` file for WebAssembly via `SkiaSharp.NativeAssets.WebAssembly`, for manual linking or use with Uno Platform. ([#1389](https://github.com/mono/SkiaSharp/pull/1389))
-- **.NET Framework ARM** — Proper 32/64 bit and ARM library loading for .NET Framework apps.
+- **WebAssembly support** — A new WASM package, WASM build of `libSkiaSharp`, and WASM unit tests. ([#1389](https://github.com/mono/SkiaSharp/pull/1389), [#1359](https://github.com/mono/SkiaSharp/pull/1359), [#1361](https://github.com/mono/SkiaSharp/pull/1361))
+- **Linux ARM32 & ARM64** — Native libraries built for armhf and aarch64, including Raspberry Pi. ([#1382](https://github.com/mono/SkiaSharp/pull/1382))
+- **Win32 ARM64** — SkiaSharp now builds for Win32 ARM64. ([#1358](https://github.com/mono/SkiaSharp/pull/1358))
+- **Alpine native libraries** — Added musl-based Alpine Linux binaries. ([#1339](https://github.com/mono/SkiaSharp/pull/1339))
+- **Per-library native loading** — Load specific native libraries on desktop/.NET Framework. ([#1342](https://github.com/mono/SkiaSharp/pull/1342))
+- **Tizen Clang update** — Updated the Clang version used to build for Tizen. ([#1386](https://github.com/mono/SkiaSharp/pull/1386))
+
+## Bug Fixes
+
+- **Crash with no GL context** — Fixed a crash that occurred when there was no GL context. ([#1328](https://github.com/mono/SkiaSharp/pull/1328))
+- **Managed/native disposal** — Correctly disposes the managed/native object relationship again. ([#1344](https://github.com/mono/SkiaSharp/pull/1344))
+- **Text blob builder lifetime** — Keeps the text blob builder alive to prevent premature collection. ([#1365](https://github.com/mono/SkiaSharp/pull/1365))
+- **Font set lifetime** — Keeps the font set alive to prevent premature collection. ([#1362](https://github.com/mono/SkiaSharp/pull/1362))
+- **Dependency prefixing** — No longer adds the SkiaSharp prefix to dependencies. ([#1331](https://github.com/mono/SkiaSharp/pull/1331))
+- **Issue #1353** — Resolved the reported regression. ([#1368](https://github.com/mono/SkiaSharp/pull/1368))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🪟 Windows | ARM64 for UWP and Win32, Vulkan backend, Nano Server support |
-| 🐧 Linux | ARM / ARM64 / Raspberry Pi, Alpine / musl, Vulkan backend |
-| 🤖 Android | Vulkan backend |
-| 🌐 WebAssembly | Experimental static library package |
-| 🍎 Apple | Xamarin.Forms minimum bumped to 4.5+ |
+| 🌐 WebAssembly | New WASM package, native build, and unit tests |
+| 🐧 Linux | ARM32/ARM64 builds, Alpine native libraries |
+| 🪟 Windows | Win32 ARM64 build, Vulkan backend |
+| 🤖 Android | Vulkan backend support |
+| 🎨 Core API | `SKFont` text engine, `SKPaint.ColorF`, `SKPath.ToWinding()` |
+| 🏗️ Build/CI | Native libraries no longer embedded in managed assemblies |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@tuccio](https://github.com/tuccio) | Vulkan backend support |
-| [@MarchingCube](https://github.com/MarchingCube) | Vulkan backend support |
-| [@Ziriax](https://github.com/Ziriax) | Improved `DrawTextOnPath` with non-warping character support |
+| [@ziriax](https://github.com/ziriax) | Implemented `SKCanvas.DrawTextOnPath` |
+| [@bender2k14](https://github.com/bender2k14) | Made the SkiaSharpSample the default startup project in the WPF sample solution |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v1.68.3...v2.80.0)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.80.0)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.80.0)
-
----
-
-## Preview Build 33 (July 1, 2020)
-
-Pre-release build leading up to the stable release.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/releases/tag/v2.80.0)
-
----
-
-## Preview Build 24 (June 27, 2020)
-
-Pre-release build with ongoing stabilization.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/releases/tag/v2.80.0)
-
----
-
-## Preview Build 14 (June 18, 2020)
-
-Pre-release build with ongoing stabilization.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/releases/tag/v2.80.0)
-
----
-
-## Preview Build 12 (June 16, 2020)
-
-Pre-release build with ongoing stabilization.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/releases/tag/v2.80.0)
-
----
-
-## Preview Build 3 (June 8, 2020)
-
-Initial preview of the 2.80.0 release cycle.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/releases/tag/v2.80.0)
diff --git a/documentation/docfx/releases/2.80.1.md b/documentation/docfx/releases/2.80.1.md
index 0521c59a248..d512afdcbb6 100644
--- a/documentation/docfx/releases/2.80.1.md
+++ b/documentation/docfx/releases/2.80.1.md
@@ -1,35 +1,47 @@
-# Version 2.80.1
+
-A quick follow-up to 2.80.0 that fixes a regression where `SKTypeface.GetGlyphs` changed meaning. This release also introduces the new `SkiaSharp.Views.Uno` package with CPU views for Android, iOS, and macOS — contributed by three community members.
+
-## Breaking Changes
+# Version 2.80.1
-*None in this release.*
+> **Maintenance release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.80.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.80.1)
-## Bug Fixes
+## Highlights
-- **`SKTypeface.GetGlyphs` regression** — Fixed the changed behavior of `SKTypeface.GetGlyphs` introduced in v2.80.0. ([#1398](https://github.com/mono/SkiaSharp/issues/1398))
+This release adds Uno Platform support and corrects `SKTypeface` glyph counting.
## New Features
### Platform
-- **Uno Platform CPU views** — New `SkiaSharp.Views.Uno` package with CPU rendering views for Android, iOS, and macOS. ❤️ @jeromelaban ❤️ @ghuntley ❤️ @MartinZikmund
+- **Uno Platform support** — Adds first-class support for running SkiaSharp on the Uno Platform. ([#1396](https://github.com/mono/SkiaSharp/pull/1396))
+
+## Bug Fixes
+
+- **`SKTypeface` glyph count** — `SKTypeface` now counts glyphs rather than bytes, returning the correct glyph count. ([#1399](https://github.com/mono/SkiaSharp/pull/1399))
-## Community Contributors ❤️
+## Platform Support
-| Contributor | What They Did |
-|-------------|--------------|
-| [@jeromelaban](https://github.com/jeromelaban) | Uno Platform CPU views |
-| [@ghuntley](https://github.com/ghuntley) | Uno Platform CPU views |
-| [@MartinZikmund](https://github.com/MartinZikmund) | Uno Platform CPU views |
+| Platform | What's New |
+|----------|-----------|
+| 📦 Uno Platform | New platform support |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.0...v2.80.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.80.1)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.80.1)
diff --git a/documentation/docfx/releases/2.80.2.md b/documentation/docfx/releases/2.80.2.md
index d1b2bd4512e..d1ce19a3a9f 100644
--- a/documentation/docfx/releases/2.80.2.md
+++ b/documentation/docfx/releases/2.80.2.md
@@ -1,101 +1,117 @@
+
+
+
+
# Version 2.80.2
> **Bug-fix release with memory debugging and Uno GPU views** · Released September 12, 2020 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.80.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.80.2)
## Highlights
-A stability-focused release fixing numerous bugs across image encoding, text rendering, interop, and native library loading. New memory debugging APIs (`SKGraphics`, `SKTraceMemoryDump`) help diagnose GPU memory usage. The Uno Platform views gain GPU support via `SKSwapChainPanel` and WASM CPU rendering. Two community contributors drove key fixes.
+A stability-focused release fixing numerous bugs across image encoding, text rendering, interop, and native library loading. New memory debugging APIs help diagnose GPU resource usage, and the Uno Platform views gain GPU support plus WASM CPU rendering. Community contributor [@ziriax](https://github.com/ziriax) drove two of the iOS and surface fixes.
-## Breaking Changes
+## New Features
-*None in this release.*
+### Engine
-## New Features
+- **Skia update** — Bumped the native Skia engine to pick up upstream fixes ([#1436](https://github.com/mono/SkiaSharp/pull/1436)).
### API Surface
-- **Memory debugging APIs** — Added `SKGraphics` and `SKTraceMemoryDump` types, plus memory debugging members on `GRContext`, for inspecting GPU resource usage.
-- **`SKColorF` extension methods** — New extension methods in SkiaSharp.Views to convert between native platform colors and `SKColorF`.
-- **Xamarin.Forms `SKColorF` extensions** — Convert between Xamarin.Forms `Color` and `SKColorF`.
-- **Replacement methods for obsoleted members** — Added new methods to replace previously obsoleted APIs.
+- **Memory debugging APIs** — Exposed `SKGraphics` for diagnostics, plus additional GPU memory debugging members on `GRContext` ([#1473](https://github.com/mono/SkiaSharp/pull/1473), [#1478](https://github.com/mono/SkiaSharp/pull/1478)).
+- **`SKColorF` extension methods** — New extensions to convert between native platform colors and `SKColorF` ([#1469](https://github.com/mono/SkiaSharp/pull/1469)).
+- **Replacement methods for obsoleted members** — Added new methods to replace previously obsoleted APIs ([#1431](https://github.com/mono/SkiaSharp/pull/1431)).
### Platform
-- **Uno Platform WASM CPU views** — CPU rendering views for WASM via Uno Platform. ❤️ @jeromelaban ❤️ @ghuntley ❤️ @MartinZikmund
-- **Uno Platform GPU views** — New `SKSwapChainPanel` GPU view for Android, iOS, macOS, and WASM.
+- **Uno Platform WASM support** — CPU rendering views for WebAssembly via Uno Platform ([#1333](https://github.com/mono/SkiaSharp/pull/1333)).
+- **Uno Platform GPU views** — New `SKSwapChainPanel` GPU view for Android, iOS, macOS, and WASM, plus further Uno integration ([#1429](https://github.com/mono/SkiaSharp/pull/1429), [#1420](https://github.com/mono/SkiaSharp/pull/1420)).
+- **Xamarin.Forms performance** — Rendering performance improvements for Forms ([#1424](https://github.com/mono/SkiaSharp/pull/1424)).
+- **UWP non-blocking invalidation** — UWP no longer blocks the UI thread when invalidating ([#1468](https://github.com/mono/SkiaSharp/pull/1468)).
+- **macOS redraw fix** — Use `NeedsDisplay` instead of `Display` for correct macOS redraws ([#1475](https://github.com/mono/SkiaSharp/pull/1475)).
+
+### Build & Packaging
+
+- **Native-only NuGet package** — A new package containing just the native binaries ([#1456](https://github.com/mono/SkiaSharp/pull/1456)).
+- **Debug bootstrapper builds** — Passing `--configuration=debug` to the bootstrapper now produces a debug library ([#1418](https://github.com/mono/SkiaSharp/pull/1418)).
## Bug Fixes
-- **`SKSurface.Create` origin ignored** — Fixed the origin parameter being ignored when creating surfaces. ❤️ @Ziriax
-- **`SKData` from non-seekable stream** — Fixed exception when creating `SKData` from a non-seekable stream.
-- **`SKCanvas.DrawTextOnPath` null reference** — Fixed `NullReferenceException` in `DrawTextOnPath`. ❤️ @Ziriax
-- **No-dependency builds using dependencies** — Fixed Linux "no dependencies" builds that were still linking against dependencies.
-- **Image subset encoding** — Fixed an issue where encoding a subset of some images would encode the entire original image instead.
-- **Text rendering crashes** — Fixed several text rendering issues and crashes.
-- **Transitive dependency native binaries** — Fixed native binaries not reaching the final app when only referenced as a transitive dependency (also fixed for HarfBuzzSharp).
-- **ASP.NET `DllNotFoundException`** — Fixed `DllNotFoundException` when running in ASP.NET.
-- **WASM interop** — Fixed invalid interop on WASM for some methods.
-- **`SKCanvas.DrawPoint` layering** — Fixed an issue with layering in `SKCanvas.DrawPoint`.
+- **`SKSurface.Create` origin ignored** — Fixed the origin parameter being ignored when creating surfaces. ❤️ [@ziriax](https://github.com/ziriax) ([#1404](https://github.com/mono/SkiaSharp/pull/1404))
+- **`SKCanvas.DrawTextOnPath` null reference** — Fixed a `NullReferenceException` in `DrawTextOnPath` on iOS. ❤️ [@ziriax](https://github.com/ziriax) ([#1410](https://github.com/mono/SkiaSharp/pull/1410))
+- **`SKData` from non-seekable stream** — Fixed an exception when creating `SKData` from a non-seekable stream ([#1411](https://github.com/mono/SkiaSharp/pull/1411)).
+- **ASP.NET `DllNotFoundException`** — Now checks the correct directory for native libraries under ASP.NET ([#1483](https://github.com/mono/SkiaSharp/pull/1483)).
+- **Image subset encoding** — Fixed encoding overwriting the underlying pixels / encoding the full image instead of a subset ([#1457](https://github.com/mono/SkiaSharp/pull/1457)).
+- **WASM + GL** — Use the correct native code for WASM with GL ([#1445](https://github.com/mono/SkiaSharp/pull/1445)).
+- **Transitive dependency native binaries** — Native binaries now reach the final app via `buildTransitive` when only referenced transitively ([#1440](https://github.com/mono/SkiaSharp/pull/1440)).
+- **Text rendering** — Use linear metrics for backwards compatibility and handle invalid text correctly ([#1439](https://github.com/mono/SkiaSharp/pull/1439), [#1438](https://github.com/mono/SkiaSharp/pull/1438)).
+- **Alpine no-dependency builds** — Fixed Alpine builds that were still linking against fontconfig when asked not to ([#1416](https://github.com/mono/SkiaSharp/pull/1416)).
+- **Interop float return** — Worked around cases where a float could not be returned correctly ([#1453](https://github.com/mono/SkiaSharp/pull/1453)).
+- **`SetScaleTranslate` revert** — Reverted a regression in `SetScaleTranslate` ([#1452](https://github.com/mono/SkiaSharp/pull/1452)).
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🐧 Linux | Fixed no-dependency builds |
-| 🌐 WebAssembly | WASM interop fixes, Uno CPU + GPU views |
-| 📦 General | Transitive dependency fix for native binaries, ASP.NET loading fix |
+| 🍎 Apple | iOS `DrawTextOnPath` fix, macOS redraw fix |
+| 🪟 Windows | UWP non-blocking invalidation |
+| 🐧 Linux | Alpine no-dependency build fix |
+| 🌐 WebAssembly | Uno WASM CPU views, WASM + GL fix |
+| 🎨 Core API | Memory debugging APIs, `SKColorF` extensions |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@Ziriax](https://github.com/Ziriax) | Fixed `SKSurface.Create` origin and `DrawTextOnPath` null reference |
-| [@jeromelaban](https://github.com/jeromelaban) | Uno Platform WASM CPU views |
-| [@ghuntley](https://github.com/ghuntley) | Uno Platform WASM CPU views |
-| [@MartinZikmund](https://github.com/MartinZikmund) | Uno Platform WASM CPU views |
+| [@ziriax](https://github.com/ziriax) | Fixed the ignored `SKSurface.Create` origin and the iOS `DrawTextOnPath` `NullReferenceException` |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.1...v2.80.2)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.80.2)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.80.2)
-
----
-
-## Preview Build 36 (September 3, 2020)
-
-Stabilization and final bug fixes before the stable release.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.2-preview.33...v2.80.2-preview.36)
-
----
-
-## Preview Build 33 (August 25, 2020)
-
-Continued bug fixes and stability improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.2-preview.19...v2.80.2-preview.33)
-
----
-
-## Preview Build 19 (August 4, 2020)
-
-Bug fixes for image encoding, text rendering, and native library loading.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.2-preview.18...v2.80.2-preview.19)
-
----
-
-## Preview Build 18 (August 2, 2020)
-
-Initial fixes for transitive dependency and ASP.NET loading issues.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.2-preview.9...v2.80.2-preview.18)
-
----
-
-## Preview Build 9 (July 27, 2020)
-
-First preview of the 2.80.2 release cycle with early bug fixes.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.1...v2.80.2-preview.9)
diff --git a/documentation/docfx/releases/2.80.3.md b/documentation/docfx/releases/2.80.3.md
index 21dd1d6c024..f1c70c53adf 100644
--- a/documentation/docfx/releases/2.80.3.md
+++ b/documentation/docfx/releases/2.80.3.md
@@ -1,111 +1,143 @@
+
+
+
+
# Version 2.80.3
-> **Metal, runtime effects, WinUI, and .NET 5 support** · Released July 12, 2021 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.80.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.80.3)
+> **Released July 12, 2021** · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.80.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.80.3)
## Highlights
-A feature-packed release bringing Metal rendering APIs to Apple platforms, the new `SKRuntimeEffect` API for custom GPU shaders, WinUI 3 desktop support, macOS ARM64 (Apple Silicon) native builds, .NET 5.0 support, and .NET Interactive integration. This release also includes Exif SubIFD reading, `SKPicture` serialization, `GRContextOptions`, and improved musl system detection. Five community contributors helped shape this release.
-
-## Breaking Changes
-
-*None in this release.*
+A feature-packed release that brings the Metal rendering backend to Apple platforms, the new `SKRuntimeEffect` API for custom SkSL shaders, WinUI 3 desktop support, macOS ARM64 (Apple Silicon) native builds, .NET 5.0 targeting, and .NET Interactive notebook integration. Community contributors [@gmurray81](https://github.com/gmurray81), [@HarlanHugh](https://github.com/HarlanHugh), [@Mikolaytis](https://github.com/Mikolaytis), and [@jeromelaban](https://github.com/jeromelaban) all helped shape this release.
## New Features
### GPU & Rendering
-- **Metal API support** — Full Metal rendering backend for Apple platforms (iOS, macOS), bringing hardware-accelerated GPU rendering via Metal. ([#1394](https://github.com/mono/SkiaSharp/pull/1394), [#1598](https://github.com/mono/SkiaSharp/pull/1598), [#1615](https://github.com/mono/SkiaSharp/pull/1615))
-- **`SKRuntimeEffect` API** — New API for custom GPU shader effects using SkSL (Skia Shading Language). ([#1604](https://github.com/mono/SkiaSharp/pull/1604))
+- **Metal rendering backend** — Full Metal GPU APIs for iOS and macOS. ([#1394](https://github.com/mono/SkiaSharp/pull/1394), [#1598](https://github.com/mono/SkiaSharp/pull/1598), [#1615](https://github.com/mono/SkiaSharp/pull/1615))
+- **`SKRuntimeEffect` API** — Custom GPU shader effects authored in SkSL (Skia Shading Language). ([#1604](https://github.com/mono/SkiaSharp/pull/1604))
- **`GRContextOptions`** — Exposed `GRContextOptions` for fine-grained control over GPU context creation. ([#1529](https://github.com/mono/SkiaSharp/pull/1529))
- **`GRContext.IsAbandoned`** — Exposed the `IsAbandoned` property in the C# API. ([#1659](https://github.com/mono/SkiaSharp/pull/1659))
-- **GL surface creation resilience** — Better handling of GL surface creation failures. ❤️ @gmurray81 ([#1642](https://github.com/mono/SkiaSharp/pull/1642))
+- **Resilient GL surface creation** — Gracefully handles failures when creating a GL surface. ❤️ [@gmurray81](https://github.com/gmurray81) ([#1642](https://github.com/mono/SkiaSharp/pull/1642))
+- **ANGLE `GRGlInterface`** — Allow assembling an ANGLE-based `GRGlInterface` outside UWP. ❤️ [@Mikolaytis](https://github.com/Mikolaytis) ([#1519](https://github.com/mono/SkiaSharp/pull/1519))
### API Surface
- **`SKPicture` serialization** — New bindings for serializing and deserializing `SKPicture` objects. ([#1514](https://github.com/mono/SkiaSharp/pull/1514))
-- **Exif SubIFD support** — Added support for reading the Exif SubIFD from image metadata. ([#1518](https://github.com/mono/SkiaSharp/pull/1518))
-- **ANGLE `GRGlInterface` outside UWP** — Allow creating ANGLE-based `GRGlInterface` from non-UWP environments. ❤️ @Mikolaytis ([#1519](https://github.com/mono/SkiaSharp/pull/1519))
-- **Stream copy optimization** — Eliminated unnecessary array allocations when copying streams. ([#1510](https://github.com/mono/SkiaSharp/pull/1510))
+- **Exif SubIFD reading** — Read the Exif SubIFD block from image metadata. ([#1518](https://github.com/mono/SkiaSharp/pull/1518))
+- **Allocation-free stream copies** — Avoids allocating temporary arrays when copying streams. ([#1510](https://github.com/mono/SkiaSharp/pull/1510))
+
+### Text & Fonts
+
+- **HarfBuzz interop generation** — HarfBuzzSharp interop is now generated, and a HarfBuzzSharp WASM package is registered. ([#1447](https://github.com/mono/SkiaSharp/pull/1447), [#1525](https://github.com/mono/SkiaSharp/pull/1525))
+- **iOS font loading** — Fonts are now loaded correctly on iOS. ([#1539](https://github.com/mono/SkiaSharp/pull/1539))
### Platform
-- **macOS ARM64 (Apple Silicon)** — Native ARM64 build target for macOS. ([#1627](https://github.com/mono/SkiaSharp/pull/1627))
-- **.NET 5.0 support** — Updated to target .NET 5.0. ([#1697](https://github.com/mono/SkiaSharp/pull/1697))
-- **WinUI 3 Desktop support** — New views and rendering support for WinUI 3 desktop applications. ([#1696](https://github.com/mono/SkiaSharp/pull/1696), [#1741](https://github.com/mono/SkiaSharp/pull/1741))
-- **Uno Platform `SKXamlCanvas`** — Support for `SKXamlCanvas` on Uno Platform SkiaSharp backends v2.0. ([#1704](https://github.com/mono/SkiaSharp/pull/1704))
-- **.NET Interactive support** — SkiaSharp images can now be displayed directly in .NET Interactive notebooks. ([#1710](https://github.com/mono/SkiaSharp/pull/1710))
-- **Improved musl detection** — Properly detect and handle musl-based Linux systems. ([#1657](https://github.com/mono/SkiaSharp/pull/1657))
-- **Multiple emscripten WASM builds** — Includes all emscripten versions for WASM compatibility. ([#1590](https://github.com/mono/SkiaSharp/pull/1590))
+- **macOS ARM64 (Apple Silicon)** — New native arm64 build target for macOS. ([#1627](https://github.com/mono/SkiaSharp/pull/1627))
+- **.NET 5.0** — Updated to target .NET 5.0. ([#1697](https://github.com/mono/SkiaSharp/pull/1697))
+- **WinUI 3 desktop** — Views and rendering support for WinUI 3 desktop apps. ([#1696](https://github.com/mono/SkiaSharp/pull/1696), [#1741](https://github.com/mono/SkiaSharp/pull/1741))
+- **Uno Platform** — `SKXamlCanvas` support on Uno SkiaSharp backends v2.0, plus an update to Uno Platform v3.0. ([#1704](https://github.com/mono/SkiaSharp/pull/1704), [#1489](https://github.com/mono/SkiaSharp/pull/1489))
+- **.NET Interactive** — Render SkiaSharp images directly in .NET Interactive notebooks. ([#1710](https://github.com/mono/SkiaSharp/pull/1710))
+- **musl detection** — Properly detects and handles musl-based Linux systems. ([#1657](https://github.com/mono/SkiaSharp/pull/1657))
+- **WASM emscripten builds** — Builds and ships all required emscripten versions for WASM. ([#1590](https://github.com/mono/SkiaSharp/pull/1590))
## Bug Fixes
-- **`SKMatrix.IsInvertible` crash** — Fixed a crash when calling `IsInvertible` on certain matrices. ([#1527](https://github.com/mono/SkiaSharp/pull/1527))
-- **Image pixel reading** — Fixed incorrect image pixel reading. ([#1636](https://github.com/mono/SkiaSharp/pull/1636))
-- **iOS font loading** — Fixed font loading issues on iOS. ([#1539](https://github.com/mono/SkiaSharp/pull/1539))
-- **Display link defensiveness** — More defensive handling in display link callbacks. ([#1620](https://github.com/mono/SkiaSharp/pull/1620))
-- **Buffer swap after resize** — Fixed buffer swap issues after surface resize. ([#1668](https://github.com/mono/SkiaSharp/pull/1668))
-- **WPF `SKElement.OnRender`** — `SKElement.OnRender` now does nothing if there is no `PresentationSource`, preventing crashes. ❤️ @HarlanHugh ([#1606](https://github.com/mono/SkiaSharp/pull/1606))
+- **`SKMatrix.IsInvertible`** — No longer crashes. ([#1527](https://github.com/mono/SkiaSharp/pull/1527))
+- **Image pixel reads** — Ensures image pixels are read correctly. ([#1636](https://github.com/mono/SkiaSharp/pull/1636))
+- **Swapchain resize** — Buffers are swapped after a resize. ([#1668](https://github.com/mono/SkiaSharp/pull/1668))
+- **Display links** — More defensive handling of the display links. ([#1620](https://github.com/mono/SkiaSharp/pull/1620))
+- **WPF `SKElement.OnRender`** — Does nothing when there is no `PresentationSource`, avoiding errors. ❤️ [@HarlanHugh](https://github.com/HarlanHugh) ([#1606](https://github.com/mono/SkiaSharp/pull/1606))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | Metal rendering, macOS ARM64 (Apple Silicon), iOS font loading fix |
-| 🪟 Windows | WinUI 3 Desktop support |
-| 🐧 Linux | Improved musl system detection |
-| 🌐 WebAssembly | Multiple emscripten builds, Uno `SKXamlCanvas` |
+| 🍎 Apple | Metal backend, macOS ARM64 builds, iOS font loading |
+| 🪟 Windows | WinUI 3 desktop support |
+| 🐧 Linux | musl system detection |
+| 🌐 WebAssembly | All emscripten versions, HarfBuzzSharp WASM package |
+| 🎨 Core API | `SKRuntimeEffect`, `GRContextOptions`, `SKPicture` serialization |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@gmurray81](https://github.com/gmurray81) | Improved GL surface creation failure handling |
-| [@HarlanHugh](https://github.com/HarlanHugh) | Fixed WPF `SKElement.OnRender` crash without `PresentationSource` |
-| [@Mikolaytis](https://github.com/Mikolaytis) | Enabled ANGLE `GRGlInterface` creation outside UWP |
-| [@jeromelaban](https://github.com/jeromelaban) | Uno Platform documentation updates |
+| [@gmurray81](https://github.com/gmurray81) | Made GL surface creation resilient to failures |
+| [@HarlanHugh](https://github.com/HarlanHugh) | Guarded WPF `SKElement.OnRender` against a missing `PresentationSource` |
+| [@Mikolaytis](https://github.com/Mikolaytis) | Allowed assembling an ANGLE `GRGlInterface` outside UWP |
+| [@jeromelaban](https://github.com/jeromelaban) | Added Uno Platform documentation references |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.2...v2.80.3)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.80.3)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.80.3)
-
----
-
-## Preview 93 (July 12, 2021)
-
-Added `SKXamlCanvas` support for Uno Platform SkiaSharp backends v2.0.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3-preview.90...v2.80.3-preview.93)
-
----
-
-## Preview 90 (May 30, 2021)
-
-Major preview with Metal APIs, `SKRuntimeEffect`, macOS ARM64, .NET 5.0, WinUI Desktop, .NET Interactive, and musl detection improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3-preview.40...v2.80.3-preview.90)
-
----
-
-## Preview 40 (February 6, 2021)
-
-Added Metal APIs, `GRContextOptions`, WPF rendering fix, and build improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3-preview.24...v2.80.3-preview.40)
-
----
-
-## Preview 24 (January 27, 2021)
-
-WASM emscripten builds and build system updates.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3-preview.18...v2.80.3-preview.24)
-
----
-
-## Preview 18 (November 10, 2020)
-
-Initial preview with `SKPicture` serialization, Exif SubIFD support, ANGLE improvements, stream optimization, and `SKMatrix.IsInvertible` fix.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.2...v2.80.3-preview.18)
diff --git a/documentation/docfx/releases/2.80.4.md b/documentation/docfx/releases/2.80.4.md
index c171382b133..0f51f96794b 100644
--- a/documentation/docfx/releases/2.80.4.md
+++ b/documentation/docfx/releases/2.80.4.md
@@ -1,67 +1,52 @@
+
+
+
+
# Version 2.80.4
-> **Stability fixes for surface allocation and anti-alias edging** · Released May 21, 2022 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.80.4) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.80.4-preview.9)
+> **Servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.80.4) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.80.4)
## Highlights
-A small maintenance release that improves resilience when GPU surface allocation fails, fixes `IsAntialias` to correctly control font edging, and addresses an ANGLE packaging issue with `zlib1.dll`. One community contributor drove the surface allocation fix.
-
-## Breaking Changes
-
-*None in this release.*
+This servicing release fixes antialiasing edge behaviour and hardens surface allocation against failures, with a robustness fix contributed by [@richirisu](https://github.com/richirisu).
## Bug Fixes
-- **Surface allocation failure handling** — Returns an empty surface instead of crashing when GPU surface allocation fails. ❤️ @richirisu ([#1784](https://github.com/mono/SkiaSharp/pull/1784))
-- **`IsAntialias` controls edging** — `IsAntialias` now correctly also controls the font edging setting. ([#1802](https://github.com/mono/SkiaSharp/pull/1802))
-- **ANGLE `zlib1.dll` packaging** — Fixed missing `zlib1.dll` output from ANGLE builds. ([#1807](https://github.com/mono/SkiaSharp/pull/1807))
+- **`IsAntialias` now controls edging** — Setting `IsAntialias` on a paint now correctly drives the edging mode again. ([#1802](https://github.com/mono/SkiaSharp/pull/1802))
+- **Graceful surface allocation failure** — Returns an empty surface instead of faulting when the underlying allocation fails. ❤️ [@richirisu](https://github.com/richirisu) ([#1784](https://github.com/mono/SkiaSharp/pull/1784))
+- **ANGLE `zlib1.dll` output** — The ANGLE build now also emits `zlib1.dll`, fixing a missing native dependency on Windows. ([#1807](https://github.com/mono/SkiaSharp/pull/1807))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🪟 Windows | Fixed ANGLE `zlib1.dll` packaging |
+| 🎨 Core API | `IsAntialias` edging fix, safe surface allocation |
+| 🪟 Windows | ANGLE now emits `zlib1.dll` |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@richirisu](https://github.com/richirisu) | Fixed crash on GPU surface allocation failure |
+| [@richirisu](https://github.com/richirisu) | Returned an empty surface when allocation fails instead of faulting |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.80.4)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.80.4)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.80.4)
-
----
-
-## Preview 9 (May 11, 2022)
-
-CI infrastructure updates.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.4-preview.6...v2.80.4-preview.9)
-
----
-
-## Preview 6 (September 28, 2021)
-
-Fixed ANGLE `zlib1.dll` packaging.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.4-preview.5...v2.80.4-preview.6)
-
----
-
-## Preview 5 (September 13, 2021)
-
-Fixed surface allocation failure handling and `IsAntialias` edging control.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.4-preview.2...v2.80.4-preview.5)
-
----
-
-## Preview 2 (August 19, 2021)
-
-Initial preview of the 2.80.4 release cycle.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.80.4-preview.2)
diff --git a/documentation/docfx/releases/2.88.0.md b/documentation/docfx/releases/2.88.0.md
index fb3e1a1e882..f03f1916c99 100644
--- a/documentation/docfx/releases/2.88.0.md
+++ b/documentation/docfx/releases/2.88.0.md
@@ -1,208 +1,154 @@
+
+
+
+
# Version 2.88.0
-> **.NET 6, MAUI, and Mac Catalyst debut** · Released May 22, 2022 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.0)
+> **.NET MAUI & .NET 6 release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.0)
## Highlights
-A landmark release bringing SkiaSharp into the .NET 6 era. This version introduces first-class .NET MAUI views (both compatibility shims and native handlers), adds Mac Catalyst support, enables ASP.NET Blazor WebAssembly rendering, and splits the monolithic NuGet package into smaller per-platform native asset packages for faster restores and smaller deployments. Six community contributors helped shape the release.
+A landmark release that brings first-class **.NET MAUI** views (both compatibility shims and handlers), **Mac Catalyst** support, **ASP.NET Blazor WebAssembly** components, and full **.NET 6 / `net6.0`** targets. The SkiaSharp package was also split into smaller per-platform "Native Asset" packages, and HarfBuzz was updated to 2.8.2. Several community contributors helped across Android, Uno, WebAssembly, and compliance.
-## Breaking Changes
+## New Features
-*None in this release.*
+### API Surface
-## New Features
+- **.NET MAUI views** — Adds `SkiaSharp.Views.Maui` with both compatibility views and handlers. ([#1678](https://github.com/mono/SkiaSharp/pull/1678))
+- **New drawing APIs** — Surfaces additional Skia APIs to the managed binding. ([#1828](https://github.com/mono/SkiaSharp/pull/1828))
-### Platform
+### Text & Fonts
-- **Mac Catalyst support** — Full support for Mac Catalyst, including framework-based native packaging and build task integration. ([#1681](https://github.com/mono/SkiaSharp/pull/1681), [#1760](https://github.com/mono/SkiaSharp/pull/1760))
-- **.NET MAUI views** — New `SKCanvasView` and `SKGLView` for .NET MAUI with both compatibility and handler-based implementations. ([#1678](https://github.com/mono/SkiaSharp/pull/1678))
-- **.NET 6 TFMs** — Added `net6.0-ios`, `net6.0-android`, `net6.0-macos`, `net6.0-maccatalyst`, and `net6.0-tvos` targets for the binding projects. ([#1707](https://github.com/mono/SkiaSharp/pull/1707))
-- **ASP.NET Blazor WebAssembly** — Render SkiaSharp content in Blazor WASM applications. ([#1811](https://github.com/mono/SkiaSharp/pull/1811))
-- **Xamarin.Forms on netcoreapp3.1** — Extended Xamarin.Forms support to .NET Core 3.1 desktop scenarios. ([#1774](https://github.com/mono/SkiaSharp/pull/1774))
-- **Emscripten 2.0.23 support** — Updated WASM builds for newer Emscripten toolchain. ❤️ @jeromelaban ([#1746](https://github.com/mono/SkiaSharp/pull/1746))
-- **Uno Platform 4.0** — Bumped Uno Platform support to version 4.0. ❤️ @jeromelaban ([#1873](https://github.com/mono/SkiaSharp/pull/1873))
+- **HarfBuzz 2.8.2** — Updates the bundled HarfBuzz to 2.8.2. ([#1766](https://github.com/mono/SkiaSharp/pull/1766))
-### Packaging
+### Platform
-- **Split native asset packages** — The SkiaSharp NuGet is now split into smaller per-platform `SkiaSharp.NativeAssets.*` packages for faster restore and reduced download size. ([#1758](https://github.com/mono/SkiaSharp/pull/1758))
-- **HarfBuzzSharp.NativeAssets packages** — HarfBuzz native assets also split into per-platform packages with Windows symbols included. ([#1797](https://github.com/mono/SkiaSharp/pull/1797))
-- **PDB files in packages** — Debug symbols now ship inside the NuGet packages for better debugging. ([#1781](https://github.com/mono/SkiaSharp/pull/1781))
-- **Software Bill of Materials (SBOM)** — SBOM manifest generation added to the build. ❤️ @mjbond-msft ([#1954](https://github.com/mono/SkiaSharp/pull/1954))
+- **Mac Catalyst** — Adds Mac Catalyst support, moving build configuration into the `gn` files. ([#1760](https://github.com/mono/SkiaSharp/pull/1760), [#1681](https://github.com/mono/SkiaSharp/pull/1681))
+- **ASP.NET Blazor WebAssembly** — Adds support for Blazor WebAssembly components. ([#1811](https://github.com/mono/SkiaSharp/pull/1811))
+- **.NET 6 targets** — Adds `net6.0-*` targets for the binding projects. ([#1707](https://github.com/mono/SkiaSharp/pull/1707), [#1740](https://github.com/mono/SkiaSharp/pull/1740))
+- **Xamarin.Forms on `netcoreapp3.1`** — Adds Xamarin.Forms support on .NET Core 3.1. ([#1774](https://github.com/mono/SkiaSharp/pull/1774))
+- **WindowsAppSDK** — Moves Windows support onto the WindowsAppSDK. ([#1800](https://github.com/mono/SkiaSharp/pull/1800))
+- **Native Asset packages** — Splits the SkiaSharp package into smaller per-platform "Native Asset" packages, with native Windows symbols and `HarfBuzzSharp.NativeAssets.*`. ([#1758](https://github.com/mono/SkiaSharp/pull/1758), [#1797](https://github.com/mono/SkiaSharp/pull/1797))
+- **emscripten 2.0.23** — ❤️ [@jeromelaban](https://github.com/jeromelaban) adds support for emscripten 2.0.23 on WebAssembly. ([#1746](https://github.com/mono/SkiaSharp/pull/1746))
+- **Uno 4.0** — ❤️ [@jeromelaban](https://github.com/jeromelaban) bumps the Uno Platform support to 4.0. ([#1873](https://github.com/mono/SkiaSharp/pull/1873))
+- **Android packaging** — ❤️ [@jonathanpeppers](https://github.com/jonathanpeppers) stops shipping `.so` files in class libraries and trims `Resource.designer.cs` fields. ([#1895](https://github.com/mono/SkiaSharp/pull/1895), [#1812](https://github.com/mono/SkiaSharp/pull/1812))
+- **Debug symbols** — Adds the main PDB files to the packages. ([#1781](https://github.com/mono/SkiaSharp/pull/1781))
-### Engine
+### Security
-- **WindowsAppSDK support** — Migrated Windows views to the Windows App SDK. ([#1800](https://github.com/mono/SkiaSharp/pull/1800))
-- **HarfBuzz updated to 2.8.2** — Brings the latest text shaping improvements. ([#1766](https://github.com/mono/SkiaSharp/pull/1766))
-- **New APIs** — Additional Skia APIs exposed to C#. ([#1828](https://github.com/mono/SkiaSharp/pull/1828))
+- **Software Bill of Materials** — ❤️ [@mjbond-msft](https://github.com/mjbond-msft) generates an SBOM manifest for the build. ([#1954](https://github.com/mono/SkiaSharp/pull/1954))
## Bug Fixes
-- **Fix NRE in .NET MAUI SKCanvasView** — Resolved a null reference when using the canvas view in MAUI. ❤️ @jsuarezruiz ([#1734](https://github.com/mono/SkiaSharp/pull/1734))
-- **Return empty surface on allocation failure** — Gracefully handle failed surface allocations instead of crashing. ❤️ @richirisu ([#1784](https://github.com/mono/SkiaSharp/pull/1784))
-- **`IsAntialias` now controls Edging** — Setting `IsAntialias` correctly updates the font edging mode. ([#1802](https://github.com/mono/SkiaSharp/pull/1802))
-- **Fix `IgnorePixelScaling` behavior** — Corrected how the `IgnorePixelScaling` property works on views. ([#1804](https://github.com/mono/SkiaSharp/pull/1804))
-- **Prevent infinite loop in Blazor SKCanvasView** — Fixed a rendering loop that could freeze Blazor apps. ❤️ @JensKrumsieck ([#1889](https://github.com/mono/SkiaSharp/pull/1889))
-- **HandleDictionary lock replaced with critical section** — Improved thread-safety on Windows by replacing `lock` with a lightweight critical section. ❤️ @toptensoftware ([#1817](https://github.com/mono/SkiaSharp/pull/1817))
-- **Never dispose native statics** — Prevents crashes from premature disposal of shared native objects. ([#1863](https://github.com/mono/SkiaSharp/pull/1863))
-- **Work around enums not being blittable** — Fixed interop issues with enum types in certain .NET runtimes. ([#1857](https://github.com/mono/SkiaSharp/pull/1857))
-- **LibraryLoader: Try libdl.so.2 before libdl.so on Linux** — Fixes library loading on newer Linux distributions. ❤️ @akoeplinger ([#2010](https://github.com/mono/SkiaSharp/pull/2010))
-- **Android: Don't include .so files in class libraries** — Corrected native library packaging for Android. ❤️ @jonathanpeppers ([#1895](https://github.com/mono/SkiaSharp/pull/1895))
-- **Android: Eliminate unnecessary Resource.designer.cs fields** — Reduced generated code size. ❤️ @jonathanpeppers ([#1812](https://github.com/mono/SkiaSharp/pull/1812))
+- **`IgnorePixelScaling`** — Fixes the behavior of the `IgnorePixelScaling` property. ([#1804](https://github.com/mono/SkiaSharp/pull/1804))
+- **Blazor `SKCanvasView` loop** — ❤️ [@JensKrumsieck](https://github.com/JensKrumsieck) prevents an infinite loop in the Blazor `SKCanvasView`. ([#1889](https://github.com/mono/SkiaSharp/pull/1889))
+- **MAUI `SKCanvasView` NRE** — ❤️ [@jsuarezruiz](https://github.com/jsuarezruiz) guards against a `NullReferenceException` in the .NET MAUI `SKCanvasView`. ([#1734](https://github.com/mono/SkiaSharp/pull/1734))
+- **Linux `libdl` resolution** — ❤️ [@akoeplinger](https://github.com/akoeplinger) tries `libdl.so.2` before `libdl.so`. ([#2010](https://github.com/mono/SkiaSharp/pull/2010))
+- **Windows handle locking** — Replaces the `HandleDictionary` lock with a critical section on Windows. ([#1817](https://github.com/mono/SkiaSharp/pull/1817))
+- **Blittable enums** — Works around enums not being blittable. ([#1857](https://github.com/mono/SkiaSharp/pull/1857))
+- **Native statics** — Never disposes the native static objects. ([#1863](https://github.com/mono/SkiaSharp/pull/1863))
+- **Mac Catalyst build** — Fixes the Mac Catalyst build task Inputs/Outputs. ([#1865](https://github.com/mono/SkiaSharp/pull/1865))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | Mac Catalyst support, iOS view background fix, macOS Monterey CI |
-| 🪟 Windows | WindowsAppSDK migration, native symbols in packages |
-| 🐧 Linux | libdl.so.2 fallback for newer distros |
-| 🤖 Android | Leaner .so packaging, reduced Resource.designer.cs |
-| 🌐 WebAssembly | Blazor WASM support, Emscripten 2.0.23 |
+| 🍎 Apple | Mac Catalyst support |
+| 🪟 Windows | WindowsAppSDK, native symbols, critical-section handle locking |
+| 🐧 Linux | `libdl.so.2` resolution |
+| 🤖 Android | `.so` files excluded from class libraries, trimmed resources |
+| 🌐 WebAssembly | Blazor WASM components, emscripten 2.0.23, Uno 4.0 |
+| 🎨 Core API | .NET MAUI views, new drawing APIs, HarfBuzz 2.8.2 |
+| 📦 General | .NET 6 targets, Native Asset packages, PDB symbols, SBOM |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@jsuarezruiz](https://github.com/jsuarezruiz) | Fixed NRE in MAUI SKCanvasView |
-| [@richirisu](https://github.com/richirisu) | Graceful surface allocation failure handling |
-| [@jonathanpeppers](https://github.com/jonathanpeppers) | Android packaging improvements |
-| [@toptensoftware](https://github.com/toptensoftware) | HandleDictionary critical section optimization |
-| [@JensKrumsieck](https://github.com/JensKrumsieck) | Fixed Blazor infinite loop |
-| [@mjbond-msft](https://github.com/mjbond-msft) | SBOM manifest generation |
-| [@jeromelaban](https://github.com/jeromelaban) | Emscripten 2.0.23, Uno 4.0 |
-| [@akoeplinger](https://github.com/akoeplinger) | Linux libdl.so.2 fallback |
+| [@jeromelaban](https://github.com/jeromelaban) | Added emscripten 2.0.23 support and bumped Uno to 4.0 |
+| [@jonathanpeppers](https://github.com/jonathanpeppers) | Improved Android packaging and trimmed generated resource fields |
+| [@JensKrumsieck](https://github.com/JensKrumsieck) | Fixed an infinite loop in the Blazor `SKCanvasView` |
+| [@jsuarezruiz](https://github.com/jsuarezruiz) | Guarded against an NRE in the MAUI `SKCanvasView` |
+| [@akoeplinger](https://github.com/akoeplinger) | Improved `libdl` resolution on Linux |
+| [@mjbond-msft](https://github.com/mjbond-msft) | Added SBOM manifest generation |
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.88.0)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.4...v2.88.0)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.88.0)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.88.0)
-- [Samples](https://aka.ms/skiasharp/samples)
-
----
-
-## Preview 256 (May 11, 2022)
-
-Building with .NET MAUI RC 2.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.254...v2.88.0-preview.256)
-
----
-
-## Preview 254 (May 11, 2022)
-
-Updated to .NET MAUI RC 1 and macOS 11 build environment.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.232...v2.88.0-preview.254)
-
----
-
-## Preview 232 (May 11, 2022)
-
-SBOM generation, MAUI Preview 14, and CI pipeline improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.209...v2.88.0-preview.232)
-
----
-
-## Preview 209 (May 11, 2022)
-
-CI improvements and Mac Catalyst workaround removals.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.187...v2.88.0-preview.209)
-
----
-
-## Preview 187 (May 11, 2022)
-
-Android packaging fix and MAUI Preview 12 update.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.179...v2.88.0-preview.187)
-
----
-
-## Preview 179 (January 18, 2022)
-
-Uno Platform 4.0 support.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.88.0-preview.179)
-
----
-
-## Preview 178 (January 18, 2022)
-
-HandleDictionary critical section, Blazor infinite loop fix, and native statics disposal fix.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.88.0-preview.178)
-
----
-
-## Preview 155 (January 18, 2022)
-
-Dependency updates across the board.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.88.0-preview.155)
-
----
-
-## Preview 152 (October 22, 2021)
-
-New Skia APIs exposed to C#.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.88.0-preview.152)
-
----
-
-## Preview 150 (October 11, 2021)
-
-ASP.NET Blazor WebAssembly support added.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.88.0-preview.150)
-
----
-
-## Preview 145 (September 28, 2021)
-
-Windows native symbols and HarfBuzzSharp native asset packages.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.140...v2.88.0-preview.145)
-
----
-
-## Preview 140 (September 28, 2021)
-
-ANGLE zlib1.dll output fix for Windows GPU rendering.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.139...v2.88.0-preview.140)
-
----
-
-## Preview 139 (September 13, 2021)
-
-WindowsAppSDK migration, `IsAntialias`/`IgnorePixelScaling` fixes, and graceful surface allocation failure.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.127...v2.88.0-preview.139)
-
----
-
-## Preview 127 (September 13, 2021)
-
-HarfBuzz 2.8.2 update, Xamarin.Forms netcoreapp3.1 support, and PDB files in packages.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.120...v2.88.0-preview.127)
-
----
-
-## Preview 120 (August 10, 2021)
-
-Mac Catalyst support, split native asset packages, and Emscripten 2.0.23.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0-preview.61...v2.88.0-preview.120)
-
----
-
-## Preview 61 (July 12, 2021)
-
-Initial .NET 6 TFMs and .NET MAUI views with compatibility and handler support.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.80.3...v2.88.0-preview.61)
diff --git a/documentation/docfx/releases/2.88.1.md b/documentation/docfx/releases/2.88.1.md
index 051a6e4357f..ece0b31a97a 100644
--- a/documentation/docfx/releases/2.88.1.md
+++ b/documentation/docfx/releases/2.88.1.md
@@ -1,139 +1,141 @@
+
+
+
+
# Version 2.88.1
-> **Skottie animations, WinUI, and Tizen support** · Released August 17, 2022 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.1)
+> **Skottie & platform release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.1)
## Highlights
-This release introduces Skottie (Lottie animation) support as a new standalone package, adds WinUI views for the Uno Platform, brings Tizen as a first-class TFM target, and enables nullable reference type annotations. Native dependencies are updated to address security issues in zlib, libexpat, libwebp, and libjpeg-turbo. Five community contributors made their first contributions.
+This release introduces **Skottie**, SkiaSharp's Lottie animation engine, alongside new **WinUI** support and **AVIF** image encoding. It also refreshes the bundled native dependencies (libjpeg-turbo, libwebp, libexpat and zlib) for security and correctness. Skottie, WinUI and several fixes were driven by community contributors including [@jeromelaban](https://github.com/jeromelaban), [@mgood7123](https://github.com/mgood7123), [@koolkdev](https://github.com/koolkdev), [@HarlanHugh](https://github.com/HarlanHugh) and [@RichardD2](https://github.com/RichardD2).
-## Breaking Changes
+## New Features
-*None in this release.*
+### Engine
-## New Features
+- **libjpeg-turbo 2.1.3** — Updates the bundled JPEG decoder. ([#2206](https://github.com/mono/SkiaSharp/pull/2206), skia [mono/skia#97](https://github.com/mono/skia/pull/97))
+- **libwebp 1.2.3** — Updates the bundled WebP codec. ([#2193](https://github.com/mono/SkiaSharp/pull/2193))
+- **libexpat 2.4.8** — Updates the bundled XML parser. ([#2189](https://github.com/mono/SkiaSharp/pull/2189))
+- **zlib PNG fix** — Updates zlib to resolve PNG loading issues. ([#2045](https://github.com/mono/SkiaSharp/pull/2045))
-### API Surface
+### Animation
-- **Skottie animation support** — New `SkiaSharp.Skottie` package for playing Lottie/Bodymovin animations backed by Skia's Skottie engine, including nullable attributes, `TimeSpan` overloads, non-seekable stream handling, and BOM support. ❤️ @jeromelaban ([#1987](https://github.com/mono/SkiaSharp/pull/1987), [#2091](https://github.com/mono/SkiaSharp/pull/2091), [#2119](https://github.com/mono/SkiaSharp/pull/2119), [#2126](https://github.com/mono/SkiaSharp/pull/2126), [#2167](https://github.com/mono/SkiaSharp/pull/2167))
-- **AVIF image encode format** — Exposed the AVIF encoder for saving images in AVIF format. ❤️ @mgood7123 ([#2154](https://github.com/mono/SkiaSharp/pull/2154))
-- **SKShaper text alignment** — `SKShaper` now respects the `SKPaint.TextAlign` property when shaping text. ❤️ @koolkdev ([#1910](https://github.com/mono/SkiaSharp/pull/1910))
-- **Nullable annotations** — Added nullable reference type annotations and newer TFMs across the library. ([#2120](https://github.com/mono/SkiaSharp/pull/2120))
-- **SKDataStream made writeable** — `SKDataStream` now supports write operations, matching `SKData` behavior. ([#2128](https://github.com/mono/SkiaSharp/pull/2128))
+- **Skottie (Lottie) support** — Adds a managed Skottie binding for playing Lottie/After Effects animations. Initial support landed from ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#1987](https://github.com/mono/SkiaSharp/pull/1987)), with follow-up work adding nullable annotations and `TimeSpan` overloads, handling non-seekable streams, and moving Skottie and SceneGraph out of the core `SkiaSharp.dll` ([#2091](https://github.com/mono/SkiaSharp/pull/2091), [#2119](https://github.com/mono/SkiaSharp/pull/2119), [#2126](https://github.com/mono/SkiaSharp/pull/2126))
-### Platform
+### Images & Documents
-- **WinUI support for Uno** — Added SkiaSharp views for Uno Platform's WinUI target. ❤️ @jeromelaban ([#2042](https://github.com/mono/SkiaSharp/pull/2042))
-- **Tizen TFM** — Added `net6.0-tizen` target framework for Samsung Tizen devices. ([#2099](https://github.com/mono/SkiaSharp/pull/2099))
-- **Emscripten 3.1.7** — Updated WASM builds for Emscripten 3.1.7. ❤️ @jeromelaban ([#2094](https://github.com/mono/SkiaSharp/pull/2094))
-- **Skottie on all .NET 6 platforms** — Skottie available on iOS, Android, Mac Catalyst, macOS, tvOS, and Tizen. ❤️ @jeromelaban ([#2133](https://github.com/mono/SkiaSharp/pull/2133))
+- **AVIF encoding** — Exposes the AVIF image encode format. ❤️ [@mgood7123](https://github.com/mgood7123) ([#2154](https://github.com/mono/SkiaSharp/pull/2154))
+- **Animations with a BOM** — Supports loading animations whose data starts with a byte-order mark. ([#2167](https://github.com/mono/SkiaSharp/pull/2167))
-### Engine
+### API Surface
+
+- **Writeable `SKDataStream`** — Makes `SKDataStream` writeable, matching `SKData`. ([#2128](https://github.com/mono/SkiaSharp/pull/2128))
+- **Nullable annotations & newer TFMs** — Adds nullable reference type annotations and additional target frameworks across the libraries. ([#2120](https://github.com/mono/SkiaSharp/pull/2120))
-- **SKGLView backing scale factor** — `SKGLView` now reshapes when the window's `BackingScaleFactor` changes (e.g., moving between Retina and non-Retina displays). ❤️ @HarlanHugh ([#1854](https://github.com/mono/SkiaSharp/pull/1854))
-- **Internal library configuration** — Added an initial configuration system for internal library settings. ([#1856](https://github.com/mono/SkiaSharp/pull/1856))
+### Text & Fonts
-## Security
+- **`SKShaper` text alignment** — `SKShaper` now honors the `SKPaint.TextAlign` property. ❤️ [@koolkdev](https://github.com/koolkdev) ([#1910](https://github.com/mono/SkiaSharp/pull/1910))
+
+### Platform
-- **Update zlib** — Fixed PNG loading issues by updating the bundled zlib. ([#2045](https://github.com/mono/SkiaSharp/pull/2045))
-- **Update libexpat to 2.4.8** — Addresses known vulnerabilities. ([#2189](https://github.com/mono/SkiaSharp/pull/2189))
-- **Update libwebp to 1.2.3** — Addresses known vulnerabilities. ([#2193](https://github.com/mono/SkiaSharp/pull/2193))
-- **Update libjpeg-turbo to 2.1.3** — Addresses known vulnerabilities. ([#2206](https://github.com/mono/SkiaSharp/pull/2206))
+- **WinUI support** — Adds a WinUI rendering backend. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2042](https://github.com/mono/SkiaSharp/pull/2042))
+- **emscripten 3.1.7** — Updates the WebAssembly toolchain to emscripten 3.1.7. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2094](https://github.com/mono/SkiaSharp/pull/2094))
+- **`net6.0-tizen` TFM** — Adds a `net6.0-tizen` target framework. ([#2099](https://github.com/mono/SkiaSharp/pull/2099))
## Bug Fixes
-- **Return null on invalid resize bounds** — Prevents crashes when calling resize with invalid dimensions. ([#2054](https://github.com/mono/SkiaSharp/pull/2054))
-- **Fix Alpine Linux builds** — Corrected native library loading on Alpine/musl-based distributions. ([#2168](https://github.com/mono/SkiaSharp/pull/2168), [#2192](https://github.com/mono/SkiaSharp/pull/2192))
-- **Fix critical section after deletion** — Prevents accessing a deleted critical section during HandleDictionary cleanup. ❤️ @RichardD2 ([#2195](https://github.com/mono/SkiaSharp/pull/2195))
-- **Fix font loading with Unicode names** — Fonts with Unicode characters in their names now load correctly. ❤️ @lindexi ([#2146](https://github.com/mono/SkiaSharp/pull/2146))
-- **Use full libc library name** — Fixes P/Invoke resolution on certain Linux configurations. ([#2213](https://github.com/mono/SkiaSharp/pull/2213))
+- **Fixed loading fonts with Unicode names** — Resolves failures loading fonts whose file name contains Unicode text. ([#2146](https://github.com/mono/SkiaSharp/pull/2146))
+- **Fixed Alpine builds** — Corrects the Alpine Linux build. ([#2168](https://github.com/mono/SkiaSharp/pull/2168), [#2192](https://github.com/mono/SkiaSharp/pull/2192))
+- **Guarded finalized locks** — Checks whether a lock has been finalized before entering or leaving the critical section. ❤️ [@RichardD2](https://github.com/RichardD2) ([#2195](https://github.com/mono/SkiaSharp/pull/2195))
+- **Reshaped `SKGLView` on scale change** — Reshapes the view when `Window.BackingScaleFactor` changes (#1853). ❤️ [@HarlanHugh](https://github.com/HarlanHugh) ([#1854](https://github.com/mono/SkiaSharp/pull/1854))
+- **Returned null on invalid resize bounds** — Avoids errors when resize bounds are invalid. ([#2054](https://github.com/mono/SkiaSharp/pull/2054))
+- **Implemented a missing Mac/iOS feature** — Fills in functionality that was previously unimplemented on Mac/iOS. ([#2198](https://github.com/mono/SkiaSharp/pull/2198))
+- **Fixed Uno Roslyn generation** — Forces Uno's Roslyn-hosted generators and adds the missing Uno.WinUI JavaScript support file. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2199](https://github.com/mono/SkiaSharp/pull/2199), [#2086](https://github.com/mono/SkiaSharp/pull/2086))
+
+Plus the C API increment, newer .NET targeting and numerous CI and packaging improvements.
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | Skottie on iOS/macOS/tvOS/Mac Catalyst, SKGLView backing scale fix |
-| 🪟 Windows | WinUI views for Uno Platform |
-| 🐧 Linux | Alpine build fixes, full libc name resolution |
-| 🤖 Android | Skottie support |
-| 🌐 WebAssembly | Emscripten 3.1.7, Uno WinUI WASM support |
+| 🪟 Windows | WinUI rendering backend |
+| 🌐 WebAssembly | emscripten 3.1.7, Uno.WinUI support |
+| 📦 Tizen | `net6.0-tizen` target framework |
+| 🎨 Core API | Skottie animation engine, AVIF encoding, writeable `SKDataStream`, nullable annotations |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@jeromelaban](https://github.com/jeromelaban) | Skottie support, WinUI, Emscripten 3.1.7, multi-platform Skottie |
-| [@koolkdev](https://github.com/koolkdev) | SKShaper text alignment support |
-| [@mgood7123](https://github.com/mgood7123) | AVIF encode format |
-| [@HarlanHugh](https://github.com/HarlanHugh) | SKGLView backing scale factor reshape |
-| [@lindexi](https://github.com/lindexi) | Unicode font name loading fix |
-| [@RichardD2](https://github.com/RichardD2) | Critical section deletion fix |
+| [@jeromelaban](https://github.com/jeromelaban) | Basic Skottie support, WinUI backend, emscripten 3.1.7, Skottie TFMs, Uno fixes, CI retries |
+| [@mgood7123](https://github.com/mgood7123) | Exposed AVIF encoding and tidied `.gitignore` |
+| [@koolkdev](https://github.com/koolkdev) | Added `SKPaint.TextAlign` support to `SKShaper` |
+| [@HarlanHugh](https://github.com/HarlanHugh) | Reshaped `SKGLView` on backing-scale changes |
+| [@RichardD2](https://github.com/RichardD2) | Guarded against entering a finalized lock |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0...v2.88.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.88.1)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.88.1)
-
----
-
-## Preview 108 (August 12, 2022)
-
-Internal library configuration, full libc library name, and .NET updates.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.1-preview.104...v2.88.1-preview.108)
-
----
-
-## Preview 104 (August 10, 2022)
-
-Security updates for libexpat, libwebp, and libjpeg-turbo. Alpine build fixes and Unicode font name loading.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.1-preview.91...v2.88.1-preview.104)
-
----
-
-## Preview 91 (August 4, 2022)
-
-AVIF encode format, Skottie BOM support, Alpine build fixes, and XML documentation improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.1-preview.79...v2.88.1-preview.91)
-
----
-
-## Preview 79 (August 4, 2022)
-
-SKDataStream writeable, Skottie on all .NET 6 platform TFMs.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.1-preview.75...v2.88.1-preview.79)
-
----
-
-## Preview 75 (August 4, 2022)
-
-SKGLView backing scale factor reshape and Skottie non-seekable stream handling.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.1-preview.71...v2.88.1-preview.75)
-
----
-
-## Preview 71 (August 4, 2022)
-
-Nullable annotations and Skottie API improvements with TimeSpan overloads.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.1-preview.63...v2.88.1-preview.71)
-
----
-
-## Preview 63 (August 4, 2022)
-
-Skottie animation support, WinUI for Uno, Tizen TFM, SKShaper text alignment, and Emscripten 3.1.7.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.1-preview.1...v2.88.1-preview.63)
-
----
-
-## Preview 1 (May 22, 2022)
-
-Initial preview with zlib fix for PNG loading issues.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.0...v2.88.1-preview.1)
diff --git a/documentation/docfx/releases/2.88.2.md b/documentation/docfx/releases/2.88.2.md
index 395b881321a..8fc8413a028 100644
--- a/documentation/docfx/releases/2.88.2.md
+++ b/documentation/docfx/releases/2.88.2.md
@@ -1,33 +1,55 @@
+
+
+
+
# Version 2.88.2
-> **Tizen backend fix and Apple rect conversion** · Released September 8, 2022 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.2)
+> **Platform fixes release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.2)
## Highlights
-A focused patch release with three targeted fixes: Tizen's graphics backend engine is updated for better rendering, an unused native library block is cleaned up from the Uno WinUI packages, and `SKRect` to `CGRect` conversion on Apple platforms is corrected. One new community contributor joined.
+This release corrects Apple coordinate conversion and brings two community-driven platform fixes for Uno Platform and Tizen. Thanks to [@jeromelaban](https://github.com/jeromelaban) and [@myroot](https://github.com/myroot) for their contributions.
+
+## New Features
-## Breaking Changes
+### Platform
-*None in this release.*
+- **Tizen graphics backend** — Changes the Tizen graphics backend engine for improved rendering on the platform. ❤️ [@myroot](https://github.com/myroot) ([#2225](https://github.com/mono/SkiaSharp/pull/2225))
## Bug Fixes
-- **Tizen graphics backend engine change** — Switched the Tizen graphics backend for improved rendering behavior. ❤️ @myroot ([#2225](https://github.com/mono/SkiaSharp/pull/2225))
-- **Remove unused native library block from Uno views** — Cleaned up unnecessary native library references in `SkiaSharp.Views.Uno.UI/WinUI`. ❤️ @jeromelaban ([#2231](https://github.com/mono/SkiaSharp/pull/2231))
-- **Fix SKRect to CGRect conversion** — Corrected the conversion between SkiaSharp rectangles and Apple Core Graphics rectangles on iOS/macOS. ([#2243](https://github.com/mono/SkiaSharp/pull/2243))
+- **Correct `SKRect` to `CGRect` conversion** — Fixes incorrect coordinate conversion when interoperating with Apple's `CGRect`. ([#2243](https://github.com/mono/SkiaSharp/pull/2243))
+- **Removed unused native library block in Uno WinUI** — Drops a stale native library reference from `SkiaSharp.Views.Uno.WinUI`. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2231](https://github.com/mono/SkiaSharp/pull/2231))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | Fixed `SKRect` to `CGRect` conversion |
+| 🍎 Apple | Correct `SKRect` → `CGRect` conversion |
+| 📦 Tizen | New graphics backend engine |
+| 🎨 Uno Platform | Removed unused native library block (WinUI) |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@myroot](https://github.com/myroot) | Tizen graphics backend update |
-| [@jeromelaban](https://github.com/jeromelaban) | Uno WinUI cleanup |
+| [@jeromelaban](https://github.com/jeromelaban) | Removed an unused native library block from `SkiaSharp.Views.Uno.WinUI` |
+| [@myroot](https://github.com/myroot) | Changed the Tizen graphics backend engine |
## Links
diff --git a/documentation/docfx/releases/2.88.3.md b/documentation/docfx/releases/2.88.3.md
index b0361c8e411..1305ba1d38e 100644
--- a/documentation/docfx/releases/2.88.3.md
+++ b/documentation/docfx/releases/2.88.3.md
@@ -1,45 +1,68 @@
+
+
+
+
# Version 2.88.3
-> **.NET 7 and Blazor support** · Released October 4, 2022 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.3)
+> **.NET 7 and WebAssembly improvements** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.3) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.3)
## Highlights
-This release adds .NET 7 build infrastructure and Blazor view support, updates the WASM backend to Emscripten 3.1.12 with SIMD features, fixes a Linux native library loading issue with `RTLD_DEEPBIND`, and corrects stream skip behavior. One new community contributor joined.
-
-## Breaking Changes
-
-*None in this release.*
+This release adds .NET 7 support for Blazor views and the build infrastructure behind it, upgrades the WebAssembly build to Emscripten 3.1.12 with SIMD features, and improves GL interop for .NET. Community contributors [@jeromelaban](https://github.com/jeromelaban) and [@snnz](https://github.com/snnz) drove the WebAssembly and Linux loader improvements.
## New Features
-### Platform
+### GPU & Rendering
-- **.NET 7 build infrastructure** — Added build support for the .NET 7 SDK and runtime. ([#2255](https://github.com/mono/SkiaSharp/pull/2255))
-- **.NET 7 Blazor views** — SkiaSharp Blazor views now target .NET 7. ([#2254](https://github.com/mono/SkiaSharp/pull/2254))
-- **Emscripten 3.1.12 with SIMD** — WASM builds updated with Emscripten 3.1.12 and SIMD feature support for improved performance. ❤️ @jeromelaban ([#2259](https://github.com/mono/SkiaSharp/pull/2259))
+- **GL interception for .NET** — Intercepts and captures GL for .NET. ([#2268](https://github.com/mono/SkiaSharp/pull/2268))
-### Engine
+### Platform
-- **GL interception for .NET** — Intercept and capture OpenGL contexts for .NET-based GPU rendering. ([#2268](https://github.com/mono/SkiaSharp/pull/2268))
+- **.NET 7 Blazor views** — Adds .NET 7 support for Blazor views, along with the supporting build infrastructure. ([#2254](https://github.com/mono/SkiaSharp/pull/2254), [#2255](https://github.com/mono/SkiaSharp/pull/2255))
+- **Emscripten 3.1.12 with SIMD** — Generates for Emscripten 3.1.12 and enables SIMD features for WebAssembly. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2259](https://github.com/mono/SkiaSharp/pull/2259))
+- **`RTLD_DEEPBIND` dlopen flag** — Adds the `RTLD_DEEPBIND` flag to the `dlopen` mode on Linux. ❤️ [@snnz](https://github.com/snnz) ([#2247](https://github.com/mono/SkiaSharp/pull/2247))
## Bug Fixes
-- **Add `RTLD_DEEPBIND` flag to `dlopen`** — Prevents symbol conflicts when loading native libraries on Linux. ❤️ @snnz ([#2247](https://github.com/mono/SkiaSharp/pull/2247))
-- **Fix stream skip implementation** — Stream skip operations now correctly read to a null buffer instead of seeking, fixing issues with non-seekable streams. ([#2265](https://github.com/mono/SkiaSharp/pull/2265))
+- **WASM archive lookup** — Fixes invalid globbing for the 3.1.12 archive lookup. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2269](https://github.com/mono/SkiaSharp/pull/2269))
+- **Null-buffer skip** — Treats a skip as a read into a null buffer. ([#2265](https://github.com/mono/SkiaSharp/pull/2265))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🐧 Linux | `RTLD_DEEPBIND` for safer native library loading |
-| 🌐 WebAssembly | Emscripten 3.1.12, SIMD features, .NET 7 Blazor |
+| 🌐 WebAssembly | Emscripten 3.1.12 with SIMD, archive lookup fix |
+| 📦 General | .NET 7 Blazor views and build infrastructure, GL interception |
+| 🐧 Linux | `RTLD_DEEPBIND` dlopen flag |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@snnz](https://github.com/snnz) | `RTLD_DEEPBIND` flag for Linux `dlopen` |
-| [@jeromelaban](https://github.com/jeromelaban) | Emscripten 3.1.12 and SIMD features |
+| [@jeromelaban](https://github.com/jeromelaban) | Upgraded WebAssembly to Emscripten 3.1.12 with SIMD and fixed archive lookup |
+| [@snnz](https://github.com/snnz) | Added the `RTLD_DEEPBIND` dlopen flag on Linux |
## Links
diff --git a/documentation/docfx/releases/2.88.4.md b/documentation/docfx/releases/2.88.4.md
index 8e0afe44c7e..24562f56280 100644
--- a/documentation/docfx/releases/2.88.4.md
+++ b/documentation/docfx/releases/2.88.4.md
@@ -1,120 +1,148 @@
+
+
+
+
# Version 2.88.4
-> **.NET 8 preview, ARM64 macOS, and security updates** · Released August 22, 2023 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.4) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.4)
+> **Apple Silicon & WebAssembly release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.4) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.4)
## Highlights
-A substantial servicing release spanning nearly a year of work. Key additions include .NET 8 preview support, ARM64 macOS build machines, WASM multi-threading with SIMD, and Android `.aar` shipping in NuGet. Security updates cover zlib, libpng, and libexpat. Ten new community contributors helped fix disposal bugs, improve performance, and refine Uno Platform integration.
+This release adds native support for ARM64 (Apple Silicon) macOS machines and brings a wave of WebAssembly improvements — including exception handling, SIMD, and multithreading across .NET 7 and .NET 8 targets. It also refreshes core native dependencies for security and lands a large number of community-driven Uno, MAUI, and Tizen fixes.
-## Breaking Changes
+## New Features
-*None in this release.*
+### Engine
-## New Features
+- **Updated native dependencies** — Bumps libpng to v1.6.40 and libexpat to 2.5.0+ for security and stability. ([#2510](https://github.com/mono/SkiaSharp/pull/2510))
+- **Updated zlib to 1.2.13** — Refreshes the bundled zlib for the latest fixes. ([#2484](https://github.com/mono/SkiaSharp/pull/2484))
### Platform
-- **.NET 8 Preview support** — Build infrastructure updated for .NET 8 Preview 4. ❤️ @jeromelaban ([#2457](https://github.com/mono/SkiaSharp/pull/2457))
-- **ARM64 macOS build machines** — Native builds now run on Apple Silicon (ARM64) macOS machines. ([#2468](https://github.com/mono/SkiaSharp/pull/2468))
-- **WASM multi-threading and SIMD** — Added multi-threaded and multi-threaded+SIMD WASM configurations. ❤️ @jeromelaban ([#2286](https://github.com/mono/SkiaSharp/pull/2286))
-- **WASM Exception Handling and SIMD for .NET 8+** — Enabled Wasm EH and SIMD in all configurations for .NET 8 and later. ❤️ @jeromelaban ([#2495](https://github.com/mono/SkiaSharp/pull/2495))
-- **Blazor .NET 8 assets** — New WASM assets included for Blazor on .NET 8. ([#2497](https://github.com/mono/SkiaSharp/pull/2497))
-- **JSImport for WinUI on .NET 7** — Moved from JS interop to modern `JSImport` for Uno WinUI WASM targets. ❤️ @jeromelaban ([#2428](https://github.com/mono/SkiaSharp/pull/2428))
-- **Ship .aar with Android NuGet** — Android Archive (`.aar`) now included in the NuGet for better Android tooling integration. ❤️ @dellis1972 ([#2465](https://github.com/mono/SkiaSharp/pull/2465))
-- **iOS Hot Restart NativeReference** — Added `NativeReference` metadata so iOS Hot Restart works correctly. ([#2553](https://github.com/mono/SkiaSharp/pull/2553))
-- **iOS Simulator RID artifacts** — The `iossimulator` RID now ships native assets. ([#2498](https://github.com/mono/SkiaSharp/pull/2498))
-- **Windows App SDK update** — Bumped to a newer Windows App SDK. ([#2276](https://github.com/mono/SkiaSharp/pull/2276))
+- **ARM64 macOS support** — Adds support for Apple Silicon (ARM64) macOS machines. ([#2468](https://github.com/mono/SkiaSharp/pull/2468))
+- **JSImport for WinUI on net7.0** — Moves the WASM WinUI target to JSImport. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2428](https://github.com/mono/SkiaSharp/pull/2428))
+- **WASM exception handling & SIMD** — Enables WebAssembly exception handling and SIMD in all configurations for net8+. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2495](https://github.com/mono/SkiaSharp/pull/2495))
+- **WASM multithreading & SIMD** — Adds `mt` and `mt+simd` variants and fixes HarfBuzz for emsdk 3.1.12. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2286](https://github.com/mono/SkiaSharp/pull/2286))
+- **Blazor WASM assets for .NET 8** — Ships the new WASM assets in Blazor for .NET 8. ([#2497](https://github.com/mono/SkiaSharp/pull/2497))
+- **Uno.WinUI target resolution** — Disambiguates `SKGLView` for Uno and MAUI targets and adjusts net7.0 resolution for Uno.WinUI. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2529](https://github.com/mono/SkiaSharp/pull/2529), [#2503](https://github.com/mono/SkiaSharp/pull/2503))
+- **Android .aar packaging** — Ships the `.aar` with the Android NuGet. ❤️ [@dellis1972](https://github.com/dellis1972) ([#2465](https://github.com/mono/SkiaSharp/pull/2465))
+- **Hot Restart support** — Includes the `NativeReference` for Hot Restart. ([#2553](https://github.com/mono/SkiaSharp/pull/2553))
+- **.NET 8 Preview 4 support** — Adds support for .NET 8 Preview 4. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2457](https://github.com/mono/SkiaSharp/pull/2457))
+- **.NET iOS & Mac Catalyst samples** — Adds a .NET iOS & Mac Catalyst sample and .NET "Core" sample support. ([#2491](https://github.com/mono/SkiaSharp/pull/2491))
-### Engine
+### API Surface
-- **SKColor hex parsing performance** — Significantly improved hex string parsing performance for `SKColor`. ❤️ @jwikberg ([#2467](https://github.com/mono/SkiaSharp/pull/2467))
-- **CodeQL security scanning** — Enabled CodeQL analysis in CI for automated vulnerability detection. ❤️ @Redth ([#2303](https://github.com/mono/SkiaSharp/pull/2303))
-- **CVE binary tool scanning** — Added `cve-bin-tool` to CI for detecting known vulnerabilities in native binaries. ([#2490](https://github.com/mono/SkiaSharp/pull/2490))
+- **Faster SKColor hex parsing** — Improves the performance of hex string parsing in `SKColor`. ❤️ [@jwikberg](https://github.com/jwikberg) ([#2467](https://github.com/mono/SkiaSharp/pull/2467))
+- **Code cleanup** — Reduces nesting levels using block-scoped `using` statements. ❤️ [@Lehonti](https://github.com/Lehonti) ([#2528](https://github.com/mono/SkiaSharp/pull/2528))
-## Security
+### Security
-- **Update zlib to 1.2.13** — Addresses known vulnerabilities in the compression library. ([#2484](https://github.com/mono/SkiaSharp/pull/2484))
-- **Update libpng to v1.6.40** — Addresses known vulnerabilities. ([#2510](https://github.com/mono/SkiaSharp/pull/2510))
-- **Update libexpat to 2.5.0** — Addresses known vulnerabilities. ([#2510](https://github.com/mono/SkiaSharp/pull/2510))
+- **Enabled CodeQL** — Adds CodeQL static analysis to the build. ❤️ [@Redth](https://github.com/Redth) ([#2303](https://github.com/mono/SkiaSharp/pull/2303))
+- **CVE scanning** — Runs `cve-bin-tool` against native binaries. ([#2490](https://github.com/mono/SkiaSharp/pull/2490))
## Bug Fixes
-- **Fix Tizen canvas size calculation** — Corrected how canvas dimensions are computed on Tizen. ❤️ @myroot ([#2322](https://github.com/mono/SkiaSharp/pull/2322))
-- **Fix Android ObjectDisposedException** — Added additional checks to avoid `ObjectDisposedException` on Android views. ❤️ @FoggyFinder ([#2313](https://github.com/mono/SkiaSharp/pull/2313))
-- **Fix SKCanvasView dispose before render** — Prevents exceptions when the view is disposed before its first render. ❤️ @jjzhang12 ([#2472](https://github.com/mono/SkiaSharp/pull/2472))
-- **Fix `ToRect` extension method** — Corrected the `ToRect` extension to return proper values. ❤️ @niza93 ([#2392](https://github.com/mono/SkiaSharp/pull/2392))
-- **Fix Uno opaque defaults on iOS/macOS** — Set `SKSwapChainPanel` and `SKXamlCanvas` to non-opaque by default for consistency. ❤️ @roubachof ([#2398](https://github.com/mono/SkiaSharp/pull/2398), [#2400](https://github.com/mono/SkiaSharp/pull/2400), [#2401](https://github.com/mono/SkiaSharp/pull/2401))
-- **Fix macOS opaque method** — Used the correct method for setting `Opaque` on macOS. ([#2477](https://github.com/mono/SkiaSharp/pull/2477))
-- **Fix bitmap SKAlphaType in WASM** — Corrected alpha type when rendering bitmaps in `SKXamlCanvas` on WASM. ❤️ @roubachof ([#2443](https://github.com/mono/SkiaSharp/pull/2443))
-- **Disambiguate SKGLView for Uno/MAUI** — Resolved type conflicts between Uno and MAUI `SKGLView` targets. ❤️ @jeromelaban ([#2529](https://github.com/mono/SkiaSharp/pull/2529))
+- **Fixed `ToRect` extension method** — Corrects the `ToRect` extension. ❤️ [@niza93](https://github.com/niza93) ([#2392](https://github.com/mono/SkiaSharp/pull/2392))
+- **Fixed `SKCanvasView` dispose exception** — Resolves an exception when the view is disposed before it has rendered. ❤️ [@jjzhang12](https://github.com/jjzhang12) ([#2472](https://github.com/mono/SkiaSharp/pull/2472))
+- **Added guard against exception** — Adds an additional check to avoid an exception. ❤️ [@FoggyFinder](https://github.com/FoggyFinder) ([#2313](https://github.com/mono/SkiaSharp/pull/2313))
+- **Fixed Tizen canvas size calculation** — Corrects the canvas size calculation on Tizen. ❤️ [@myroot](https://github.com/myroot) ([#2322](https://github.com/mono/SkiaSharp/pull/2322))
+- **Corrected macOS Opaque handling** — Uses the correct method for setting `Opaque` on macOS. ([#2477](https://github.com/mono/SkiaSharp/pull/2477))
+- **Uno: SKXamlCanvas alpha type & Opaque** — Updates the bitmap `SKAlphaType` in `SKXamlCanvas.Wasm`, defaults `Opaque` to false on macOS and iOS, and updates the `SKSwapChainPanel` for Android and iOS. ❤️ [@roubachof](https://github.com/roubachof) ([#2443](https://github.com/mono/SkiaSharp/pull/2443), [#2398](https://github.com/mono/SkiaSharp/pull/2398), [#2400](https://github.com/mono/SkiaSharp/pull/2400), [#2401](https://github.com/mono/SkiaSharp/pull/2401))
+
+Plus several CI, build, and tooling improvements, including pipeline fixes from [@pjcollins](https://github.com/pjcollins) ([#2393](https://github.com/mono/SkiaSharp/pull/2393), [#2389](https://github.com/mono/SkiaSharp/pull/2389)) and a `cgmanifest.json` schema from [@JamieMagee](https://github.com/JamieMagee) ([#2232](https://github.com/mono/SkiaSharp/pull/2232)).
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | ARM64 macOS builds, iOS Hot Restart support, iOS Simulator RID, opaque fix |
-| 🪟 Windows | Updated Windows App SDK |
-| 🤖 Android | `.aar` in NuGet, `ObjectDisposedException` fix, canvas dispose fix |
-| 🌐 WebAssembly | Multi-threading, SIMD, .NET 8 Blazor, JSImport for WinUI, alpha type fix |
+| 🍎 Apple | ARM64 (Apple Silicon) macOS support, iOS & Mac Catalyst samples, macOS Opaque fix |
+| 🌐 WebAssembly | Exception handling, SIMD, multithreading, JSImport, Blazor .NET 8 assets |
+| 🤖 Android | `.aar` shipped with the NuGet, SwapChainPanel fixes |
+| 📱 Tizen | Canvas size calculation fix |
+| 🎨 Core API | Faster `SKColor` hex parsing, `ToRect` fix |
+| 🏗️ Build/CI | CodeQL, CVE scanning, refreshed native dependencies |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@Redth](https://github.com/Redth) | CodeQL security scanning |
-| [@roubachof](https://github.com/roubachof) | Uno opaque defaults and WASM alpha type fixes |
-| [@dellis1972](https://github.com/dellis1972) | Android `.aar` in NuGet |
-| [@FoggyFinder](https://github.com/FoggyFinder) | Android `ObjectDisposedException` guard |
-| [@jjzhang12](https://github.com/jjzhang12) | SKCanvasView dispose-before-render fix |
-| [@jwikberg](https://github.com/jwikberg) | SKColor hex parsing performance |
-| [@niza93](https://github.com/niza93) | `ToRect` extension method fix |
-| [@JamieMagee](https://github.com/JamieMagee) | `$schema` for `cgmanifest.json` |
-| [@Lehonti](https://github.com/Lehonti) | Code cleanup with block-scoped `using` |
-| [@myroot](https://github.com/myroot) | Tizen canvas size fix |
-| [@jeromelaban](https://github.com/jeromelaban) | WASM MT+SIMD, .NET 8, JSImport, SKGLView disambiguation |
+| [@jeromelaban](https://github.com/jeromelaban) | WASM multithreading/SIMD, JSImport WinUI target, Uno target resolution, HarfBuzz fix |
+| [@jeromelaban](https://github.com/jeromelaban) | WASM exception handling & SIMD, .NET 8 Preview 4 support |
+| [@roubachof](https://github.com/roubachof) | Uno SKXamlCanvas alpha type & Opaque defaults, SwapChainPanel updates |
+| [@dellis1972](https://github.com/dellis1972) | Shipped the Android `.aar` with the NuGet |
+| [@jwikberg](https://github.com/jwikberg) | Improved `SKColor` hex string parsing performance |
+| [@niza93](https://github.com/niza93) | Fixed the `ToRect` extension method |
+| [@jjzhang12](https://github.com/jjzhang12) | Fixed `SKCanvasView` dispose exception |
+| [@FoggyFinder](https://github.com/FoggyFinder) | Added a guard against an exception |
+| [@myroot](https://github.com/myroot) | Fixed Tizen canvas size calculation |
+| [@Lehonti](https://github.com/Lehonti) | Reduced nesting with block-scoped `using` statements |
+| [@Redth](https://github.com/Redth) | Enabled CodeQL static analysis |
+| [@pjcollins](https://github.com/pjcollins) | CI pipeline improvements |
+| [@JamieMagee](https://github.com/JamieMagee) | Added a `$schema` to `cgmanifest.json` |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.3...v2.88.4)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.88.4)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.88.4)
-
----
-
-## Preview 96 (August 22, 2023)
-
-.NET SDK version tracking improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.4-preview.95...v2.88.4-preview.96)
-
----
-
-## Preview 95 (August 22, 2023)
-
-Updated libpng and libexpat, SKGLView disambiguation for Uno/MAUI, and iOS Hot Restart support.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.4-preview.82...v2.88.4-preview.95)
-
----
-
-## Preview 82 (June 26, 2023)
-
-Blazor .NET 8 assets, `ToRect` fix, JSImport for WinUI, and iOS Simulator RID.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.4-preview.76...v2.88.4-preview.82)
-
----
-
-## Preview 76 (June 19, 2023)
-
-ARM64 macOS builds, SKColor hex parsing performance, and WASM EH+SIMD for .NET 8.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.4-preview.70...v2.88.4-preview.76)
-
----
-
-## Preview 70 (June 16, 2023)
-
-Initial preview with .NET 5 SDK removal, Windows App SDK update, WASM multi-threading, zlib 1.2.13, CodeQL scanning, and multiple Uno/Android/Tizen bug fixes.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.3...v2.88.4-preview.70)
+- [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.4)
diff --git a/documentation/docfx/releases/2.88.5.md b/documentation/docfx/releases/2.88.5.md
index 59bccd5f7b6..3c626aa830e 100644
--- a/documentation/docfx/releases/2.88.5.md
+++ b/documentation/docfx/releases/2.88.5.md
@@ -1,33 +1,42 @@
-# Version 2.88.5
+
+
+
+
+# Version 2.88.5
-SkiaSharp 2.88.5 is a targeted patch release that fixes canvas rendering issues on the Uno Platform (including WebAssembly) and corrects outward rounding when converting `SKRect` to `SKRectI`. One community contributor drove two of the three fixes.
+> **Uno Platform and rectangle conversion fixes** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.5) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.5)
-## Breaking Changes
+## Highlights
-*None in this release.*
+A targeted patch release that fixes canvas rendering on the Uno Platform (including WebAssembly) and corrects outward rounding when converting `SKRect` to `SKRectI`.
## Bug Fixes
-- **Uno canvas context not active during rendering** — Fixed an issue where the canvas GL context was not properly activated before rendering on Uno Platform targets. ❤️ @jeromelaban ([#2560](https://github.com/mono/SkiaSharp/pull/2560))
-- **WASM canvas lookup failure** — `SKXamlCanvas` on WebAssembly no longer throws when the underlying canvas element cannot be found. ❤️ @jeromelaban ([#2564](https://github.com/mono/SkiaSharp/pull/2564))
-- **`SKRect` to `SKRectI` rounding** — `SKRect` now floors outward correctly when converting to `SKRectI`, preventing off-by-one pixel clipping. ([#2574](https://github.com/mono/SkiaSharp/pull/2574))
+- **Uno canvas context not active during rendering** — Ensures the canvas' context is active before rendering on Uno Platform targets. ([#2560](https://github.com/mono/SkiaSharp/pull/2560))
+- **WASM canvas lookup failure** — `SKXamlCanvas` on WebAssembly no longer fails when the underlying canvas element cannot be found. ([#2564](https://github.com/mono/SkiaSharp/pull/2564))
+- **`SKRect` → `SKRectI` rounding** — Now floors outward correctly when converting to `SKRectI`, preventing off-by-one pixel clipping. ([#2574](https://github.com/mono/SkiaSharp/pull/2574))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🌐 WebAssembly | Canvas lookup failure fix for WASM targets |
-| 🎨 Core API | Correct outward rounding for `SKRect` → `SKRectI` conversion |
-
-## Community Contributors ❤️
-
-| Contributor | What They Did |
-|-------------|--------------|
-| [@jeromelaban](https://github.com/jeromelaban) | Uno canvas context fix; WASM canvas lookup fix |
+| 🌐 WebAssembly | Canvas lookup and Uno context rendering fixes |
+| 🎨 Core API | Correct outward rounding for `SKRect` → `SKRectI` |
## Links
diff --git a/documentation/docfx/releases/2.88.6.md b/documentation/docfx/releases/2.88.6.md
index f0aefb4b168..25e94041838 100644
--- a/documentation/docfx/releases/2.88.6.md
+++ b/documentation/docfx/releases/2.88.6.md
@@ -1,50 +1,58 @@
+
+
+
+
# Version 2.88.6
-> **Native dependency updates and WASM compatibility** · Released September 21, 2023 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.6) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.6)
+> **Dependency & hardening release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.6) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.6)
## Highlights
-SkiaSharp 2.88.6 updates several bundled native libraries — HarfBuzz to 7.3.0, libjpeg-turbo to 3.0.0, and libwebp to 1.3.2 — keeping the dependency chain current and addressing known issues. The release also restores non-SIMD WebAssembly builds needed for Microsoft Edge Enhanced Security mode and Safari compatibility.
+This servicing release refreshes the bundled native image and text dependencies — WebP, HarfBuzz, and libjpeg-turbo — and restores no-SIMD builds needed for Microsoft Edge's enhanced security mode and Safari.
-## Breaking Changes
+## New Features
-*None in this release.*
+### Engine
-## New Features
+- **WebP 1.3.2** — Updates the bundled libwebp to 1.3.2. ([#2623](https://github.com/mono/SkiaSharp/pull/2623))
+- **HarfBuzz 7.3.0** — Updates the bundled HarfBuzz to 7.3.0. ([#2577](https://github.com/mono/SkiaSharp/pull/2577))
+- **libjpeg-turbo 3.0.0** — Updates the bundled libjpeg-turbo to 3.0.0. ([#2581](https://github.com/mono/SkiaSharp/pull/2581))
-### Dependencies
+### Security
-- **HarfBuzz updated to 7.3.0** — Bumped the bundled HarfBuzz text-shaping library. ([#2577](https://github.com/mono/SkiaSharp/pull/2577))
-- **libjpeg-turbo updated to 3.0.0** — Bumped the bundled JPEG codec library. ([#2581](https://github.com/mono/SkiaSharp/pull/2581))
-- **libwebp updated to 1.3.2** — Bumped the bundled WebP codec library. ([#2623](https://github.com/mono/SkiaSharp/pull/2623))
+- **Restore no-SIMD builds** — Restores the no-SIMD native builds required by Microsoft Edge's enhanced security mode and Safari. ([#2618](https://github.com/mono/SkiaSharp/pull/2618))
## Bug Fixes
-- **Restore non-SIMD WASM builds** — Re-added non-SIMD WebAssembly builds required for Edge Enhanced Security mode and older Safari versions. ❤️ @jeromelaban ([#2618](https://github.com/mono/SkiaSharp/pull/2618))
+- **Remove unused arm64e architecture** — Drops the unused `arm64e` slice from native builds. ([#2590](https://github.com/mono/SkiaSharp/pull/2590))
+- **Drop unused libjpeg** — Removes the unused libjpeg dependency. ([#2589](https://github.com/mono/SkiaSharp/pull/2589))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🌐 WebAssembly | Non-SIMD builds restored for Edge Enhanced Security and Safari compatibility |
-| 🍎 Apple | Removed unused arm64e architecture slice |
-
-## Community Contributors ❤️
-
-| Contributor | What They Did |
-|-------------|--------------|
-| [@jeromelaban](https://github.com/jeromelaban) | Restored non-SIMD WASM builds for browser compatibility |
+| 🏗️ Build/CI | WebP, HarfBuzz, libjpeg-turbo updates; no-SIMD builds restored |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.5...v2.88.6)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.88.6)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.88.6)
-
----
-
-## Preview 1 (August 31, 2023)
-
-Updated HarfBuzz to 7.3.0 and libjpeg-turbo to 3.0.0, and removed the unused arm64e Apple architecture slice.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.5...v2.88.6-preview.1.2)
diff --git a/documentation/docfx/releases/2.88.7.md b/documentation/docfx/releases/2.88.7.md
index 9450db8c666..4b5b3282dd1 100644
--- a/documentation/docfx/releases/2.88.7.md
+++ b/documentation/docfx/releases/2.88.7.md
@@ -1,18 +1,42 @@
+
+
+
+
# Version 2.88.7
> **libjpeg-turbo rollback for stability** · Released January 11, 2024 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.7) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.7)
## Highlights
-SkiaSharp 2.88.7 reverts the libjpeg-turbo update from 2.88.6 back to version 2.1.5.1 to address compatibility issues introduced by the 3.0.0 upgrade. This is a focused stability patch with no other user-facing changes.
+A focused stability patch that reverts the libjpeg-turbo update shipped in 2.88.6 back to 2.1.5.1, resolving compatibility issues introduced by the 3.0.0 upgrade. There are no other user-facing changes in this release.
+
+## Bug Fixes
-## Breaking Changes
+- **Reverted libjpeg-turbo to 2.1.5.1** — Rolled back the libjpeg-turbo update (from 3.0.0 in v2.88.6) to resolve compatibility issues ([#2702](https://github.com/mono/SkiaSharp/pull/2702)).
-*None in this release.*
+Plus several CI and compliance pipeline improvements.
-## Bug Fixes
+## Platform Support
-- **Reverted libjpeg-turbo to 2.1.5.1** — Rolled back the libjpeg-turbo update (from 3.0.0 in v2.88.6) to version 2.1.5.1 to resolve compatibility issues. ([#2702](https://github.com/mono/SkiaSharp/pull/2702))
+| Platform | What's New |
+|----------|-----------|
+| 📦 General | libjpeg-turbo rolled back to 2.1.5.1 |
## Links
diff --git a/documentation/docfx/releases/2.88.8.md b/documentation/docfx/releases/2.88.8.md
index 5f5f2123d68..096d61eab4d 100644
--- a/documentation/docfx/releases/2.88.8.md
+++ b/documentation/docfx/releases/2.88.8.md
@@ -1,44 +1,57 @@
+
+
+
+
# Version 2.88.8
-> **Trimming, OpenGL, and API compatibility improvements** · Released April 10, 2024 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.8) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.8)
+> **Released April 10, 2024** · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.8) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.8)
## Highlights
-SkiaSharp 2.88.8 fixes tvOS compilation with trimming enabled, eliminates an `async void` issue in `SKXamlCanvas`, and hides missing OpenGL functions on Windows to prevent runtime errors. The release also adds new method overloads for improved API compatibility.
-
-## Breaking Changes
-
-*None in this release.*
+A maintenance release that adds new method overloads for better API compatibility, hides OpenGL entry points that `opengl32.dll` does not export to prevent runtime errors on Windows, makes `PlatformConfiguration` properties trimmable, and removes an `async void` from `SKXamlCanvas`. Several fixes were backported via the [@github-actions](https://github.com/apps/github-actions) bot.
## New Features
### API Surface
-- **New method overloads for compatibility** — Added additional overloads to improve compatibility with various consuming patterns. ([#2810](https://github.com/mono/SkiaSharp/pull/2810))
+- **New compatibility overloads** — Additional method overloads to improve source compatibility. ([#2810](https://github.com/mono/SkiaSharp/pull/2810))
## Bug Fixes
-- **Hidden unavailable OpenGL functions on Windows** — Functions that `opengl32.dll` does not actually export are no longer surfaced, preventing `EntryPointNotFoundException` at runtime. ([#2710](https://github.com/mono/SkiaSharp/pull/2710))
-- **Eliminated `async void` in `SKXamlCanvas`** — Replaced `async void` with a safer async pattern to prevent unobserved exceptions in XAML canvas rendering. ([#2731](https://github.com/mono/SkiaSharp/pull/2731))
-- **tvOS compilation with trimming** — Made `PlatformConfiguration` properties trimmable, fixing compilation failures on tvOS when trimming is enabled. ([#2734](https://github.com/mono/SkiaSharp/pull/2734))
+- **Windows OpenGL externs** — No longer exposes OpenGL functions that `opengl32.dll` does not export, preventing `EntryPointNotFoundException` at runtime. ([#2710](https://github.com/mono/SkiaSharp/pull/2710))
+- **`SKXamlCanvas` async void** — Replaces `async void` with a safer async pattern to avoid unobserved exceptions. ([#2731](https://github.com/mono/SkiaSharp/pull/2731))
+- **Trimming compatibility** — Makes `PlatformConfiguration` properties trimmable, improving compatibility with trimmed and AOT builds. ([#2734](https://github.com/mono/SkiaSharp/pull/2734))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | tvOS compilation fixed when trimming is enabled |
-| 🪟 Windows | Hidden unavailable OpenGL entry points in `opengl32.dll` |
+| 🪟 Windows | Unavailable `opengl32.dll` entry points are no longer surfaced |
+| 📦 General | `PlatformConfiguration` properties are now trimmable |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.7...v2.88.8)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.88.8)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.88.8)
-
----
-
-## Preview 1 (April 5, 2024)
-
-All fixes and features in this release were included in Preview 1: OpenGL function visibility fix, `async void` elimination, tvOS trimming fix, and new API overloads.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.7...v2.88.8-preview.1.1)
diff --git a/documentation/docfx/releases/2.88.9.md b/documentation/docfx/releases/2.88.9.md
index 6caade19ece..94878580839 100644
--- a/documentation/docfx/releases/2.88.9.md
+++ b/documentation/docfx/releases/2.88.9.md
@@ -1,64 +1,74 @@
+
+
+
+
# Version 2.88.9
-> **.NET 9 support, WinUI fixes, and debug symbols** · Released November 7, 2024 · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.9) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.9)
+> **.NET 9 & platform fixes release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/2.88.9) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v2.88.9)
## Highlights
-SkiaSharp 2.88.9 adds .NET 9 target framework support, ships debug symbols in NuGet packages for improved diagnostics, and fixes several canvas and text API issues across Uno/WinUI and XAML platforms. One community contributor drove key WinUI and platform fixes.
-
-## Breaking Changes
-
-*None in this release.*
+This release adds support for .NET 9 and ships a batch of WinUI/Uno `SKXamlCanvas` fixes, along with debug symbols now included in the packages. The WinUI native helper for `GetByteBuffer` was contributed by [@jeromelaban](https://github.com/jeromelaban).
## New Features
### Platform
-- **.NET 9 support** — Added target framework support for .NET 9. ([#3012](https://github.com/mono/SkiaSharp/pull/3012))
-- **Debug symbols in NuGet packages** — Symbol packages are now included, enabling source-level debugging and better stack traces. ([#3046](https://github.com/mono/SkiaSharp/pull/3046))
+- **.NET 9 support** — Adds targeting and support for .NET 9. ([#3012](https://github.com/mono/SkiaSharp/pull/3012))
+- **WinUI `GetByteBuffer` native helper** — Adds a native helper enabling `GetByteBuffer` on WinUI. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#3039](https://github.com/mono/SkiaSharp/pull/3039))
### API Surface
-- **WinUI `GetByteBuffer` native helper** — Added a native helper method for `GetByteBuffer` on WinUI, improving interop for byte buffer scenarios. ❤️ @jeromelaban ([#3039](https://github.com/mono/SkiaSharp/pull/3039))
+- **Debug symbols in packages** — The NuGet packages now ship with symbols for easier debugging. ([#3046](https://github.com/mono/SkiaSharp/pull/3046))
## Bug Fixes
-- **`XamlRoot` null check on unload** — `SKXamlCanvas` no longer throws when `XamlRoot` is null during unload. ([#2884](https://github.com/mono/SkiaSharp/pull/2884))
-- **`GetKerningPairAdjustments` API fixed** — Corrected the kerning pair adjustments API to return proper values. ([#2886](https://github.com/mono/SkiaSharp/pull/2886))
-- **`SKXamlCanvas` pixel format on Uno Skia** — Fixed `SKXamlCanvas` on Uno Skia targets to use `Bgra8888` for correct color rendering. ([#2919](https://github.com/mono/SkiaSharp/pull/2919))
+- **`SKXamlCanvas` on Uno Skia uses Bgra8888** — Corrects the pixel format used by `SKXamlCanvas` on Uno Skia. ([#2919](https://github.com/mono/SkiaSharp/pull/2919))
+- **`GetKerningPairAdjustments` fix** — Restores correct behaviour of the `GetKerningPairAdjustments` API. ([#2886](https://github.com/mono/SkiaSharp/pull/2886))
+- **Null `XamlRoot` on unload** — Guards against a null `XamlRoot` when an `SKXamlCanvas` is unloaded. ([#2884](https://github.com/mono/SkiaSharp/pull/2884))
## Platform Support
| Platform | What's New |
|----------|-----------|
+| 🎨 Core API | .NET 9 support, debug symbols in packages |
| 🪟 Windows | WinUI `GetByteBuffer` native helper |
-| 🌐 WebAssembly | `SKXamlCanvas` pixel format fix on Uno Skia |
-| 📦 General | .NET 9 support; debug symbols in packages |
+| 🌐 WebAssembly | `SKXamlCanvas` Bgra8888 and `XamlRoot` fixes on Uno Skia |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@jeromelaban](https://github.com/jeromelaban) | WinUI `GetByteBuffer` native helper |
+| [@jeromelaban](https://github.com/jeromelaban) | Added a WinUI native helper for `GetByteBuffer` |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.8...v2.88.9)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/2.88.9)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/2.88.9)
-
----
-
-## Preview 2 (October 24, 2024)
-
-Added .NET 9 target framework support and WinUI `GetByteBuffer` native helper.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.9-preview.1.1...v2.88.9-preview.2.2)
-
----
-
-## Preview 1 (July 18, 2024)
-
-Fixed `XamlRoot` null reference on canvas unload, corrected `GetKerningPairAdjustments` API, and fixed `SKXamlCanvas` pixel format on Uno Skia. Also adopted new NuGet license expressions.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.8...v2.88.9-preview.1.1)
diff --git a/documentation/docfx/releases/3.0.0.md b/documentation/docfx/releases/3.0.0.md
index 9708b31934c..0029378f06f 100644
--- a/documentation/docfx/releases/3.0.0.md
+++ b/documentation/docfx/releases/3.0.0.md
@@ -1,148 +1,246 @@
+
+
+
+
# Version 3.0.0
-> **Major version overhaul** · Previews released February – October 2024 · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.0.0-preview.5.4) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.0.0-preview.5.4)
+> **Preview only** · Superseded by [3.116.0](3.116.0.md) · Never released as stable — these changes rolled up into 3.116.0 · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.0.0-preview)
## Highlights
-SkiaSharp 3.0 is a major overhaul of the library, modernizing the interop layer with function pointers and `LibraryImport`, upgrading the Skia engine to milestone 116, and adding .NET 8 and .NET 9 support. This release removes all previously deprecated APIs and introduces new features including `SKBlender`, Skottie Animation Builder, Metal on Mac Catalyst, GPU-accelerated views for MAUI, WPF, and WinUI, and `Span`-based API overloads throughout. Ten community contributors drove significant features and bug fixes across the preview series.
-
-> [!NOTE]
-> Version 3.0.0 was released only as previews. The first stable release in the 3.x line is [3.116.0](3.116.0.md), which adopted milestone-based versioning.
-
-## Breaking Changes
-
-### Removed Deprecated APIs
+The first public preview of **SkiaSharp 3.0** — a major modernization built on Skia **m116**, with new `net8.0` (and early `net9.0`) targets, a modernized P/Invoke layer using function pointers and `LibraryImport`, and a large round of new drawing, picture, and shader APIs. As a preview that never shipped stable, all of this work rolled up cumulatively into [3.116.0](3.116.0.md). Many community contributors drove interop, API, and platform fixes across this preview.
-- **All `[Obsolete]` members and types removed** — Previously deprecated APIs have been removed to clean up the API surface. See the [full API diff](https://github.com/mono/SkiaSharp/blob/main/changelogs/SkiaSharp/3.0.0/SkiaSharp.humanreadable.md) for details. ([#2539](https://github.com/mono/SkiaSharp/pull/2539))
+### ⚠️ Breaking Changes
-### API Cleanup
-
-- **SKTextBlobBuilder and SKRunBuffer APIs cleaned up** — Streamlined text blob builder APIs for consistency. ([#2775](https://github.com/mono/SkiaSharp/pull/2775))
-- **Compatibility APIs added and removed** — Some APIs were added for backward compatibility while others were removed as part of the 3.0 transition. ([#2789](https://github.com/mono/SkiaSharp/pull/2789))
+- **Removed all `[Obsolete]` members and types** — Every previously deprecated API has been removed in 3.0. ([#2539](https://github.com/mono/SkiaSharp/pull/2539))
+- **Modernized interop** — The binding moves to function pointers and `LibraryImport`, changing the generated interop surface. ❤️ [@maxkatz6](https://github.com/maxkatz6) ([#2917](https://github.com/mono/SkiaSharp/pull/2917))
+- **`SKFilterQuality` replaced by `SamplingOptions`** — `SKFilterQuality` is superseded by sampling options, with compatibility overloads provided for migration. ([#2789](https://github.com/mono/SkiaSharp/pull/2789), [#2924](https://github.com/mono/SkiaSharp/pull/2924))
## New Features
### Engine
-- **Skia updated to milestone 116** — Core graphics engine updated through milestones 115 and 116 for the latest rendering improvements. ([#2547](https://github.com/mono/SkiaSharp/pull/2547), [#2829](https://github.com/mono/SkiaSharp/pull/2829))
-- **Function pointers and LibraryImport** — Modernized P/Invoke layer using function pointers and `LibraryImport` for improved performance and AOT compatibility. ❤️ @maxkatz6 ([#2917](https://github.com/mono/SkiaSharp/pull/2917))
-- **Performance improvements with Unsafe.As** — Internal performance optimizations using `Unsafe.As` for type conversions. ([#2780](https://github.com/mono/SkiaSharp/pull/2780))
+- **Skia m116** — Updates the bundled Skia engine to milestone 116. ([#2829](https://github.com/mono/SkiaSharp/pull/2829), [#2885](https://github.com/mono/SkiaSharp/pull/2885))
+- **Further Skia update** — ❤️ [@Redth](https://github.com/Redth) brings in additional Skia changes. ([#3026](https://github.com/mono/SkiaSharp/pull/3026))
+- **Modernized repository** — Reworks the repository and prepares the SkiaSharp 3.0 foundation. ([#2505](https://github.com/mono/SkiaSharp/pull/2505))
### API Surface
-- **SKBlender exposed** — New `SKBlender` type for custom blending operations. ([#2830](https://github.com/mono/SkiaSharp/pull/2830))
-- **SKImage.ToRawShader** — Create shaders from images with raw (non-color-managed) data. ([#2748](https://github.com/mono/SkiaSharp/pull/2748))
-- **Skottie Animation Builder** — Bound Skottie's Animation Builder for Lottie animation support. ([#2630](https://github.com/mono/SkiaSharp/pull/2630))
-- **Additional SKPicture APIs** — Extended the `SKPicture` API surface with new methods. ([#2883](https://github.com/mono/SkiaSharp/pull/2883))
-- **R-Tree overload for BeginRecording** — Enables spatial indexing for recorded drawing operations. ([#2889](https://github.com/mono/SkiaSharp/pull/2889))
-- **GetPixelSpan() with offsets** — Access pixel data at specific offsets without copying. ([#2609](https://github.com/mono/SkiaSharp/pull/2609))
-- **Span overloads for color filters** — Memory-efficient `Span`-based overloads for color filter APIs. ([#2879](https://github.com/mono/SkiaSharp/pull/2879))
-- **Span overload for SetRectRadii** — Memory-efficient overload for setting rounded rectangle radii. ❤️ @Youssef1313 ([#2949](https://github.com/mono/SkiaSharp/pull/2949))
-- **SKFilterQuality compatibility overloads** — Backward-compatible overloads easing migration from the removed filter quality API. ❤️ @Youssef1313 ([#2963](https://github.com/mono/SkiaSharp/pull/2963))
-- **Text-based blobs restored** — Re-added text-based blob creation APIs that were removed in the initial cleanup. ([#2545](https://github.com/mono/SkiaSharp/pull/2545))
+- **Expose `SKBlender`** — Adds bindings for `SKBlender`. ([#2830](https://github.com/mono/SkiaSharp/pull/2830))
+- **More `SKPicture` APIs** — Expands the `SKPicture` surface. ([#2883](https://github.com/mono/SkiaSharp/pull/2883))
+- **R-Tree `BeginRecording`** — Adds an R-Tree overload of `BeginRecording`. ([#2889](https://github.com/mono/SkiaSharp/pull/2889))
+- **Skottie Animation Builder** — Binds Skottie's `Animation.Builder`. ([#2630](https://github.com/mono/SkiaSharp/pull/2630))
+- **`SKImage.ToRawShader`** — Adds `SKImage.ToRawShader`. ([#2748](https://github.com/mono/SkiaSharp/pull/2748))
+- **`GetPixelSpan` with offsets** — Adds a `GetPixelSpan()` overload that accepts offsets. ([#2609](https://github.com/mono/SkiaSharp/pull/2609))
+- **`Span` for `SetRectRadii`** — ❤️ [@Youssef1313](https://github.com/Youssef1313) adds a `Span` overload for `SetRectRadii`. ([#2949](https://github.com/mono/SkiaSharp/pull/2949))
+- **Spans for color filters** — Adds `Span` overloads to the color filters. ([#2879](https://github.com/mono/SkiaSharp/pull/2879))
+- **`SKFilterQuality` compatibility overloads** — ❤️ [@Youssef1313](https://github.com/Youssef1313) adds compatibility overloads for `SKFilterQuality`. ([#2963](https://github.com/mono/SkiaSharp/pull/2963))
+- **Trimmable `PlatformConfiguration`** — ❤️ [@maxkatz6](https://github.com/maxkatz6) makes `PlatformConfiguration` properties trimmable. ([#2717](https://github.com/mono/SkiaSharp/pull/2717))
### GPU & Rendering
-- **Metal backend on Mac Catalyst** — Use Metal as the GPU backend on Mac Catalyst for hardware-accelerated rendering. ([#2747](https://github.com/mono/SkiaSharp/pull/2747))
-- **Metal APIs on common .NET TFM** — Metal GPU APIs are now available on a common target framework, simplifying cross-platform GPU code. ❤️ @maxkatz6 ([#2788](https://github.com/mono/SkiaSharp/pull/2788))
-- **ANGLE built separately** — ANGLE (OpenGL ES backend for Windows) is now built as a separate component. ([#2950](https://github.com/mono/SkiaSharp/pull/2950))
+- **`SKGLView`** — Implements `SKGLView`. ([#2598](https://github.com/mono/SkiaSharp/pull/2598))
+- **`SKGLElement` for WPF** — ❤️ [@gmurray81](https://github.com/gmurray81) adds `SKGLElement` to `SkiaSharp.Views.WPF`. ([#2317](https://github.com/mono/SkiaSharp/pull/2317))
+- **WinUI accelerated views** — Adds support for hardware-accelerated WinUI views. ([#2733](https://github.com/mono/SkiaSharp/pull/2733))
+- **Metal on Mac Catalyst** — Uses Metal as the backend on Mac Catalyst. ([#2747](https://github.com/mono/SkiaSharp/pull/2747))
+- **Common Metal TFM** — ❤️ [@maxkatz6](https://github.com/maxkatz6) brings the Metal APIs to a common .NET TFM. ([#2788](https://github.com/mono/SkiaSharp/pull/2788))
+
+### Text & Fonts
+
+- **HarfBuzz 8.3.0** — Updates HarfBuzz to 8.3.0 (from 7.3.0 earlier in the cycle). ([#2624](https://github.com/mono/SkiaSharp/pull/2624), [#2582](https://github.com/mono/SkiaSharp/pull/2582))
### Platform
-- **.NET 8 and .NET 9 support** — Updated target frameworks to support .NET 8 and .NET 9. ❤️ @jeromelaban (.NET 9) ([#2927](https://github.com/mono/SkiaSharp/pull/2927), [#3010](https://github.com/mono/SkiaSharp/pull/3010))
-- **SKGLView for .NET MAUI** — Hardware-accelerated OpenGL view for MAUI applications. ([#2598](https://github.com/mono/SkiaSharp/pull/2598))
-- **SKGLElement for WPF** — Hardware-accelerated OpenGL element for WPF applications. ❤️ @gmurray81 ([#2317](https://github.com/mono/SkiaSharp/pull/2317))
-- **WinUI accelerated views** — GPU-accelerated rendering views for WinUI applications. ([#2733](https://github.com/mono/SkiaSharp/pull/2733))
-- **Updated GLControl for WinForms** — Switched to the new GLControl packages for Windows Forms. ([#2989](https://github.com/mono/SkiaSharp/pull/2989))
-- **Blazor DPI exposure** — Expose DPI information in Blazor components for high-DPI rendering. ❤️ @beto-rodriguez ([#1832](https://github.com/mono/SkiaSharp/pull/1832))
-- **Trimmable PlatformConfiguration (tvOS fix)** — Made platform configuration properties trimmable, fixing tvOS compilation. ❤️ @maxkatz6 ([#2717](https://github.com/mono/SkiaSharp/pull/2717))
-- **AOT-compatible IBufferByteAccess** — Updated `IBufferByteAccess` for ahead-of-time compilation compatibility. ([#2920](https://github.com/mono/SkiaSharp/pull/2920))
-- **WASM no-SIMD builds** — Restored no-SIMD builds for Edge enhanced security mode and Safari compatibility. ❤️ @jeromelaban ([#2612](https://github.com/mono/SkiaSharp/pull/2612))
+- **.NET 8** — Updates the binding and samples to .NET 8. ([#2927](https://github.com/mono/SkiaSharp/pull/2927))
+- **.NET 9 support** — ❤️ [@jeromelaban](https://github.com/jeromelaban) adds early support for .NET 9. ([#3010](https://github.com/mono/SkiaSharp/pull/3010))
+- **WinForms GLControl** — Uses the new `GLControl` packages for WinForms. ([#2989](https://github.com/mono/SkiaSharp/pull/2989))
+- **Blazor component DPI** — ❤️ [@beto-rodriguez](https://github.com/beto-rodriguez) exposes DPI on the Blazor components. ([#1832](https://github.com/mono/SkiaSharp/pull/1832))
-### Dependencies
+### Images & Documents
-- **HarfBuzz updated to 8.3.0** — Text shaping engine updated from 7.3.0 through to 8.3.0. ([#2582](https://github.com/mono/SkiaSharp/pull/2582), [#2624](https://github.com/mono/SkiaSharp/pull/2624))
-- **libwebp updated to 1.3.2** — WebP codec updated for bug fixes and improvements. ([#2622](https://github.com/mono/SkiaSharp/pull/2622))
+- **libjpeg-turbo 3.0.0** — Updates libjpeg-turbo to 3.0.0 (later rolled back to 2.1.5.1 for stability). ([#2583](https://github.com/mono/SkiaSharp/pull/2583), [#2699](https://github.com/mono/SkiaSharp/pull/2699))
+- **libwebp 1.3.2** — Updates libwebp to 1.3.2. ([#2622](https://github.com/mono/SkiaSharp/pull/2622))
## Bug Fixes
-- **MAUI view memory leaks fixed** — Resolved memory leaks in MAUI views. ([#2955](https://github.com/mono/SkiaSharp/pull/2955))
-- **SKPaint.Clone fixed** — Corrected the clone behavior for paint objects. ❤️ @jeremy-visionaid ([#2904](https://github.com/mono/SkiaSharp/pull/2904))
-- **GetKerningPairAdjustments API fixed** — Corrected the kerning pair adjustments API. ❤️ @pdjonov ([#2858](https://github.com/mono/SkiaSharp/pull/2858))
-- **SKXamlCanvas Bgra8888 on Uno Skia** — Fixed color format for `SKXamlCanvas` on Uno Skia platform. ❤️ @Youssef1313 ([#2918](https://github.com/mono/SkiaSharp/pull/2918))
-- **Apple Metal snapshot magenta fix** — Fixed snapshot returning magenta color on Apple Metal. ❤️ @taublast ([#2804](https://github.com/mono/SkiaSharp/pull/2804))
-- **SKRectI floor conversion** — Fixed floor-outward rounding when converting to `SKRectI`. ([#2568](https://github.com/mono/SkiaSharp/pull/2568))
-- **SKBitmap.Encode behavior reverted** — Reverted `SKBitmap.Encode` with `SKPngEncoderOptions` to the 2.88.8 behavior. ❤️ @sungaila ([#3014](https://github.com/mono/SkiaSharp/pull/3014))
-- **Async void removed from SKXamlCanvas** — Eliminated async void pattern in `SKXamlCanvas` for better error handling. ❤️ @lindexi ([#2720](https://github.com/mono/SkiaSharp/pull/2720))
-- **XamlRoot null check on unload** — Fixed null reference when `SKXamlCanvas` is unloaded. ❤️ @jeromelaban ([#2854](https://github.com/mono/SkiaSharp/pull/2854))
-- **Uno canvas rendering context** — Ensured the canvas context is active when rendering on Uno. ❤️ @jeromelaban ([#2559](https://github.com/mono/SkiaSharp/pull/2559))
-- **WASM canvas graceful failure** — Don't fail when the canvas can't be found in WASM. ❤️ @jeromelaban ([#2563](https://github.com/mono/SkiaSharp/pull/2563))
+- **MAUI memory leaks** — Fixes memory leaks in the MAUI views. ([#2955](https://github.com/mono/SkiaSharp/pull/2955))
+- **`SKRectI` rounding** — Floors outwards when converting to `SKRectI`. ([#2568](https://github.com/mono/SkiaSharp/pull/2568))
+- **Cloned `SKPaint` disposal** — ❤️ [@jeremy-visionaid](https://github.com/jeremy-visionaid) fixes an `AccessViolationException` when disposing a cloned `SKPaint`. ([#2904](https://github.com/mono/SkiaSharp/pull/2904))
+- **`SKBitmap.Encode` regression** — ❤️ [@sungaila](https://github.com/sungaila) reverts `SKBitmap.Encode` with `SKPngEncoderOptions` to the 2.88.8 behavior. ([#3014](https://github.com/mono/SkiaSharp/pull/3014))
+- **Uno Skia pixel format** — ❤️ [@Youssef1313](https://github.com/Youssef1313) fixes `SKXamlCanvas` on Uno Skia to use `Bgra8888`. ([#2918](https://github.com/mono/SkiaSharp/pull/2918))
+- **`XamlRoot` null** — ❤️ [@jeromelaban](https://github.com/jeromelaban) handles a null `XamlRoot` when the `SKXamlCanvas` is unloaded. ([#2854](https://github.com/mono/SkiaSharp/pull/2854))
+- **Metal snapshot color** — ❤️ [@taublast](https://github.com/taublast) fixes `Snapshot` returning magenta on Apple Metal. ([#2804](https://github.com/mono/SkiaSharp/pull/2804))
+- **Kerning adjustments** — ❤️ [@pdjonov](https://github.com/pdjonov) fixes the `GetKerningPairAdjustments` API. ([#2858](https://github.com/mono/SkiaSharp/pull/2858))
+- **`async void` in `SKXamlCanvas`** — ❤️ [@lindexi](https://github.com/lindexi) avoids `async void` in `SKXamlCanvas`. ([#2720](https://github.com/mono/SkiaSharp/pull/2720))
+- **WASM canvas lookup** — ❤️ [@jeromelaban](https://github.com/jeromelaban) stops the WASM `SKXamlCanvas` failing when the canvas can't be found. ([#2563](https://github.com/mono/SkiaSharp/pull/2563))
+- **Uno render context** — ❤️ [@jeromelaban](https://github.com/jeromelaban) ensures the canvas' context is active when rendering on Uno. ([#2559](https://github.com/mono/SkiaSharp/pull/2559))
+- **nosimd builds** — ❤️ [@jeromelaban](https://github.com/jeromelaban) restores `nosimd` builds for enhanced-security Edge and Safari. ([#2612](https://github.com/mono/SkiaSharp/pull/2612))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | Metal on Mac Catalyst, Metal APIs on common TFM, fixed snapshot magenta on Metal, trimmable tvOS |
-| 🪟 Windows | WinUI accelerated views, updated GLControl for WinForms, ANGLE built separately |
-| 🌐 WebAssembly | Blazor DPI exposure, no-SIMD builds for Edge/Safari, canvas graceful failure |
+| 🍎 Apple | Metal backend on Mac Catalyst, common Metal TFM, magenta snapshot fix |
+| 🪟 Windows | WinUI accelerated views, WinForms GLControl, WPF `SKGLElement` |
+| 🌐 WebAssembly | nosimd builds, Uno/WASM canvas fixes, Blazor DPI |
+| 🎨 Core API | `SKBlender`, more `SKPicture` APIs, Skottie builder, span overloads, Skia m116 |
+| 📦 General | .NET 8 (+ early .NET 9), modernized interop, removed obsolete APIs |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@maxkatz6](https://github.com/maxkatz6) | Function pointers and LibraryImport, Metal APIs on common TFM, trimmable tvOS |
-| [@jeromelaban](https://github.com/jeromelaban) | .NET 9 support, Uno canvas fixes, WASM no-SIMD builds |
-| [@Youssef1313](https://github.com/Youssef1313) | Span overloads for SetRectRadii, SKFilterQuality compatibility, Uno Bgra8888 fix |
-| [@gmurray81](https://github.com/gmurray81) | SKGLElement for WPF |
-| [@taublast](https://github.com/taublast) | Fixed Apple Metal snapshot magenta color |
-| [@beto-rodriguez](https://github.com/beto-rodriguez) | Exposed Blazor components DPI |
-| [@pdjonov](https://github.com/pdjonov) | Fixed GetKerningPairAdjustments API |
-| [@jeremy-visionaid](https://github.com/jeremy-visionaid) | Fixed SKPaint.Clone |
-| [@lindexi](https://github.com/lindexi) | Removed async void from SKXamlCanvas |
-| [@sungaila](https://github.com/sungaila) | Reverted SKBitmap.Encode to 2.88.8 behavior |
+| [@maxkatz6](https://github.com/maxkatz6) | Modernized interop with function pointers/`LibraryImport`, common Metal TFM, trimmable config |
+| [@Youssef1313](https://github.com/Youssef1313) | Added `SKFilterQuality` and `SetRectRadii` overloads and fixed Uno pixel format |
+| [@jeromelaban](https://github.com/jeromelaban) | Fixed WASM/Uno canvas rendering and restored nosimd builds |
+| [@Redth](https://github.com/Redth) | Brought in additional Skia updates |
+| [@jeromelaban](https://github.com/jeromelaban) | Added .NET 9 support |
+| [@sungaila](https://github.com/sungaila) | Reverted an `SKBitmap.Encode` regression |
+| [@jeremy-visionaid](https://github.com/jeremy-visionaid) | Fixed an AVE disposing a cloned `SKPaint` |
+| [@jeromelaban](https://github.com/jeromelaban) | Handled a null `XamlRoot` on unload |
+| [@taublast](https://github.com/taublast) | Fixed magenta snapshots on Apple Metal |
+| [@pdjonov](https://github.com/pdjonov) | Fixed `GetKerningPairAdjustments` |
+| [@lindexi](https://github.com/lindexi) | Avoided `async void` in `SKXamlCanvas` |
+| [@gmurray81](https://github.com/gmurray81) | Added `SKGLElement` to the WPF views |
+| [@beto-rodriguez](https://github.com/beto-rodriguez) | Exposed DPI on the Blazor components |
+| [@Fxplorer](https://github.com/Fxplorer) | Fixed a typo in the README |
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.7...v3.0.0-preview.5.4)
-- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/3.0.0-preview.5.4)
-- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/3.0.0)
-
----
-
-## Preview 5 (October 24, 2024)
-
-Updated .NET to 8.0, added function pointers and LibraryImport for modern interop, Span overloads for SetRectRadii and SKFilterQuality, fixed MAUI memory leaks, and added .NET 9 support.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.0.0-preview.4.1...v3.0.0-preview.5.4)
-
----
-
-## Preview 4 (July 18, 2024)
-
-Updated Skia to milestone 116, exposed SKBlender, added Span-based color filter overloads, additional SKPicture and R-Tree recording APIs, and multiple Uno/XAML bug fixes.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.0.0-preview.3.1...v3.0.0-preview.4.1)
-
----
-
-## Preview 3 (April 10, 2024)
-
-Added SKGLElement for WPF, cleaned up text blob APIs, exposed Blazor DPI, brought Metal APIs to common TFM, and fixed Apple Metal snapshot color issues.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.0.0-preview.2.1...v3.0.0-preview.3.1)
-
----
-
-## Preview 2 (February 20, 2024)
-
-Added SKImage.ToRawShader, Metal backend on Mac Catalyst, and bound Skottie's Animation Builder.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.0.0-preview.1.8...v3.0.0-preview.2.1)
-
----
-
-## Preview 1 (February 6, 2024)
-
-Initial SkiaSharp 3.0 preview: modernized repository, updated Skia to milestone 115, removed deprecated APIs, added SKGLView for MAUI, WinUI accelerated views, and dev container support.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.7...v3.0.0-preview.1.8)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.9...v3.0.0-preview.5)
+- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/3.0.0-preview)
diff --git a/documentation/docfx/releases/3.116.0.md b/documentation/docfx/releases/3.116.0.md
index 0a7dd51dbe4..a6c6585cebb 100644
--- a/documentation/docfx/releases/3.116.0.md
+++ b/documentation/docfx/releases/3.116.0.md
@@ -1,59 +1,250 @@
+
+
+
+
# Version 3.116.0
-> **First stable milestone-based release** · Released December 3, 2024 · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.116.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.116.0)
+> **SkiaSharp 3.0 — major release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.116.0) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.116.0)
+
+> **Supersedes [3.0.0](3.0.0.md)** · Rolls up preview-only work that was never released as stable — those changes are included cumulatively below.
## Highlights
-SkiaSharp 3.116.0 is the first stable release in the 3.x line, adopting milestone-based versioning that aligns with the underlying Skia engine version. This release adds `Span`-based overloads for `SKMatrix` and `SKPath`, multi-threaded and SIMD WebAssembly support, and resolves .NET 9 Blazor compatibility issues. Two community contributors added new API surface and updated the Skia engine.
+SkiaSharp 3.116.0 is the first stable release of the modernized **SkiaSharp 3.0** line. It rolls up all of the preview-only **3.0.0** work cumulatively and ships it as a single stable package. The engine is updated to **Skia m116**, the interop layer is rebuilt on **function pointers and `LibraryImport`**, and the libraries now target **.NET 8 and .NET 9** with multi-threaded/SIMD WebAssembly, a Metal backend on Mac Catalyst, and a wave of new span-based APIs. This is a **major version** with breaking changes — see below. Dozens of community contributors helped land this release, including [@maxkatz6](https://github.com/maxkatz6), [@jeromelaban](https://github.com/jeromelaban), [@Youssef1313](https://github.com/Youssef1313), [@alexandrvslv](https://github.com/alexandrvslv), [@Redth](https://github.com/Redth) and [@gmurray81](https://github.com/gmurray81).
-## Breaking Changes
+### ⚠️ Breaking Changes
-*None in this release.*
+- **All `[Obsolete]` members and types removed** — Every previously deprecated API has been deleted as part of the 3.0 cleanup. ([#2539](https://github.com/mono/SkiaSharp/pull/2539))
+- **`SKFilterQuality` replaced by `SamplingOptions`** — Filter quality is superseded by sampling options; compatibility overloads are provided to ease migration. ([#2789](https://github.com/mono/SkiaSharp/pull/2789), [#2963](https://github.com/mono/SkiaSharp/pull/2963), [#2924](https://github.com/mono/SkiaSharp/pull/2924))
+- **Interop rebuilt on function pointers / `LibraryImport`** — The P/Invoke layer now uses function pointers and source-generated `LibraryImport`, modernizing the native interop surface. ([#2917](https://github.com/mono/SkiaSharp/pull/2917))
## New Features
+### Engine
+
+- **Skia updated to m116** — Brings the bundled Skia engine up to milestone 116, plus follow-up external updates. ([#2829](https://github.com/mono/SkiaSharp/pull/2829), [#2885](https://github.com/mono/SkiaSharp/pull/2885)) ❤️ [@Redth](https://github.com/Redth) ([#3026](https://github.com/mono/SkiaSharp/pull/3026))
+- **HarfBuzz 7.3.0 → 8.3.0** — Updates the bundled HarfBuzz for improved text shaping. ([#2582](https://github.com/mono/SkiaSharp/pull/2582), [#2624](https://github.com/mono/SkiaSharp/pull/2624))
+- **libjpeg-turbo 3.0.0 & libwebp 1.3.2** — Refreshes the bundled JPEG and WebP codecs. ([#2583](https://github.com/mono/SkiaSharp/pull/2583), [#2622](https://github.com/mono/SkiaSharp/pull/2622))
+- **SkiaSharp 3.0 modernization** — Modernizes the repository, build and packaging and targets .NET 8 and .NET 9. ([#2505](https://github.com/mono/SkiaSharp/pull/2505), [#2927](https://github.com/mono/SkiaSharp/pull/2927)) ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#3010](https://github.com/mono/SkiaSharp/pull/3010))
+
+### GPU & Rendering
+
+- **`SKBlender`** — Exposes Skia's blender API for custom blend modes. ([#2830](https://github.com/mono/SkiaSharp/pull/2830))
+- **`SKImage.ToRawShader`** — Adds a raw-shader variant of image shaders. ([#2748](https://github.com/mono/SkiaSharp/pull/2748))
+- **Metal backend on Mac Catalyst** — Uses Metal as the rendering backend on Mac Catalyst. ([#2747](https://github.com/mono/SkiaSharp/pull/2747))
+- **Common Metal TFM** — Brings the Metal APIs to a common .NET target framework. ❤️ [@maxkatz6](https://github.com/maxkatz6) ([#2788](https://github.com/mono/SkiaSharp/pull/2788))
+- **WinUI accelerated views** — Adds support for hardware-accelerated WinUI views. ([#2733](https://github.com/mono/SkiaSharp/pull/2733))
+- **Multi-threaded / SIMD WebAssembly** — Adds support for multi-threaded and/or SIMD WebAssembly builds. ([#2620](https://github.com/mono/SkiaSharp/pull/2620))
+
### API Surface
-- **SKMatrix.MapPoints/MapVectors and SKPath.AddPoly Span overloads** — Added memory-efficient `Span` overloads for mapping points, mapping vectors, and adding polygons. ❤️ @alexandrvslv ([#3030](https://github.com/mono/SkiaSharp/pull/3030))
+- **Span overloads across the API** — Adds `Span` overloads for `SKMatrix.MapPoints`/`MapVectors` and `SKPath.AddPoly`, a span overload for `SetRectRadii`, and span overloads on the color filters. ❤️ [@alexandrvslv](https://github.com/alexandrvslv) ([#3030](https://github.com/mono/SkiaSharp/pull/3030)) · ❤️ [@Youssef1313](https://github.com/Youssef1313) ([#2949](https://github.com/mono/SkiaSharp/pull/2949)) · ([#2879](https://github.com/mono/SkiaSharp/pull/2879))
+- **`GetPixelSpan()` with offsets** — Adds an offset-aware pixel span accessor. ([#2609](https://github.com/mono/SkiaSharp/pull/2609))
+- **More `SKPicture` APIs & R-Tree recording** — Expands the `SKPicture` surface and adds an R-Tree overload of `BeginRecording`. ([#2883](https://github.com/mono/SkiaSharp/pull/2883), [#2889](https://github.com/mono/SkiaSharp/pull/2889))
+- **`SKFilterQuality` compatibility overloads** — Provides compatibility overloads to bridge `SKFilterQuality` to the new sampling options. ❤️ [@Youssef1313](https://github.com/Youssef1313) ([#2963](https://github.com/mono/SkiaSharp/pull/2963))
+- **Read-only `GRMtlTextureInfo` getters** — Makes `GRMtlTextureInfo` getters read-only. ([#2833](https://github.com/mono/SkiaSharp/pull/2833))
+- **Trimmable `PlatformConfiguration`** — Marks `PlatformConfiguration` properties trimmable for smaller AOT/trimmed apps. ❤️ [@maxkatz6](https://github.com/maxkatz6) ([#2717](https://github.com/mono/SkiaSharp/pull/2717))
-### Platform
+### Text & Fonts
-- **Multi-thread and SIMD WebAssembly** — Added support for multi-threaded and/or SIMD WebAssembly builds, enabling significantly better performance in browser scenarios. ([#2620](https://github.com/mono/SkiaSharp/pull/2620))
+- **Skottie Animation Builder** — Binds Skottie's animation builder for richer Lottie animation construction. ([#2630](https://github.com/mono/SkiaSharp/pull/2630))
+- **Cleaner text-blob APIs** — Tidies the `SKTextBlobBuilder` and `SKRunBuffer` APIs. ([#2775](https://github.com/mono/SkiaSharp/pull/2775))
-### Engine
+### Platform
-- **Skia engine updated** — Updated the underlying Skia engine. ❤️ @Redth ([#3026](https://github.com/mono/SkiaSharp/pull/3026))
+- **`SKGLElement` for WPF** — Adds an OpenGL-accelerated `SKGLElement` to `SkiaSharp.Views.WPF`. ❤️ [@gmurray81](https://github.com/gmurray81) ([#2317](https://github.com/mono/SkiaSharp/pull/2317))
+- **New WinForms GLControl** — Moves WinForms onto the new GLControl packages. ([#2989](https://github.com/mono/SkiaSharp/pull/2989))
+- **Blazor component DPI** — Exposes the device pixel ratio on the Blazor components. ❤️ [@beto-rodriguez](https://github.com/beto-rodriguez) ([#1832](https://github.com/mono/SkiaSharp/pull/1832))
## Bug Fixes
-- **Fixed .NET 9 ASP.NET Blazor issues** — Resolved compatibility issues with .NET 9 ASP.NET Blazor applications. ([#3081](https://github.com/mono/SkiaSharp/pull/3081))
-- **Blazor WASM module loading fix** — Moved the Blazor workaround into the WASM layer for proper module loading. ([#3087](https://github.com/mono/SkiaSharp/pull/3087), [#3089](https://github.com/mono/SkiaSharp/pull/3089))
-- **Fixed import for apps with a base path** — Resolved WASM import issues for Blazor apps hosted at a sub-path. ([#3093](https://github.com/mono/SkiaSharp/pull/3093))
+- **Fixed MAUI view memory leaks** — Resolves leaks in the MAUI views. ([#2955](https://github.com/mono/SkiaSharp/pull/2955))
+- **Fixed access violation disposing a cloned `SKPaint`** — Prevents an AVE when disposing a cloned paint. ❤️ [@jeremy-visionaid](https://github.com/jeremy-visionaid) ([#2904](https://github.com/mono/SkiaSharp/pull/2904))
+- **Fixed magenta Metal snapshots** — Corrects `Snapshot` returning a magenta image on Apple Metal. ❤️ [@taublast](https://github.com/taublast) ([#2804](https://github.com/mono/SkiaSharp/pull/2804))
+- **Fixed Uno `SKXamlCanvas` color format** — Uses `Bgra8888` for `SKXamlCanvas` on Uno Skia. ❤️ [@Youssef1313](https://github.com/Youssef1313) ([#2918](https://github.com/mono/SkiaSharp/pull/2918))
+- **Fixed null `XamlRoot` on unload** — Handles `XamlRoot` being null when the `SKXamlCanvas` is unloaded. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2854](https://github.com/mono/SkiaSharp/pull/2854))
+- **Avoided `async void` in `SKXamlCanvas`** — Removes an `async void` path in `SKXamlCanvas`. ❤️ [@lindexi](https://github.com/lindexi) ([#2720](https://github.com/mono/SkiaSharp/pull/2720))
+- **Fixed `GetKerningPairAdjustments`** — Corrects the kerning-pair adjustment API. ❤️ [@pdjonov](https://github.com/pdjonov) ([#2858](https://github.com/mono/SkiaSharp/pull/2858))
+- **Restored `SKBitmap.Encode` behavior** — Reverts `SKBitmap.Encode` with `SKPngEncoderOptions` to the previous (2.88.8) behavior. ❤️ [@sungaila](https://github.com/sungaila) ([#3014](https://github.com/mono/SkiaSharp/pull/3014))
+- **Fixed .NET 9 ASP.NET Blazor & WASM issues** — Resolves Blazor base-path imports and .NET 9 Blazor/WebAssembly problems. ([#3081](https://github.com/mono/SkiaSharp/pull/3081), [#3087](https://github.com/mono/SkiaSharp/pull/3087), [#3089](https://github.com/mono/SkiaSharp/pull/3089), [#3093](https://github.com/mono/SkiaSharp/pull/3093))
+- **Floored outwards converting to `SKRectI`** — Rounds outward when converting to integer rects. ([#2568](https://github.com/mono/SkiaSharp/pull/2568))
+- **Restored no-SIMD WebAssembly builds** — Restores `nosimd` builds for hardened-security Edge and Safari. ❤️ [@jeromelaban](https://github.com/jeromelaban) ([#2612](https://github.com/mono/SkiaSharp/pull/2612))
+
+Plus the migration to 1ES pipelines, an MSVC build, dev-container support and many other CI, compliance and documentation improvements.
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🪟 Windows | SDK version packaging fix |
-| 🌐 WebAssembly | Multi-thread and SIMD support, .NET 9 Blazor fixes, base path import fix |
+| 🍎 Apple | Metal backend on Mac Catalyst, common Metal TFM, magenta-snapshot fix |
+| 🪟 Windows | WinUI accelerated views, new WinForms GLControl, WPF `SKGLElement` |
+| 🌐 WebAssembly | Multi-threaded/SIMD builds, .NET 9 Blazor fixes, `nosimd` builds restored |
+| 🎨 Core API | Skia m116, function pointers/`LibraryImport`, `SKBlender`, span overloads, .NET 8/9 |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@Redth](https://github.com/Redth) | Updated the Skia engine |
-| [@alexandrvslv](https://github.com/alexandrvslv) | Added Span overloads for SKMatrix and SKPath |
+| [@maxkatz6](https://github.com/maxkatz6) | Function pointers & `LibraryImport` interop, common Metal TFM, trimmable `PlatformConfiguration` |
+| [@Youssef1313](https://github.com/Youssef1313) | `SKFilterQuality` compatibility overloads, `SetRectRadii` span overload, Uno `Bgra8888` fix |
+| [@jeromelaban](https://github.com/jeromelaban) | Restored `nosimd` WebAssembly builds and Uno/WASM fixes |
+| [@alexandrvslv](https://github.com/alexandrvslv) | Added `Span` overloads for `MapPoints`/`MapVectors`/`AddPoly` |
+| [@Redth](https://github.com/Redth) | Updated the bundled Skia |
+| [@jeromelaban](https://github.com/jeromelaban) | Added .NET 9 support |
+| [@gmurray81](https://github.com/gmurray81) | Added `SKGLElement` to `SkiaSharp.Views.WPF` |
+| [@beto-rodriguez](https://github.com/beto-rodriguez) | Exposed DPI on the Blazor components |
+| [@sungaila](https://github.com/sungaila) | Restored prior `SKBitmap.Encode` PNG behavior |
+| [@jeremy-visionaid](https://github.com/jeremy-visionaid) | Fixed an access violation disposing a cloned `SKPaint` |
+| [@taublast](https://github.com/taublast) | Fixed magenta `Snapshot` on Apple Metal |
+| [@pdjonov](https://github.com/pdjonov) | Fixed `GetKerningPairAdjustments` |
+| [@jeromelaban](https://github.com/jeromelaban) | Fixed null `XamlRoot` on `SKXamlCanvas` unload |
+| [@lindexi](https://github.com/lindexi) | Removed an `async void` path in `SKXamlCanvas` |
+| [@Fxplorer](https://github.com/Fxplorer) | Fixed a typo in the README |
## Links
-- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.0.0-preview.5.4...v3.116.0)
+- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v2.88.9...v3.116.0)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/3.116.0)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/3.116.0)
-
----
-
-## Preview 6 (November 6, 2024)
-
-Updated Skia engine, added Span-based overloads for SKMatrix and SKPath, and multi-thread/SIMD WebAssembly support.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.0.0-preview.5.4...v3.116.0-preview.6.1)
diff --git a/documentation/docfx/releases/3.116.1.md b/documentation/docfx/releases/3.116.1.md
index 624de8e853b..098e577c64d 100644
--- a/documentation/docfx/releases/3.116.1.md
+++ b/documentation/docfx/releases/3.116.1.md
@@ -1,26 +1,45 @@
+
+
+
+
# Version 3.116.1
-> **Android 16KB page size compliance** · Released December 5, 2024 · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.116.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.116.1)
+> **Android & packaging servicing release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.116.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.116.1)
## Highlights
-A patch release that updates the Android NDK to r27c with 16KB page alignment, ensuring compatibility with Android 15+ memory page size requirements, and fixes a NuGet package path attribute.
+This servicing release updates the Android NDK to r27c with 16 KB page-size alignment and corrects NuGet packaging paths.
+
+## New Features
-## Breaking Changes
+### Platform
-*None in this release.*
+- **Android NDK r27c with 16 KB alignment** — Updates the Android NDK to r27c and enables 16 KB page-size alignment, keeping SkiaSharp compatible with newer Android devices. ([#3098](https://github.com/mono/SkiaSharp/pull/3098))
## Bug Fixes
-- **Android NDK updated to r27c with 16KB alignment** — Updated the Android NDK and enabled 16KB page alignment to comply with Android 15+ requirements. ([#3098](https://github.com/mono/SkiaSharp/pull/3098))
-- **Corrected NuGet PackagePath attribute** — Fixed the `PackagePath` attribute in NuGet packaging. ([#3102](https://github.com/mono/SkiaSharp/pull/3102))
+- **Correct NuGet `PackagePath`** — Uses the correct `PackagePath` attribute so packaged assets land in the expected locations. ([#3102](https://github.com/mono/SkiaSharp/pull/3102))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🤖 Android | NDK r27c with 16KB page alignment |
-| 📦 General | NuGet packaging fix |
+| 🤖 Android | NDK r27c, 16 KB page-size alignment |
+| 📦 General | Corrected NuGet packaging paths |
## Links
diff --git a/documentation/docfx/releases/3.118.0.md b/documentation/docfx/releases/3.118.0.md
index 399b12873ff..7d943fd7a77 100644
--- a/documentation/docfx/releases/3.118.0.md
+++ b/documentation/docfx/releases/3.118.0.md
@@ -3,7 +3,7 @@
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-11T21:30:25Z by generate-release-notes.py
+ Generated: 2026-06-16T19:43:58Z by generate-release-notes.py
version: 3.118.0
status: preview
superseded: 3.119.0 (preview only, never released as stable)
@@ -17,7 +17,7 @@
- Fix the import for apps with a base path by @mattleibow in https://github.com/mono/SkiaSharp/pull/3092 (1 commit, 1 day)
- Move the WASM fix to SkiaSharp by @mattleibow in https://github.com/mono/SkiaSharp/pull/3088 (1 commit, 1 day)
- Use the Microsoft Hosted Pool by @mattleibow in https://github.com/mono/SkiaSharp/pull/3051 (8 commits, 3 days)
- - Add Metal API for GRBackendRenderTarget to all platforms by @sebastien.pouliot in https://github.com/mono/SkiaSharp/pull/3070 [community ✨] (2 commits, 2 days)
+ - Add Metal API for GRBackendRenderTarget to all platforms by @spouliot in https://github.com/mono/SkiaSharp/pull/3070 [community ✨] (2 commits, 2 days)
- Move the Blazor workaround into WASM by @mattleibow in https://github.com/mono/SkiaSharp/pull/3082 (2 commits, 2 days)
- Use `` to set the SDK version by @mattleibow in https://github.com/mono/SkiaSharp/pull/3085 (2 commits, 2 days)
- Skip the skia PR checkout by @mattleibow in https://github.com/mono/SkiaSharp/pull/3083 (1 commit, 1 day)
diff --git a/documentation/docfx/releases/3.119.0.md b/documentation/docfx/releases/3.119.0.md
index caab129b20d..7e86979f857 100644
--- a/documentation/docfx/releases/3.119.0.md
+++ b/documentation/docfx/releases/3.119.0.md
@@ -3,7 +3,7 @@
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-11T21:27:08Z by generate-release-notes.py
+ Generated: 2026-06-16T19:44:45Z by generate-release-notes.py
version: 3.119.0
status: stable
supersedes: 3.118.0 (preview only, rolled up)
@@ -21,7 +21,7 @@
- Extend clang-cross to support alpine by @kasperk81 in https://github.com/mono/SkiaSharp/pull/3200 [community ✨] (7 commits, 5 days)
- Update vulkanmemoryallocator to 3.2.1 by @kasperk81 in https://github.com/mono/SkiaSharp/pull/3196 [community ✨] (3 commits, 2 days)
- Set the correct target for tvOS by @mattleibow in https://github.com/mono/SkiaSharp/pull/3199 (1 commit, 1 day)
- - Compile Skia with Direct3D on Windows platform by @kation in https://github.com/mono/SkiaSharp/pull/2823 [community ✨] (35 commits, 19 days)
+ - Compile Skia with Direct3D on Windows platform by @Kation in https://github.com/mono/SkiaSharp/pull/2823 [community ✨] (35 commits, 19 days)
- Add riscv64 build support by @kasperk81 in https://github.com/mono/SkiaSharp/pull/3192 [community ✨] (5 commits, 4 days)
- fix linux tests by @kasperk81 in https://github.com/mono/SkiaSharp/pull/3194 [community ✨] (1 commit, 1 day)
- Fix targets for ARM machines by @mattleibow in https://github.com/mono/SkiaSharp/pull/3190 (1 commit, 1 day)
@@ -33,14 +33,14 @@
- Bump skia to milestone 119 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3062 (11 commits, 6 days)
- Update libpng to 1.6.44 by @mattleibow in https://github.com/mono/SkiaSharp/pull/3059 (3 commits, 3 days)
- Add the missing SKColorFilter types by @mattleibow in https://github.com/mono/SkiaSharp/pull/2882 (10 commits, 6 days)
- - Fix regression that breaks projects using .NET Framework/Mono and packages.config by @david.sungaila in https://github.com/mono/SkiaSharp/pull/3112 [community ✨] (2 commits, 1 day)
+ - Fix regression that breaks projects using .NET Framework/Mono and packages.config by @sungaila in https://github.com/mono/SkiaSharp/pull/3112 [community ✨] (2 commits, 1 day)
- Disable more unused externals by @mattleibow in https://github.com/mono/SkiaSharp/pull/3171 (1 commit, 1 day)
- - [build] Address CVE-2024-30105 by @pecolli in https://github.com/mono/SkiaSharp/pull/3166 [community ✨] (1 commit, 1 day)
+ - [build] Address CVE-2024-30105 by @pjcollins in https://github.com/mono/SkiaSharp/pull/3166 [community ✨] (1 commit, 1 day)
- Fix iOS Simulator performance with Metal by @taublast in https://github.com/mono/SkiaSharp/pull/3156 [community ✨] (7 commits, 4 days)
- - Support SKMetalView on tvOS by @martin in https://github.com/mono/SkiaSharp/pull/3114 [community ✨] (1 commit, 1 day)
+ - Support SKMetalView on tvOS by @MartinZikmund in https://github.com/mono/SkiaSharp/pull/3114 [community ✨] (1 commit, 1 day)
- Manually list all the artifacts to download by @mattleibow in https://github.com/mono/SkiaSharp/pull/3161 (5 commits, 2 days)
- Restore the .NET tools first by @mattleibow in https://github.com/mono/SkiaSharp/pull/3154 (1 commit, 1 day)
- - Fix the incorrect call. by @i in https://github.com/mono/SkiaSharp/pull/3143 [community ✨] (1 commit, 1 day)
+ - Fix the incorrect call. by @kkwpsv in https://github.com/mono/SkiaSharp/pull/3143 [community ✨] (1 commit, 1 day)
- The initial run of dotnet and/or cake hangs by @mattleibow in https://github.com/mono/SkiaSharp/pull/3152 (1 commit, 1 day)
- Reland #2873 Disable unused / problematic tools by @mattleibow in https://github.com/mono/SkiaSharp/pull/3150 (1 commit, 1 day)
- Use the correct PackagePath attribute by @mattleibow in https://github.com/mono/SkiaSharp/pull/3100 (1 commit, 1 day)
@@ -49,7 +49,7 @@
- Fix the import for apps with a base path by @mattleibow in https://github.com/mono/SkiaSharp/pull/3092 (1 commit, 1 day)
- Move the WASM fix to SkiaSharp by @mattleibow in https://github.com/mono/SkiaSharp/pull/3088 (1 commit, 1 day)
- Use the Microsoft Hosted Pool by @mattleibow in https://github.com/mono/SkiaSharp/pull/3051 (8 commits, 3 days)
- - Add Metal API for GRBackendRenderTarget to all platforms by @sebastien.pouliot in https://github.com/mono/SkiaSharp/pull/3070 [community ✨] (2 commits, 2 days)
+ - Add Metal API for GRBackendRenderTarget to all platforms by @spouliot in https://github.com/mono/SkiaSharp/pull/3070 [community ✨] (2 commits, 2 days)
- Move the Blazor workaround into WASM by @mattleibow in https://github.com/mono/SkiaSharp/pull/3082 (2 commits, 2 days)
- Use `` to set the SDK version by @mattleibow in https://github.com/mono/SkiaSharp/pull/3085 (2 commits, 2 days)
- Skip the skia PR checkout by @mattleibow in https://github.com/mono/SkiaSharp/pull/3083 (1 commit, 1 day)
@@ -96,23 +96,23 @@ This is the first stable release since 3.116.1, rolling up all the work from the
- **LoongArch64 support** — SkiaSharp now builds and ships native binaries for the LoongArch64 architecture on Linux. ❤️ [@4Darmygeometry](https://github.com/4Darmygeometry) ([#3198](https://github.com/mono/SkiaSharp/pull/3198))
- **RISC-V 64-bit support** — Native binaries are now built and shipped for the `linux-riscv64` RID. ❤️ [@kasperk81](https://github.com/kasperk81) ([#3192](https://github.com/mono/SkiaSharp/pull/3192))
-- **Direct3D 12 backend on Windows** — Enables the Skia Ganesh Direct3D 12 GPU backend, giving Windows apps a modern alternative to OpenGL for hardware-accelerated rendering. ❤️ [@kation](https://github.com/kation) ([#2823](https://github.com/mono/SkiaSharp/pull/2823))
+- **Direct3D 12 backend on Windows** — Enables the Skia Ganesh Direct3D 12 GPU backend, giving Windows apps a modern alternative to OpenGL for hardware-accelerated rendering. ❤️ [@Kation](https://github.com/Kation) ([#2823](https://github.com/mono/SkiaSharp/pull/2823))
- **OpenGL on Windows ARM** — The OpenGL backend is now enabled on Windows ARM devices. ([#3189](https://github.com/mono/SkiaSharp/pull/3189))
-- **`SKMetalView` on tvOS** — Adds `SKMetalView` support to the tvOS platform, matching other Apple targets. ❤️ [@martin](https://github.com/martin) ([#3114](https://github.com/mono/SkiaSharp/pull/3114))
+- **`SKMetalView` on tvOS** — Adds `SKMetalView` support to the tvOS platform, matching other Apple targets. ❤️ [@MartinZikmund](https://github.com/MartinZikmund) ([#3114](https://github.com/mono/SkiaSharp/pull/3114))
- **Expanded Linux support** — Extended the Linux build matrix to cover more distributions and configurations, including Alpine Linux cross-compilation support. ❤️ [@kasperk81](https://github.com/kasperk81) ([#3200](https://github.com/mono/SkiaSharp/pull/3200), [#3209](https://github.com/mono/SkiaSharp/pull/3209))
## Bug Fixes
- **iOS Simulator Metal performance** — Fixed a significant rendering performance regression when using the Metal backend on the iOS Simulator. ❤️ [@taublast](https://github.com/taublast) ([#3156](https://github.com/mono/SkiaSharp/pull/3156))
-- **.NET Framework / Mono `packages.config` regression** — Fixed a packaging regression that broke projects using the classic `packages.config` NuGet format with .NET Framework or Mono. ❤️ [@david.sungaila](https://github.com/david.sungaila) ([#3112](https://github.com/mono/SkiaSharp/pull/3112))
+- **.NET Framework / Mono `packages.config` regression** — Fixed a packaging regression that broke projects using the classic `packages.config` NuGet format with .NET Framework or Mono. ❤️ [@sungaila](https://github.com/sungaila) ([#3112](https://github.com/mono/SkiaSharp/pull/3112))
- **WebAssembly / Blazor app base path** — Fixed WASM module loading when the application is hosted under a non-root base path. ([#3092](https://github.com/mono/SkiaSharp/pull/3092))
- **.NET 9 ASP.NET Blazor compatibility** — Resolved multiple issues with .NET 9 Blazor hosted apps. ([#3064](https://github.com/mono/SkiaSharp/pull/3064), [#3082](https://github.com/mono/SkiaSharp/pull/3082), [#3088](https://github.com/mono/SkiaSharp/pull/3088))
-- **Incorrect internal API call** — Fixed a wrong native API call in the bindings. ❤️ [@i](https://github.com/i) ([#3143](https://github.com/mono/SkiaSharp/pull/3143))
+- **Incorrect internal API call** — Fixed a wrong native API call in the bindings. ❤️ [@kkwpsv](https://github.com/kkwpsv) ([#3143](https://github.com/mono/SkiaSharp/pull/3143))
- **tvOS build target** — Fixed an incorrect build target configuration for tvOS. ([#3199](https://github.com/mono/SkiaSharp/pull/3199))
## Security
-- **CVE-2024-30105 addressed** — Updated the build toolchain to address a .NET security vulnerability in the CI pipeline. ❤️ [@pecolli](https://github.com/pecolli) ([#3166](https://github.com/mono/SkiaSharp/pull/3166))
+- **CVE-2024-30105 addressed** — Updated the build toolchain to address a .NET security vulnerability in the CI pipeline. ❤️ [@pjcollins](https://github.com/pjcollins) ([#3166](https://github.com/mono/SkiaSharp/pull/3166))
## Dependencies
@@ -145,13 +145,13 @@ All major native dependencies were updated to current stable versions:
| [@ahmed605](https://github.com/ahmed605) | Implemented `SKCanvas.SaveLayerRec` |
| [@4Darmygeometry](https://github.com/4Darmygeometry) | Added LoongArch64 native build support |
| [@kasperk81](https://github.com/kasperk81) | Added RISC-V 64-bit support, updated VulkanMemoryAllocator, extended Alpine Linux cross-compilation |
-| [@kation](https://github.com/kation) | Enabled Direct3D 12 GPU backend on Windows |
-| [@martin](https://github.com/martin) | Added `SKMetalView` support on tvOS |
+| [@Kation](https://github.com/Kation) | Enabled Direct3D 12 GPU backend on Windows |
+| [@MartinZikmund](https://github.com/MartinZikmund) | Added `SKMetalView` support on tvOS |
| [@taublast](https://github.com/taublast) | Fixed iOS Simulator Metal performance regression |
| [@spouliot](https://github.com/spouliot) | Added Metal `GRBackendRenderTarget` API across all Apple platforms |
-| [@david.sungaila](https://github.com/david.sungaila) | Fixed .NET Framework / Mono `packages.config` regression |
-| [@pecolli](https://github.com/pecolli) | Addressed CVE-2024-30105 in the build toolchain |
-| [@i](https://github.com/i) | Fixed an incorrect internal API call |
+| [@sungaila](https://github.com/sungaila) | Fixed .NET Framework / Mono `packages.config` regression |
+| [@pjcollins](https://github.com/pjcollins) | Addressed CVE-2024-30105 in the build toolchain |
+| [@kkwpsv](https://github.com/kkwpsv) | Fixed an incorrect internal API call |
## Links
diff --git a/documentation/docfx/releases/3.119.1.md b/documentation/docfx/releases/3.119.1.md
index 0f5c204fcf1..0aefecd8090 100644
--- a/documentation/docfx/releases/3.119.1.md
+++ b/documentation/docfx/releases/3.119.1.md
@@ -1,65 +1,95 @@
+
+
+
+
# Version 3.119.1
-> **Stability and platform fixes** · Released September 23, 2025 · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.119.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.119.1)
+> **Metal and Apple platform fixes** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.119.1) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.119.1)
## Highlights
-This release delivers key stability fixes for Metal on Apple platforms, resolves several crashes and rendering issues, and adds the new `PostScriptName` property to `SKTypeface`. Four community contributors — [@jeremy-visionaid](https://github.com/jeremy-visionaid), [@taublast](https://github.com/taublast), [@spouliot](https://github.com/spouliot), and [@jonlipsky](https://github.com/jonlipsky) — drove the majority of user-facing changes.
-
-## Breaking Changes
-
-*None in this release.*
+A servicing release focused on Apple platform stability — fixing Metal rendering on iOS 15 and lower, MacCatalyst canvas opacity, and disposal crashes — alongside a zlib update and a new `PostScriptName` on `SKTypeface`. Most user-facing fixes came from community contributors including [@taublast](https://github.com/taublast), [@jeremy-visionaid](https://github.com/jeremy-visionaid), [@jonlipsky](https://github.com/jonlipsky), and [@spouliot](https://github.com/spouliot).
## New Features
-### Text & Fonts
+### Engine
-- **`PostScriptName` on `SKTypeface`** — Exposes the PostScript name of a typeface, useful for font identification and PDF workflows. ❤️ [@jonlipsky](https://github.com/jonlipsky) ([#3263](https://github.com/mono/SkiaSharp/pull/3263))
+- **Updated zlib to v1.3.0.1+** — Refreshes the bundled zlib native dependency. ([#3058](https://github.com/mono/SkiaSharp/pull/3058))
-## Bug Fixes
+### Text & Fonts
-- **SKMetalView double initialization** — Avoids initializing `SKMetalView` twice, preventing redundant setup on Apple platforms. ❤️ [@jeremy-visionaid](https://github.com/jeremy-visionaid) ([#3256](https://github.com/mono/SkiaSharp/pull/3256))
-- **`SKAutoCanvasRestore` crash on disposed canvas** — Prevents a crash when `SKAutoCanvasRestore` is disposed after its canvas has already been disposed. ❤️ [@taublast](https://github.com/taublast) ([#3291](https://github.com/mono/SkiaSharp/pull/3291))
-- **`SKXamlCanvas` opaque on Mac Catalyst** — Fixes `SKXamlCanvas` incorrectly rendering as opaque on Mac Catalyst, restoring transparency support. ❤️ [@spouliot](https://github.com/spouliot) ([#3236](https://github.com/mono/SkiaSharp/pull/3236))
-- **Metal crash on iOS 15 and lower** — Hotfixes a Metal backend crash affecting devices running iOS 15 and earlier. ❤️ [@taublast](https://github.com/taublast) ([#3293](https://github.com/mono/SkiaSharp/pull/3293))
-- **UTC `DateTime` conversion in PDF metadata** — Fixes incorrect `DateTime` conversion in `SKDocumentPdfMetadata`, ensuring dates are correctly stored as UTC. ❤️ [@jeremy-visionaid](https://github.com/jeremy-visionaid) ([#3333](https://github.com/mono/SkiaSharp/pull/3333))
+- **`PostScriptName` on `SKTypeface`** — Exposes the PostScript name of a typeface. ❤️ [@jonlipsky](https://github.com/jonlipsky) ([#3263](https://github.com/mono/SkiaSharp/pull/3263))
-## Security
+### Platform
-- **zlib updated to v1.3.0.1+** — Bumps the bundled zlib to address known vulnerabilities. ([#3058](https://github.com/mono/SkiaSharp/pull/3058))
+- **WinUI Interop built as `/MT`** — Builds the WinUI interop library with the static runtime. ([#3341](https://github.com/mono/SkiaSharp/pull/3341))
+- **EGL/GLESv2 build targets** — Builds EGL as win32 and GLESv2 as WASDK. ([#3338](https://github.com/mono/SkiaSharp/pull/3338))
-## Platform
+## Bug Fixes
-- **WinUI unpackaged app loading fix** — Builds EGL as Win32 and GLESv2 as WASDK to resolve native library loading failures in unpackaged WinUI apps. ([#3338](https://github.com/mono/SkiaSharp/pull/3338))
-- **WinUI Interop built as `/MT`** — Switches the WinUI interop library to static CRT linking (`/MT`), eliminating runtime dependency issues. ([#3341](https://github.com/mono/SkiaSharp/pull/3341))
+- **Metal on iOS 15 and lower** — Hotfixes Metal rendering for iOS 15 and earlier. ❤️ [@taublast](https://github.com/taublast) ([#3293](https://github.com/mono/SkiaSharp/pull/3293))
+- **`SKAutoCanvasRestore` disposal crash** — Avoids a crash at `Dispose` when the canvas was already disposed. ❤️ [@taublast](https://github.com/taublast) ([#3291](https://github.com/mono/SkiaSharp/pull/3291))
+- **MacCatalyst canvas opacity** — Ensures `SKXamlCanvas` is not opaque on MacCatalyst. ❤️ [@spouliot](https://github.com/spouliot) ([#3236](https://github.com/mono/SkiaSharp/pull/3236))
+- **Double `SKMetalView` initialization** — Avoids initializing `SKMetalView` twice. ❤️ [@jeremy-visionaid](https://github.com/jeremy-visionaid) ([#3256](https://github.com/mono/SkiaSharp/pull/3256))
+- **UTC `DateTime` conversion** — Fixes UTC `DateTime` conversion. ❤️ [@jeremy-visionaid](https://github.com/jeremy-visionaid) ([#3333](https://github.com/mono/SkiaSharp/pull/3333))
## Platform Support
| Platform | What's New |
|----------|-----------|
-| 🍎 Apple | Metal fixes for iOS 15, `SKMetalView` double-init fix, Mac Catalyst transparency |
-| 🪟 Windows | WinUI unpackaged loading fix, static CRT for WinUI interop |
-| 🎨 Core API | `SKTypeface.PostScriptName`, `SKAutoCanvasRestore` crash fix, PDF `DateTime` fix |
+| 🍎 Apple | Metal iOS 15 hotfix, MacCatalyst `SKXamlCanvas` opacity, `SKMetalView` init fix, `SKAutoCanvasRestore` crash fix |
+| 🪟 Windows | WinUI interop `/MT` build, EGL/GLESv2 build targets |
+| 🎨 Core API | `SKTypeface.PostScriptName`, UTC `DateTime` fix |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@jeremy-visionaid](https://github.com/jeremy-visionaid) | Fixed `SKMetalView` double initialization, PDF UTC `DateTime` conversion |
-| [@taublast](https://github.com/taublast) | Fixed `SKAutoCanvasRestore` crash, Metal hotfix for iOS 15 |
-| [@spouliot](https://github.com/spouliot) | Fixed `SKXamlCanvas` transparency on Mac Catalyst |
+| [@taublast](https://github.com/taublast) | Hotfixed Metal on iOS 15 and fixed an `SKAutoCanvasRestore` disposal crash |
+| [@jeremy-visionaid](https://github.com/jeremy-visionaid) | Fixed UTC `DateTime` conversion, double `SKMetalView` init, and added a Metal `GRContext` disposal test |
| [@jonlipsky](https://github.com/jonlipsky) | Added `PostScriptName` to `SKTypeface` |
+| [@spouliot](https://github.com/spouliot) | Fixed MacCatalyst `SKXamlCanvas` opacity |
+| [@pjcollins](https://github.com/pjcollins) | Added CI triggers for the native pipeline |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.119.0...v3.119.1)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/3.119.1)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/3.119.1)
-
----
-
-## Preview 1 (September 8, 2025)
-
-All user-facing changes shipped in Preview 1: Metal and platform fixes, new `PostScriptName` API, zlib security update, and WinUI improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.119.0...v3.119.1-preview.1.1)
diff --git a/documentation/docfx/releases/3.119.2.md b/documentation/docfx/releases/3.119.2.md
index 036aa0f7da8..6061ec6a63c 100644
--- a/documentation/docfx/releases/3.119.2.md
+++ b/documentation/docfx/releases/3.119.2.md
@@ -1,27 +1,69 @@
+
+
+
+
# Version 3.119.2
-> **Security hardening release** · Released February 7, 2026 · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.119.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.119.2)
+> **Security hardening release** · Released · [NuGet](https://www.nuget.org/packages/SkiaSharp/3.119.2) · [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.119.2)
## Highlights
-This release focuses on hardening the native libraries against common exploit techniques on Windows and Linux. Spectre mitigations, Control Flow Guard, and BufferSecurityCheck are now enabled across all Windows and Linux native builds. Three community contributors — ❤️ [@MartinZikmund](https://github.com/MartinZikmund), ❤️ [@Aguilex](https://github.com/Aguilex), and ❤️ [@sshumakov](https://github.com/sshumakov) — drove every user-facing change in this release.
-
-## Breaking Changes
-
-*None in this release.*
+This release hardens the native libraries against common exploit techniques on Windows and Linux. Spectre mitigation, Control Flow Guard, and BufferSecurityCheck are now enabled across the native builds, and the missing tvOS `SKSurface.Create` overloads round out Apple platform parity. Much of the security hardening was contributed by the community.
## New Features
### Platform
-- **tvOS `SKSurface.Create` overloads** — Adds the missing overloads for tvOS, bringing parity with other Apple platforms. ❤️ [@MartinZikmund](https://github.com/MartinZikmund) ([#3342](https://github.com/mono/SkiaSharp/pull/3342))
+- **tvOS `SKSurface.Create` overloads** — Adds the missing overloads for tvOS, bringing parity with the other Apple platforms. ❤️ [@MartinZikmund](https://github.com/MartinZikmund) ([#3342](https://github.com/mono/SkiaSharp/pull/3342))
+- **Android symbols** — Preserves and packs the Android debug symbols. ([#3374](https://github.com/mono/SkiaSharp/pull/3374))
+
+### Security
+
+- **Spectre mitigation for Linux** — Adds the Spectre mitigation flag for `libSkiaSharp.so`. ([#3503](https://github.com/mono/SkiaSharp/pull/3503))
+- **Spectre mitigation for Windows** — Adds the Spectre mitigation flag for `libSkiaSharp.dll`. ([#3497](https://github.com/mono/SkiaSharp/pull/3497))
+- **Control Flow Guard (CFG)** — Enables Control Flow Guard for all Windows native DLLs. ❤️ [@Aguilex](https://github.com/Aguilex) ([#3397](https://github.com/mono/SkiaSharp/pull/3397))
+- **BufferSecurityCheck** — Enables `BufferSecurityCheck` for native DLLs to resolve BinSkim BA2007. ❤️ [@Aguilex](https://github.com/Aguilex) ([#3404](https://github.com/mono/SkiaSharp/pull/3404))
-## Security
+## Bug Fixes
-- **Spectre mitigation for Windows** — Enables `/Qspectre` for `libSkiaSharp.dll`. ❤️ [@sshumakov](https://github.com/sshumakov) ([#3497](https://github.com/mono/SkiaSharp/pull/3497), originally [#3496](https://github.com/mono/SkiaSharp/pull/3496))
-- **Spectre mitigation for Linux** — Enables Spectre mitigation for `libSkiaSharp.so`. ❤️ [@sshumakov](https://github.com/sshumakov) ([#3503](https://github.com/mono/SkiaSharp/pull/3503), originally [#3502](https://github.com/mono/SkiaSharp/pull/3502))
-- **Control Flow Guard (CFG)** — Enables CFG for all Windows native DLLs. ❤️ [@Aguilex](https://github.com/Aguilex) ([#3397](https://github.com/mono/SkiaSharp/pull/3397))
-- **BufferSecurityCheck** — Enables BufferSecurityCheck for Windows native DLLs to resolve BinSkim BA2007. ❤️ [@Aguilex](https://github.com/Aguilex) ([#3404](https://github.com/mono/SkiaSharp/pull/3404))
+- **Generated enum documentation** — Preserves the docs on generated enum members. ([#3361](https://github.com/mono/SkiaSharp/pull/3361))
+
+Plus several CI, build, and documentation improvements.
## Platform Support
@@ -30,41 +72,18 @@ This release focuses on hardening the native libraries against common exploit te
| 🍎 Apple | tvOS `SKSurface.Create` overloads |
| 🪟 Windows | Spectre mitigation, Control Flow Guard, BufferSecurityCheck |
| 🐧 Linux | Spectre mitigation |
+| 🤖 Android | Preserved and packed debug symbols |
## Community Contributors ❤️
| Contributor | What They Did |
|-------------|--------------|
-| [@MartinZikmund](https://github.com/MartinZikmund) | Added missing tvOS `SKSurface.Create` overloads |
-| [@Aguilex](https://github.com/Aguilex) | Enabled Control Flow Guard and BufferSecurityCheck on Windows |
-| [@sshumakov](https://github.com/sshumakov) | Added Spectre mitigation for Windows and Linux native libraries |
+| [@Aguilex](https://github.com/Aguilex) | Enabled Control Flow Guard and BufferSecurityCheck for Windows native DLLs |
+| [@MartinZikmund](https://github.com/MartinZikmund) | Added the missing tvOS `SKSurface.Create` overloads |
## Links
- [Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.119.1...v3.119.2)
- [NuGet Package](https://www.nuget.org/packages/SkiaSharp/3.119.2)
- [API Diff](https://github.com/mono/SkiaSharp/tree/main/changelogs/SkiaSharp/3.119.2)
-
----
-
-## Preview 3 (February 5, 2026)
-
-Added Spectre mitigation for Windows native libraries.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.119.2-preview.2.3...v3.119.2-preview.3.1)
-
----
-
-## Preview 2 (January 26, 2026)
-
-Enabled Control Flow Guard and BufferSecurityCheck for all Windows native DLLs. Plus several CI and documentation improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.119.2-preview.1.2...v3.119.2-preview.2.3)
-
----
-
-## Preview 1 (January 26, 2026)
-
-Added missing tvOS `SKSurface.Create` overloads, plus build system improvements.
-
-[Full Changelog](https://github.com/mono/SkiaSharp/compare/v3.119.1...v3.119.2-preview.1.2)
+- [GitHub Release](https://github.com/mono/SkiaSharp/releases/tag/v3.119.2)
diff --git a/documentation/docfx/releases/3.119.3.md b/documentation/docfx/releases/3.119.3.md
index 2fe787ac439..c4fd75f95fc 100644
--- a/documentation/docfx/releases/3.119.3.md
+++ b/documentation/docfx/releases/3.119.3.md
@@ -3,7 +3,7 @@
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-11T21:29:31Z by generate-release-notes.py
+ Generated: 2026-06-16T19:46:03Z by generate-release-notes.py
version: 3.119.3
status: preview
superseded: 3.119.4 (preview only, never released as stable)
diff --git a/documentation/docfx/releases/3.119.4.md b/documentation/docfx/releases/3.119.4.md
index 0a831f9403d..8a4352c492a 100644
--- a/documentation/docfx/releases/3.119.4.md
+++ b/documentation/docfx/releases/3.119.4.md
@@ -3,7 +3,7 @@
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-11T21:12:31Z by generate-release-notes.py
+ Generated: 2026-06-16T19:48:13Z by generate-release-notes.py
version: 3.119.4
status: stable
supersedes: 3.119.3 (preview only, rolled up)
diff --git a/documentation/docfx/releases/3.119.5-unreleased.md b/documentation/docfx/releases/3.119.5-unreleased.md
index 17f1faba15c..b903e533ec6 100644
--- a/documentation/docfx/releases/3.119.5-unreleased.md
+++ b/documentation/docfx/releases/3.119.5-unreleased.md
@@ -3,7 +3,7 @@
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-11T21:46:51Z by generate-release-notes.py
+ Generated: 2026-06-16T19:32:16Z by generate-release-notes.py
version: 3.119.5
status: unreleased
branch: release/3.119.x
diff --git a/documentation/docfx/releases/4.147.0.md b/documentation/docfx/releases/4.147.0.md
index 135fb19f592..203622fc7b6 100644
--- a/documentation/docfx/releases/4.147.0.md
+++ b/documentation/docfx/releases/4.147.0.md
@@ -3,7 +3,7 @@
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-11T22:09:08Z by generate-release-notes.py
+ Generated: 2026-06-16T19:50:15Z by generate-release-notes.py
version: 4.147.0
status: preview
superseded: 4.148.0 (preview only, never released as stable)
diff --git a/documentation/docfx/releases/4.148.0-unreleased.md b/documentation/docfx/releases/4.148.0-unreleased.md
deleted file mode 100644
index 3ca21545f99..00000000000
--- a/documentation/docfx/releases/4.148.0-unreleased.md
+++ /dev/null
@@ -1,265 +0,0 @@
-
-
-
-
-# Version 4.148.0
-
-> **Upcoming release** · In development · Not yet available on NuGet
-
-> **Supersedes [4.147.0](4.147.0.md)** · Rolls up preview-only work that was never released as stable — those changes are included cumulatively below.
-
-## Highlights
-
-SkiaSharp 4 is the first major version upgrade in many years, built on the Skia m148 engine and bringing a wave of new capabilities: animated WebP encoding, variable and color-palette font support, expanded platform reach (Linux Bionic, Tizen x64/arm64), and a comprehensive API modernization sweep. This release cumulatively includes all work from the skipped 4.147.0 preview cycle. Special thanks to [@ramezgerges](https://github.com/ramezgerges), [@4Darmygeometry](https://github.com/4Darmygeometry), [@SimonvBez](https://github.com/SimonvBez), and [@ebariche](https://github.com/ebariche) for major community contributions across this release.
-
-## ⚠️ Breaking Changes
-
-- **SkiaSharp major version bump to 4.x** — The package version jumps from 3.x to 4.x. Existing NuGet references require a version update. ([#3640](https://github.com/mono/SkiaSharp/pull/3640))
-- **`SKPaint` text/font obsolete members are now errors** — APIs marked `[Obsolete]` in earlier releases now produce compile errors. Migrate to the `SKFont`-based text APIs. ❤️ [@ramezgerges](https://github.com/ramezgerges) ([#4068](https://github.com/mono/SkiaSharp/pull/4068))
-
-## New Features
-
-### Engine
-
-- **Skia milestone m148** — Updated the Skia engine to milestone 148, picking up rendering improvements, bug fixes, and upstream security patches. ([#4125](https://github.com/mono/SkiaSharp/pull/4125))
-
-### Images & Encoding
-
-- **Animated WebP encoding (`SKWebpEncoder`)** — Full support for encoding multi-frame animated WebP files. ([#3771](https://github.com/mono/SkiaSharp/pull/3771))
-
-### API Surface
-
-- **`SKStream.GetData()`** — Zero-copy conversion of any `SKStream` to an `SKData` object. ([#3772](https://github.com/mono/SkiaSharp/pull/3772))
-- **`HBColor` struct** — Adds a proper managed type for HarfBuzz `hb_color_t`, replacing raw integer handling. ([#4000](https://github.com/mono/SkiaSharp/pull/4000))
-- **`SKSamplingOptions` on `SKSurface.Draw` / `SKCanvas.DrawSurface`** — Exposes sampling-quality control on surface-to-canvas drawing. ❤️ [@Copilot](https://github.com/Copilot) ([#3491](https://github.com/mono/SkiaSharp/pull/3491))
-- **Missing API wrappers and naming fixes** — Adds several previously unbound C API entry points and corrects naming convention violations. ([#4001](https://github.com/mono/SkiaSharp/pull/4001))
-- **Obsolete legacy `SKPaint` state-reading APIs** — Remaining `SKPaint` text/font state properties are marked `[Obsolete]` in preparation for removal. ([#4114](https://github.com/mono/SkiaSharp/pull/4114))
-
-### Text & Fonts
-
-- **Variable font support** — Full OpenType variable font axis support in `SKTypeface` and `HarfBuzzSharp`. ❤️ [@ramezgerges](https://github.com/ramezgerges) ([#3703](https://github.com/mono/SkiaSharp/pull/3703))
-- **Color font palette support** — Adds `SKTypeface` APIs to enumerate and select color font palettes (CPAL/COLR). ([#3742](https://github.com/mono/SkiaSharp/pull/3742))
-
-### Platform
-
-- **Linux Bionic native assets** — New native assets for Linux Bionic to support scenarios using the Android NDK sysroot outside of Android. ❤️ [@4Darmygeometry](https://github.com/4Darmygeometry) ([#3217](https://github.com/mono/SkiaSharp/pull/3217))
-- **Tizen x64 and ARM64 native builds** — Tizen native support extended to x64 and arm64 architectures. ([#3620](https://github.com/mono/SkiaSharp/pull/3620))
-
-## Bug Fixes
-
-- **`SKPixmap.GetPixelSpan(x, y)` offset** — Fixed a bug where the row stride calculation used `Height` instead of `Width`, producing wrong pixel addresses. ([#4128](https://github.com/mono/SkiaSharp/pull/4128))
-- **`SKPath` finalizer crash** — Fixed a crash when `SKPathBuilder` is collected by the GC before the `SKPath` built from it. ❤️ [@ramezgerges](https://github.com/ramezgerges) ([#3796](https://github.com/mono/SkiaSharp/pull/3796))
-- **Default typeface resolution** — Moved default-typeface lookup from native to the managed layer, fixing inconsistencies on platforms without a system font manager. ❤️ [@ramezgerges](https://github.com/ramezgerges) ([#3730](https://github.com/mono/SkiaSharp/pull/3730))
-- **Singleton instance lifecycle** — Reworked the lifecycle of shared singleton objects to prevent premature disposal and ordering bugs. ❤️ [@ramezgerges](https://github.com/ramezgerges) ([#4080](https://github.com/mono/SkiaSharp/pull/4080))
-- **Native-compat gate timing** — Moved the native compatibility check from `[ModuleInitializer]` to the `SkiaApi` static constructor, fixing edge cases in .NET trimming and NativeAOT scenarios. ([#4133](https://github.com/mono/SkiaSharp/pull/4133))
-- **Android `SKGLView` tab switch** — Fixed `SKGLView` not re-rendering after a MAUI `TabBar` tab switch on Android. ❤️ [@SimonvBez](https://github.com/SimonvBez) ([#3076](https://github.com/mono/SkiaSharp/pull/3076))
-- **WinUI Projection DLL discovery** — Fixed `libWinAppSDK_SkiaSharp.dll` not being found by .NET 9 WinUI consumers. ([#4084](https://github.com/mono/SkiaSharp/pull/4084))
-
-## Security
-
-Multiple native dependencies updated with security patches:
-
-- **expat 2.8.1** ([#4079](https://github.com/mono/SkiaSharp/pull/4079))
-- **HarfBuzz 14.2.0** ([#4035](https://github.com/mono/SkiaSharp/pull/4035))
-- **libjpeg-turbo 3.1.4.1** ([#4012](https://github.com/mono/SkiaSharp/pull/4012))
-- **FreeType 2.14.3** ([#3726](https://github.com/mono/SkiaSharp/pull/3726))
-- **zlib 1.3.2.1** ([#3720](https://github.com/mono/SkiaSharp/pull/3720))
-- **libpng 1.6.58** ([#3718](https://github.com/mono/SkiaSharp/pull/3718))
-- **libexpat 2.7.5** ([#3717](https://github.com/mono/SkiaSharp/pull/3717))
-
-## Platform Support
-
-| Platform | What's New |
-|----------|-----------|
-| 🐧 Linux | Bionic (NDK legacy ABI) native assets |
-| 🍎 Apple | TFM alignment: 26.0 for libraries, unversioned for app targets |
-| 🤖 Android | Fixed `SKGLView` rendering after MAUI tab switch |
-| 🪟 Windows | Fixed WinUI Projection DLL discovery for .NET 9 |
-| 🏗️ Tizen | x64 and ARM64 native builds |
-| 🌐 WebAssembly | Dropped pre-.NET 8 Emscripten build variants |
-
-## Community Contributors ❤️
-
-| Contributor | What They Did |
-|-------------|--------------|
-| [@ramezgerges](https://github.com/ramezgerges) | Variable font support, color font robustness, singleton lifecycle rework, `SKPath` finalizer fix, default-typeface fix, `SKPaint` API cleanup, Skia milestone bumps |
-| [@4Darmygeometry](https://github.com/4Darmygeometry) | Linux Bionic native assets, C# 13 PolySharp support on legacy TFMs |
-| [@SimonvBez](https://github.com/SimonvBez) | Fixed Android `SKGLView` not rendering after MAUI tab switch |
-| [@Copilot](https://github.com/Copilot) | `SKSamplingOptions` support on `SKSurface.Draw` / `SKCanvas.DrawSurface` |
-| [@ebariche](https://github.com/ebariche) | Reduced SkiaFiddle WASM application size by ~60% |
-| [@sasakrsmanovic](https://github.com/sasakrsmanovic) | Updated Uno Platform link and description in README |
-
-Plus several CI, build infrastructure, and developer tooling improvements.
diff --git a/documentation/docfx/releases/TOC.yml b/documentation/docfx/releases/TOC.yml
index eda96b5626e..7fe19abd2f9 100644
--- a/documentation/docfx/releases/TOC.yml
+++ b/documentation/docfx/releases/TOC.yml
@@ -1,10 +1,5 @@
- name: Overview
href: index.md
-- name: Version 4.148.x
- href: 4.148.0-unreleased.md
- items:
- - name: Version 4.148.0 (Unreleased)
- href: 4.148.0-unreleased.md
- name: Version 4.147.x
href: 4.147.0.md
items:
@@ -153,8 +148,10 @@
- name: Version 1.55.0
href: 1.55.0.md
- name: Version 1.54.x
- href: 1.54.1.md
+ href: 1.54.1.1.md
items:
+ - name: Version 1.54.1.1
+ href: 1.54.1.1.md
- name: Version 1.54.1
href: 1.54.1.md
- name: Version 1.54.0
diff --git a/documentation/docfx/releases/index.md b/documentation/docfx/releases/index.md
index e5d5034987a..2a348465069 100644
--- a/documentation/docfx/releases/index.md
+++ b/documentation/docfx/releases/index.md
@@ -4,8 +4,6 @@ Release notes for all SkiaSharp versions.
### SkiaSharp 4.x
-- **Version 4.148.x**
- - [Version 4.148.0 (Unreleased)](4.148.0-unreleased.md)
- **Version 4.147.x**
- [Version 4.147.0](4.147.0.md)
@@ -81,6 +79,7 @@ Release notes for all SkiaSharp versions.
- [Version 1.55.1](1.55.1.md)
- [Version 1.55.0](1.55.0.md)
- **Version 1.54.x**
+ - [Version 1.54.1.1](1.54.1.1.md)
- [Version 1.54.1](1.54.1.md)
- [Version 1.54.0](1.54.0.md)
- **Version 1.53.x**
diff --git a/scripts/infra/caching/repo-deps.json b/scripts/infra/caching/repo-deps.json
index a880d72ef04..9da6458c8e6 100644
--- a/scripts/infra/caching/repo-deps.json
+++ b/scripts/infra/caching/repo-deps.json
@@ -100,7 +100,7 @@
"include": ["scripts/infra/package/**"],
"children": {
"api_diff": {
- "include": ["scripts/infra/docs/**", "changelogs/**", "scripts/versions.json"]
+ "include": ["scripts/infra/docs/**", "changelogs/**"]
},
"samples": {
"include": ["samples/**", "scripts/infra/samples/**"]
diff --git a/scripts/infra/docs/docs.cake b/scripts/infra/docs/docs.cake
index 8298b714a4d..85f494d7608 100644
--- a/scripts/infra/docs/docs.cake
+++ b/scripts/infra/docs/docs.cake
@@ -862,14 +862,14 @@ void CopyChangelogs (DirectoryPath diffRoot, string id, string version)
// targets thin and guarantees they treat supersession the same way.
////////////////////////////////////////////////////////////////////////////////////////////////////
-// Load the shared version-comparison config (scripts/versions.json). This is the
+// Load the shared version-comparison config (scripts/infra/docs/versions.json). This is the
// single source of truth for how versions relate to each other. It is "override
// only": versions NOT listed fall back to the default behaviour of diffing
// against the immediately-preceding published version. Returns the "versions"
// array (empty when the file is absent). See versions.json for the schema.
JArray LoadVersionsConfig ()
{
- var path = $"{ROOT_PATH}/scripts/versions.json";
+ var path = $"{ROOT_PATH}/scripts/infra/docs/versions.json";
if (!FileExists (path))
return new JArray ();
var doc = JObject.Parse (System.IO.File.ReadAllText (path));
diff --git a/scripts/infra/docs/pr-authors.json b/scripts/infra/docs/pr-authors.json
new file mode 100644
index 00000000000..98497134217
--- /dev/null
+++ b/scripts/infra/docs/pr-authors.json
@@ -0,0 +1,789 @@
+{
+ "81": "mattleibow",
+ "386": "mattleibow",
+ "522": "mattleibow",
+ "562": "mattleibow",
+ "565": "mattleibow",
+ "615": "mattleibow",
+ "616": "mattleibow",
+ "635": "mattleibow",
+ "638": "mattleibow",
+ "662": "mattleibow",
+ "724": "newky2k",
+ "737": "mattleibow",
+ "761": "mattleibow",
+ "776": "mattleibow",
+ "777": "mattleibow",
+ "779": "mattleibow",
+ "785": "mattleibow",
+ "786": "mattleibow",
+ "790": "mattleibow",
+ "817": "mattleibow",
+ "821": "mattleibow",
+ "843": "mattleibow",
+ "850": "mattleibow",
+ "857": "mattleibow",
+ "859": "mattleibow",
+ "862": "mattleibow",
+ "863": "Odirb",
+ "865": "mattleibow",
+ "868": "mattleibow",
+ "869": "mattleibow",
+ "872": "Gillibald",
+ "875": "mattleibow",
+ "878": "mattleibow",
+ "879": "mattleibow",
+ "881": "Gillibald",
+ "882": "mattleibow",
+ "884": "mattleibow",
+ "885": "mattleibow",
+ "886": "mattleibow",
+ "889": "mattleibow",
+ "891": "mattleibow",
+ "892": "danien",
+ "899": "mattleibow",
+ "900": "mattleibow",
+ "903": "mattleibow",
+ "904": "Gillibald",
+ "915": "mattleibow",
+ "916": "mattleibow",
+ "917": "mattleibow",
+ "919": "mattleibow",
+ "922": "mattleibow",
+ "929": "Gillibald",
+ "962": "mattleibow",
+ "966": "mattleibow",
+ "967": "mattleibow",
+ "971": "mattleibow",
+ "972": "Gillibald",
+ "979": "mattleibow",
+ "984": "Gillibald",
+ "985": "mattleibow",
+ "986": "mattleibow",
+ "992": "mattleibow",
+ "995": "mattleibow",
+ "997": "mattleibow",
+ "1000": "mattleibow",
+ "1005": "mattleibow",
+ "1007": "mattleibow",
+ "1010": "mattleibow",
+ "1012": "mattleibow",
+ "1013": "mattleibow",
+ "1015": "mattleibow",
+ "1019": "mattleibow",
+ "1020": "mattleibow",
+ "1021": "mattleibow",
+ "1022": "mattleibow",
+ "1023": "mattleibow",
+ "1024": "mattleibow",
+ "1025": "mattleibow",
+ "1030": "mattleibow",
+ "1034": "mattleibow",
+ "1036": "mattleibow",
+ "1037": "mattleibow",
+ "1038": "mattleibow",
+ "1039": "daltonks",
+ "1040": "mattleibow",
+ "1043": "mattleibow",
+ "1044": "mattleibow",
+ "1045": "mattleibow",
+ "1051": "mattleibow",
+ "1054": "mattleibow",
+ "1055": "mattleibow",
+ "1056": "mattleibow",
+ "1057": "mattleibow",
+ "1060": "mattleibow",
+ "1077": "mattleibow",
+ "1082": "mattleibow",
+ "1083": "mattleibow",
+ "1086": "validvoid",
+ "1089": "mattleibow",
+ "1090": "mattleibow",
+ "1095": "zbyszekpy",
+ "1098": "mattleibow",
+ "1103": "mattleibow",
+ "1109": "mattleibow",
+ "1116": "mattleibow",
+ "1117": "mattleibow",
+ "1120": "mattleibow",
+ "1122": "mattleibow",
+ "1123": "mattleibow",
+ "1125": "mattleibow",
+ "1126": "mattleibow",
+ "1133": "mattleibow",
+ "1135": "mattleibow",
+ "1140": "mattleibow",
+ "1141": "mattleibow",
+ "1143": "mattleibow",
+ "1152": "mattleibow",
+ "1153": "mattleibow",
+ "1158": "mattleibow",
+ "1175": "mattleibow",
+ "1180": "mattleibow",
+ "1185": "ziriax",
+ "1190": "mattleibow",
+ "1191": "mscherotter",
+ "1198": "ziriax",
+ "1200": "mattleibow",
+ "1206": "mattleibow",
+ "1207": "mattleibow",
+ "1209": "Gillibald",
+ "1212": "mscherotter",
+ "1213": "mattleibow",
+ "1214": "mattleibow",
+ "1215": "mattleibow",
+ "1216": "terrajobst",
+ "1224": "mattleibow",
+ "1229": "mattleibow",
+ "1234": "mattleibow",
+ "1237": "mattleibow",
+ "1242": "mattleibow",
+ "1245": "mattleibow",
+ "1250": "mattleibow",
+ "1255": "mattleibow",
+ "1256": "mattleibow",
+ "1257": "mattleibow",
+ "1258": "mattleibow",
+ "1263": "mattleibow",
+ "1268": "mattleibow",
+ "1277": "mattleibow",
+ "1280": "mattleibow",
+ "1281": "mattleibow",
+ "1285": "mattleibow",
+ "1286": "mattleibow",
+ "1287": "mattleibow",
+ "1292": "mattleibow",
+ "1294": "mattleibow",
+ "1296": "mattleibow",
+ "1299": "mattleibow",
+ "1300": "mattleibow",
+ "1313": "mattleibow",
+ "1322": "mattleibow",
+ "1323": "mattleibow",
+ "1325": "mattleibow",
+ "1326": "mattleibow",
+ "1328": "mattleibow",
+ "1331": "mattleibow",
+ "1333": "mattleibow",
+ "1339": "mattleibow",
+ "1342": "mattleibow",
+ "1344": "mattleibow",
+ "1356": "mattleibow",
+ "1357": "mattleibow",
+ "1358": "mattleibow",
+ "1359": "mattleibow",
+ "1360": "mattleibow",
+ "1361": "mattleibow",
+ "1362": "mattleibow",
+ "1365": "mattleibow",
+ "1366": "mattleibow",
+ "1368": "mattleibow",
+ "1382": "mattleibow",
+ "1386": "mattleibow",
+ "1387": "mattleibow",
+ "1388": "mattleibow",
+ "1389": "mattleibow",
+ "1394": "mattleibow",
+ "1396": "mattleibow",
+ "1399": "mattleibow",
+ "1400": "mattleibow",
+ "1404": "ziriax",
+ "1410": "ziriax",
+ "1411": "mattleibow",
+ "1416": "mattleibow",
+ "1417": "mattleibow",
+ "1418": "mattleibow",
+ "1420": "mattleibow",
+ "1424": "mattleibow",
+ "1426": "mattleibow",
+ "1427": "mattleibow",
+ "1429": "mattleibow",
+ "1431": "mattleibow",
+ "1436": "mattleibow",
+ "1438": "mattleibow",
+ "1439": "mattleibow",
+ "1440": "mattleibow",
+ "1441": "mattleibow",
+ "1445": "mattleibow",
+ "1447": "mattleibow",
+ "1452": "mattleibow",
+ "1453": "mattleibow",
+ "1456": "mattleibow",
+ "1457": "mattleibow",
+ "1468": "mattleibow",
+ "1469": "mattleibow",
+ "1473": "mattleibow",
+ "1475": "mattleibow",
+ "1476": "mattleibow",
+ "1478": "mattleibow",
+ "1480": "mattleibow",
+ "1483": "mattleibow",
+ "1488": "mattleibow",
+ "1489": "mattleibow",
+ "1493": "mattleibow",
+ "1510": "mattleibow",
+ "1511": "mattleibow",
+ "1512": "mattleibow",
+ "1514": "mattleibow",
+ "1518": "mattleibow",
+ "1519": "Mikolaytis",
+ "1525": "mattleibow",
+ "1527": "mattleibow",
+ "1529": "mattleibow",
+ "1536": "mattleibow",
+ "1539": "mattleibow",
+ "1540": "mattleibow",
+ "1566": "mattleibow",
+ "1568": "mattleibow",
+ "1590": "mattleibow",
+ "1591": "mattleibow",
+ "1592": "mattleibow",
+ "1593": "mattleibow",
+ "1594": "mattleibow",
+ "1595": "mattleibow",
+ "1597": "mattleibow",
+ "1598": "mattleibow",
+ "1599": "mattleibow",
+ "1602": "jeromelaban",
+ "1603": "mattleibow",
+ "1604": "mattleibow",
+ "1606": "HarlanHugh",
+ "1615": "mattleibow",
+ "1617": "mattleibow",
+ "1620": "mattleibow",
+ "1627": "mattleibow",
+ "1630": "mattleibow",
+ "1636": "mattleibow",
+ "1638": "mattleibow",
+ "1642": "gmurray81",
+ "1651": "mattleibow",
+ "1653": "mattleibow",
+ "1657": "mattleibow",
+ "1659": "mattleibow",
+ "1660": "mattleibow",
+ "1662": "mattleibow",
+ "1665": "mattleibow",
+ "1668": "mattleibow",
+ "1678": "mattleibow",
+ "1681": "mattleibow",
+ "1685": "mattleibow",
+ "1696": "mattleibow",
+ "1697": "mattleibow",
+ "1698": "mattleibow",
+ "1703": "mattleibow",
+ "1704": "mattleibow",
+ "1707": "mattleibow",
+ "1708": "mattleibow",
+ "1710": "mattleibow",
+ "1721": "mattleibow",
+ "1730": "mattleibow",
+ "1734": "jsuarezruiz",
+ "1736": "mattleibow",
+ "1740": "mattleibow",
+ "1741": "mattleibow",
+ "1746": "jeromelaban",
+ "1749": "mattleibow",
+ "1754": "mattleibow",
+ "1758": "mattleibow",
+ "1760": "mattleibow",
+ "1762": "mattleibow",
+ "1766": "mattleibow",
+ "1774": "mattleibow",
+ "1781": "mattleibow",
+ "1782": "mattleibow",
+ "1788": "mattleibow",
+ "1793": "mattleibow",
+ "1797": "mattleibow",
+ "1800": "mattleibow",
+ "1802": "mattleibow",
+ "1804": "mattleibow",
+ "1806": "mattleibow",
+ "1807": "mattleibow",
+ "1811": "mattleibow",
+ "1812": "jonathanpeppers",
+ "1815": "mattleibow",
+ "1817": "toptensoftware",
+ "1827": "mattleibow",
+ "1828": "mattleibow",
+ "1832": "beto-rodriguez",
+ "1842": "mattleibow",
+ "1843": "mattleibow",
+ "1851": "mattleibow",
+ "1854": "HarlanHugh",
+ "1856": "mattleibow",
+ "1857": "mattleibow",
+ "1859": "mattleibow",
+ "1863": "mattleibow",
+ "1865": "mattleibow",
+ "1873": "jeromelaban",
+ "1889": "JensKrumsieck",
+ "1890": "mattleibow",
+ "1895": "jonathanpeppers",
+ "1910": "koolkdev",
+ "1932": "mattleibow",
+ "1942": "mattleibow",
+ "1944": "mattleibow",
+ "1946": "mattleibow",
+ "1954": "mjbond-msft",
+ "1956": "mattleibow",
+ "1957": "mattleibow",
+ "1958": "mattleibow",
+ "1959": "mattleibow",
+ "1963": "mattleibow",
+ "1965": "mattleibow",
+ "1967": "mattleibow",
+ "1986": "mattleibow",
+ "1987": "jeromelaban",
+ "1988": "mattleibow",
+ "1992": "mattleibow",
+ "1993": "mattleibow",
+ "2004": "mattleibow",
+ "2010": "akoeplinger",
+ "2016": "mattleibow",
+ "2029": "mattleibow",
+ "2031": "mattleibow",
+ "2032": "mattleibow",
+ "2034": "mattleibow",
+ "2042": "jeromelaban",
+ "2045": "mattleibow",
+ "2047": "mattleibow",
+ "2052": "mattleibow",
+ "2054": "mattleibow",
+ "2078": "mattleibow",
+ "2079": "mattleibow",
+ "2083": "mattleibow",
+ "2085": "mattleibow",
+ "2086": "jeromelaban",
+ "2087": "mattleibow",
+ "2088": "jeromelaban",
+ "2091": "mattleibow",
+ "2092": "mattleibow",
+ "2093": "mattleibow",
+ "2094": "jeromelaban",
+ "2098": "mattleibow",
+ "2099": "mattleibow",
+ "2100": "mattleibow",
+ "2118": "mattleibow",
+ "2119": "mattleibow",
+ "2120": "mattleibow",
+ "2126": "mattleibow",
+ "2128": "mattleibow",
+ "2130": "mattleibow",
+ "2133": "jeromelaban",
+ "2137": "mattleibow",
+ "2138": "mgood7123",
+ "2140": "mattleibow",
+ "2146": "lindexi",
+ "2154": "mgood7123",
+ "2162": "mgood7123",
+ "2167": "mattleibow",
+ "2168": "mattleibow",
+ "2189": "mattleibow",
+ "2192": "mattleibow",
+ "2193": "mattleibow",
+ "2195": "RichardD2",
+ "2198": "mattleibow",
+ "2199": "jeromelaban",
+ "2206": "mattleibow",
+ "2212": "mattleibow",
+ "2213": "mattleibow",
+ "2225": "myroot",
+ "2231": "jeromelaban",
+ "2232": "JamieMagee",
+ "2243": "mattleibow",
+ "2247": "snnz",
+ "2254": "mattleibow",
+ "2255": "mattleibow",
+ "2256": "mattleibow",
+ "2257": "mattleibow",
+ "2259": "jeromelaban",
+ "2264": "mattleibow",
+ "2265": "mattleibow",
+ "2266": "mattleibow",
+ "2268": "mattleibow",
+ "2269": "jeromelaban",
+ "2273": "mattleibow",
+ "2276": "mattleibow",
+ "2286": "jeromelaban",
+ "2301": "mattleibow",
+ "2303": "Redth",
+ "2304": "mattleibow",
+ "2313": "FoggyFinder",
+ "2317": "gmurray81",
+ "2322": "myroot",
+ "2389": "pjcollins",
+ "2393": "pjcollins",
+ "2398": "roubachof",
+ "2400": "roubachof",
+ "2401": "roubachof",
+ "2425": "mattleibow",
+ "2428": "jeromelaban",
+ "2443": "roubachof",
+ "2457": "jeromelaban",
+ "2465": "dellis1972",
+ "2468": "mattleibow",
+ "2476": "mattleibow",
+ "2477": "mattleibow",
+ "2478": "mattleibow",
+ "2479": "mattleibow",
+ "2480": "mattleibow",
+ "2482": "mattleibow",
+ "2484": "mattleibow",
+ "2485": "mattleibow",
+ "2486": "mattleibow",
+ "2487": "mattleibow",
+ "2489": "mattleibow",
+ "2490": "mattleibow",
+ "2491": "mattleibow",
+ "2495": "jeromelaban",
+ "2497": "mattleibow",
+ "2498": "mattleibow",
+ "2500": "mattleibow",
+ "2503": "jeromelaban",
+ "2505": "mattleibow",
+ "2510": "mattleibow",
+ "2529": "jeromelaban",
+ "2539": "mattleibow",
+ "2540": "mattleibow",
+ "2545": "mattleibow",
+ "2553": "mattleibow",
+ "2554": "mattleibow",
+ "2556": "mattleibow",
+ "2558": "mattleibow",
+ "2559": "jeromelaban",
+ "2563": "jeromelaban",
+ "2567": "mattleibow",
+ "2568": "mattleibow",
+ "2571": "mattleibow",
+ "2573": "mattleibow",
+ "2577": "mattleibow",
+ "2581": "mattleibow",
+ "2582": "mattleibow",
+ "2583": "mattleibow",
+ "2587": "mattleibow",
+ "2588": "mattleibow",
+ "2592": "mattleibow",
+ "2596": "mattleibow",
+ "2597": "mattleibow",
+ "2598": "mattleibow",
+ "2604": "mattleibow",
+ "2605": "mattleibow",
+ "2609": "mattleibow",
+ "2610": "mattleibow",
+ "2611": "mattleibow",
+ "2612": "jeromelaban",
+ "2620": "mattleibow",
+ "2622": "mattleibow",
+ "2623": "mattleibow",
+ "2624": "mattleibow",
+ "2625": "mattleibow",
+ "2627": "mattleibow",
+ "2630": "mattleibow",
+ "2693": "mattleibow",
+ "2694": "mattleibow",
+ "2695": "mattleibow",
+ "2696": "mattleibow",
+ "2697": "mattleibow",
+ "2698": "mattleibow",
+ "2699": "mattleibow",
+ "2700": "mattleibow",
+ "2701": "mattleibow",
+ "2702": "mattleibow",
+ "2703": "mattleibow",
+ "2705": "mattleibow",
+ "2706": "mattleibow",
+ "2707": "mattleibow",
+ "2710": "mattleibow",
+ "2711": "mattleibow",
+ "2717": "maxkatz6",
+ "2720": "lindexi",
+ "2730": "mattleibow",
+ "2733": "mattleibow",
+ "2736": "mattleibow",
+ "2737": "mattleibow",
+ "2739": "mattleibow",
+ "2741": "mattleibow",
+ "2743": "mattleibow",
+ "2747": "mattleibow",
+ "2748": "mattleibow",
+ "2749": "mattleibow",
+ "2753": "mattleibow",
+ "2763": "mattleibow",
+ "2769": "mattleibow",
+ "2770": "mattleibow",
+ "2772": "mattleibow",
+ "2775": "mattleibow",
+ "2780": "mattleibow",
+ "2781": "mattleibow",
+ "2785": "mattleibow",
+ "2788": "maxkatz6",
+ "2789": "mattleibow",
+ "2791": "mattleibow",
+ "2792": "mattleibow",
+ "2802": "mattleibow",
+ "2804": "taublast",
+ "2805": "mattleibow",
+ "2808": "mattleibow",
+ "2810": "mattleibow",
+ "2815": "mattleibow",
+ "2823": "Kation",
+ "2829": "mattleibow",
+ "2830": "mattleibow",
+ "2831": "mattleibow",
+ "2833": "mattleibow",
+ "2844": "mattleibow",
+ "2851": "mattleibow",
+ "2854": "jeromelaban",
+ "2858": "pdjonov",
+ "2864": "mattleibow",
+ "2873": "mattleibow",
+ "2875": "mattleibow",
+ "2876": "mattleibow",
+ "2877": "mattleibow",
+ "2878": "mattleibow",
+ "2879": "mattleibow",
+ "2880": "mattleibow",
+ "2882": "mattleibow",
+ "2883": "mattleibow",
+ "2885": "mattleibow",
+ "2889": "mattleibow",
+ "2890": "mattleibow",
+ "2891": "mattleibow",
+ "2917": "maxkatz6",
+ "2918": "Youssef1313",
+ "2920": "mattleibow",
+ "2922": "mattleibow",
+ "2924": "mattleibow",
+ "2926": "mattleibow",
+ "2927": "mattleibow",
+ "2929": "mattleibow",
+ "2930": "mattleibow",
+ "2932": "mattleibow",
+ "2934": "mattleibow",
+ "2935": "mattleibow",
+ "2938": "mattleibow",
+ "2946": "mattleibow",
+ "2949": "Youssef1313",
+ "2950": "mattleibow",
+ "2954": "mattleibow",
+ "2955": "mattleibow",
+ "2957": "mattleibow",
+ "2959": "mattleibow",
+ "2963": "Youssef1313",
+ "2969": "mattleibow",
+ "2970": "mattleibow",
+ "2971": "mattleibow",
+ "2975": "mattleibow",
+ "2989": "mattleibow",
+ "3010": "jeromelaban",
+ "3014": "sungaila",
+ "3021": "mattleibow",
+ "3022": "mattleibow",
+ "3026": "Redth",
+ "3039": "jeromelaban",
+ "3041": "mattleibow",
+ "3043": "mattleibow",
+ "3046": "mattleibow",
+ "3047": "mattleibow",
+ "3048": "mattleibow",
+ "3050": "mattleibow",
+ "3051": "mattleibow",
+ "3052": "mattleibow",
+ "3054": "mattleibow",
+ "3056": "mattleibow",
+ "3058": "mattleibow",
+ "3059": "mattleibow",
+ "3060": "mattleibow",
+ "3061": "mattleibow",
+ "3062": "mattleibow",
+ "3063": "mattleibow",
+ "3064": "mattleibow",
+ "3070": "spouliot",
+ "3080": "mattleibow",
+ "3082": "mattleibow",
+ "3083": "mattleibow",
+ "3085": "mattleibow",
+ "3088": "mattleibow",
+ "3090": "mattleibow",
+ "3092": "mattleibow",
+ "3096": "mattleibow",
+ "3100": "mattleibow",
+ "3112": "sungaila",
+ "3114": "MartinZikmund",
+ "3143": "kkwpsv",
+ "3150": "mattleibow",
+ "3152": "mattleibow",
+ "3154": "mattleibow",
+ "3156": "taublast",
+ "3161": "mattleibow",
+ "3166": "pjcollins",
+ "3171": "mattleibow",
+ "3180": "mattleibow",
+ "3186": "mattleibow",
+ "3187": "mattleibow",
+ "3189": "mattleibow",
+ "3190": "mattleibow",
+ "3199": "mattleibow",
+ "3209": "mattleibow",
+ "3215": "mattleibow",
+ "3216": "mattleibow",
+ "3221": "mattleibow",
+ "3231": "mattleibow",
+ "3236": "spouliot",
+ "3247": "mattleibow",
+ "3248": "pjcollins",
+ "3249": "mattleibow",
+ "3252": "mattleibow",
+ "3253": "mattleibow",
+ "3254": "mattleibow",
+ "3263": "jonlipsky",
+ "3291": "taublast",
+ "3293": "taublast",
+ "3305": "mattleibow",
+ "3306": "mattleibow",
+ "3338": "mattleibow",
+ "3339": "mattleibow",
+ "3340": "mattleibow",
+ "3341": "mattleibow",
+ "3342": "MartinZikmund",
+ "3345": "mattleibow",
+ "3347": "mattleibow",
+ "3352": "mattleibow",
+ "3353": "mattleibow",
+ "3355": "mattleibow",
+ "3359": "mattleibow",
+ "3360": "mattleibow",
+ "3361": "mattleibow",
+ "3364": "mattleibow",
+ "3366": "mattleibow",
+ "3367": "mattleibow",
+ "3368": "mattleibow",
+ "3370": "mattleibow",
+ "3374": "mattleibow",
+ "3382": "mattleibow",
+ "3383": "mattleibow",
+ "3387": "mattleibow",
+ "3397": "Aguilex",
+ "3404": "Aguilex",
+ "3406": "mattleibow",
+ "3441": "mattleibow",
+ "3442": "mattleibow",
+ "3443": "mattleibow",
+ "3444": "mattleibow",
+ "3445": "mattleibow",
+ "3446": "mattleibow",
+ "3447": "mattleibow",
+ "3450": "mattleibow",
+ "3451": "mattleibow",
+ "3452": "mattleibow",
+ "3453": "mattleibow",
+ "3454": "mattleibow",
+ "3455": "mattleibow",
+ "3457": "mattleibow",
+ "3458": "mattleibow",
+ "3459": "mattleibow",
+ "3460": "mattleibow",
+ "3463": "mattleibow",
+ "3468": "mattleibow",
+ "3469": "mattleibow",
+ "3474": "mattleibow",
+ "3475": "mattleibow",
+ "3477": "mattleibow",
+ "3478": "mattleibow",
+ "3479": "mattleibow",
+ "3486": "mattleibow",
+ "3488": "mattleibow",
+ "3494": "mattleibow",
+ "3495": "mattleibow",
+ "3496": "sshumakov",
+ "3501": "mattleibow",
+ "3502": "sshumakov",
+ "3504": "mattleibow",
+ "3505": "mattleibow",
+ "3506": "mattleibow",
+ "3507": "mattleibow",
+ "3508": "mattleibow",
+ "3510": "mattleibow",
+ "3513": "mattleibow",
+ "3514": "mattleibow",
+ "3515": "mattleibow",
+ "3516": "mattleibow",
+ "3517": "mattleibow",
+ "3518": "mattleibow",
+ "3529": "mattleibow",
+ "3530": "mattleibow",
+ "3532": "mattleibow",
+ "3543": "mattleibow",
+ "3544": "mattleibow",
+ "3547": "mattleibow",
+ "3548": "mattleibow",
+ "3550": "mattleibow",
+ "3551": "mattleibow",
+ "3556": "mattleibow",
+ "3558": "mattleibow",
+ "3561": "mattleibow",
+ "3562": "mattleibow",
+ "3563": "mattleibow",
+ "3564": "mattleibow",
+ "3566": "mattleibow",
+ "3567": "mattleibow",
+ "3568": "mattleibow",
+ "3569": "mattleibow",
+ "3571": "mattleibow",
+ "3573": "mattleibow",
+ "3574": "mattleibow",
+ "3575": "mattleibow",
+ "3577": "mattleibow",
+ "3579": "mattleibow",
+ "3580": "mattleibow",
+ "3581": "mattleibow",
+ "3582": "mattleibow",
+ "3584": "mattleibow",
+ "3585": "mattleibow",
+ "3586": "mattleibow",
+ "3590": "mattleibow",
+ "3591": "mattleibow",
+ "3593": "mattleibow",
+ "3594": "mattleibow",
+ "3595": "mattleibow",
+ "3596": "mattleibow",
+ "3597": "mattleibow",
+ "3598": "mattleibow",
+ "3599": "mattleibow",
+ "3600": "mattleibow",
+ "3601": "mattleibow",
+ "3602": "mattleibow",
+ "3603": "mattleibow",
+ "3604": "mattleibow",
+ "3605": "mattleibow",
+ "3606": "mattleibow",
+ "3613": "mattleibow",
+ "3614": "mattleibow",
+ "3616": "mattleibow",
+ "3618": "mattleibow",
+ "3619": "mattleibow",
+ "3622": "mattleibow",
+ "3623": "mattleibow",
+ "3624": "mattleibow",
+ "3625": "mattleibow",
+ "3626": "mattleibow",
+ "3629": "mattleibow",
+ "3633": "mattleibow",
+ "3634": "mattleibow",
+ "3635": "mattleibow",
+ "3637": "mattleibow",
+ "3639": "mattleibow",
+ "3641": "mattleibow",
+ "3648": "mattleibow",
+ "3650": "mattleibow",
+ "3651": "mattleibow",
+ "3721": "mattleibow",
+ "3723": "mattleibow",
+ "4043": "mattleibow",
+ "4045": "mattleibow",
+ "4086": "mattleibow",
+ "4105": "mattleibow",
+ "4143": "mattleibow",
+ "4167": "mattleibow",
+ "4171": "mattleibow"
+}
diff --git a/scripts/versions.json b/scripts/infra/docs/versions.json
similarity index 100%
rename from scripts/versions.json
rename to scripts/infra/docs/versions.json