The Tizen backend for .NET MAUI, extracted into a standalone, externally maintained repository.
Status: compiled migration, not yet publishable. Core, Waves A/B/C, Essentials, alerts, gestures, BlazorWebView, and the provisional modal adapter are compiled and tested through workload-free host and API15 reference-pack lanes. No packages are published. See Current state before filing issues.
The Tizen backend shipped inside dotnet/maui for years, compiled directly into the
Microsoft.Maui.* assemblies. Maintaining it there ties Tizen's release cadence to
.NET MAUI's and puts platform-specific work in a repository whose maintainers do not own
the platform. This repository separates the two.
| Imported history | 1,236 commits, 121 authors, back to 2016 |
| Files imported | 316 |
| Repository scaffolding | Complete |
| Package projects | Core, Controls/Waves, Essentials, alerts/gestures, BlazorWebView, Build.Tasks and Templates have deterministic compiled or packaged closures |
| Packable today | Maui.Tizen.Build.Tasks, Maui.Tizen.Templates — neither needs the workload |
| Published packages | None |
| Workload-free verification | Host tests, API15 RefPack compilation, PublicAPI/source closure, consumer compile, tooling and mutation suites |
| Real Tizen build/package/device lanes | Blocked on external dependencies |
net11.0-tizen11.0 cannot be restored or built by anyone right now. The workload manifest
Samsung.NET.Sdk.Tizen.Manifest-11.0.100-preview.7 has not been published to nuget.org — only the
9.0.100 and 10.0.100 bands exist.
This is deliberately surfaced rather than worked around. There is no neutral net11.0
fallback: it would make CI green while producing assemblies that cannot run on Tizen.
Building a Tizen project without the workload fails with a MAUITIZEN0001 error
explaining exactly this, and forcing a Tizen project onto a different target framework —
by environment variable, global property or an outer Directory.Build.props — fails with
MAUITIZEN0002 rather than quietly producing that neutral build.
Details in docs/migration.md.
Additional publication gates remain explicit:
Tizen.UIExtensions.NUImust be republished without its .NET 6-era MAUI dependency graph.- dotnet/maui#37853 modal contracts have not been adopted in the pinned published MAUI package.
- dotnet/maui#37861 is merged, but its public long-press send APIs are absent from the pinned MAUI package.
Maui.Tizen.BlazorWebViewremains non-packable untilMaui.Tizen.Coreis enabled in the produced package closure;MAUITIZEN0107fails closed if that dependency gate is bypassed.- Device, lifecycle/input and visual-baseline evidence needs the Samsung workload and provisioned mobile/TV runners.
Maui.Tizen.Controls has distinct GenerateNuspec guards for the modal and long-press package
contracts. They inspect the pinned Microsoft.Maui.Controls.dll and the compiled local source
closure. Even a verified upstream binary override cannot unblock packing until the provisional
modal contracts are removed/registered against MAUI and long-press dispatch actually calls the
public send APIs.
Window-scope alert teardown is also single-channel: every waiting request receives native close/dispose failures through its result task, while framework-owned unsubscribe, scope disposal and application termination attempt all cleanup, report diagnostics, and do not throw again.
./eng/build-workload-free.shThis runs everything that does not need the Tizen workload: compiled Core/Waves/Essentials,
alerts/gestures and BlazorWebView host suites; API15 Core/Controls/Sample/Essentials/Blazor lanes;
Controls consumer compile; PublicAPI and source-closure checks; real NuGet buildTransitive probes;
migration tooling; package policy; locked negative-control mutations; and the packable Build.Tasks
and Templates packages, including isolated template installation/instantiation, package contents,
incremental resource behavior, and repository-commit provenance.
eng/validation/run-hosted-validation.sh adds repository, package, convention, DevFlow
and consumer validation. The external-gate job installs through Samsung's supported workload
installer and runs eng/build-tizen.sh; it cannot report success by skipping or masking a failed
real Tizen restore/build/pack.
Requires the .NET SDK pinned in global.json (11.0.100-preview.7).
src/
Maui.Tizen.Core/ Handlers, platform views, lifecycle, fonts, image sources
Maui.Tizen.Controls/ Shell, CollectionView, shapes, gesture and modal managers
Maui.Tizen.Essentials/ Sensors, device info, connectivity, storage, media
Maui.Tizen.BlazorWebView/ BlazorWebView platform implementation
Maui.Tizen.Maps/ Map handlers and controls
Maui.Tizen.Graphics/ Skia view (provisional)
Maui.Tizen.Compatibility/ Provisional; see its README
Maui.Tizen.Build.Tasks/ Manifest, resource and splash MSBuild tasks (packable)
Maui.Tizen.Templates/ `dotnet new maui-tizen` template package (packable)
samples/ Imported sample applications
tests/UnitTests/ Repository invariant and build-pipeline tests
eng/
baselines.json Pinned upstream baselines
import/ Reproducible history import tooling
manifests/ Source disposition schema and data
api-baselines/ Imported and standalone PublicAPI baselines
validation/ Hosted, package, consumer and device validation
docs/ Architecture and migration documentation
Three identities, decided independently — this trips people up, so it is stated plainly:
| Value | Reason | |
|---|---|---|
| Package IDs | Maui.Tizen.* |
Externally owned; must not squat Microsoft-owned IDs |
| Assembly names | Maui.Tizen.* |
Two assemblies cannot share a simple name |
| Namespaces | Microsoft.Maui.* preserved |
Compile-time only; keeps imported code and consumer using directives unchanged |
New implementation-only types use Microsoft.Maui.Platforms.Tizen.*, a prefix unused
throughout dotnet/maui, so it cannot collide.
Full rules in docs/architecture.md.
This is a history-preserving extraction, not a copy. Original commits, authors and dates were carried across, reaching back to the Xamarin.Forms era — the backend predates .NET MAUI by years.
git shortlog -sne --no-merges
git log --follow src/Maui.Tizen.Core/Platform/Tizen/ViewExtensions.csThe import is reproducible from eng/import/. See
PROVENANCE.md.
MIT — see LICENSE.
Samsung's TizenFX and Tizen.UIExtensions are Apache-2.0 and are consumed only as
published NuGet packages; no Samsung source is included here. See
THIRD-PARTY-NOTICES.md.
docs/architecture.md— how this composes with .NET MAUI, type collision rulesdocs/migration.md— phases, status, and the external gatePROVENANCE.md— what was imported and how to reproduce it