Cross-platform (macOS + Linux + Windows) desktop companion for Vaner — the local-first preparation engine. Menu-bar / tray app that surfaces Prepared Work from the daemon: review notes, bug hypotheses, docs drift, virtual diffs, research briefs, and ready prediction-backed opportunities.
The app is intentionally non-mutating. It can inspect or export Vaner-owned content, but it does not apply patches or edit project files automatically.
Tauri v2 + SvelteKit. Rust backend depends on the shared
vaner-contract
crate from the Vaner monorepo. macOS, Linux, and Windows release artifacts
ship from this repository.
Targets:
- macOS: macOS 14+ recommended. Universal
.dmgruns on Apple Silicon and Intel Macs. Unsigned for the 0.x prereleases — Gatekeeper requires right-click → Open on first launch. - Linux: Ubuntu 22.04+ / Debian 12+, X11 or KDE Wayland. Stock
GNOME on Wayland needs
gnome-shell-extension-appindicatorfor the tray icon to appear — the app detects this at first launch and surfaces install guidance. - Windows: Windows 10 1809+ (uses the system WebView2 runtime). Unsigned for the 0.x prereleases — SmartScreen will show "Windows protected your PC → More info → Run anyway" on first install.
Download the universal .dmg from the latest GitHub Release, open it,
and drag Vaner into Applications.
VER=$(curl -fsSL https://api.github.com/repos/Borgels/vaner-desktop/releases/latest | jq -r .tag_name)
curl -LO https://github.com/Borgels/vaner-desktop/releases/download/$VER/vaner-desktop_${VER#v}_universal.dmg
open vaner-desktop_${VER#v}_universal.dmgGatekeeper: the 0.x DMGs are unsigned. On first launch, right-click Vaner → Open.
Three paths, all signed — pick whichever fits your workflow:
The installer adds a signed apt repo at https://apt.vaner.ai and
installs the vaner desktop package. Every future release arrives
through apt upgrade without you running anything else. The executable
is still vaner-desktop; the Python engine/CLI remains the PyPI
package and command vaner. If the CLI is ever shipped through apt, it
should use the package name vaner-cli.
curl -fsSL https://vaner.ai/desktop.sh | bashPrefer the plain-apt form (identical result, no pipe-to-bash):
curl -fsSL https://apt.vaner.ai/release-key.asc \
| sudo gpg --dearmor -o /etc/apt/keyrings/vaner.gpg
echo "deb [arch=amd64 signed-by=/etc/apt/keyrings/vaner.gpg] https://apt.vaner.ai stable main" \
| sudo tee /etc/apt/sources.list.d/vaner.list
sudo apt update && sudo apt install vanerarch=amd64 keeps apt from asking the repo for i386 package lists
(the repo is amd64-only).
VANER_MODE=deb curl -fsSL https://vaner.ai/desktop.sh | bashSame fingerprint-pin + detached-sig verification as the apt path; subsequent releases don't auto-install unless you re-run.
VER=$(curl -fsSL https://api.github.com/repos/Borgels/vaner-desktop/releases/latest | jq -r .tag_name)
curl -LO https://github.com/Borgels/vaner-desktop/releases/download/$VER/vaner_${VER#v}_amd64.deb
curl -LO https://github.com/Borgels/vaner-desktop/releases/download/$VER/vaner_${VER#v}_amd64.deb.asc
curl -LO https://github.com/Borgels/vaner-desktop/releases/download/$VER/release-key.asc
gpg --import release-key.asc
gpg --verify vaner_${VER#v}_amd64.deb.asc vaner_${VER#v}_amd64.deb
sudo apt install ./vaner_${VER#v}_amd64.debThe release key fingerprint is
506B8FA959917D530E5EE7203D219B47A7E4F046 — pinned in
scripts/install.sh, published on
keys.openpgp.org,
and also available as scripts/release-key.asc on main.
Every release ships an .AppImage alongside the .deb. Download,
verify, chmod +x, run:
VER=$(curl -fsSL https://api.github.com/repos/Borgels/vaner-desktop/releases/latest | jq -r .tag_name)
curl -LO https://github.com/Borgels/vaner-desktop/releases/download/$VER/vaner_${VER#v}_amd64.AppImage
curl -LO https://github.com/Borgels/vaner-desktop/releases/download/$VER/vaner_${VER#v}_amd64.AppImage.asc
curl -LO https://github.com/Borgels/vaner-desktop/releases/download/$VER/release-key.asc
gpg --import release-key.asc
gpg --verify vaner_${VER#v}_amd64.AppImage.asc vaner_${VER#v}_amd64.AppImage
chmod +x vaner_${VER#v}_amd64.AppImage
./vaner_${VER#v}_amd64.AppImageDownload the NSIS installer from the latest GitHub Release and run
it. The installer is per-user — no admin prompt — and registers an
auto-updater that follows the same minisign-signed latest.json
flow as the AppImage.
$ver = (Invoke-RestMethod https://api.github.com/repos/Borgels/vaner-desktop/releases/latest).tag_name
$url = "https://github.com/Borgels/vaner-desktop/releases/download/$ver/vaner-desktop_${ver -replace '^v',''}_x64-setup.exe"
Invoke-WebRequest $url -OutFile vaner-desktop-setup.exe
Start-Process .\vaner-desktop-setup.exeSmartScreen: the 0.x installers are unsigned. Windows will say "Windows protected your PC". Click More info → Run anyway. Code-signing is on the roadmap for 1.0.
The app checks for updates on every launch via
tauri-plugin-updater; every
update is signed with a separate minisign key whose public half is
embedded in the app. A small banner appears in the popover when a
new release is ready; click Install to download + verify +
replace in place. The apt-repo path gets the same updates through
your system's normal update flow — pick one, not both.
- L1:
vaner-contractcrate (upstream) - L2: conformance fixtures bridge (upstream)
- L3: Swift conformance test consumption (scheduled with Vaner tag)
- L4: Tauri app skeleton
- L5: tray + popover + menu + first-run AppIndicator modal
- L6: signed
.debrelease workflow + install.sh verification - L7: Docker ship-gate (
Dockerfile.ship-gate+scripts/ship-gate.sh)
Prereqs (Linux):
# Ubuntu 24.04 system deps for WebKitGTK-based Tauri:
sudo apt install -y libwebkit2gtk-4.1-dev libgtk-3-dev \
libayatana-appindicator3-dev librsvg2-dev patchelf
# Rust toolchain (1.85+ for edition 2024):
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
# Node 20+ and pnpm:
corepack enable && corepack prepare pnpm@latest --activateDev:
pnpm install
pnpm tauri devBuild a local Linux bundle:
pnpm tauri build --bundles deb,appimagePrereqs (macOS): Xcode command-line tools, Rust 1.85+, Node 20+ with corepack, and the Tauri macOS build dependencies.
pnpm install
pnpm tauri build --bundles dmg --target universal-apple-darwinPrereqs (Windows): Rust 1.85+ with the x86_64-pc-windows-msvc target,
Node 20+ with corepack, and the WebView2 runtime (Windows 11 has it
preinstalled; Tauri auto-installs it on Windows 10 if missing).
pnpm install
pnpm tauri build --bundles nsisThe installer lands at
src-tauri/target/release/bundle/nsis/vaner-desktop_<version>_x64-setup.exe.
Short version:
┌─────────────────────────────────────────────┐
│ vaner daemon (Python) │
│ /prepared-work • /work-products │
│ /events/stream • /status │
└──────────────────────┬──────────────────────┘
│ HTTP / SSE (loopback)
│
┌────────────▼──────────────┐
│ vaner-contract (Rust) │
│ • models + enums │
│ • HTTP client + SSE │
│ • reducer + handoff │
└────────────┬──────────────┘
│ (compiled in)
│
┌────────────▼──────────────┐
│ Tauri v2 Rust backend │
│ commands + SSE task │
└────────────┬──────────────┘
│ invoke / emit
│
┌────────────▼──────────────┐
│ SvelteKit (WebView) │
│ QuietShell popover UI │
└───────────────────────────┘
Design tokens (src/lib/tokens.css) are vendored from Vaner's
ui/cockpit/src/styles/tokens.css so the visual language stays 1:1
with the web cockpit and the SwiftUI macOS app.
The normal UI asks /prepared-work for card-shaped data and follows the
server-provided action links for inspect, export, dismiss, and feedback. Older
prediction endpoints remain available for diagnostic flows but are no longer
the primary product surface.
Apache-2.0, inherited from the Vaner project.