A terminal dashboard for developers to monitor and manage Node.js processes and Docker containers from one place.
Built with Textual and psutil.
If you use Claude Code (or any AI coding agent) to work across multiple projects, you quickly end up with a mess of orphaned Node dev servers, runaway builds, and forgotten Docker containers eating your RAM in the background. You switch between projects, Claude spins up next dev or vite on port 3000, you move on, and now three instances are fighting over the same port while your fan screams.
devdash exists to give you a single pane of glass for all of it:
- See every Node process at a glance -- which ports they hold, how much memory they burn, which project they belong to (read straight from
package.json). - See every Docker container -- status, ports, Compose project, and service name. No more
docker psin a separate terminal. - Kill or stop anything in two keystrokes --
kto kill,yto confirm. Batch-select withspaceand wipe out a whole stack at once. - Stream container logs without leaving the dashboard -- press
lon a container row and tail its output in a modal.Escto close. - Get notified when things crash -- toast notifications when a tracked process exits or a container disappears, so you catch it immediately instead of wondering why your API stopped responding.
- Filter, sort, and export -- slash-search across all columns, click headers to sort, press
eto dump a JSON snapshot for later analysis.
It auto-refreshes every 3 seconds (configurable), preserves your cursor position, and degrades gracefully when Docker isn't running.
Requires Python 3.10+ and git.
curl -fsSL https://raw.githubusercontent.com/enso-works/devdash/main/install.sh | bashInstall a specific version:
VERSION=0.1.0 curl -fsSL https://raw.githubusercontent.com/enso-works/devdash/main/install.sh | bashThis clones to ~/.devdash, creates a virtualenv, and symlinks the binary to ~/.local/bin/devdash.
Running the installer again will update to the latest release (idempotent).
devdash # launch with defaults
devdash --config path/to/config # use custom config file
devdash --version # print version
devdash --update # update to latest releaserm -rf ~/.devdash ~/.local/bin/devdashNode processes and Docker containers side by side. Color-coded CPU/memory, project names from package.json, Compose project and service columns.
System resource gauges (CPU, memory, swap, disk, network) and a full process list sorted by memory.
Press / to filter across all columns. Matches persist across auto-refresh.
| Key | Action |
|---|---|
q |
Quit |
r |
Refresh data |
k |
Kill process / stop container |
l |
View Docker container logs (streaming) |
d |
View process details (env, files, connections) |
e |
Export snapshot to JSON |
/ |
Toggle search/filter bar |
space |
Toggle row selection for batch operations |
tab |
Switch between tables in current tab |
1 / 2 |
Switch to Dev / System tab |
ctrl+p |
Open command palette |
Esc |
Close filter bar or modal |
Click any column header to sort. Click again to reverse.
- Node Processes -- All running Node.js processes with PID, project name (from
package.json), listening ports, memory, CPU, uptime, working directory, and command. - Docker Containers -- Running containers with ID, name, image, status, ports, uptime, and Docker Compose project/service columns.
- Resource gauges -- CPU, memory, swap, disk usage with color-coded bars. Network bandwidth (upload/download rates).
- All Processes -- Top processes by memory (configurable limit) with CPU, memory, user, status.
Color coding -- CPU and memory cells are green (<50%), yellow (50-80%), or red (>80%). Thresholds are configurable.
Search/filter -- Press / to open the filter bar. Case-insensitive substring match across all visible columns. Persists across auto-refresh cycles.
Sorting -- Click any column header to sort ascending. Click again for descending. Sort persists across refreshes.
Project detection -- Walks up from each Node process's working directory to find package.json and reads the name field. Results are cached.
Docker Compose awareness -- Parses com.docker.compose.project and com.docker.compose.service labels. Containers are grouped by compose project.
Docker logs -- Press l on a Docker container to stream its logs in a modal. Uses docker logs --tail 100 --follow. Press Esc to close.
Process details -- Press d on any process to view environment variables, open files, network connections, threads, and child processes.
Multi-select -- Press space to select/deselect rows. Selected rows are marked with *. Press k to batch kill/stop all selected items with a single confirmation.
Crash notifications -- Toast notifications when a tracked Node process exits or a Docker container disappears. Also notifies when new processes appear on listening ports.
Export -- Press e to write the current state to ~/.local/share/devdash/snapshot-{timestamp}.json.
Command palette -- Press ctrl+p to search and execute any action by name.
Optional config file at ~/.config/devdash/config.toml:
refresh_rate = 3.0 # seconds between auto-refresh
process_limit = 80 # max processes shown in System tab
watched_ports = [3000, 8080] # notify when a process binds these ports
color_threshold_low = 50.0 # green -> yellow boundary (%)
color_threshold_high = 80.0 # yellow -> red boundary (%)Override the config path:
devdash --config ~/my-config.tomldevdash/
__init__.py # version constant
app.py # main TUI app, layout, bindings, data flow
cli.py # entry point with argparse
config.py # config file loading (tomllib)
processes.py # process discovery, docker queries, system stats
screens.py # modal screens (confirm, log viewer, process details)
updater.py # git-based self-update logic
install.sh # one-line installer
pyproject.toml # package metadata and dependencies
run.sh # convenience launcher
- textual -- TUI framework
- psutil -- process and system monitoring
- Docker CLI (optional, for container features)
MIT