Repository navigation
Releases
22.0.1
This patch updates Splat's Primitives dependency, ReactiveUI.Disposables, from 9.0.0 to 10.0.0. It aligns Splat with the latest Primitives release without changing Splat's public API or supported target frameworks.
🗞️ What's Changed
🧹 General Changes
- 3e293cb build(deps): remove unused verify dependency @glennawatson
- ed819c1 build(deps): update disposables to 10.0.0 @glennawatson
🔗 Full Changelog: v22.0.0...v22.0.1
🙌 Contributions
💖 Thanks to all the contributors: @glennawatson
22.0.0
Splat 22.0.0 adds direct memory image decoding and removes the .NET 8, .NET 9, and .NET Framework 4.6.2 (net462) targets. This is a major release because applications targeting those frameworks must retarget before upgrading.
New image decoding APIs
Splat.SkiaSharp adds SkiaBitmapLoader.LoadFromMemory overloads for decoding encoded image data from ReadOnlyMemory<byte>. Applications that already hold image bytes can pass them directly without wrapping them in a stream. The overloads support requested image dimensions and apply the image's recorded orientation.
An overload accepts a CancellationToken. Cancellation is checked between native image operations; an operation already in progress cannot be interrupted. These APIs are available on both .NET 10 and .NET 11. See the implementation and public API additions.
The .NET 11 assemblies also keep Runtime Async disabled to preserve compatibility with consumers running on Blazor WebAssembly.
.NET 8 and .NET 9 removal
.NET 8 and .NET 9 both reached Microsoft's end of support on 10 November 2026. Microsoft no longer provides security fixes, servicing updates, or technical support for either version. Splat now targets .NET 10 and .NET 11 for modern .NET applications. See Microsoft's .NET 8 and .NET 9 end-of-support announcement and the .NET support policy.
.NET Framework 4.6.2 (net462) removal
Microsoft lists the end of support for .NET Framework 4.6.2 as 12 January 2027. We are removing this target ahead of that deadline as part of the same compatibility change. This reduces the legacy build and dependency combinations we maintain. Other .NET Framework targets remain: packages that provide .NET Framework assets retain targets from net47 through net481. See Microsoft's .NET Framework support policy.
Upgrading
Retarget .NET 8 or .NET 9 applications to .NET 10 LTS or .NET 11, including the matching platform target for UI applications. For .NET Framework applications, prefer 4.8 or 4.8.1 where supported by your Windows version. Available targets vary by package and UI platform.
If you cannot retarget yet, keep using a compatible Splat 21.x version while planning the migration. Staying on an older package does not extend Microsoft's runtime support. Removing these targets lets us focus maintenance and dependency updates on the remaining framework combinations.
🗞️ What's Changed
✨ Features
- b2205a0 feat: add direct memory image decoding @glennawatson
🐛 Fixes
- ca8f3b5 fix: align adapters and API baselines with current analyzers @glennawatson
- 848c61c fix: refresh Apple API baseline annotations @glennawatson
🧹 General Changes
- de86781 ci: select test projects without launching device samples @glennawatson
- 4835bd3 ci(lock): run the lock workflow at its own time of day @glennawatson
- 1a35726 build: target net10.0 and net11.0, add every .NET Framework TFM, update packages @glennawatson
- 1b8635d ci: align workflows with the shared actions-common layout @glennawatson
- bebd9a6 build: drop net462 from the .NET Framework targets @glennawatson
- 807c430 ci: simplify package publishing @glennawatson
- 9429f65 ci: pass sourceRef to the shared release workflow @glennawatson
📝 Documentation
- 5553a0d docs: add security policy @glennawatson
- e8fd1fa docs: point the code of conduct at the website @glennawatson
- 51573d0 docs(readme): add a Sponsors section @glennawatson
📦 Dependencies
- 39466de chore(deps): update dependency log4net to 3.5.0 (#1719) renovate[bot]
- e09cd80 chore(deps): update logging and telemetry backends (#1709) renovate[bot]
- 3f3e13f chore(deps): update dependency tunit to 1.72.10 (#1716) renovate[bot]
- b625285 chore(deps): update dependency reactiveui.disposables to 8.4.0 (#1717) renovate[bot]
- be05db8 chore(deps): update dependency reactiveui.disposables to 8.2.0 (#1714) renovate[bot]
- 1b10931 chore(deps): update dependency tunit to 1.69.16 (#1715) renovate[bot]
- 4646a9a chore(deps): update microsoft.extensions to 10.0.12 (#1702) renovate[bot]
- 504b19c chore(deps): update tunit (#1697) renovate[bot]
- 6ff82a4 chore(deps): pin github actions digests (#1706) renovate[bot]
- 645428d chore(deps): update skiasharp monorepo to 4.152.1 (#1712) renovate[bot]
- 7ba45ab chore(deps): update dependency reactiveui.disposables to v8 (#1710) renovate[bot]
- bc64bbe chore(deps): update dependency microsoft.testing.extensions.codecoverage to 18.10.0 (#1683) renovate[bot]
- 1cba4ad chore(deps): update microsoft.testing (#1695) renovate[bot]
- e2cf718 chore(deps): update dependency autofac to 9.3.3 (#1711) renovate[bot]
- 8e65edd chore(deps): update dependency reactiveui.disposables to 7.2.0 (#1685) renovate[bot]
- f9066f5 chore(deps): update dependency microsoft.net.test.sdk to 18.10.1 (#1708) renovate[bot]
- 11f2ced chore(deps): update dependency reactiveui.disposables to 7.5.0 (#1699) renovate[bot]
- 33e6bb1 chore(deps): update dependency microsoft.sourcelink.github to 10.0.401 (#1700) renovate[bot]
- 209ddef chore(deps): update dotnet monorepo to 10.0.12 (#1701) renovate[bot]
- 89bc702 chore(deps): update dependency microsoft.net.test.sdk to 18.10.0 (#1704) renovate[bot]
- 2bb220d chore(deps): update dependency tunit to 1.65.0 (#1679) renovate[bot]
- 8c615e4 chore(deps): update skiasharp monorepo to 4.151.1 (#1676) renovate[bot]
- c41b855 chore(deps): update dependency microsoft.net.test.sdk to 18.9.0 (#1684) renovate[bot]
- 7bdfbf9 chore(deps): update skiasharp monorepo to 4.152.0 (#1703) renovate[bot]
- 3042657 chore(deps): update dependency minver to v8 (#1698) renovate[bot]
- 4fbd416 chore(deps): update skiasharp monorepo to 4.151.2 (#1696) renovate[bot]
- 240d8c9 chore(deps): update logging and telemetry backends (#1689) renovate[bot]
- 4b6d771 chore(deps): update dependency reactiveui.disposables to 7.3.0 (#1694) renovate[bot]
- 562362e chore(deps): update dependency roslynator.analyzers to v5 (#1690) renovate[bot]
- 7f1a025 chore(deps): update dependency verify.tunit to v32 (#1693) renovate[bot]
- 702068c chore(deps): update dependency tunit to 1.65.68 (#1692) renovate[bot]
- c882966 chore(deps): update dependency tunit to 1.65.51 (#1691) renovate[bot]
- 6be5998 chore(deps): update dependency tunit to 1.65.31 (#1687) renovate[bot]
- cf4a377 chore(deps): update dependency tunit to 1.65.38 (#1688) renovate[bot]
- a92a2af chore(deps): update dependency nlog to 6.2.0 (#1686) renovate[bot]
- 313a457 chore(deps): update microsoft.extensions to 10.0.11 (#1681) renovate[bot]
- 84624db chore(deps): update dependency microsoft.sourcelink.github to 10.0.400 (#1678) renovate[bot]
- 599442b chore(deps): update actions/download-artifact digest to 9000827 (#1722) renovate[bot]
- 6c2cec3 chore(deps): update dependency microsoft.sourcelink.github to 10.0.403 (#1725) renovate[bot]
- 6857a45 chore(deps): update dotnet monorepo to 10.0.11 (#1680) renovate[bot]
- reactiveui/splat@b410...
21.0.0
🗞️ What's Changed
✨ Features
- 8cfe76a feat(skiasharp): add a Skia bitmap loader package (#1674) @glennawatson
🐛 Fixes
- 4639f7b fix(drawing): honour the requested size when decoding on Android and Cocoa (#1673) @glennawatson
- f110782 fix(drawing): keep the aspect ratio when a decode size is requested (#1669) @glennawatson
- 9e63cc0 fix(simpleinjector): key registrations by contract and stop dropping Register (#1670) @glennawatson
- b01291d fix(drawing): report design mode correctly for nested WPF user controls (#1671) @glennawatson
- e95e515 fix(core): confine WithResolver to the calling flow (#1672) @glennawatson
🧹 General Changes
- 5f8bd5b build: adopt PublicApiSharp public API baselines and LF line endings (#1667) @glennawatson
- b1d3f14 build: refresh dependencies and adopt the shared analyzer rule set (#1668) @glennawatson
- 55661ae chore(renovate): group related dependency cohorts (#1662) @glennawatson
📦 Dependencies
- efda08f chore(deps): update dependency tunit to 1.62.0 (#1666) @renovate[bot]
- 710b7fa chore(deps): update dependency microsoft.testing.platform.msbuild to 2.3.3 (#1665) @renovate[bot]
- 001d07b chore(deps): update dependency tunit to 1.61.38 (#1654) @renovate[bot]
- 7c96933 chore(deps): update dependency reactiveui.disposables to 7.1.0 (#1656) @renovate[bot]
- aae4a77 chore(deps): update dependency performancesharp.analyzers to 3.39.0 (#1657) @renovate[bot]
- 61a4013 chore(deps): update dependency stylesharp.analyzers to 3.39.0 (#1659) @renovate[bot]
🔗 Full Changelog: v20.2.0...v21.0.0
🙌 Contributions
💖 Thanks to all the contributors: @glennawatson
🤖 Automated services that contributed: @renovate[bot]
20.2.0
🗞️ What's Changed
✨ Features
- b31daca feat(applicationinsights): add v3 package (#1653) @glennawatson
🔗 Full Changelog: v20.1.0...v20.2.0
🙌 Contributions
💖 Thanks to all the contributors: @glennawatson
20.1.0
🗞️ What's Changed
🧹 General Changes
- ed6bfd5 chore: remove appcenter (#1615) @dpvreony
- 0fc60b0 chore: Remove mention of app center from the readme @glennawatson
- 250c692 build: adopt SecuritySharp and PerformanceSharp analyzers and refresh dependencies (#1651) @glennawatson
📦 Dependencies
- 9e981ed chore(deps): update dependency serilog to 4.4.0 (#1637) @renovate[bot]
- b146a3c chore(deps): update dependency tunit to 1.61.15 (#1649) @renovate[bot]
- 050bdd2 chore(deps): update .net test stack (#1639) @renovate[bot]
- 97e3ada chore(deps): update dependency tunit to 1.60.0 (#1647) @renovate[bot]
- e0595bc chore(deps): update dependency microsoft.testing.platform.msbuild to 2.3.2 (#1643) @renovate[bot]
- 2cc971e chore(deps): update dependency tunit to 1.59.0 (#1642) @renovate[bot]
- c9bf739 chore(deps): update dependency sonaranalyzer.csharp to 10.29.0.143774 (#1638) @renovate[bot]
- 15f2508 chore(deps): update microsoft.testing (#1633) @renovate[bot]
- 16a23ef chore(deps): update dependency verify.tunit to 31.22.0 (#1635) @renovate[bot]
- 26dbf3c chore(deps): update dependency microsoft.codeanalysis.publicapianalyzers to 5.6.0 (#1630) @renovate[bot]
- 789ce31 chore(deps): update dependency autofac to 9.3.1 (#1636) @renovate[bot]
- 51c35cc chore(deps): update dependency nlog to 6.1.4 (#1634) @renovate[bot]
- 226ca00 chore(deps): update dependency verify.tunit to 31.21.0 (#1632) @renovate[bot]
- 0835a4d chore(deps): update dependency tunit to 1.58.0 (#1628) @renovate[bot]
- 213efc4 chore(deps): update dependency reactiveui.disposables to v6 (#1631) @renovate[bot]
- 69c7301 chore(deps): update dependency sonaranalyzer.csharp to 10.28.0.143324 (#1629) @renovate[bot]
- d8c98f3 chore(deps): update dependency reactiveui.disposables to 5.8.0 (#1623) @renovate[bot]
- 9ddea83 chore(deps): update dependency tunit to 1.57.17 (#1627) @renovate[bot]
- 0c39325 chore(deps): update dependency log4net to 3.3.2 (#1622) @renovate[bot]
- 3596fdb chore(deps): update dependency tunit to 1.57.14 (#1626) @renovate[bot]
- 59feaa7 chore(deps): update dependency tunit to 1.57.0 (#1625) @renovate[bot]
- 7c0d219 chore(deps): update dependency simpleinjector to 5.6.0 (#1624) @renovate[bot]
- 7cf349b chore(deps): update dependency reactiveui.disposables to 5.7.0 (#1621) @renovate[bot]
- 039b170 chore(deps): update dependency reactiveui.disposables to 5.6.0 (#1617) @renovate[bot]
- 36668f8 chore(deps): update dependency microsoft.net.test.sdk to 18.7.0 (#1619) @renovate[bot]
- d62469b chore(deps): update dependency tunit to 1.56.35 (#1620) @renovate[bot]
- e19f36f chore(deps): update tunit (#1618) @renovate[bot]
- 2b80be3 chore(deps): update reactiveui (#1616) @renovate[bot]
- d557308 chore(deps): update dependency autofac to 9.3.0 (#1611) @renovate[bot]
- 977afef chore(deps): update tunit to 1.55.2 (#1608) @renovate[bot]
- 2cd6f7a chore(deps): update reactiveui (#1607) @renovate[bot]
- f71b7dc chore(deps): update tunit (#1614) @renovate[bot]
- 643267b chore(deps): update dependency exceptionless to 6.2.0 (#1610) @renovate[bot]
- 1c4adaa chore(deps): update dependency stylesharp.analyzers to 3.5.2 (#1605) @renovate[bot]
- d7e6838 chore(deps): update tunit to 1.54.0 (#1596) @renovate[bot]
- dd5d424 chore(deps): update tunit to 1.56.0 (#1609) @renovate[bot]
- f12466d chore(deps): update actions/setup-dotnet action to v6 (#1648) @renovate[bot]
- b227227 chore(deps): update .net test stack (#1612) @renovate[bot]
🔗 Full Changelog: v20.0.0...v20.1.0
🙌 Contributions
💖 Thanks to all the contributors: @dpvreony, @glennawatson
🤖 Automated services that contributed: @renovate[bot]
20.0.0
🗞️ What's Changed
♻️ Refactoring
- f0550c6 refactor: migrate to StyleSharp analyzers, reach clean -warnaserror across the full solution, and add SonarCloud/CodeQL CI (#1593) @glennawatson
🐛 Fixes
- 7156cd0 fix: remove always-false conditions flagged by SonarCloud (#1604) @glennawatson
- b347e7f fix: scope InstanceGenericFirstDependencyResolver registration callbacks by service key (#1603) @glennawatson
🧹 General Changes
- 82072eb chore(renovate): keep legacy 4.x System.* packages off the v10 monorepo bumps (#1600) @glennawatson
✅ Tests
- 4a1505b test: raise coverage; remove ancient Xamarin.Forms/UWP runners and Splat.Prism.Forms (#1601) @glennawatson
🔗 Full Changelog: v19.4.1...20.0.0
🙌 Contributions
💖 Thanks to all the contributors: @glennawatson
19.4.1
🔏 19.4.1 — consolidated, re-signed release
This is the recommended release. It supersedes and folds in 19.3.1, which was signed with a code-signing certificate that has since been revoked — NuGet restore fails on it with NU3012. 19.4.1 is re-signed with a valid certificate; the superseded 19.3.1 release has been removed and its notes consolidated here.
🗞️ What's Changed
💥 Breaking
- Drop .NET MAUI 9 platform targets (#1586)
- Remove Tizen bitmap code; simplify platform detection (#1583)
✨ Improvements
- Refactor
CompositeDisposablefor thread-safety and performance (#1477) - Cross-platform targeting — compile .NET Framework, Windows and Android targets on non-Windows hosts (#1581, #1582)
- Remove a dead
System.Reactivepackage reference fromSplat.Core(#1579)
🐛 Fixes
- Fix intermittent Raygun test crash caused by unobserved task exceptions (#1510)
📝 Documentation
- Add and improve XML documentation for public APIs (#1476)
- Update copyright year to 2026 across source files (#1474)
🧹 Build, CI & signing
- Migrate signing from SSL.com eSigner to Certum SimplySign (container signing)
- Switch versioning from Nerdbank.GitVersioning to MinVer
- Pin 3rd-party actions to commit SHAs (CodeQL)
📦 Dependencies
- Routine dependency/test-stack updates by @renovate[bot]
🔗 Full Changelog: 19.2.1...v19.4.1
🙌 Contributions
💖 Thanks to all the contributors — @glennawatson, @ChrisPulman (see the linked PRs for attribution).
🤖 Automated services that contributed: @renovate[bot]
19.2.1
🗞️ What's Changed
🐛 Fixes
- aa93e41 Fix failing DI resolver tests and race condition in lazy singleton disposal (#1468) @glennawatson
🧹 General Changes
- 270a679 housekeeping: Update version from 19.1 to 19.2.x @glennawatson
- 3ab4b4a chore: Change question guidance from StackOverflow to Discussions @glennawatson
📦 Dependencies
- 5a43d3a chore(deps): update dependency tunit to 1.9.17 (#1469) @renovate[bot]
- 428c40a chore(deps): update dependency tunit to 1.9.26 (#1471) @renovate[bot]
- a92bcdc chore(deps): update dependency tunit to 1.9.2 (#1467) @renovate[bot]
- 1930f34 chore(deps): update dependency tunit to 1.8.1 (#1466) @renovate[bot]
- eb87a1b chore(deps): update dependency tunit to 1.7.20 (#1464) @renovate[bot]
📌 Other
- 74af88b Add YamlMime reference to codecov.yml (#1463) @ChrisPulman
🔗 Full Changelog: 19.1.1...19.2.1
🙌 Contributions
💖 Thanks to all the contributors: @ChrisPulman, @glennawatson
🤖 Automated services that contributed: @renovate[bot]
19.1.1
🗞️ What's Changed
This version is a Major change, it changes the logging/DI and other elements to make it more AOT compatible for some performance gains also. Now most logging and DI generic are first class citizens of their class and where able they are used directly with the providing resolver or logger.
💥 Breaking Changes
- 29990fb breaking changes: New default AOT compatible dependency resolver, remove most AOT labels. (#1461) @glennawatson
🧹 General Changes
- 495eb61 Update version number to 19.1.x @glennawatson
- 7dc2b1f chore: Use TUnit for the unit test, cleanup state (#1459) @glennawatson
📦 Dependencies
- eea5f1b chore(deps): update dependency mindscape.raygun4net.netcore to 11.2.5 (#1460) @renovate[bot]
- 970926e chore(deps): update dependency verify.nunit to 31.9.2 (#1456) @renovate[bot]
📌 Other
- 7172f63 Convert to SLNX, move test to ./src/tests folder, add claude instructions (#1457) @glennawatson
🔗 Full Changelog: 18.1.1...19.1.1
🙌 Contributions
💖 Thanks to all the contributors: @glennawatson
🤖 Automated services that contributed: @renovate[bot]
18.1.1
🗞️ What's Changed
💥 Breaking Changes
- d07d551 Breaking: Remove netstandard2.0, rely on .NET and .NET Framework instead (#1455) @glennawatson
🔗 Full Changelog: 17.2.1...18.1.1
🙌 Contributions
💖 Thanks to all the contributors: @glennawatson