Skip to main content

Why Land

Why Tauri

Tauri gives Land a native desktop shell without bundling Chromium - the system WebView renders the UI while a Rust backend owns every OS interaction.

Electron ships its own Chromium and Node.js inside every app bundle. That is why VS Code is ~300 MB to download and uses 500 MB-1.5 GB per window: three renderer processes, a Node.js main process, and a copy of Chromium duplicating what the OS already provides. Tauri uses the system WebView - WKWebView on macOS, WebView2 on Windows, WebKitGTK on Linux - and replaces the Node.js main process with a Rust backend.

No bundled Chromium

AttributeElectron (VS Code)Land (Tauri)
Bundled runtimeChromium + Node.jsNone - system WebView
Main process languageJavaScript (Node.js)Rust (Mountain)
Renderer processes per window3 (main, renderer, extension host)1 WebView
Binary size baseline~300 MB downloadSignificantly smaller

The size advantage is structural. There is nothing to strip - Chromium is simply not included.

Rust backend instead of Node.js main process

In Electron, every native OS operation - opening a dialog, spawning a terminal, reading the keychain - calls through a Node.js native addon or IPC bridge. In Tauri, Mountain calls OS APIs directly via the tauri, portable-pty, keyring, and notify crates.

The practical result: dialog open ~2 ms vs ~200 ms. File reads go through tokio::fs::read rather than a JSON IPC round-trip. Terminal resize sends SIGWINCH directly rather than through a bridge serialization layer.

Typed IPC via invoke

Wind calls Mountain handlers through @tauri-apps/api’s invoke(). Each call maps to a #[tauri::command] Rust function. Tauri deserializes JSON into typed Rust parameters at the boundary - wrong shape means the call fails before Mountain’s handler runs. No duck-typing at the IPC boundary.

Security model: command allowlist

Every Rust function callable from the WebView must be explicitly registered. There is no nodeIntegration mode. The set of callable commands is defined in Rust code, not in a config flag that can be set to true and forgotten. Entitlements.plist and tauri.conf.json together define what the FIDDEE binary is permitted to do on macOS - hardened runtime, keychain, network client - enforced by macOS itself.

What Tauri cannot do yet

Tauri 2.x does not expose the full macOS NSWindowTabGroup API. The nativeHost:newWindowTab, showPreviousWindowTab, and related handlers are correct no-ops because the underlying API is not in Tauri’s surface. Some macOS-only APIs that Electron exposes through native addons also have no Tauri equivalent and require platform-specific Rust code.

WARNING: WebView2 (Windows) and WebKitGTK (Linux) differ from WKWebView (macOS). macOS is the primary development path; other platforms may have rendering differences.

Cocoon is still Node.js

Tauri removes Node.js from the main process. It does not remove it from the extension host. Cocoon - the VS Code extension host sidecar - is still a Node.js process managed by Mountain. The architecture isolates Node.js to extension execution rather than making it the main process that owns all OS calls.