lazygocd: a terminal dashboard for GoCD that feels local

A walkthrough of lazygocd, the Rust terminal UI I built for GoCD: fast dashboard loading, personalized views, live logs, reruns, GitHub checks, and the release work behind it.

lazygocd started as a selfish tool: I wanted the GoCD dashboard in the terminal, with keyboard movement, instant search, live logs, and the kind of feedback loop that does not make you wait on browser tabs. It is now a real release with Homebrew install support, signed release assets, Snyk scanning, and docs.

A quick pass through the lazygocd dashboard, pipeline history, details pane, and terminal-first navigation.

The shape of the app

The UI is built around three panes: groups and pipelines on the left, run history in the middle, and stage/job details on the right. The app starts from a disk cache so the dashboard paints immediately, then refreshes GoCD in the background. When the server is slow or huge, the terminal still feels alive.

GoCD personalized views, in the terminal

The feature that made it feel native was using GoCD's own personalized dashboard views. Press v and lazygocd reads the same pipeline_selection views people create in the web dashboard, then asks /api/dashboard for that viewName server-side. Press V after filtering and it saves the matching pipelines back as a GoCD view, so the web UI and terminal stay in sync.

The goal was not to replace GoCD's dashboard. It was to make the daily path through it fast enough that it feels like a local tool.

Live logs without waste

Console logs open full screen, auto-tail while a job runs, and stop polling once the stage finishes. Tailing uses startLineNumber, and dashboard polling uses ETag/304, so the steady-state network cost is small even when the screen is constantly updating.

GitHub checks and operational shortcuts

When a pipeline has a direct Git material, lazygocd compares the deployed commit with the latest branch commit and shows whether the run is current. The GitHub CLI token is picked up automatically when available, GitHub Enterprise works through github_api_base, and o opens the commit or pending diff.

The smaller workflow pieces matter too: OSC 52 copy, shell completions, a man page, desktop notifications for favorited pipelines, and release bottles for Homebrew so install is quick.

Release work that made it real

The v0.4 release line was verified against a live GoCD 23.5.0 server, including creating a temporary personalized view, loading it through viewName filtering, and deleting it again. After that I added a Snyk SBOM scan workflow, published release assets, updated the Homebrew tap, and put the docs site on Vercel with a rendered changelog.

What I would reuse

The main lesson is that terminal apps feel fast when they never make the network part of the input loop. Cache the last good state, render immediately, refresh in the background, and keep every mutating action behind an explicit confirmation. That pattern carried more of the product than any single Ratatui trick.