FEATURES

The window

Kiri’s window shows what runs in the engine and lets you act on it without typing a docker command. It’s a native macOS window around one small web page, and it talks to the same daemon the docker CLI uses, so anything you start from a terminal shows up here and the other way round.

The sidebar

The sidebar has two groups. Docker lists Containers, Images, Volumes and Networks, each with a count. Kiri has Settings. At the bottom, a panel shows the Linux VM: whether it’s running, how many containers run, its CPUs, and how much memory it holds out of the most it may take, with a meter. Its button reads Start or Stop.

Stop stops every running container and lets the VM sleep. Start wakes it (and starts the daemon first if it isn’t running). When the engine isn’t reachable at all, the main area says Kiri is not running with a Start Kiri button.

Kiri
DOCKERContainers · 4Images · 6Volumes · 2Networks · 4KIRISettingsLinux VM RunningStop

Containers 3 running · 4

NameImageStateActions
▾ shopCompose · 2 of 3 runningStart allStop all⋯
webnginx:alpineUp 12 min8080→80OpenStop⋯
dbpostgres:17Up 12 minStop⋯
workershop-workerFailed (1)Start⋯
cachevalkey/valkeyUp 3 hStop⋯
KiriLinux VM running · 3 of 4 running · docker → kiri · Feedback
The Containers list. A Compose project is one group row with its own Start all, Stop all and ⋯; the containers in it sit underneath. The status bar runs along the bottom.

Above each list is its title, a short summary (for containers, “3 running · 4”; for images, the count and total size) and a Filter field that narrows the list as you type.

Section Columns Actions on each row
Containers Name, Image, State, Ports, Size, Created Open (when it has a local name), Start or Stop, ⋯
Images Repository, Tag, ID, Size, Created, Pulled Run, Pull, Remove
Volumes Name, Driver, Created Remove
Networks Name, Driver, Subnet, Created Remove (not for bridge, host or none)

Images also has a Search Docker Hub field with a Pull button, and a bar on each image while it pulls. Removing an image that stopped containers were made from asks first and removes them with it; if one of them is running, Kiri tells you to stop it first.

Compose projects

Containers with the same Compose project label are grouped under one row: the project name, “Compose · 2 of 3 running”, and buttons for the whole project. Start all starts the members that aren’t running and Stop all stops the ones that are. The group’s ⋯ menu has Restart all and Remove project. Click the group row to fold it away or open it again. See Compose for the names each service gets.

Sorting and columns

Click a column heading in Containers or Images to sort by it, and click again to reverse. Images start sorted by when they were pulled, newest first. A Compose group sits where its first member lands in the sort. Drag the edge of a heading to resize a column; double-click the edge to reset it. Kiri keeps the widths with its other window settings in ~/.kiri/ui.json.

Status pills

Every container shows its state as a coloured dot and a few words. A running container counts its uptime live, every second. A stopped one says how it ended, from its exit code.

Kiri
Up 12 srunning: green dot, the time since it started
Up 4 min (Paused)paused: yellow dot
Stoppedexit code 0: grey dot
Failed (1)any other exit code: red
Killed (137)exit code 137, killed by SIGKILL: yellow
Crashed (139)exit code 139, a segmentation fault: red
The pill for each way a container can be. Hover a stopped one to see when it stopped and, for a failure, its exit code in full.

The container’s ⋯ menu holds the actions that don’t have a button of their own:

  • Ports… opens an editor: a port on your Mac (leave it empty to pick a free one), an arrow, the port in the container, and tcp or udp. A running container keeps running while its ports change.
  • Pause or Resume, for a running or paused container.
  • Restart, when it’s running or paused.
  • Remove, which removes the container even if it’s running.

A container’s page

Click a container’s name to open its page. The title becomes a breadcrumb, Containers › web, and the head shows the name, the image (and Compose project), the status pill and its local address when it has one. On the right are Open, Restart, Stop (or Start) and the same ⋯ menu. Four tabs sit underneath.

Kiri

Containers › web

webnginx:alpine · shopUp 12 minweb.shop.kiri.localOpenRestartStop⋯
OverviewLogsTerminalFiles
Find in logs: 404All levels12 of 1,204 lines☑ FollowClear
172.18.0.1 - - “GET /favicon.ico HTTP/1.1” 404 153
172.18.0.1 - - “GET /old-page HTTP/1.1” 404 153
[error] 31#31: *7 open() “/usr/share/nginx/html/old-page” failed
A container's Logs tab. Find narrows the lines as you type, the level menu keeps one level, and the count says how many of the lines are shown.
Tab What it shows
Overview For a running container, live cards for CPU, Memory, Network (in and out) and Processes, each with a one-minute chart you can hover. Then its details: image, command, ID, created and started (or finished) times, exit code, ports, restart policy, networks with their addresses, mounts, working directory, user and environment.
Logs The container’s output as it comes. Find in logs filters the lines, and the level menu (All levels, Error, Warn, Info, Debug) keeps one level, guessed from words like error or warn in each line. Follow keeps the newest line in view; Clear empties the view. The window keeps the last 5,000 lines.
Terminal A command line in the container. Each command runs with sh -c, cd carries over to the next one, the prompt shows the user, host and directory, and ↑ and ↓ go through earlier commands. Type clear to empty it. For a full interactive shell, Open in Terminal opens macOS Terminal with docker exec -it into the container, using bash if it has it, else sh. The container must be running.
Files The container’s files, folder by folder, with size and modified time. Select a file to preview it (text up to 256 KB). Save to Downloads copies it out; Show in Finder opens it where Kiri shows container files in Finder.

Import, toasts and updates

When OrbStack or Docker Desktop is running and has images, named volumes or containers that Kiri doesn’t, a strip appears under the lists: “Docker Desktop has 12 images and 2 volumes that aren’t in Kiri yet.” Review opens a window where you tick what to copy over. × hides the strip until that engine has more than it had then. The same lists are in Settings → Import. Moving from Docker Desktop explains what an import copies.

Results show as toasts in the bottom-right corner. A success stays about 3.5 seconds and an error 6 seconds, and any toast stays while the pointer is on it. A finished pull gets its own toast, “nginx:alpine is ready”, with the time it took and a Run button. Starting an image from Run says which ports it got.

When a new release is out, a card in the same corner offers Download, Snooze (tomorrow or in a week) and Skip this version. The download’s progress shows in the status bar, then Restart now or Later, which installs it when you quit Kiri. See Updates.

Text size, status bar and Feedback

View in the menu bar changes the text size of the whole window: Zoom In (Cmd +), Zoom Out (Cmd −) and Actual Size (Cmd 0). They step through the four sizes in Settings → Appearance → Text size: 90%, 100%, 110% and 125%. Settings also has the theme, accent colour and fonts; see Settings.

The status bar along the bottom shows Kiri’s version, the VM’s state, how many containers run (click it to go to Containers), the VM’s memory, the Kubernetes version when a cluster runs, and docker → kiri: the context the docker command uses by default. At the right end is Feedback, for an idea or a bug report.

How the lists stay current

You don’t need to refresh the window. The daemon sends an event for every change, from the window or from a terminal, and the lists are fetched again after each burst of events.

kiri daemon/events/containers/json …Kiri’s windowLists and countsStatus pillsevery change: refreshGET lists, background · also every 30 sVM panel: every 2 sredrawn every 1 s
What keeps the window up to date. Events drive the lists; the 30 s refresh keeps relative times counting; pills tick every second on their own. Background requests never wake a sleeping VM.

The window asks for the lists again every 30 seconds even without an event, so times like “3 min ago” keep moving, and the VM panel updates every 2 seconds. Those requests are marked as background: they don’t count as use, so an open window never keeps an idle VM awake. Pills count their uptime in the page itself, once a second.

© 2026 Kiri · runkiri.com