rename: webmux → offdesk, plus MIT licence and a rewritten README - #306
Open
renyuanz wants to merge 4 commits into
Open
rename: webmux → offdesk, plus MIT licence and a rewritten README#306renyuanz wants to merge 4 commits into
renyuanz wants to merge 4 commits into
Conversation
Crates tc-hub/tc-cli/tc-machine/tc-protocol become offdesk-*. Binaries webmux-server/webmux-node/webmux become offdesk-hub/offdesk-node/offdesk. WEBMUX_* env vars become OFFDESK_*, the config directory moves from <config_dir>/webmux to <config_dir>/offdesk, and API tokens are minted with the odk_ prefix. Also renamed: the @webmux/* npm scope, the app bundle identifiers (com.webmux.* → dev.offdesk.*), the mobile OAuth deep link (webmux://auth → offdesk://auth), the container image (ghcr.io/zalify/webmux-server → ghcr.io/zalify/offdesk-hub), the SQLite file inside the container image, and the tmux socket. Nothing on an existing install is lost: - offdesk_protocol::config_dir() moves <config_dir>/webmux into place on first use, so a registered machine keeps its machine.json, its saved terminal metadata, and its tmux.user.conf. - The hub still accepts wmx_ API tokens; it just never mints new ones. WEBMUX_URL/TOKEN and the hub's WEBMUX_* vars still work, each with a deprecation notice on stderr. - tmux cannot move a session between servers, so pty.rs resolves its socket at startup: a node whose old `webmux` socket still holds wmx_ sessions keeps using it, and moves to `offdesk` once they are all closed. Resolution is explicit rather than lazy so unit tests do not depend on which tmux servers are running on the box. - The web app copies webmux:* localStorage keys to offdesk:* once, so clients keep their hub URL, fonts, and layout. Files under docs/plans/ and docs/superpowers/ are dated design records and keep the names that were current when they were written. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
LICENSE at the repo root, plus a license field on every Cargo.toml and package.json so the manifests agree with it. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
…ITY.md README now leads with what offdesk is and how to run it, and keeps the CLI reference under "For agents and scripts". Development instructions and the crate-by-crate layout move to CONTRIBUTING.md. New: - docs/setup-lan.md — hub on a Mac or NAS, phone on the same Wi-Fi, and an explicit account of what that setup does not protect. OFFDESK_DEV_MODE signs in anyone who opens the URL, which is what makes it a five-minute setup and why it must not be exposed. - docs/setup-public.md — VPS behind Caddy with a working Caddyfile and the OAuth callback URLs for GitHub and Google, plus a Tailscale variant and the steps to upgrade an existing webmux deployment. - SECURITY.md — threat model, what the control lease does and does not prevent, what the hub keeps in SQLite, and where to report. - docs/media/README.md — the screenshots and GIFs still to record. - docs/plans/README.md, docs/superpowers/README.md — note that those dated records keep the pre-rename names on purpose. Every claim traces to docs/facts.md. The comparison table has offdesk's row filled and TODO in every competitor cell; those need sourcing before the README is published. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Bugbot couldn't run - usage limit reachedBugbot is counted against Cursor usage for this user or team, and this run hit a usage or spend limit. A user or team admin can review and increase usage limits in the Cursor dashboard. (requestId: serverGenReqId_04413ebe-e236-4909-a611-842a6dc4c1b8) |
docs/github-metadata.md holds the repo description, website, and topics to paste into the GitHub settings UI, plus a checklist of the one-time steps the rename needs (renaming the repo, publishing the container under its new name, tagging a release so the install script has binaries to fetch). docs/launch/show-hn.md is a stub. Ryan is supplying the draft; it carries a TODO plus the verified raw material and the questions worth having an answer ready for. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
4 tasks
renyuanz
force-pushed
the
rename/offdesk
branch
from
August 31, 2026 11:14
39be96d to
ffa1ca3
Compare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Renames the project to offdesk, adds the MIT licence, and rewrites the README
for first-time users.
The marketing site was split out into #307 — it has no code dependency on this,
so the two can merge in either order.
Four commits, meant to be read in order. The rename is mechanical and large;
everything after it is small.
What changed
rename: webmux → offdesk— cratestc-*→offdesk-*; binarieswebmux-server/webmux-node/webmux→offdesk-hub/offdesk-node/offdesk;WEBMUX_*→OFFDESK_*; config dir →<config_dir>/offdesk; API tokens mintedodk_. Also the@webmux/*npm scope, bundle ids (com.webmux.*→dev.offdesk.*), the OAuth deep link, the container image, the SQLite filename,and the tmux socket.
license: MIT—LICENSEat the root plus alicensefield on everyCargo.toml and package.json.
docs: rewrite README…— README rewritten for someone who has never seenthis; development and architecture moved to a new
CONTRIBUTING.md. Newdocs/setup-lan.md,docs/setup-public.md,SECURITY.md,docs/media/README.md.docs: repo metadata…—docs/github-metadata.md(description, topics, andthe one-time rename checklist) and a
docs/launch/show-hn.mdstub.Nothing on an existing install breaks
This is the part worth reviewing closely.
offdesk_protocol::config_dir()moves<config_dir>/webmuxinto place on first use, so a registered machine keepsmachine.json, its terminal metadata, andtmux.user.conf. Only moves whenthe destination does not exist.
wmx_tokens; it just never mints newones. Nobody has to reissue.
WEBMUX_*still works, each with a deprecation notice onstderr.
pty.rsresolves its socket at startup: a node whose old
webmuxsocket still holdswmx_sessions keeps using it and moves tooffdeskonce they are allclosed. Resolution is explicit rather than lazy, so unit tests do not depend
on which tmux servers happen to be running on the box — that bit me, and the
legacy detection is why.
webmux:*localStorage keys tooffdesk:*once, so clients keep their hub URL, fonts, and layout.One manual step for the existing deployment: the container's SQLite path
moved from
/app/data/tc.dbto/app/data/offdesk.db, and the volume fromwebmux-datatooffdesk-data. Commands are indocs/setup-public.mdunder"Upgrading a webmux deployment". Without it the hub starts on an empty database
and every machine looks unregistered.
Verification
cargo build --releasecargo test --workspacepnpm testpnpm typecheckpnpm buildpnpm e2e:ciThe e2e failure is
mobile touch drag sends terminal scroll input. Re-ran it3× in isolation, passes every time — a timing-sensitive wheel-frame assertion,
not the rename. The renamed test globals matched; the test reached the wheel
assertion before failing.
Things a reviewer should decide
zalify/offdesk.dev, notzalify/offdesk. Per the brief Iassumed
github.com/zalify/offdeskeverywhere — links, and the Tauri updaterendpoint. Those 404 until the repo is renamed. If the repo keeps its current
name, these need flipping.
TODOcells. The rule was cite a URLor write TODO, never guess, so only offdesk's row is filled — from
docs/facts.md. The README should not be treated as publishable until theseare sourced. Same table, same caveat, in site: offdesk.dev marketing site on Astro #307.
docs/plans/anddocs/superpowers/bodies are untouched. They aredated records; rewriting ~40 of them would falsify what was decided when.
Each directory gets a
README.mdsaying the commands inside use pre-renamenames. Easy to change if you disagree.
Also worth knowing
docs/facts.mdis new: verified facts about the shipping system, each citingthe file it came from. README and site copy only assert things on that list.
Writing it turned up something that changed the docs: the web client calls
/api/auth/devautomatically. WithOFFDESK_DEV_MODE=true, anyone who opensthe hub URL is signed in as a shared user, unprompted. That is what makes the
LAN setup take five minutes, and it is why
setup-lan.mdhas a "what this doesnot protect" section and
SECURITY.mdleads on it.Two README claims did not survive fact-checking and were corrected rather than
carried over: the CLI config path is
~/Library/Application Support/offdesk/onmacOS, not
~/.config/offdesk/; and the CLI device id iscli-send-<pid>/cli-read-<pid>, notcli-<hostname>.Still to do before launch: record
docs/media/hero.gif, and tag av*releaseso the install script in #307 has binaries to fetch.
🤖 Generated with Claude Code