Skip to content

Repository files navigation

Marmot

Marmot

A macOS app for SSH tunnels — local port forwarding and SOCKS5 proxies with a native UI, without memorizing ssh -L / ssh -D.

中文

Built with Rust + GPUI + russh.

Screenshots

Dashboard Tunnels
Dashboard Tunnels
SSH configs Settings
SSH configs Settings

Why Marmot?

Developers often tunnel databases, Redis, or HTTP services through SSH. Doing that from the terminal works, but remembering hosts, ports, keys, and reconnecting after drops gets tedious.

Marmot gives you a macOS-native app to:

  • Save reusable SSH configs (key or password)
  • Create local port forwarding and SOCKS5 tunnels in one click
  • See status, logs, and the equivalent SSH command at a glance
  • Auto-reconnect when a connection drops

Features

  • Port forwarding (ssh -L) with service presets: MySQL, PostgreSQL, Redis, MongoDB, Memcached, HTTP, and more
  • SOCKS5 dynamic proxy (ssh -D)
  • Reusable SSH profiles — one host config, many tunnels
  • Local port auto-assign when left empty
  • Dashboard for active tunnels and disconnect-all
  • Equivalent SSH command on each tunnel (copy-ready)
  • Keepalive, timeout, and auto-reconnect
  • Light / Dark / System appearance
  • English & 简体中文 (follow system or pick manually)
  • Command palette (⌘K-style) for quick navigation
  • Signed auto-updates from GitHub Releases

Requirements

  • macOS 13.0+
  • Apple Silicon (aarch64) or Intel (x86_64)

Install

Download the latest DMG from Releases:

  1. Open Marmot-*-*.dmg and drag Marmot into Applications
  2. If macOS blocks the app (unsigned / first open), right-click → Open, or run:
xattr -cr /Applications/Marmot.app

Quick start

  1. Open SSH → create a config (host, user, key or password)
  2. Open Tunnels → New Tunnel → pick port forwarding or SOCKS5
  3. Connect — use the local address shown in the tunnel detail

Build from source

Prerequisites

  • Rust 1.96.1+
  • macOS with Xcode Command Line Tools

Run

cargo run -p marmot

Test & lint

cargo test --workspace
cargo fmt --all
cargo clippy --workspace --all-targets -- --deny warnings

Package a DMG

Requires cargo-packager 0.11.8.

./scripts/make-icon.sh       # if icon.icns is missing
./scripts/package-macos.sh   # writes to dist/

Push a v* tag to trigger GitHub Actions release builds.

Project layout

crates/
├── marmot/          # App binary & packaging assets
├── marmot-core/     # Domain models & state
├── marmot-storage/  # JSON persistence + encrypted secrets
├── marmot-tunnel/   # russh tunnel service
└── marmot-ui/       # GPUI UI, themes, i18n

Data location

On macOS, app data lives under:

~/Library/Application Support/marmot/
├── config.json      # SSH configs, tunnels, settings
├── secrets.enc      # Encrypted credentials (AES-256-GCM)
├── .master_key      # Local master key
└── logs.json        # Activity logs

Tech stack

Layer Choice
Language Rust
UI GPUI + gpui-component
SSH russh
Async Tokio
Packaging cargo-packager (.app / .dmg)
Auto-update cargo-packager-updater + GitHub Releases

Contributing

Issues and PRs are welcome. Please run fmt, clippy, and tests before submitting.

License

MIT

About

Native macOS SSH tunnel manager — port forwarding & SOCKS5. Built with Rust + GPUI.macOS 原生 SSH 隧道管理器:端口转发与 SOCKS5,基于 Rust + GPUI。

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages