π‘ Why perfdeck?
Traditional performance monitors often overwhelm users with information or lack the flexibility to show exactly what you need. perfdeck solves this by providing:
- Consolidation: View output from multiple diagnostic tools (like
top, vmstat, netstat) in one place.
- Focus: A clean, tabbed interface lets you switch between different metrics without terminal clutter.
- Visibility: Real-time sparklines provide an immediate "at-a-glance" health check of your system's core resources.
- Flexibility: Don't like the defaults? Bring your own shell commands via a simple TOML file.
β¨ Features
- π Blazing Fast: Written in Go with minimal CPU and memory overhead.
- π Tabbed Navigation: Organize your monitoring tools into logical, navigable views.
- π Live Sparklines: Visual summaries for Load, CPU, Memory, and Network.
- π¨ Adaptive Themes: Seamlessly toggle between Light and Dark modes.
- βοΈ Deeply Configurable: Custom commands, refresh intervals, and environment-specific settings.
- π§ Cross-Platform: Intelligent defaults for both Linux and macOS.
πΈ Screenshots
Dark Mode (Default)

Light Mode

π Installation
π¦ Pre-built Binaries
Download the latest pre-compiled binaries from the Releases page.
π οΈ Using go install
go install github.com/sumant1122/perfdeck@latest
π¨ From Source
git clone https://github.com/sumant1122/perfdeck.git
cd perfdeck
make build
# Binary will be in the project root
π Usage
Simply run the command to start monitoring with default system tools:
perfdeck
β¨οΈ Key Bindings
| Key |
Action |
Tab / Shift+Tab |
Next / Previous Tab |
j / k (or β/β) |
Scroll through command output |
t |
Toggle Light/Dark theme |
v |
Display version information |
q / Esc / Ctrl+C |
Exit perfdeck |
βοΈ Configuration
perfdeck is designed to be personalized. It looks for perfdeck.toml in:
$PERFMON_CONFIG
~/.config/perfdeck/config.toml
- Current working directory
π Configuration Schema
# Interval for updating the sparklines and default tabs
global_refresh_interval = "5s"
[[tab]]
title = "Process Explorer"
cmd = ["top", "-b", "-n", "1"]
refresh_interval = "2s" # Specific interval for this tab
[[tab]]
title = "Network Connections"
cmd = ["ss", "-tulpn"]
π Development
We utilize a simple Makefile for a streamlined development experience:
make run: Start the application in development mode.
make build: Compile the binary.
make test: Execute the test suite.
make lint: Run the golangci-lint (if installed).
π€ Contributing
We love contributions! Whether it's a bug report, a new feature idea, or a documentation improvement, please feel free to:
- Check out the Contributing Guidelines.
- Open an Issue.
- Submit a Pull Request.
π License
Distributed under the MIT License. See LICENSE for details.