Skip to content

Releases: PeterKnego/roost

v0.5.2

Choose a tag to compare

@github-actions github-actions released this 09 Sep 09:03

Install roost 0.5.2

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/PeterKnego/roost/releases/download/v0.5.2/roost-installer.sh | sh

Install prebuilt binaries via Homebrew

brew install peterknego/tap/roost

Download roost 0.5.2

File Platform Checksum
roost-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
roost-x86_64-apple-darwin.tar.xz Intel macOS checksum
roost-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
roost-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum

Verifying GitHub Artifact Attestations

The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:

gh attestation verify <file-path of downloaded artifact> --repo PeterKnego/roost

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>

v0.5.2-rc.3

v0.5.2-rc.3 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 09 Sep 08:38

Install roost 0.5.2-rc.3

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/PeterKnego/roost/releases/download/v0.5.2-rc.3/roost-installer.sh | sh

Install prebuilt binaries via Homebrew

brew install peterknego/tap/roost

Download roost 0.5.2-rc.3

File Platform Checksum
roost-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
roost-x86_64-apple-darwin.tar.xz Intel macOS checksum
roost-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
roost-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum

Verifying GitHub Artifact Attestations

The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:

gh attestation verify <file-path of downloaded artifact> --repo PeterKnego/roost

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>

v0.5.1

Choose a tag to compare

@github-actions github-actions released this 08 Sep 17:44

Install roost 0.5.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/PeterKnego/roost/releases/download/v0.5.1/roost-installer.sh | sh

Install prebuilt binaries via Homebrew

brew install peterknego/tap/roost

Download roost 0.5.1

File Platform Checksum
roost-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
roost-x86_64-apple-darwin.tar.xz Intel macOS checksum
roost-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
roost-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum

Verifying GitHub Artifact Attestations

The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:

gh attestation verify <file-path of downloaded artifact> --repo PeterKnego/roost

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>

v0.5.1-rc.1

v0.5.1-rc.1 Pre-release
Pre-release

Choose a tag to compare

@github-actions github-actions released this 08 Sep 17:34

Install roost 0.5.1-rc.1

Install prebuilt binaries via shell script

curl --proto '=https' --tlsv1.2 -LsSf https://github.com/PeterKnego/roost/releases/download/v0.5.1-rc.1/roost-installer.sh | sh

Install prebuilt binaries via Homebrew

brew install peterknego/tap/roost

Download roost 0.5.1-rc.1

File Platform Checksum
roost-aarch64-apple-darwin.tar.xz Apple Silicon macOS checksum
roost-x86_64-apple-darwin.tar.xz Intel macOS checksum
roost-aarch64-unknown-linux-musl.tar.xz ARM64 MUSL Linux checksum
roost-x86_64-unknown-linux-musl.tar.xz x64 MUSL Linux checksum

Verifying GitHub Artifact Attestations

The artifacts in this release have attestations generated with GitHub Artifact Attestations. These can be verified by using the GitHub CLI:

gh attestation verify <file-path of downloaded artifact> --repo PeterKnego/roost

You can also download the attestation from GitHub and verify against that directly:

gh attestation verify <file-path of downloaded artifact> --bundle <file-path of downloaded attestation>

roost 0.5.0

Choose a tag to compare

@PeterKnego PeterKnego released this 06 Sep 05:43

Since 0.4.0 — 51 commits.

Settings

A settings dialog behind the gear. Two panes. General edits the display
keys of either config file — hide, show_hidden, autosave, and in Global
scope share_selection and worktree_prompt — with a scope switch between
the project's .roost/config.toml and the global file, a one-sentence
description under every key, and a Clear that removes a key so the inherited
value applies again. allowed_origins, max_upload_bytes, ide and roots
are shown read-only under "Set by hand": no page can write them, and a forged
intent for one is refused by name. Writes go through the project websocket
and toml_edit, so comments and layout in a hand-edited file survive; a file
that does not parse is refused with its error, shown at the top of the pane,
and left byte for byte alone. Save waits for the write to be confirmed and
keeps the dialog open with your values if it was refused. Writing
show_hidden also clears the header toggle's override, so the file value is
what the tree shows next. The write is path-confined: a .roost symlink in a
cloned repository cannot redirect it out of the project.

Theme picker with live preview. The Theme pane shows every theme as a
tile painted in its own colours — roost's five, then daisyUI 5's 35, vendored
as variables only, no components and no Tailwind runtime. Clicking a tile
restyles the page at once, terminals included; Save keeps it and every
browser on the project follows without a reload; Cancel restores what you
opened with. A daisyUI theme is selected by name in theme, roost's own
files win where names collide (dark, light), and a bridge maps daisyUI's
variables onto roost's, including winning back --border, which daisyUI
defines as a width.

default_tab is gone. A v2 setting the four-pane client never read.
Files that still set it load silently.

Dialogs

Every question the workspace asks is an in-page dialog. The ten native
confirm/prompt/alert calls are replaced by shapes on the <dialog>
element — confirm, text, menu, choice — with the browser's own focus
trapping, Escape and backdrop. The file menu is a real context menu; new
file, folder and rename ask in place; closing a dirty tab, ending a session,
Close Project and Remove worktree confirm with the safe choice focused. The
✻ "a Claude is already working here" prompt and the save-conflict box moved
onto the same dialogs, the conflict one with the diff in view and focus on
Cancel because both answers discard someone's work. Dialogs open top-centre;
a stylesheet reset had been pinning them to the top-left corner. A project's
own theme can recolour a dialog but cannot rearrange, hide or relabel one.

Command line

roost --version. It used to parse as a port, fail, default to 8444 and
start a server — or panic at the bind where one already ran. Any other
non-numeric first argument now exits 2 with usage instead of being defaulted
past.

Under the hood

The hub caches the settings block like the hook state, invalidated on
RequestState and on a write, since snapshots go out on every debounced
keystroke. The browser test harness kills its roost child before giving up
on it listening. The gear lost the help cursor it kept from its placeholder
days.

roost 0.4.0

Choose a tag to compare

@PeterKnego PeterKnego released this 04 Sep 17:34

Since 0.3.0 — 76 commits.

Terminals

Close Project now ends the session, not just the dtach master. dtach
setsids the slave side, so the shell leads its own session and the master's
death reaches it only as a hangup — which anything may decline. Claude Code
does, so a Claude routinely survived Close Project, reparented to init, and
became unreachable. Worse, the confirmation asked only whether the socket was
still held, so roost reported a number of ended sessions that was too large.
It now derives the slave-side session before killing the holders, sweeps it
after, and confirms on both. Anything that left the session deliberately —
Claude's daemon run and bg-pty-host — is out of scope by construction.

Claude Code integration

A Claude that outlived a roost restart says so. Alt+K used to answer
"no Claude is connected to this project" while roost could see the Claude in
/proc and even marked its tab. It now distinguishes four cases and names the
terminal and both ports when the Claude predates the running roost.

Each project's IDE port is remembered and rebound. CLAUDE_CODE_SSE_PORT
is baked into a shell at spawn time and dtach sessions outlive roost, so an
ephemeral port could later be handed to a different project — and Claude Code
matches a lock file by port before it matches by path, which would connect a
Claude to the wrong workspace with that workspace's token. The port is now
recorded per project and taken again when it is still free.

Claude Code hooks are configurable from the UI. roost claude-hook turns
Claude's hook JSON into a notification, and the bell menu writes the project's
local .claude/settings.local.json around roost's own entries — never the
committed settings.json, never ~/.claude/settings.json, and never a file
roost could not parse.

Notifications route by project. A notice now goes to the project whose tab
it belongs in.

Markdown preview

Raw HTML is sanitized rather than neutralized. An allowlist of tags, every
attribute value escaped, and every src/href decided by roost's own resolver
rather than copied from the file. The tokenizer bounds its scans at the next
<, which fixes quadratic behaviour that took minutes on a few hundred
kilobytes of unterminated tags.

Editor and chrome

  • A prose file's edit bar counts its non-ASCII characters and can mark them.
  • New owl mark: the home glyph, the header, and ICO/PNG/touch-icon favicons.
    Favicon URLs carry a content hash, so a browser that cached "no icon" looks
    again.

Notes

cargo install roost now works — this is the first release published to
crates.io. The binary still binds 127.0.0.1 only; the loopback bind is the
security boundary, since the websocket spawns a shell.

roost 0.3.0

Choose a tag to compare

@PeterKnego PeterKnego released this 02 Sep 12:21

First tagged release, and the first under the name roost (the project was resh until 2026-09-02, and deadlight before 2026-08-18).

roost is a per-project remote workspace in a single Rust binary: a four-pane IDE-style layout in the browser, backed by real terminals that survive you closing the tab, built for working alongside Claude Code. See the README for what it does and the security model before exposing it to a network.

What is in this release

  • Terminals backed by dtach, so a shell outlives the browser tab and a server restart.
  • Editor, markdown/image preview and a live file tree that follow edits Claude makes on disk.
  • Claude Code integration: /ide connects to roost's IDE socket, ✻ marks tabs running a Claude, Alt+K mentions route to the right one, and a second Claude can be steered into its own git worktree.
  • Project search, desktop notifications (roost notify), multipart uploads and clipboard paste, per-project themes.
  • An overview page at / listing projects, worktrees and sessions, rebuilt from sockets and /proc so it survives restarts.

Install

cargo install --git https://github.com/PeterKnego/roost --tag v0.3.0

or download roost-v0.3.0-x86_64-unknown-linux-gnu.tar.gz below (binary, README, licenses; the .sha256 file alongside it is its checksum). Needs dtach and git on PATH.

Upgrading from resh

Everything named resh became roost: the binary, the ROOST_* environment variables, ~/.config/roost/, ~/.local/state/roost/, and {project}/.roost/. Read the rename note at the top of docs/deploy.md before restarting: do not move the state directory while sessions are live, and update hooks that call resh notify.