Your tmux sessions, in your pocket.
A mobile-first tmux client for Android β SSH in, navigate sessions, and stay productive on the go.
demo.mp4
Ever needed to check on a long-running process, restart a service, or peek at logs while away from your desk?
MuxPod turns your Android phone into a tmux remote control.
- π Zero server setup β Works with any server running
sshd. No agents, no daemons, nothing to install. - π± Built for mobile β Not a terminal crammed into a phone. A thoughtful UI designed for touch.
- π Secure by default β SSH keys stored in Android Keystore. Your credentials never leave the device.
MuxPod uses a 5-tab navigation with Dashboard at the center for quick session access.
| Dashboard | Servers | Alerts | Keys | Settings |
|---|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
![]() |
Your home screen. Recent sessions sorted by last access time with relative timestamps ("Just now", "5 min ago"). One tap to reconnect β instantly returns to your last window and pane.
Manage SSH connections. Tap to expand a server card and see active tmux sessions with attach/detach status. Create new sessions or jump into existing ones.
Monitor tmux window flags across all connections in real-time.
| Flag | Color | Meaning |
|---|---|---|
| Bell | π΄ Red | Window triggered a bell |
| Activity | π Orange | Content changed in window |
| Silence | β« Gray | No activity for a while |
Tap any alert to jump directly to that window and pane. The alert is automatically cleared.
Generate Ed25519 (recommended) or RSA (2048/3072/4096-bit) keys on-device. Import existing keys. All stored securely with optional passphrase protection. One-tap copy public key to clipboard.
Customize terminal appearance (fonts, colors), behavior (haptic feedback, keep screen on), and connection settings.
The terminal screen is where MuxPod shines β purpose-built for mobile tmux interaction.
Tap Session β Window β Pane in the header to switch contexts instantly. The pane selector shows a visual layout of your split panes with accurate proportions.
| Terminal | Pane Selector |
|---|---|
![]() |
![]() |
| Gesture | Action |
|---|---|
| Hold + Swipe | Send arrow keys (ββββ) β perfect for editors like vim/nano |
| Pinch | Zoom in/out (50%β500%) |
| Tap pane indicator | Quick pane switcher with visual layout |
Dedicated buttons for terminal essentials:
[ESC] [TAB] [CTRL] [ALT] [SHIFT] [ENTER] [S-RET] [/] [-]
[β] [β] [β] [β] [β‘ DirectInput] [Input...]
- Modifier keys toggle β Tap CTRL, then type 'c' for Ctrl-C
- S-RET β Shift+Enter for Claude Code confirmation
- DirectInput mode β Real-time keystroke streaming with live indicator
Toggle Scroll & Select Mode to enable text selection. Terminal updates are buffered while you select, so content won't jump. Selected text copies to system clipboard.
- Auto-reconnect β Up to 5 retries with exponential backoff
- Input queuing β Type while disconnected; commands send automatically on reconnect
- Latency indicator β Real-time ping display (green < 100ms, red > 500ms)
- Adaptive polling β 50msβ500ms based on activity for battery optimization
Open MuxPod directly to a specific server, session, window, or pane from external apps using the muxpod:// URL scheme.
URL format:
muxpod://connect?server=<id>&session=<name>&window=<name>&pane=<index>
| Parameter | Required | Description |
|---|---|---|
server |
Yes | Matches the connection's Deep Link ID first, then falls back to connection name (case-insensitive) |
session |
No | tmux session name to attach to. If omitted, uses the first available session |
window |
No | tmux window name to switch to |
pane |
No | Pane index within the window (0-based) |
Setup:
- Open a connection in Servers > Edit
- Set a Deep Link ID (e.g.,
macbook-pro) β this is a stable identifier you use in URLs - Use the same ID in your external scripts/notifications
Example β Claude Code finish notification with deep link:
muxpod://connect?server=macbook-pro&session=dev&window=claude&pane=0
This will: find the server by ID macbook-pro β SSH connect β attach to session dev β switch to window claude β focus pane 0.
Works on both Android (intent filter) and iOS (URL type). Supports cold start (app not running) and hot links (app in background).
Use with claude-telegram-notify to get Telegram notifications when Claude Code finishes or needs input, with tappable deep links that open MuxPod directly to the right terminal.
Download the latest APK from Releases.
git clone https://github.com/moezakura/mux-pod.git
cd mux-pod
flutter pub get
flutter build apk --release- Add a server β Tap + on Servers tab, enter host/port/username
- Authenticate β Choose password or SSH key (generate in Keys tab)
- Navigate β Expand server β select session β tap window β choose pane
- Interact β Use touch gestures, special keys bar, or DirectInput mode
| Component | Requirement |
|---|---|
| Device | Android 8.0+ (API 26) |
| Server | Any SSH server (OpenSSH, Dropbear, etc.) |
| tmux | Any version (tested with 2.9+) |
| Framework | Flutter 3.24+ / Dart 3.x |
| SSH | dartssh2 |
| Terminal | xterm |
| State | flutter_riverpod |
| Security | flutter_secure_storage |
Full dependency list
cryptography,pointycastleβ Key generationflutter_local_notificationsβ Alert systemflutter_foreground_taskβ Background connectionwakelock_plusβ Keep screen onshared_preferencesβ Settings storage
# Run in debug mode
flutter run
# Static analysis
flutter analyze
# Run tests
flutter testSee docs/ for architecture details and coding conventions.
Contributions welcome! Feel free to:
- π Report bugs
- π‘ Suggest features
- π§ Submit PRs
Apache License 2.0 Β© 2025 mox
Built with β and Flutter






