What it looks like
The console is one full-screen view: a pinned header you can always see, over a live log that scrolls underneath it.
The console right after start: the banner and help bar stay pinned at the top while the log tail scrolls below.
The header
The top of the screen is a fixed header that never scrolls. It stacks, top to bottom:- The ipmideck banner.
- The help bar: every action key and what it does.
- The status line: the live state of the session.
- A compact credits line (author, version, license).
Status line
The status line shows three live fields, separated by|:
- Verbosity: the current log level (
INFO,DEBUG, orWARNING). - Clients: the number of connected dashboard clients right now.
- last: the last action key you pressed, as immediate visual feedback.
Action keys
Every action is one keypress. The help bar lists them all:v: verbosity
v cycles the runtime log level through a fixed three-step loop:
INFO is the default. DEBUG shows more; WARNING shows less. The change takes effect
immediately for the rest of the session and the status line updates to match.
IPMIDECK_LOGGING_LEVEL env var) wins again. See Configuration.c: sessions
c opens the Connected sessions sub-view, a read-only table of the dashboard clients
currently attached, with columns:
- IP
- Connected since
- User-Agent
q or ESC to return to the log view.

The Connected sessions sub-view (key c), one row per attached dashboard client.
s: servers
s opens the Configured servers sub-view, a read-only table of the BMCs ipmideck is
configured to talk to, with columns:
- Name
- Host
- Status
q or ESC to return to the log view.

The Configured servers sub-view (key s), listing each BMC and whether it is online.
u: url
u surfaces the dashboard URL (scheme://host:port) in the log body. If the server is
bound to a wildcard address (0.0.0.0, ::, or empty), the URL is rewritten to
127.0.0.1 so it is actually openable in a browser, http://0.0.0.0:3000 is a listen
address, not a navigable one.

Key u prints the dashboard URL at the bottom of the log, rewritten to a reachable address.
g: update
g prints the local version and a note that the online update check ships with the pip
release. It makes no network call, ipmideck stays offline.
r: restart
r performs a clean in-process restart: ipmideck tears down the console, re-reads
config.yaml, and starts fresh. Use it after a change-bind edit to apply
the new address.
q / ESC: quit and back
- From a sub-view (
sessionsorservers),qandESCboth return you to the log view. - From the log view,
qtriggers a clean exit, the server shuts down gracefully.
b: change-bind
b opens the change-bind editor, an inline host:port prompt that replaces the help bar
while you type. The header shows the current bind as a read-only current: host:port label
and an empty new: field, so the value you type appears immediately and is never confused
with the existing one.

The change-bind editor (key b): the help bar is replaced by the current bind and an empty new host:port prompt.
- Enter: apply the typed
host:port. - ESC: cancel without changing anything.
- Backspace: delete the last character.
- Any printable character, append to the buffer.
host:port with a non-empty host and a port that is an integer in the
range 1–65535. On a valid entry, ipmideck confirms the new bind and reminds you that a restart is
required (press r). On an invalid entry, it reports Invalid host/port and
nothing changes.
Where the console shows up
The interactive console is gated on a real TTY: ipmideck renders it only when both stdin and stdout are interactive terminals. When they are not, it degrades to a banner plus plain scrolling logs and installs no key listener, so nothing busy-spins on a non-TTY. This means the console appears when you run ipmideck directly in a terminal:- Running under Docker: the container launches uvicorn directly and never reaches the
console path; you get plain container logs (
docker logs). - Running under systemd or any service manager where stdout is not a terminal.
- Piping or redirecting stdout (e.g.
ipmideck > server.log): stdout is no longer a TTY.
0.0.0.0:3000; you just get plain logs instead of the live console.
Next steps
- Running ipmideck: start, serve, and the bind-precedence rules.
- The CLI: every subcommand and flag in detail.
- Configuration: set the bind address, verbosity, and polling intervals.
- Installation: install with Docker or pip.