Release ·
cowork-deck v0.5.0
The first release since 0.4.1 that carries anything: that one was a single cherry-picked fix, and
dev had been more than a hundred commits ahead of main ever since. Three things ship, each an
epic of its own — a workspace can leave the window, your setup can follow you to another machine, and
the interface is a new one.
A workspace in a window of its own
Pull a workspace out — the button on its row, or drag it out of the window on macOS — and it gets a window holding that workspace and nothing else. Its sessions go with it, alive, with their scrollback: the new window claims each one before the old lets go, so a failure at any point leaves them where they were rather than nowhere.
In the main window the workspace does not vanish. Its row stays, marked as being elsewhere, with its sessions still listed under it and still counted; clicking either raises the window that has them. Closing that window hands the workspace back, and there is an explicit way to send it back without closing anything.
A pulled-out window is now that project’s and only that project’s: no rail, one workspace in the panel, and no app-wide settings inside a window that is one repository. It also stops opening on whichever workspace the main window had active — that answer lives in a file the main window owns.
The same setup on your other machine
Workspaces, their GitHub bindings, scenarios and the run journal can live in a private GitHub
repository of your own. Off until you switch it on, from Memory sync… in the command palette;
switching it on needs gh and a connected account, and offers both halves of the job — create a
private repository, or connect one you already have, which is what every machine after the first does.
What travels is an allowlist, and a test asserts the tracked set equals it exactly: session layout, window state and terminal drawers stay on the machine they belong to. Absolute paths never travel either — a workspace arriving from elsewhere has no folder here until you point it at one, and a schedule arrives switched off, so a job that fires at 03:00 does not start firing at 03:00 on two machines at once. Conflicts are not resolved for you: notes are prose, and an automatic merge produces a plausible paragraph nobody wrote.
The repository is private, and worth keeping that way.
A new interface
True Ink replaces Slate & Ember, for two reasons neither of which is taste: the warm cast read as brown beside the working green, and height was declared and not delivered — a large drop shadow has nowhere to go on a ground that is already nearly black. The cast is cool and almost absent now, elevation is lightness rather than shadow, and the accent is light itself. Hue still belongs to state, and only to state: green working, amber waiting on you, red broken. The terminal deliberately keeps One Dark — it is a window onto another program.
And there are no screens. The window is a rail, one panel and a deck that never leaves the row;
when a page needs width the deck yields into its filmstrip rather than disappearing. Workspaces and
sessions are one tree, so creation is positional — the last row inside each group is New session in
<name>, at the place the new session will appear. The board and the pull requests left the rail for
the workspace they belong to, because they are one repository’s rather than the app’s. The four tabs
in the top bar became a ledger — “1 waiting for a decision”, “1 stopped on an error” — each reading
opening one of the sessions it counted, and a crumb beside it says which workspace and which account
the window is on.
A session row is two lines now: the name on a line of its own, the state and the git branch under it. The state chip used to lead every row, and it is the widest thing there, so a dozen sessions read as a column of pills rather than as a list of names.
Every colour pair the interface claims is measured by npm run contrast, which fails the build when
one falls under its threshold.
Also in this release
- Settings became a window of its own at the foot of the rail, with a rail of sections inside it.
- Every panel takes a width from the person using it, and remembers it.
- A zoomed session gets its own tools, scoped to its own checkout.
- The last Russian strings left the interface; it is English throughout.
Fixed
- Pressing a session that belongs to another workspace moved the deck and nothing else — the panel, the crumb, the board and the pull requests all stayed on the workspace you had just left.
- Two windows could lose each other’s tiles:
sessions.jsonhad no owner, and each window wrote the whole file. Rust now refuses a write or a resize from a window that no longer holds the session. - The first sync could not work at all, and a pull could destroy records.
- A window that had closed was not let go of, so its workspace stayed marked as elsewhere and unselectable.
- The sidebar could re-render itself in a loop.
- The panel clipped its own pages at a narrow window.
- Sessions get the login shell’s
PATHon every route, not only some of them (this one shipped in 0.4.1 and is here for completeness).
Not in this release
Project memory is the next thing being built. Its sidecar is in the bundle and tested, and nothing in the app calls it yet — what travels in sync today is a place kept for the corpus rather than a corpus.
Install
macOS — download the .dmg for your architecture (aarch64 for Apple Silicon, x64 for Intel),
drag the app to Applications, then clear the quarantine flag once:
xattr -cr /Applications/cowork-deck.app
That wording Gatekeeper uses — “the app is damaged” — means the bundle is not notarized, not that anything is wrong with it. There is no paid Apple Developer account behind this project yet.
Linux — download the .AppImage, chmod +x it and run, or install the .deb.
The app checks this page for updates on launch and installs them in place; the xattr step is
first-install only.
Upgrading from 0.4.x — nothing to do. Your workspaces, scenarios and sessions are read as they are; sync is off until you switch it on, and no existing setting changes meaning.
Downloads for v0.5.0
- macOS · Apple silicon
- macOS · Intel
- Linux · AppImage
- Linux · Debian and Ubuntu
- Linux · Fedora and RHEL
On macOS, read the Gatekeeper note first.