← Features
The window

The window

One window, and it is the list of containers — name, image, state, uptime and the ports, because a published 8080 is the thing you actually wanted. It reads /events as the daemon writes it, so nothing here polls and nothing needs a refresh button.

FreeWilly ─☐✕ Engine running · Engine API v1.43 NAME IMAGE STATE STATUS PORTS web nginx:1.29-alpine running Up 12 seconds 8080->80/tcp postgres-dev postgres:17-alpine running Up 4 minutes 5432->5432/tcp redis redis:8-alpine running Up 4 minutes 6379/tcp api node:22-alpine exited Exited (1) 3 minutes ago A blue port is published and opens in your browser. Grey is exposed only — there is nowhere on this machine to send you, so it is plain text and not a link that lands on nothing.

What it is opened for

  • The list — name, image, state, uptime and ports, with a published TCP port a link that opens in your browser and an exposed or UDP port left as plain text.
  • Acting on a container — start, stop, restart and remove, where the work is the pending state and the confirmation, not the four endpoints.
  • Logs — because a container that exits immediately shows a state and nothing about the cause.
  • A shell inside a container — because anything the log does not say is otherwise unreachable.
  • Images and volumes — which layers are dangling and which are in use, and making an irreversible volume deletion legible rather than reclaiming space blindly.

Dark, because Windows is

WPF on the built-in Fluent theme with ThemeMode="System", so light and dark follow the OS with no extra package. Empty is a designed state: “the engine is not running” offers a Start button, “no containers” does not.