Skip to content

Multiplatform

Ghost targets 5 platforms from a single codebase using Tauri v2’s conditional compilation.

PlatformStatusBuild TargetPackage
Windows x64x86_64-pc-windows-msvcNSIS installer
macOS ARM64aarch64-apple-darwinDMG
macOS Intelx86_64-apple-darwinDMG
Linux x64x86_64-unknown-linux-gnuDEB, RPM, AppImage
Android ARM64aarch64-linux-androidAPK
iOS ARM64🔧aarch64-apple-iosxcarchive

Ghost uses Tauri’s #[cfg(desktop)] and #[cfg(mobile)] macros:

// Desktop-only: file watcher, system tray, MCP stdio
#[cfg(desktop)]
pub fn start_file_watcher() -> Result<()> { ... }
// Mobile stub: return Ok or clear error
#[cfg(mobile)]
pub fn start_file_watcher() -> Result<()> {
Ok(()) // Not supported on mobile
}
  • File system watcher (notify crate)
  • System tray icon + menu
  • Global keyboard shortcuts
  • MCP stdio transport
  • Native chat engine (llama-cpp-2)
  • 44px+ touch targets (@media (pointer: coarse))
  • Safe area padding for notch/home indicator
  • h-dvh instead of h-screen for dynamic viewport
  • Full-screen settings (no floating modals)
  • Platform detection via usePlatform() hook

Ghost uses 100% rustls — no OpenSSL:

# Cargo.toml — all HTTP crates use rustls
reqwest = { version = "0.12", features = ["rustls-tls"] }
hf-hub = { version = "0.4", features = ["rustls-tls"] }

This eliminates Android NDK cross-compilation failures with OpenSSL.

Tauri permissions are split per platform:

  • default.json — all platforms (core IPC)
  • desktop.json — file system, tray, shortcuts
  • mobile.json — haptics, safe area APIs

All platforms build automatically via GitHub Actions on every release:

  • Windows, macOS (ARM+Intel), Linux → Desktop builds
  • Android → APK with optional signing
  • iOS → Unsigned xcarchive (sideloadable via AltStore)