Local development stacks tend to spread across terminal tabs: one long-running process per tab, logs in different places, and startup and shutdown order kept in someone's head. Infrastructure may already live in Docker Compose while actively developed services still run directly on the host. Kranz was built to operate that mixed local stack from one terminal.
Demo
Terminal previewOverview
Keyboard-first local service orchestrator with a focused terminal UI
From the maintainer
Install Kranz with Homebrew or go install, create a Procfile with two local commands, and run kranz in that directory. Press a to select all services and s to start them. Watch their state, detected ports, and separate logs in the TUI, then press q and confirm to shut the stack down cleanly.
The interaction model is intentionally familiar to lazygit users: a stable, keyboard-first three-panel layout with direct 1/2/3 and Tab navigation, contextual actions, and optional mouse control. The visual system is project-scoped, so each stack can keep its own theme, accent, and canvas colors. Switching projects can also switch the interface's visual identity.
The next planned release is v0.8.0: a scriptable CLI built on the same configuration, dependency graph, and runtime as the TUI, with commands for configuration validation, plans, diagnostics, ports, actions, and foreground startup. It also targets native .deb and .rpm packages for Linux on amd64 and arm64, along with validated WSL 2 support.
Latest Release
Added
kranz psandkranz clientsaccept Docker-style--formatGo templates,
including atableprefix for aligned output with headers.status,ports,doctor,config explain,services,actions, and
tagssupport the same row formatter.- Top-level
kranz services,kranz actions, andkranz tagscommands give
every inspectable collection a direct noun. Theactionsgroup defaults to
listing and also ownsrunandinfo. The oldlistcommand and singular
actiongroup have been removed. kranz plan --operation start|stop|restartpreviews every service a
lifecycle operation would affect; bareplanremains a start preview.kranz runssupports target, status, time-window, and newest-count filters,
plus Docker-style row templates.kranz runs retentionnow owns the
separate per-target retention table and its formatter fields.ps,clients, andstatusaccept exact, repeatable--filtervalues and
interruptible--watchrefreshes.--intervalcontrols refresh frequency,
and--countbounds snapshots for automation.- The TUI quit confirmation offers
cfor Close & choose: it stops the
current runtime and opens the live runtime chooser without leaving the TUI.
The chooser remains usable when no other runtime is available.
Changed
-
kranz upnow creates a runtime without starting services, matching the TUI
and MCP surfaces. Selectors still start the named services;--start
explicitly starts every enabled service. Foreground ownership, log streaming,
project exit codes, and-dbehavior are unchanged. The redundant
--no-startflag has been removed. -
Interactive
kranz initis now a draft-based terminal wizard. It supports
any number of editable and removable services and actions, independent
project appearance controls with a live theme preview, and a final YAML or
replacement diff before the only write. Init no longer scanspackage.json
or implicitly imports nearby files; conversion requires explicit--from. -
The obsolete MCP
--attach-onlyflag has been removed. Version-specific
future-command wording in CLI help is now release-neutral. -
kranz init --name NAMEis now the only project-name option. Global
-p/--projectconsistently addresses a runtime and is rejected byinit. -
Project, service, and port inspection now follow their entities explicitly:
kranz project,kranz services info SERVICE, and
kranz ports inspect PORT. Bareservicesandportsselect theirlist
operations. The overloadedinfocommand and singularportgroup have
been removed. -
Conflicting
graph --formatand--output=jsonselections now fail instead
of silently choosing JSON. Help and shell-completion generation explicitly
reject JSON output because their products are text artifacts. -
kranz clientsnow presents each connection in one compactCLIENTcolumn,
such asTUI,CLI: foreground, orMCP: codex. It no longer reports the
runtime's background ownership connection as a client, matchingkranz ps
and the TUI Runtimes window.kranz psnow shows the owning supervisor's PID
directly. -
The canonical action table shows whether each action requires confirmation.
-
Root help keeps
actionsbesideservicesandtags, matching the command
model users configure and operate in the TUI.
Discussions