You clicked a blog post about a TUI, so you probably hate leaving the terminal as much as I do. I got hit hard with that itch when I started working with Temporal. Don’t get me wrong — I love Temporal — but the Web UI is faster than running a string of temporal workflow commands in the CLI. Faster, and still disruptive enough that one thought kept coming back:

Surely someone has built a TUI for this.

Imagine my surprise when I couldn’t find one. jesseduffield has spoiled me with lazygit and lazydocker. I just wanted lazytemporal. I had two options: write my own, or accept routinely leaving my terminal. The latter was not an option, so tempo was born.

Honestly, I built tempo for myself. I wanted to be faster and have better tools at hand — get in, get the information, get out, find the bug. As I’ve been using it and surfacing more, I’ve noticed I almost never go to the Web UI anymore (except to share workflow runs with teammates — and I have plans to yank a URL from the terminal for that too).

Let’s get to what it does.

Workflow management

  • Browse workflows across all your namespaces
  • Inspect inputs, outputs, metadata, and execution state
  • Cancel, terminate, or signal running workflows
  • Search with visibility queries and save reusable filters

Visualization that actually helps

  • Explore event hierarchies in a tree view (see what spawned what)
  • Visualize execution over time in a Gantt-style timeline

Namespaces and scheduling

  • List namespaces, inspect configs, and switch on the fly
  • Manage schedules — pause, unpause, trigger, delete
  • Monitor task queues and pollers

Multi-environment profiles

  • Save connection configs
  • TLS / mTLS support built in
  • Switch profiles with a single keystroke (P)

Built-in theme switching

  • 26 built-in themes (Catppuccin, TokyoNight, Dracula, Nord, Gruvbox, Rosé Pine, and more)
  • Live preview while picking
  • Dark or light variants — I don’t discriminate, but I do judge

Terminal-native UX

  • VIM-style navigation (j/k, / to filter, : for commands)
  • Keyboard-first throughout

Sounds good, right? Agreed. Let’s install it.

Install

go install is preferred — fastest way to get the latest:

go install github.com/galaxy-io/tempo/cmd/tempo@latest

If you’d rather use Homebrew, there’s a tap. brew update to pull new versions:

brew install galaxy-io/tap/tempo

Neither your style? Prebuilt binaries for all supported platforms live on GitHub releases.

If you want to dive straight in (assuming you already have a Temporal instance):

tempo --address localhost:7233

But it’s worth setting up a real config so you know how to drive it.

Configure

Create ~/.config/tempo/config.yaml:

theme: tokyonight-night       # any theme from the built-in list
active_profile: local         # last selected profile resumes on startup

profiles:
  local:                      # use `temporal server start-dev` if no instance is available
    address: localhost:7233
    namespace: default

  staging:
    address: temporal.staging.example.com:7233
    namespace: staging
    tls:
      cert: /path/to/client.pem
      key: /path/to/client-key.pem
      ca:   /path/to/ca.pem

Once configured, just run tempo to launch into your active_profile.

tempo

? is context-aware and shows whatever keybinds apply to the current view. shift-t opens the theme switcher. shift-p opens the profile picker.

Try it without a real Temporal cluster

If you don’t have a Temporal instance to play with, the repo ships a synthetic workflow generator — the same one I use in the demos above:

git clone https://github.com/galaxy-io/tempo.git
cd tempo

# Start a dev Temporal server (requires the temporal CLI)
temporal server start-dev
# ...or via docker
docker run --rm -p 7233:7233 temporalio/temporal server start-dev --ip 0.0.0.0

# In a second terminal, run the demo worker
go run ./cmd/demo-worker/main.go

# In a third terminal, run the seeder
go run ./cmd/demo-worker/seeder.go

# Finally:
tempo

Issues and contributions

tempo is actively developed. Please report bugs, share feedback, and request features at the galaxy-io/tempo repo — that’s also where all the source lives. I’d love to hear how you use it, what works, what doesn’t, and what’s missing.

Huge thanks to the team and community over at temporal.io for the platform, tooling, and SDK that make tools like this possible.

Stay safe,

— Atterpac