react · vue · svelte · solid  ⟷  C# / .NET MAUI

desktop apps, in C# and the web you already write.

build cross-platform desktop apps with react, vue, or svelte on a C#/.NET native layer — glued by a type-safe bridge generated from your C#. no node, no rust, no XAML.

documentation →
MIT · windows + macOS · alpha (0.x)
create-vidra-app version on npm @vidra-dev/sdk version on npm
Vidra the otter cracking a shell with a rock — the mascot for codegen
cracks the shell, keeps the types
one bridge, both ways

a typed wire between two worlds

web · typescript
your UI
react · vue · svelte · solid, in the OS-native webview
{ invoke }▸
◂{ event }
native · C#
your core
.NET MAUI host, NuGet modules, domain logic
#
stay in C#/.NET
native layer, domain logic & NuGet libraries — all C#. no second backend language to learn.
bring any web framework
react, vue, svelte, solid, or plain HTML in a native webview. no XAML, no razor lock-in.
type-safe by codegen
C# is the source of truth; matching TS proxies generated every build. no silent drift.
lightweight, native
OS-native WebView (WKWebView / WebView2) — no bundled chromium. small & memory-light.
type-safe by codegen

write C#. get typed TypeScript, free.

C# modules are the single source of truth. vidra-codegen emits matching TS proxies on every build — JS and native can't silently drift.

FileSystemModule.cs · source of truth
[BridgeModule("filesystem")]
public class FileSystemModule : BridgeModuleBase
{
  [BridgeMethod("readText")]
  public ReadTextResult ReadText(ReadTextArgs args)
    => new(File.ReadAllText(args.Path));
}
straightforward usage
import { filesystem } from "@vidra-dev/sdk";
 
// args + result are fully typed — no drift
const { content } = await filesystem.readText({
  path: "/notes.txt",
});
where vidra sits

the lightweight, type-safe corner

vidra
electron
tauri
maui · xaml
you write native in
C# / .NET
Node.js (JS/TS)
Rust
C# + XAML
UI layer
any web framework
any web framework
any web framework
XAML / Razor
rendering engine
OS WebView
bundled Chromium
OS WebView
native controls
ships a browser engine
no
yes (Chromium)
no
no
type safe by design
✓ codegen
✕ manual IPC
partial (community)
n/a — one language
minimal app size
~30 MB
~100 MB+
~5 MB
~40 MB+
overhead for .NET teams
none
Node
Rust
XAML
desktop platforms
Windows · macOS
Win · macOS · Linux
Win · macOS · Linux
Win · macOS
mobile targets
on the roadmap
iOS · Android
iOS · Android
maturity
alpha (0.x)
mature
stable (2.x)
stable
license
MIT
MIT
MIT / Apache-2.0
MIT
alpha · owned, not hidden

we're honest about the edges

vidra is 0.x and solo-built. APIs and templates may change between releases. windows is the full platform; mac catalyst is query-only for some window actions — and the UI hides what a platform can't do.

react + vite ships today
? vue / svelte / solid — on the roadmap
MIT · no telemetry · no lock-in
get started — 3 commands
# scaffold a new app (asks name + app id)
npm create vidra-app@latest
# start vite + the native host, hot reload
cd my-app && npm run dev
# not sure you're set up?
npm run doctor
questions, answered

frequently asked

Is Vidra an Electron or Tauri alternative?
Yes. Vidra targets the same goal — desktop apps with a web UI — but your native layer is C#/.NET instead of Node (Electron) or Rust (Tauri), and it renders in the OS-native WebView instead of bundling Chromium.
Do I need to know Node or Rust?
No. Your native code is plain C#. Node.js is only used as dev tooling to run Vite and the scaffolder — there is no Node or Rust runtime shipped inside your app.
Which web frameworks can I use?
Any web UI that runs in a WebView: React, Vue, Svelte, Solid, or plain HTML. React + Vite ships in the template today; more framework templates are on the roadmap.
How does the type-safe bridge work?
Your C# modules are the single source of truth. On every build, vidra-codegen scans the compiled assemblies and emits matching TypeScript proxies, so calls across the JS-to-C# bridge stay fully typed and cannot silently drift.
Which platforms does Vidra support?
Windows and macOS today, built on .NET MAUI. Windows is the most complete target; some window actions on Mac Catalyst are currently query-only. Mobile (iOS and Android) is on the roadmap.
Is Vidra production-ready?
Not yet. Vidra is alpha (0.x) and solo-built, so APIs and templates may change between releases. It is MIT-licensed with no telemetry and no lock-in, which makes it a good time to try it and shape its direction.
What do I need to build a Vidra app?
The .NET 10 SDK, the .NET MAUI workload (dotnet workload install maui), and Node.js 18 or newer. macOS targets also require Xcode. Run npm run doctor to verify your setup and print the exact fix for anything missing.
How do I get started?
Run npm create vidra-app@latest, then cd into your new app and run npm run dev to launch Vite and the native host together with hot reload on the web side.

stay in C#. ship to the desktop.

the otter is small, agile, and at home on both shores.

get started → read the docs