
Real history on Temporal Cloud. Two customer values blurred, nothing else.
Quickstart
# or, on Linux and macOS
|
# or from crates.io; protoc is required, the protos build from source
&
Keys

Enter - |
open / back | / n N |
search |
i Enter |
edit / apply the query | <Space>ff |
find a workflow |
V |
select rows | <C-o> <C-i> |
jumplist |
za zR zM |
fold / expand / collapse | zp |
show workflow tasks |
]f [f |
next / previous failure | F |
follow, like tail -f |
K |
payloads under the cursor | ! |
pipe them through jq |
y Y |
yank value / row | <Space>y{a,i,r} |
yank payloads |
<Space>m… |
cancel, terminate, signal, delete, reset, update | gs gw |
schedules / workflows |
<Space>s… <C-w>hjkl |
splits | <Space>t… |
tabs |
? : |
help / command line | <Space>q |
quit |
Yank is OSC 52, so it reaches your clipboard through SSH and tmux. ? and : are generated
from the command registry, so they cannot go stale. keys.toml rebinds anything.
Payloads
Encrypted payloads decode in place, lazily, cached by ciphertext.
sequenceDiagram
participant U as You
participant T as tmprl
participant C as Codec server
U->>T: K
T->>T: which payloads need a codec?
T->>C: POST /decode, X-Namespace
C-->>T: plaintext
T-->>U: readable JSON
Any encoding tmprl cannot read itself is offered to the codec, not only Temporal's sample
binary/encrypted. A codec that refuses says why, on the badge.
Mutations
Every destructive action shows the equivalent temporal CLI command before it runs, and is
appended to ~/.local/state/tmprl/audit.jsonl with the profile and cluster address.
Terminate 3 workflows
temporal workflow terminate --namespace prod --workflow-id order-1 --reason "…"
type `3` to confirm Esc to cancel
V a range first and the action applies to every selected row, one request each.
Config
Connections come from the same file the temporal CLI uses. tmprl --config-path prints it.
# temporal.toml
[]
= "my-ns.a1b2c.tmprl.cloud:7233"
= "my-ns.a1b2c"
= "…"
# ~/.config/tmprl/config.toml
[]
= "green"
[]
= "red" # colours the profile name, bold too
= true # refuses every mutation, shown as prod [ro]
[]
= "https://codec.internal"
# ~/.config/tmprl/views.toml — <Space>1 … <Space>9
[[]]
= "1"
= "Running now"
= "ExecutionStatus = 'Running'"
Layout
flowchart LR
tui["tmprl-tui<br/>render, input"] --> ui["tmprl-ui<br/>splits, tabs"]
tui --> core["tmprl-core<br/>keymap, histories,<br/>payloads, search"]
tui --> client["tmprl-client<br/>gRPC, TLS, codec"]
client --> server[("Temporal")]
client --> codec[("Codec server")]
| Crate | Tests | |
|---|---|---|
tmprl-client |
59 | all network IO |
tmprl-core |
236 | no terminal, no server |
tmprl-tui |
230 | ratatui |
tmprl-ui |
37 | window tree |
TMPRL_REQUIRE_SERVER=1
docs/ARCHITECTURE.md · docs/INTERFACE.md · docs/RELEASING.md · CHANGELOG.md
Roadmap
- workflows, visibility queries, saved views, multi-namespace
- histories, follow mode,
jq, codec server, splits and tabs - search, pickers, jumplist
- mutations, schedules, batch over a selection
- server-side batch operations
- task queues, workers, deployments, nexus, archival
- diff, macros, headless
--exec, themes
Prior art
galaxy-io/tempo works today and is finished; use it
if you need a Temporal TUI now. tmprl differs in aiming at full web-UI parity with a modal
editor model rather than a menu.
MIT. See LICENSE.