Compatibility
NetWiv keeps the native libraries and the frontend API of a TAURI® app and replaces its Rust core with .NET. This page shows that relationship, then measures how much of the API the desktop SDK, @netwiv/api, implements.
Looking for operating system support? See where NetWiv runs
How NetWiv relates to TAURI
| TAURI app | NetWiv app | ||
|---|---|---|---|
| Frontend API | @tauri-apps/api | Same API | @netwiv/api |
| Core | tauri crate · Rust | Replaced | NetWiv.Core · .NET |
| Native | wry · tao · muda · tray-iconShared · prebuilt | ||
| WebView | WebView2 · WebKitGTK · WKWebViewShared | ||
- Commands, state, permissions and plugins run in .NET; the native libraries are called through a C ABI.
- The native layer ships prebuilt in the NuGet packages. No Rust toolchain: just .NET and your frontend.
- NetWiv is an independent project, not affiliated with or endorsed by The Tauri Programme.
Where this is heading
NetWiv was born on top of TAURI. The aim is for @netwiv/api to stand on its own.
- Today
@netwiv/apipinned @tauri-apps/api codeThe SDK delegates to pinned upstream frontend code internally. An independent frontend transport is not implemented yet. - Goal
@netwiv/apiNetWiv’s own APIThe SDK becomes a NetWiv API in its own right, with its own frontend transport and no TAURI frontend code underneath.
- Apps already import only @netwiv/api, so the change is meant to happen behind it rather than in app code.
SDK coverage
What the desktop SDK, @netwiv/api, exposes and how much of it is implemented, counted identifier by identifier from the source.
@netwiv/api 0.1.0-dev, inventory reconciled 2026-10-13. Implemented means an execution path exists; it does not mean full argument, error or GUI equivalence. Frontend SDK
- Implemented614
- Declaration available55
Left out of the SDK19
- Mobile-only 11Back button, activity and scene, input accessory
- Test mocks 6The mocks module is not part of the facade
- TAURI identity 2isTauri and getTauriVersion. Runtime detection is retired
By module
| Module | In the SDK | Exposed | Left out |
|---|---|---|---|
| app | 14 | 3 | |
| core | 27 | 1 | |
| dpi | 46 | — | |
| event | 15 | — | |
| image | 14 | — | |
| menu | 123 | — | |
| mocks | 0 | 6 | |
| path | 34 | — | |
| tray | 35 | — | |
| webview | 55 | 1 | |
| webviewWindow | 98 | 2 | |
| window | 208 | 6 | |
| Total | 669 | 19 |
window 190 implemented · 18 declaration available · 6 left out
Upstream reference
The runtime is measured against the full pinned @tauri-apps/api 2.11.1 inventory, mobile entries included.
- Implemented619
- Declaration available57
- Not implemented10
- Intentional difference2
- 688
243 identifiers have a comparison fixture. SDK-only behavior is not counted as an upstream pass. Full status table
Plugins and extensions
Feature groups, not method-by-method audits. Plugin calls from the frontend go through @netwiv/api/plugins/*; Blazor Hybrid is an optional .NET package. Mobile and the updater are outside the project scope.
- Implemented1
- Partial8
- Experimental1
- Planned17
- Not implemented2
Blazor Hybrid Implemented
Managed Razor UI hosting
Optional NetWiv.BlazorHybrid provides matching .NET 8/9/10 assets for Windows x64, Linux x64 and macOS arm64 and defaults to Microsoft's managed WebView services via AddNetWivBlazorHybrid(). Standard component and JS-invokable discovery do not require the experimental registry. Selected native rendering, command IPC, interop and lifecycle checks passed on physical Windows/macOS and Linux under WSLg on X11 and native Wayland. Rider/Visual Studio UI acceptance, Hot Reload and arbitrary component libraries remain unverified. See Blazor Hybrid for platform and debugger validation.
How to read this
- Implemented
- An execution path exists in the stated platform scope. It does not imply full argument, error or GUI equivalence.
- Declaration available
- A type or constant comes from the pinned upstream declarations. Its members are counted on their own.
- Left out of the SDK
- In the upstream inventory but not in the SDK. Still counted in the upstream reference.
- Not implemented
- Unavailable, including declarations that return empty results or ignore options.
- Intentional difference
- Deliberately unsupported, such as runtime identity checks. A documented difference, not a pass.