Access your machine's shell sessions from any device, anywhere, with zero infrastructure.
Installation • Quick Start • Web Client • Architecture • Commands • Contributing
Jaunt lets you access your machine's shell sessions and files from any device, anywhere, with zero infrastructure. No server to deploy, no port to forward, no VPN to configure. You run jaunt-host serve on your machine, scan a QR code on your phone, and you're in.
Jaunt is a thin bridge between two focused tools:
- cairn handles all networking — encrypted P2P tunnels, pairing, NAT traversal, reconnection, signaling, relay
- snag handles all shell sessions — spawn, adopt, attach, kill, scrollback
Jaunt's sole job is to connect the two and wrap them in a frictionless experience.
┌─────────────────────────────────────────────────────────────┐
│ HOST MACHINE │
│ │
│ ┌──────────────────────┐ ┌──────────────────────┐ │
│ │ jaunt-host │ │ snag │ │
│ │ │ │ (PTY multiplexer) │ │
│ │ ┌────────────────┐ │ │ │ │
│ │ │ cairn node │◄─┼──────┼── P2P tunnel ◄───────┼─── │ ── clients
│ │ │ (all network) │ │ │ │ │
│ │ └────────────────┘ │ │ sessions: │ │
│ │ ┌────────────────┐ │ ──► │ - dev (zsh) │ │
│ │ │ snag bridge │ │ │ - ci (bash) │ │
│ │ └────────────────┘ │ └──────────────────────┘ │
│ │ ┌────────────────┐ │ │
│ │ │ file browser │ │ │
│ │ └────────────────┘ │ │
│ └──────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Requires the Rust toolchain (stable).
git clone https://github.com/moukrea/jaunt.git
cd jaunt
cargo build --releaseBinaries are at target/release/jaunt-host and target/release/jaunt-client.
brew tap moukrea/tap
brew install jauntcurl -fsSL https://moukrea.github.io/apt-repo/pubkey.gpg | sudo gpg --dearmor -o /usr/share/keyrings/moukrea.gpg
echo "deb [signed-by=/usr/share/keyrings/moukrea.gpg] https://moukrea.github.io/apt-repo stable main" | \
sudo tee /etc/apt/sources.list.d/moukrea.list
sudo apt update && sudo apt install jauntsudo rpm --import https://moukrea.github.io/rpm-repo/pubkey.gpg
sudo tee /etc/yum.repos.d/moukrea.repo << 'EOF'
[moukrea]
name=moukrea Repository
baseurl=https://moukrea.github.io/rpm-repo/
gpgcheck=0
repo_gpgcheck=1
gpgkey=https://moukrea.github.io/rpm-repo/pubkey.gpg
enabled=1
EOF
sudo dnf install jauntDownload the PKGBUILD from the latest release and build:
makepkg -siDownload from the latest release:
| Platform | Architecture | Archive |
|---|---|---|
| Linux | x86_64 | jaunt-<version>-linux-x86_64.tar.gz |
| Linux | aarch64 | jaunt-<version>-linux-aarch64.tar.gz |
Native desktop app with the full web UI. Download from the latest release:
| Platform | Format |
|---|---|
| Linux | .AppImage, .deb |
| macOS | .dmg |
| Windows | .msi |
Download the APK from the latest release:
| Platform | Format |
|---|---|
| Android | .apk |
- Linux
- snag installed on the host machine
On your machine (host):
jaunt-host serveThis displays a PIN code and QR code. Scan the QR code from a web browser or enter the PIN from the CLI client.
From another machine (client):
# Pair via link (from QR code URL)
jaunt-client pair link "https://jaunt.app/#..."
# Or pair via PIN
jaunt-client pair pin A1B2-C3D4 --alias mybox
# List sessions
jaunt-client connect mybox sessions
# Send a command
jaunt-client connect mybox send dev "cargo test"
# Create a new session
jaunt-client connect mybox new --name buildThe web client is a SolidJS SPA hosted on GitHub Pages. No installation needed — works from any browser.
Stack: SolidJS + xterm.js + cairn-p2p (npm) + UnoCSS + Vite
Features:
- Automatic pairing via QR code URL (connection profile embedded in URL fragment)
- PIN-based manual pairing
- Full terminal emulation (xterm.js with WebGL rendering)
- File browser with hidden files toggle and "open session here"
- Session management (create, attach, kill, rename)
- Settings panel for manual cairn infrastructure configuration
- Mobile-responsive layout
- IndexedDB persistence for paired hosts and settings
- PWA support (works offline after first load)
Scan the QR code from jaunt-host serve or open the link — the web client extracts the connection profile from the URL fragment (never sent to any server) and connects automatically.
The Tauri 2.0 app wraps the web client with native capabilities:
- Native cairn Rust crate — QUIC transport, better NAT traversal than WebRTC
- OS keychain for cairn identity persistence
- Native notifications for session events
- Background operation — stays connected while minimized
- Cross-platform — Linux, macOS, Windows, Android, iOS
Build: cd tauri/src-tauri && cargo tauri build
| Command | Description |
|---|---|
jaunt-host serve |
Start the host daemon (default) |
jaunt-host devices list |
List paired devices |
jaunt-host devices revoke <peer_id> |
Revoke a paired device |
| Command | Description |
|---|---|
jaunt-client pair pin <PIN> [--alias NAME] |
Pair via PIN code |
jaunt-client pair link <URL> [--alias NAME] |
Pair via link with embedded profile |
jaunt-client connect <HOST> sessions |
List sessions on a host |
jaunt-client connect <HOST> attach <SESSION> |
Attach to a session |
jaunt-client connect <HOST> send <SESSION> <CMD> |
Send a command to a session |
jaunt-client connect <HOST> new [--name N] |
Create a new session |
jaunt-client connect <HOST> kill <SESSION> |
Kill a session |
jaunt-client connect <HOST> files [PATH] |
Browse files on the host |
jaunt-client hosts list |
List paired hosts |
jaunt-client hosts remove <ALIAS> |
Remove a paired host |
[server]
shell = "/bin/zsh"
auto_session = true
require_approval = true
[cairn]
# All fields optional. Omitting everything = Tier 0 (zero infra).
# signal_server = "wss://signal.example.com"
# signal_auth_token = "your-secret-token"
# turn_server = "turn:relay.example.com:3478"
# turn_username = "user"
# turn_password = "pass"
[files]
enabled = true
roots = ["~"]
show_hidden = false
write = false[cairn]
# Default cairn config for PIN pairing on Tier 1+.
# Not needed for Tier 0 or QR/link pairing (config is embedded).
# signal_server = "wss://signal.example.com"| Tier | What you need | Discovery | Best for |
|---|---|---|---|
| 0 (default) | Nothing | 5-30s via DHT/mDNS | Same LAN, simple NATs |
| 1 | Signaling + TURN server | Sub-second | Corporate firewalls, symmetric NAT |
| 2 | + Server peer | Instant | Offline messaging, multi-device sync |
QR/link pairing embeds the infrastructure config automatically. No manual client configuration needed.