Skip to content

refactor(desktop): rebrand user-facing text and identifiers to codev - #171

Merged
quickbeard merged 2 commits into
mainfrom
desktop-rebrand-text
Aug 9, 2026
Merged

quickbeard merged 2 commits into
mainfrom
desktop-rebrand-text

Conversation

@quickbeard

Copy link
Copy Markdown
Owner

Issue for this PR

Closes #

Type of change

  • Refactor / code improvement

What does this PR do?

Rebrands the remaining "opencode" in the desktop app (scope limited to packages/desktop and the WSL/deep-link surfaces it shares with packages/app), in two passes.

User-facing text → "CoDev Code": the window <title>, the crash / failed-to-load / unresponsive dialogs, the updater and CLI-installed messages in both en and es (the CLI-command hint now tells users to run codev, matching the fork's renamed binary), the unpackaged app-name fallback (APP_NAMES was already branded — only the fallback was missed), the AppStream metainfo that Linux software centres display, the OS deep-link handler name, the README, and package.json. For package.json I dropped upstream's homepage/author rather than inventing fork contact details, because packages/opencode and packages/app declare neither. In the metainfo I dropped the developer id="ly.anoma" attribution and upstream's lander screenshot (it would show opencode branding in the very listing being rebranded), and repointed its three URLs to the fork repo.

Codebase identifiers and comments → Opencode/opencode renamed to Codev/codev: the WSL CLI-check code (WslOpencodeCheck, resolveWslOpencode, installWslOpencode, checkOpencode, opencodeChecks, wslOpencodeAction, …) and the internal wire values whose producer and consumer both ship from this repo — the virtual:opencode-server module id, the vite plugin names, the wsl-servers-install-opencode IPC channel, the install-opencode job kind, the __OPENCODE__ deep-link bridge global, the opencode:deep-link renderer event, the onboarding temp-dir prefix, and the wsl.onboarding.installOpencode* i18n keys. Each wire value was renamed on both sides in the same pass. Two locals named after the product (opencode holding a resolved CLI path / a list of checked distros) are renamed to what they actually hold.

One real bug fixed along the way: the debug-log export collected server logs from <xdgData>/opencode/log, but the fork CLI writes to <xdgData>/codev/log (packages/core/src/global.ts, app = "codev"), so that directory was always empty and the CLI's logs never made it into the exported archive.

Deliberately preserved (identity plumbing / persisted / wire-format that must match a peer): the @opencode-ai/* package ids, the ai.opencode.desktop* appIds and the opencode:// scheme + schemes:["opencode"], the owner:"anomalyco" / repo:"opencode" / packageName:"opencode" publish targets and the opencode-desktop.desktop legacy launcher, the persisted on-disk store names (opencode.settings, opencode.{draft,workspace,global,…}.dat), the basic-auth username "opencode" (it must equal the server's default in packages/server/src/auth.ts, else auth breaks), and the ../opencode/dist build paths. Comments that quote those identifiers are left intact so they stay accurate.

Not touched (out of scope — functional, not branding): the WSL install still curls https://opencode.ai/install and resolves $HOME/.opencode/bin/opencode. Rebranding those would change behavior, not text; worth a separate look at whether WSL install should target the fork's CLI.

DIVERGENCES.md gets a row covering the rebrand and the full preserved-list; CHANGELOG.md gets an Unreleased entry.

How did you verify your code works?

  • bun test in packages/desktop — 63 pass, 0 fail; bun run test:unit in packages/app — 624 pass, 0 fail. The test that asserts the WSL update-failure message was updated to the rebranded string.
  • bun typecheck clean in packages/desktop and packages/app (also the full-workspace typecheck the pre-push hook runs).
  • bun run build in packages/desktop succeeds — this is the real check that the renamed virtual:opencode-server → virtual:codev-server module still resolves through the vite plugin (a typecheck can't catch a module-id mismatch); the 31 MB server chunk is bundled, not stubbed.
  • Renamed wire values were grepped to confirm producer and consumer moved together (IPC channel, deep-link global/event, virtual module, i18n keys, job kind).
  • oxlint on the changed files reports the same 34 warnings as the pre-change baseline (0 introduced); prettier --check passes.

Screenshots / recordings

No visual change to the running UI in this PR — the rebranded strings are dialogs, the window title, updater/CLI toasts, and the Linux store listing.

Checklist

  • I have tested my changes locally
  • I have not included unrelated changes in this PR

🤖 Generated with Claude Code

Every user-visible "OpenCode" the desktop app renders becomes "CoDev Code":
crash and unresponsive dialogs, the window title, the updater and CLI-installed
i18n strings (en + es, with the CLI-command hint 'opencode' -> 'codev'), the
unpackaged app-name fallback, the AppStream metainfo Linux software centres
show, the OS deep-link handler name, the README, and package.json identity
(upstream homepage/author dropped, as packages/opencode and packages/app carry
neither).

Codebase identifiers are renamed Opencode -> Codev across the WSL CLI-check code
and the deep-link surfaces it shares with packages/app, together with the
internal wire values whose producer and consumer both ship from this repo: the
virtual:opencode-server module id, the vite plugin names, the
wsl-servers-install-opencode IPC channel, the install-opencode job kind, the
__OPENCODE__ deep-link bridge global, the opencode:deep-link renderer event, the
onboarding temp dir, and the wsl.onboarding.installOpencode* i18n keys.

Also fixes a real bug: the debug-log export read server logs from
<xdgData>/opencode/log, but the fork CLI writes to <xdgData>/codev/log
(core/global.ts app = "codev"), so the export silently collected none.

Deliberately preserved: @opencode-ai/* package ids, the ai.opencode.desktop
appIds and opencode:// scheme, the publish targets and legacy launcher, the
persisted on-disk store names, the basic-auth username (must match the server
default), and the ../opencode/dist build paths.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@quickbeard
quickbeard force-pushed the desktop-rebrand-text branch from 8fafbf7 to 4089cf0 Compare August 9, 2026 03:02
The desktop app embeds the packages/app web UI, whose en/es i18n dicts still
rendered "OpenCode" in settings descriptions, update toasts, the WSL onboarding
flow, the server-switcher dialog, the MCP error, the getting-started sidebar,
the provider-connect prompts, and the desktop app name. Rebrand all 28
app-self-reference strings per locale; the i18n keys are untouched (they carry
Opencode/opencode, which never match the exact-case OpenCode in the values).

Also renames the deep-link bridge window type OpenCodeWindow -> CodevWindow,
matching the __CODEV__ global it describes.

Deliberately preserved: the hosted-service names "OpenCode Zen" / "OpenCode Go"
and the Zen free-models title, plus every opencode.ai URL — the fork routes to
those real services, so the text must match where users land. The built-in
"OpenCode" theme name is also kept: it names a specific palette and the fork
ships its own codev theme alongside it.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@quickbeard
quickbeard force-pushed the desktop-rebrand-text branch from 751d562 to 65c9092 Compare August 9, 2026 03:31
@quickbeard
quickbeard merged commit 380dbb0 into main Aug 9, 2026
0 of 5 checks passed
@quickbeard
quickbeard deleted the desktop-rebrand-text branch August 9, 2026 04:36
quickbeard added a commit that referenced this pull request Aug 11, 2026
#171 deleted `homepage` and `author` from packages/desktop/package.json as
part of the rebrand — correctly, since they pointed at opencode.ai and
hello@opencode.ai, and shipping a CoDev package that names upstream as its
maintainer would be wrong. Removing them outright broke `deb` and `rpm`
packaging, though: electron-builder derives the Debian Maintainer field from
`author.email` and refuses to build any fpm target without `homepage`, so
`bun run package:linux` has failed since 2026-08-08 with

  Please specify project homepage
  It is required to set Linux .deb package maintainer.

They are back, carrying fork values rather than upstream ones. Both match what
scripts/copy-metainfo.ts already writes into the AppStream metainfo, so the
deb and the metainfo now agree instead of one naming a developer the other
does not:

  homepage  https://github.com/quickbeard/codev-code   (= <url type="homepage">)
  author    CoDev <minhnh49@viettel.com.vn>            (= <developer><name>)

Nothing else consumes these fields — the app id, product name and artifact
names all come from electron-builder.config.ts.

Verified by building the deb from this tree with no CLI overrides: exit 0, and
`dpkg-deb -f` reports Package codev-code, Maintainer CoDev
<minhnh49@viettel.com.vn>, Homepage https://github.com/quickbeard/codev-code.
AppImage and the Windows nsis target were never affected — they do not use
fpm. The rpm target now gets past metadata and stops on a missing `rpmbuild`,
which is a host dependency (apt-get install rpm), not a repo one.

Co-authored-by: Quickbeard <quickbeard@gmail.com>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
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