Skip to content

rename: webmux → offdesk, plus MIT licence and a rewritten README - #306

Open
renyuanz wants to merge 4 commits into
mainfrom
rename/offdesk
Open

rename: webmux → offdesk, plus MIT licence and a rewritten README#306
renyuanz wants to merge 4 commits into
mainfrom
rename/offdesk

Conversation

@renyuanz

@renyuanz renyuanz commented Aug 31, 2026

Copy link
Copy Markdown

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 — crates tc-*offdesk-*; binaries
webmux-server/webmux-node/webmuxoffdesk-hub/offdesk-node/offdesk;
WEBMUX_*OFFDESK_*; config dir → <config_dir>/offdesk; API tokens minted
odk_. 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: MITLICENSE at the root plus a license field on every
Cargo.toml and package.json.

docs: rewrite README… — README rewritten for someone who has never seen
this; development and architecture moved to a new CONTRIBUTING.md. New
docs/setup-lan.md, docs/setup-public.md, SECURITY.md,
docs/media/README.md.

docs: repo metadata…docs/github-metadata.md (description, topics, and
the one-time rename checklist) and a docs/launch/show-hn.md stub.

Nothing on an existing install breaks

This is the part worth reviewing closely.

  • Config directoryoffdesk_protocol::config_dir() moves
    <config_dir>/webmux into place on first use, so a registered machine keeps
    machine.json, its terminal metadata, and tmux.user.conf. Only moves when
    the destination does not exist.
  • Tokens — the hub still accepts wmx_ tokens; it just never mints new
    ones. Nobody has to reissue.
  • EnvironmentWEBMUX_* still works, each with a deprecation notice on
    stderr.
  • tmux sessions — 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 happen to be running on the box — that bit me, and the
    legacy detection is why.
  • Browser state — the web app copies webmux:* localStorage keys to
    offdesk:* 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.db to /app/data/offdesk.db, and the volume from
webmux-data to offdesk-data. Commands are in docs/setup-public.md under
"Upgrading a webmux deployment". Without it the hub starts on an empty database
and every machine looks unregistered.

Verification

Check Result
cargo build --release 3 binaries
cargo test --workspace 228 passed, 0 failed
pnpm test 351 passed
pnpm typecheck clean
pnpm build clean
pnpm e2e:ci 90 passed, 1 failed (flaky, see below)

The e2e failure is mobile touch drag sends terminal scroll input. Re-ran it
3× 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

  1. The remote is zalify/offdesk.dev, not zalify/offdesk. Per the brief I
    assumed github.com/zalify/offdesk everywhere — links, and the Tauri updater
    endpoint. Those 404 until the repo is renamed. If the repo keeps its current
    name, these need flipping.
  2. The README comparison table is 25 TODO cells. The rule was cite a URL
    or write TODO, never guess, so only offdesk's row is filled — from
    docs/facts.md. The README should not be treated as publishable until these
    are sourced. Same table, same caveat, in site: offdesk.dev marketing site on Astro #307.
  3. docs/plans/ and docs/superpowers/ bodies are untouched. They are
    dated records; rewriting ~40 of them would falsify what was decided when.
    Each directory gets a README.md saying the commands inside use pre-rename
    names. Easy to change if you disagree.

Also worth knowing

docs/facts.md is new: verified facts about the shipping system, each citing
the 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/dev automatically.
With OFFDESK_DEV_MODE=true, anyone who opens
the 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.md has a "what this does
not protect" section and SECURITY.md leads 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/ on
macOS, not ~/.config/offdesk/; and the CLI device id is
cli-send-<pid>/cli-read-<pid>, not cli-<hostname>.

Still to do before launch: record docs/media/hero.gif, and tag a v* release
so the install script in #307 has binaries to fetch.

🤖 Generated with Claude Code

renyuanz and others added 3 commits August 31, 2026 18:27
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>
@cursor

cursor Bot commented Aug 31, 2026

Copy link
Copy Markdown

Bugbot couldn't run - usage limit reached

Bugbot 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)

@renyuanz
renyuanz requested a review from chareice August 31, 2026 11:00
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>
@renyuanz renyuanz changed the title rename: webmux → offdesk, plus MIT licence, new README and docs, and the offdesk.dev site rename: webmux → offdesk, plus MIT licence and a rewritten README Aug 31, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant