Skip to content

procdeck@0.4.0

Choose a tag to compare

@github-actions github-actions released this 19 Aug 13:51
· 37 commits to main since this release

Minor Changes

  • 8e4b627: procdeck runs in the background now. procdeck up (and bare procdeck) starts the
    deck detached, opens the UI and returns — no terminal tab kept hostage; up --fg is
    the old foreground mode. New commands, all working from anywhere inside the project:
    down (terminates every process tree), restart, status, ls (every running deck
    on the machine), open and logs [-f]. Running decks register in
    ~/.procdeck/instances/ (stale entries pruned by pid; PROCDECK_HOME relocates it);
    a detached deck's own output goes to ~/.procdeck/logs/. up refuses a port already
    held by another deck — naming it — or simply busy, before anything spawns; a bad
    config is reported in the terminal, not in a log file. In the UI: ⏻ shuts the deck
    down (with a confirm), the page says so instead of "reconnecting" and revives itself
    when procdeck up runs again; the deck name in the bar lists the other running decks
    as links. The CLI moved to effect/unstable/cli — --help per command, shell
    completions via --completions.
  • f2abc61: Three things for the first real release. Loopback only: the server binds
    127.0.0.1 by default — the UI types into real terminals, so it is not something to
    put on the LAN by accident; "host": "0.0.0.0" in the config opens it up for
    devcontainers and VMs. Per-proc backlog: each proc keeps its last 256 KB of output
    and a new tab gets every pane's history plus a synced marker before live events — a
    chatty ticker can no longer evict a quiet server's startup lines, a deck that has run
    for days still opens with every pane populated, the UI knows exactly which chunks are
    news, and a reconnect replays into freshly reset panes instead of appending history to
    itself. procdeck init: writes a first procdeck.config.json from what is already there —
    a Procfile, workspace packages with dev scripts (via the package manager your lockfile
    points at), plain backend/ + frontend/ subdirectories (each its own package.json or
    a Django / Go / Rust / Rails / compose project, with cwd set), or the root itself.

Patch Changes

  • 9f944e5: The deck tells you when it needs you. Procs that crashed, are blocked on a preflight,
    carry an alert or have unread error lines count into the tab title ((2) garage · procdeck) and put a red dot on the favicon — visible from the tab strip and the Dock.
    A bell in the global bar turns on system notifications: a crash, a block or a new alert
    while the tab is hidden or the window unfocused shows one (click brings the deck back);
    replayed history on reconnect never notifies. The bell state persists with the UI state;
    the browser permission is asked for on the first click.

  • 1db7f78: Grid pinning. Pin a proc (📌 in its pane header or sidebar row, ⌥P on the active one) and
    the grid shows only pinned procs; the rest collapse into a tray strip under the tiles —
    status dot, id, badges — where a click peeks at one and the pin puts it back. Nothing
    pinned = everyone tiled, as before. ⌥Z zooms the active tile in and out of single. The
    grid now sizes its columns from the tile count (near-square, at most 4) so the deck fits
    the screen when it can and scrolls only when tiles would drop under 180 px. Pins persist
    with the rest of the UI state.

  • e90a08c: Polish before publishing, part one.

    • URLs in pane output are clickable (Local: http://localhost:5173/ from every dev
      server opens in a new tab).
    • Exit status reads like a human wrote it: exit 1 · 2m ago, killed (SIGTERM) · 5s ago
      — signal names instead of numbers, and no more signal 0 on a plain non-zero exit.
      Running procs that were respawned show a restart count (↻3), so crash loops are
      visible from the status line. The sidebar shows the same exit summary where uptime sits
      while running.
    • Grid tile headers keep the *.localhost address whole instead of clipping it to :61:
      compact tiles show only the primary address (raw ports in its tooltip) and the status
      text is what gives way first.
    • The assigned port no longer also counts as "internal" when it lands in the ephemeral
      range.
  • a85d537: Light theme. A System · Light · Dark switch in the global bar; System follows the OS
    (prefers-color-scheme) and tracks it live. The terminals switch palette too — light gets
    its own ANSI set (GitHub Light), since xterm's defaults are unreadable on white. The choice
    is stored with the rest of the UI state and painted before the first frame, so there is
    no flash on reload.

  • 512e814: The UI remembers itself across reloads, and says when it has lost the server.

    Layout (single/grid) and the selected pane are kept in localStorage — per origin, so per
    deck — and restored on the next load; a stored pane that is no longer in the config falls
    back to the first one. While the event stream is down (a procdeck restart, a killed
    server) a "reconnecting" banner sits over the panes instead of the UI silently showing
    stale state; when the stream is back the proc snapshot is refetched so statuses that
    changed in the meantime catch up. A stream the browser gave up on (server answered with
    something other than an event stream) is retried every 2 s.