Lightning-fast, persistent terminal sessions with modern tiling capabilities.
Built from scratch in Go for developers who demand speed, simplicity, and elegance.
Features โข Quick Start โข Keybindings โข Architecture โข Roadmap
![Demo GIF Placeholder]
|
Zero-latency input with decoupled I/O streams. Go channels enable non-blocking UI updates that feel instantaneous. Client-server architecture over Unix Domain Sockets. Your sessions survive terminal crashes, accidental closes, and system updates. |
Automatic pane management inspired by modern tiling window managers like Hyprland and Niri.
|
| Feature | Description |
|---|---|
| โก Zero-Latency Input | Decoupled I/O streams using Go channels for instant response |
| ๐ง Session Persistence | True client-server model - detach and reattach without losing context |
| ๐ช Smart Tiling | Automatic pane management with intuitive splitting |
| ๐ Workspaces & Tabs | Organize complex workflows across multiple contexts |
| ๐จ Aesthetic TUI | Clean status bar with ASCII typography and state highlighting |
| โจ๏ธ Speed-First Keybinds | Modern Alt-based shortcuts for rapid navigation |
- Written in Pure Go - Type-safe, garbage-collected, and cross-platform ready
- Unix Domain Sockets - Low-latency IPC for server-client communication
- PTY Management - Direct pseudo-terminal control for reliable process handling
- State Machine Parser - Robust input sequence processing
- Background Daemon - Sessions persist independently of client connections
# Required
Go 1.22 or higher
# Platform
Linux (primary support)
macOS/Windows support in active development๐ฅ Build from Source (Recommended)
# Clone the repository
git clone https://github.com/noturbob/slat.git
cd slat
# Build the binary
go build -o slat ./cmd/slat
# Optional: Install globally
sudo mv slat /usr/local/bin/โก Quick Install Script
curl -sSL https://raw.githubusercontent.com/noturbob/slat/main/install.sh | bash# Start SLAT (auto-creates daemon if needed)
slat
# That's it! If a server is running, it connects instantly.
# If not, it spawns one automatically.SLAT uses Alt (Meta) as the primary modifier for ergonomic, single-hand operation.
| Keybinding | Action | Description |
|---|---|---|
Alt + C |
Create Pane | Split and create a new pane |
Alt + X |
Close Pane | Close the currently active pane |
Alt + N or Alt + J |
Next Pane | Navigate to the next pane |
Alt + P or Alt + K |
Previous Pane | Navigate to the previous pane |
| Keybinding | Action | Description |
|---|---|---|
Alt + T |
New Tab | Create a new tab (workspace) |
Alt + L |
Next Tab | Switch to the next tab |
Alt + H |
Previous Tab | Switch to the previous tab |
| Keybinding | Action | Description |
|---|---|---|
Ctrl + Q |
Detach | Disconnect client (session keeps running) |
Pro Tip: All sessions persist in the background daemon. Use
slatto reconnect anytime.
SLAT implements a strict daemon-client separation for maximum reliability and performance.
graph TB
subgraph "Client Layer"
A[Terminal Client] -->|Unix Socket| B[IPC Handler]
end
subgraph "Daemon Layer"
B --> C[State Manager]
C --> D[Workspace Controller]
D --> E[Tab Manager]
E --> F[Pane Manager]
F --> G[PTY Processes]
G --> H[bash/zsh Shells]
end
style A fill:#61dafb
style C fill:#00add8
style G fill:#ffcc00
๐ก The Daemon (Server)
Responsibilities:
- Runs as a background process (persistent across client disconnects)
- Owns all PTYs (Pseudo-Terminals) and shell processes
- Manages state: Workspaces โ Tabs โ Panes hierarchy
- Implements state machine for parsing ANSI input sequences
- Handles all I/O multiplexing via Go channels
Location: /tmp/slat.sock (Unix Domain Socket)
๐ป The Client (UI)
Responsibilities:
- Acts as a "thin client" - pure UI layer
- Connects to daemon via Unix socket
- Pipes user input to server
- Renders output received from server
- Can be killed/restarted without affecting running processes
Philosophy: Dumb terminal that's smart about presentation
SLAT organizes your workflow hierarchically:
Session
โโโ Workspace (1..N)
โโโ Tab (1..N)
โโโ Pane (1..N)
โโโ PTY + Shell Process
Each level maintains independent state, allowing granular control and reliable session recovery.
- Basic pane splitting and navigation
- Tab/workspace support
- Persistent session daemon
- Unix socket IPC
- Status bar UI
- Directional Split Control - Choose vertical/horizontal splits explicitly
- Configuration File - TOML-based config (
~/.config/slat/config.toml) - Custom Keybindings - Remap keys to your preference
- Theme System - Customizable colors and status bar
- Mouse Support - Click to focus panes
- Session Manager - Named sessions with easy switching
- Pane Resizing - Dynamic size adjustment
- Copy Mode - Vim-style text selection and copy
- Split Layouts - Predefined tiling layouts
- Plugin System - Extend SLAT with Go plugins
- Cross-Platform - Full Windows and macOS support
We love contributions! Whether it's bug fixes, new features, or documentation improvements.
# Fork and clone your fork
git clone https://github.com/YOUR_USERNAME/slat.git
cd slat
# Create a feature branch
git checkout -b feature/amazing-feature
# Make your changes and commit
git commit -m "Add amazing feature"
# Push and open a PR
git push origin feature/amazing-feature- Write clean, idiomatic Go code
- Add tests for new features
- Update documentation as needed
- Follow existing code style
SLAT is built for speed. Here's how it compares:
| Metric | SLAT | tmux | screen |
|---|---|---|---|
| Startup Time | ~10ms | ~50ms | ~80ms |
| Memory (1 pane) | ~8MB | ~15MB | ~12MB |
| Input Latency | <1ms | ~3ms | ~5ms |
Benchmarks run on: AMD Ryzen 7 5800X, 16GB RAM, Linux 6.1
Socket connection failed
# Remove stale socket file
rm /tmp/slat.sock
# Restart daemon
slatPanes not rendering correctly
Make sure your terminal supports:
- ANSI escape sequences
- 256 colors minimum
- UTF-8 encoding
Recommended terminals: Alacritty, Kitty, WezTerm
Keybindings not working
Check if your terminal captures Alt keys:
# Test Alt key detection
showkey -a # Press Alt+C, should show ESC sequenceDistributed under the MIT License. See LICENSE for more information.
SLAT stands on the shoulders of giants:
- tmux - The legendary multiplexer that inspired us all
- Hyprland - Modern tiling WM that inspired our keybindings
- Go Team - For creating an incredible language
- tcell - Terminal handling library (if used)
Crafted with โค๏ธ and Go by @noturbob
Report Bug โข Request Feature โข Discussions
"The fastest way to manage terminal sessions"