A cross-platform GUI terminal application with SSH session management, session groups, and mass connect functionality built with Rust.
- SSH Session Management: Save and organize SSH connections
- Session Groups: Organize sessions into hierarchical groups
- Mass Connect: Connect to all sessions in a group with one click
- Local Terminals: Run local shell sessions
- Tab Interface: Multiple terminals in tabs
- Persistent Configuration: Sessions and settings saved to JSON
- UI Framework: gpui
- Terminal Emulation: alacritty_terminal
- SSH Client: russh
- Async Runtime: tokio
redpill/
├── Cargo.toml
├── src/
│ ├── main.rs # App entry, gpui initialization
│ ├── app.rs # Main application state
│ ├── config.rs # App configuration
│ ├── ui/
│ │ ├── mod.rs
│ │ ├── main_window.rs # Main window with dock layout
│ │ ├── session_tree.rs # Left panel: session/group tree
│ │ ├── terminal_tabs.rs # Tab bar for open terminals
│ │ ├── terminal_view.rs # Terminal rendering element
│ │ ├── session_dialog.rs # Add/edit session dialog
│ │ └── group_dialog.rs # Add/edit group dialog
│ ├── terminal/
│ │ ├── mod.rs
│ │ ├── terminal.rs # Terminal wrapper (alacritty_terminal)
│ │ ├── backend.rs # Backend trait definition
│ │ ├── ssh_backend.rs # SSH connection backend (russh)
│ │ └── local_backend.rs # Local PTY backend (portable-pty)
│ └── session/
│ ├── mod.rs
│ ├── models.rs # Session, Group, Config structs
│ ├── manager.rs # Session CRUD, persistence
│ └── storage.rs # JSON file storage
Configuration is stored in:
- macOS:
~/.config/redpill/ - Linux:
~/.config/redpill/ - Windows:
%APPDATA%\redpill\
{
"groups": [
{
"id": "uuid",
"name": "Production",
"parent_id": null,
"color": "#ff5555"
}
],
"sessions": [
{
"session_type": "Ssh",
"id": "uuid",
"name": "web-server-1",
"host": "192.168.1.100",
"port": 22,
"username": "admin",
"auth": { "type": "PrivateKey", "path": "~/.ssh/id_rsa" },
"group_id": "uuid"
}
]
}Ctrl+Shift+T: New local terminalCtrl+Shift+W: Close current tabCtrl+Tab: Next tabCtrl+Shift+Tab: Previous tabCtrl+B: Toggle session treeCtrl+Shift+C: CopyCtrl+Shift+V: Paste
- Double-click a session to connect
- Double-click a group to mass connect to all sessions
- Right-click for context menu options
Dual-licensed under either:
- MIT License or
- Apache License 2.0 at your choise.