A Full Klipper Dashboard In Your Terminal

The speed & precision of the CLI.
Built for Klipper 3D Printers.

Run a print, jog the toolhead, watch temperatures, adjust Z offset live, probe the bed, follow the current layer's toolpath and check the camera — over Moonraker, in the terminal, without opening a browser.

$ pipx install klipper-tui

Runs in any terminal. Best in kitty — the webcam and the Klipper mark come through as real images rather than coloured blocks, and frames cost about 2ms each instead of 38.

8 Tabs
16 Dashboard panels
11 Themes
GPL-3.0 Free & open source

What it looks like

Every one of these is a photograph of a real session against a real printer, mid-print, taken in kitty — so the webcam, the plots and the Klipper mark are the actual images the graphics protocol draws, not an approximation in coloured blocks. Nothing here is a mockup.

Dashboard Status, temperatures, history and speed and flow, packed to the width of the terminal.
Toolpath The current layer as it is drawn — printed moves ahead of the nozzle in a different colour.
Bed mesh The probed heightmap beside its controls, filling in point by point while probing.
Move Homing, a jog cross, and live Z offset you can save into the probe.
Toolhead position The build volume and the loaded model on the bed, rotatable.
Temperature history Drawn at the terminal's own pixel resolution on kitty. The steps are a stringing test being tuned by hand, mid-print.
Files Sorted newest first, with slicer metadata. Double-click a row to print it.
Webcam A photograph, in a terminal. kitty and ghostty get the real image through the graphics protocol.

A simulator, in your browser

The same tabs and the same keys (d, g, c, m, f, b, w, s), wired to made-up printer data so you can click around before installing anything. The screenshots above are the real thing.

simulated mainsailos.local:7125 PRINTING 68%
klippy ready
Status
State PRINTING
File   ice_dragon_fixed_p1_6h28m_0.20mm_215C_PLA.gcode
██░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░ 6.6%
Elapsed 00:54:29   ETA 05:33:22 (08:36)   slicer 6.6%
Pos    X 168.73  Y 161.96  Z 2.020
Homed X Y Z   Speed 150%   Flow 100%
Temperature
Hotend 215.0°C / 215°C   power 56%
Bed    65.0°C / 65°C   power 0%
Part fan 0%
hotend °C bed °C
Speed & Flow
Speed ██████████████████████████████░░░░░░░░░░ 150%
Speed
Flow  ████████████████████░░░░░░░░░░░░░░░░░░░░ 100%
Flow %
Motion limits
Velocity 500 mm/s   Accel 2000 mm/s²
Square corner 5.0 mm/s   Min cruise 50%
velocity accel
scv cruise
Connecting to ws://mainsailos.local:7125/websocket…
Connected. klippy ready.
> M105
ok B:65.0 /65.0 T0:215.0 /215.0
> BED_Tab
BED_MESH_CALIBRATE BED_MESH_CLEAR BED_MESH_MAP BED_MESH_OFFSET BED_MESH_OUTPUT BED_MESH_PROFILE
// Try G28, M105, M104 S220, STATUS, HELP or CLEAR.
>
Toolhead
Z
Step 1mm
Z offset

live offset +0.000mm   probe z_offset 0.850

Toolhead Position
X 168.7   Y 162.0   Z 42.4  mm
Toolpath
Pan
Layer 42/103   z 8.40   moves 612/998   following   zoom 1.0×

              
G-code Files newest first · double-click a row to print it
Filename Size Modified
ARTICULATED_ice_dragon_fixed_p1_6h28m_0.20mm_215C_PLA_ENDER6.gcode printing 27.2 MB 2026-08-16 03:55
ender6_cooling_duct_v3_petg.gcode 8.6 MB 2026-08-14 21:08
bed_level_test_pla.gcode 1.4 MB 2026-08-12 19:44
Bed Mesh

7,7
7×7 = 49 points, roughly 2 min

Profile default
Min -0.045 mm
Max +0.058 mm
Range 0.103 mm
Points 7 x 7
Heightmap
-0.045
+0.058
Webcam LIVE
http://mainsailos.local/webcam/?action=snapshot  ·  1280x720 JPEG 10 fps
Hotend 215.0°C / 215 Bed 65.0°C / 65
last 10m  ·  braille, 2×4 dots per cell
Loading braille temperature series...
Appearance
Settings
Dashboard panels 16 toggles — anything on a tab can be on the dashboard too
Temperature presets rename, retarget, add and remove; the buttons follow
Webcam URL http://mainsailos.local/webcam/?action=snapshot
Filament length 1000 mm — how far load and unload push
Saved to ~/.config/klipper-tui/settings.json
q Quit d Dashboard m Move b Mesh t Theme Ctrl+E E-STOP
18:39:42

What it actually does

One websocket to Moonraker, and a terminal. Nothing is installed on the printer.

Live toolpath, layer by layer

The current layer as the nozzle draws it, read straight from the running file over HTTP range requests. Printed moves are coloured ahead of what is still to come. Zoom, pan, click to centre, or let it follow the print.

Braille temperature history

Ten minutes of hotend and bed at four times the vertical resolution of block characters, seeded from Moonraker's temperature store so the graph is already full when you open it.

Bed mesh, live while probing

The heightmap fills in point by point as the probe runs — including a run you started in Mainsail, which it joins in progress. Probe count is overridable per run, with a duration estimate as you type.

Z offset you can save

Babystep in 0.01mm and 0.05mm while the first layer goes down, then fold the result into the probe's saved offset with one button. It picks Z_OFFSET_APPLY_PROBE or _ENDSTOP based on what your config has.

It asks before ruining a print

Homing, jogging, disabling the motors, probing the bed, extruding by hand, running a macro — anything that would wreck a running print asks first, and only while a print is actually running.

Speed, flow and motion limits

Feedrate and extrusion percentages with presets and a custom entry, plus velocity, acceleration, square corner velocity and minimum cruise ratio, seeded from the printer's own configuration.

Every fan the printer has

Part fan, generic fans and the ones Klipper drives itself, discovered from the printer. Automatic fans are shown with their speed and no controls, because setting them by hand would just be overridden.

Your macros, as buttons

Every [gcode_macro] in your config becomes a button, discovered at connect time. Underscore-prefixed helpers stay hidden, and PAUSE, RESUME and CANCEL_PRINT are already the job controls.

Console with tab completion

Send G-code and get the printer's replies. Tab completes against the commands your printer actually reports, plus the plain G and M codes; up and down walk back through what you have sent.

The camera, in the terminal

kitty is the one to use. It and ghostty get the graphics protocol — a real image, and the frame goes out as raw pixels rather than a PNG, which is 2ms of encoding instead of 38. Sixel terminals get sixel; everything else falls back to half-blocks, which works but looks like it.

A dashboard you arrange

Any of the sixteen panels can be on the dashboard or on its own tab. The layout follows the width of the terminal, packing two or three across when there is room and falling back to one column when there is not.

Eleven themes, or write your own

Ominous, Mainsail and Forge ship alongside Nord, Gruvbox, Dracula, Tokyo Night, Catppuccin Mocha, Monokai and Solarized. Pick one from Settings, or add your own to the config file.

How klipper-tui Connects

Zero software needed on your printer. klipper-tui runs purely on your client machine and connects to Moonraker.

Client Machine
klipper-tui
Python 3.10+ & Textual Async Engine
  • • Keyboard-driven UI
  • • Braille graphs, braille toolpaths
  • • Reads the gcode over HTTP ranges
WebSocket + HTTP JSON-RPC
:7125
Printer Host (Pi / Linux)
Moonraker API
Klipper Web Server & State Manager
  • • WebSockets API
  • • File & Macro Manager
  • • Unix Domain Socket to Klippy
IPC Socket
/tmp/klippy_uds
Firmware & MCUs
Klipper / Klippy
Microcontrollers (STM32, RP2040, AVR)
  • • Kinematic calculations
  • • Stepper scheduling
  • • Resonance compensation

Install & Run

Python 3.10 or newer, on Linux or macOS. Nothing is installed on the printer — it only needs to be reachable at the address you already type into Mainsail.

1

Install via pipx

Install in an isolated environment with a global executable:

pipx install klipper-tui
2

Launch with Hostname

Point klipper-tui to your printer's Moonraker IP or mDNS address:

klipper-tui mainsailos.local
3

Or set it once

Put the host in your shell config and run it bare. KLIPPER_PORT, KLIPPER_WEBCAM_URL, KLIPPER_RENDER and KLIPPER_THEME work the same way.

export KLIPPER_HOST=192.168.1.50
klipper-tui

Keybindings Reference

Fly through tabs and controls without taking your hands off the keyboard.

Key / Shortcut Action Category
d Dashboard tab Navigation
g Graph tab Navigation
c Console tab Navigation
m Move tab — jog, Z offset, position, toolpath Navigation
f Files tab Navigation
b Mesh tab Navigation
w Webcam tab Navigation
s Settings tab Navigation
Ctrl + E Emergency stop, immediately and without confirming Safety
t Next theme. Settings has the full list if you would rather pick Appearance
Tab Complete the command name in the console Console
↑ / ↓ Walk back through the commands you have sent Console
Double-click Print that file, from the Files tab Files
Ctrl + P Textual's command palette General
q Quit General

Ready to streamline your 3D printing workflow?

Clone or install klipper-tui and control your Klipper machine straight from your shell.