Skip to content

Desktop App

roots is built with Tauri 2 and runs as a native macOS application. The desktop version is the recommended way to use roots.

Why Desktop?

  • No CORS proxy — connects directly to service APIs
  • Native performance — lightweight Rust backend
  • OAuth deep linkingroots:// protocol for seamless Microsoft sign-in
  • Persistent storage — credentials stored in Tauri's secure store
  • Small footprint — typically under 15 MB

Installation

bash
brew tap konradmichalik/tap
brew install --cask roots

Update with brew upgrade --cask roots. Homebrew automatically removes the macOS quarantine attribute.

Manual Download

  1. Download from GitHub Releases
  2. Open the .dmg and drag to Applications
  3. Remove the quarantine attribute so macOS allows the unsigned app:
    bash
    xattr -cr /Applications/Roots.app

macOS Gatekeeper

roots is not notarized through Apple. When installing manually, you must remove the quarantine attribute with the command above. Homebrew handles this automatically.

Building from Source

Prerequisites: Node.js 18+ and Rust toolchain.

bash
git clone https://github.com/konradmichalik/roots.git
cd roots
npm install
npm run tauri:build

The built app is located in src-tauri/target/release/bundle/.

Tauri Backend

The desktop app uses these Tauri plugins:

PluginPurpose
plugin-httpHTTP requests without CORS restrictions
plugin-storePersistent key-value storage
plugin-shellOpen external URLs in the browser
plugin-deep-linkHandle roots:// OAuth callbacks

There is one custom Tauri command (http_post_form) used for OAuth token exchange. It sends application/x-www-form-urlencoded POST requests, which the plugin-http module doesn't natively support.

Released under the MIT License.