A terminal-based interactive dashboard for managing and debugging systemd services on Linux.
- 🔍 View all systemd services with color-coded status indicators
- ● Green = Running
- ✗ Red = Failed
- ○ Gray = Stopped/Dead
- ⚡ Control services: start, stop, restart with visual feedback
- 🎯 Enable/disable services on boot
- 🔎 Filter services: all, running, failed
- 📊 Live log streaming from journald with priority highlighting
- ✗ Red for errors
- ⚠ Yellow for warnings
- Auto-scrolling with timestamps
- 🌳 Process Tree View - See what's actually running!
- Shows all processes for a service
- Parent-child relationships
- PIDs and command lines
- Debug zombie processes
- Understand CPU usage
- 🎨 Context-aware help and guidance
- 💡 Intuitive empty states that explain what to do
- ⌨️ Keyboard-driven interface with vi-style shortcuts
- 🚀 Fast, responsive, built with Go and Bubble Tea
- Linux with systemd
- journald enabled
- Go ≥ 1.21 (for building)
Arch Linux (AUR):
yay -S sdtop
# or
paru -S sdtopDebian/Ubuntu (PPA):
sudo add-apt-repository ppa:YashSaini99/sdtop
sudo apt update
sudo apt install sdtopFedora/RHEL (COPR):
sudo dnf copr enable YashSaini99/sdtop
sudo dnf install sdtopFlatpak:
flatpak install flathub io.github.YashSaini99.sdtop
flatpak run io.github.YashSaini99.sdtopSnap:
sudo snap install sdtop --classicHomebrew (Linux):
brew install sdtopOne-line install (recommended):
curl -sL https://raw.githubusercontent.com/YashSaini99/sdtop/main/install.sh | bashManual download:
# Download from GitHub releases
wget https://github.com/YashSaini99/sdtop/releases/latest/download/sdtop-linux-amd64.tar.gz
tar -xzf sdtop-linux-amd64.tar.gz
sudo mv sdtop /usr/local/bin/git clone https://github.com/YashSaini99/sdtop.git
cd sdtop
go build -o sdtop ./cmd/main.go
sudo mv sdtop /usr/local/bin/go run ./cmd/main.goLaunch the application:
sdtop| Key | Action |
|---|---|
↑ / k |
Move selection up |
↓ / j |
Move selection down |
Enter |
Select service and view logs |
| Service Control | |
r |
Restart selected service |
s |
Stop selected service |
t |
Start selected service |
e |
Enable service on boot |
d |
Disable service from boot |
| View Modes | |
p |
Show process tree 🌳 |
l |
Return to logs view |
| Filtering | |
f |
Cycle filters (all → running → failed) |
/ |
Search/filter services |
1 |
Show all services |
2 |
Show only running |
3 |
Show only failed |
| Other | |
q |
Quit application |
To view logs and control services, you may need appropriate permissions:
- Read logs: User must be in
systemd-journalgroup or run as root - Control services: Requires PolicyKit authorization or root access
Add user to journal group:
sudo usermod -a -G systemd-journal $USERFor service control without root, configure PolicyKit rules or use sudo:
sudo sdtopsdtop/
├── cmd/
│ └── main.go # Application entry point
├── internal/
│ ├── systemd/
│ │ ├── services.go # DBus service operations (start/stop/restart)
│ │ ├── logs.go # Journald log streaming
│ │ └── processes.go # Process tree from /proc filesystem
│ ├── ui/
│ │ └── model.go # Bubble Tea UI (MVC pattern)
│ └── types/
│ └── models.go # Data structures (Service, LogEntry, Process)
├── go.mod
└── README.md
Service Control - Uses go-systemd/dbus to communicate with systemd:
ListUnits()→ fetches all servicesStartUnit(),StopUnit(),RestartUnit()→ control services- Real-time state updates
Log Streaming - Uses go-systemd/sdjournal to read logs:
AddMatch()→ filter by service nameSeekTail()→ start from recent logs- Continuous polling for new entries
Process Tree - Reads /proc filesystem directly:
- Scans
/proc/[pid]/cgroup→ finds processes belonging to service - Reads
/proc/[pid]/stat→ gets process name and parent PID - Reads
/proc/[pid]/cmdline→ gets command line - Builds parent-child tree structure
UI Framework - Bubble Tea (Elm Architecture):
- Model - Application state (services, logs, processes)
- Update - Handles events (keypresses, data updates)
- View - Renders UI from state
Bubble Tea Pattern:
Init() → Load initial data, start background tasks
Update(msg) → Handle events, return new state + commands
View() → Render current state to terminalConcurrency:
- Log ticker runs every 500ms (when viewing logs)
- Context cancellation prevents memory leaks
- Background goroutines for data fetching
Debug a failing service:
- Press
3to show only failed services - Select the service, view error logs
- Press
pto see if processes are stuck - Press
rto restart
Monitor system services:
- Press
2to show running services - Select a service to watch live logs
- See real-time activity
Understand what's running:
- Select any service
- Press
pto see process tree - Identify child processes and their relationships
Control boot services:
- Select a service
- Press
eto enable on boot - Press
dto disable from boot
- Bubble Tea - TUI framework
- Bubbles - TUI components
- Lipgloss - Styling
- go-systemd - systemd integration