How to build and redistribute a fork legally and safely: what you must rename, what you must replace, and which infrastructure belongs to ArcBox and is not yours to publish to.
- Code is source-available under the Business Source License 1.1. Production use is allowed within the Additional Use Grant (no competing hosted/embedded offering); each version converts to Apache 2.0 on its Change Date.
- Brand is not included. The LinkCode and ArcBox names, logos, icons, and splash imagery are trademarks licensed separately under
assets/LICENSEandassets/BRAND.md. A fork or redistribution must replace the Brand Assets with its own branding and ship under its own name — do this before you package or distribute anything.
Work through every row; each one ships ArcBox identity or points at ArcBox infrastructure.
| Touchpoint | Where | Notes |
|---|---|---|
| Product name | apps/desktop/electron-builder.yml (productName), apps/desktop/src/main/constants.ts (BASE_NAME: LinkCode / LinkCode Development) |
The app name also keys userData, log paths, the safeStorage keychain entry, and the single-instance lock — renaming it isolates your fork from an installed LinkCode. |
| App / bundle ids | appId: com.arcboxlabs.linkcode.desktop (electron-builder.yml); com.arcboxlabs.linkcode.mobile + "scheme": "linkcode" (apps/mobile/app.json) |
Pick ids under your own domain. |
| Deep-link schemes | linkcode:// in electron-builder.release.yml; linkcode-dev:// in electron-builder.devshell.yml (declared per channel on purpose — the shared base carries none) |
Cloud-auth callbacks ride this scheme; claim your own. |
| Icons and brand imagery | assets/icon.png, assets/icon-dock.png, assets/linkcode.icon (macOS Liquid Glass bundle, also referenced by the mobile iOS icon), assets/linux-icons/ (size set regenerated from icon-dock.png; see apps/desktop/scripts/package-app.mts), plus mobile icon/splash under apps/mobile |
These are the restricted Brand Assets. The repo ships no unrestricted substitutes — bring your own artwork for every slot. |
| Updater feed | publish.url: https://releases.linkcode.ai/desktop (electron-builder.yml) |
Change or remove this before packaging. electron-builder bakes it into the app's app-update.yml; an unmodified fork polls ArcBox's feed and will happily "update" itself into official LinkCode. |
| State, workspace, and data dirs | packages/foundation/schema/src/product.ts: STATE_DIR_BASENAME (~/.linkcode), WORKSPACES_DIRNAME (~/LinkCode), DATA_DIRNAME (managed-asset store under the platform data dir) |
One edit rebrands every on-disk footprint — daemon state, workspace root, asset store — across daemon, desktop, and adapters. They are shared with an installed LinkCode, and the daemon is one-per-machine (port 19523, /linkcode identity probe) — rename them (and ideally the port/identity path) if your fork should coexist with LinkCode on the same machine. |
| Cloud endpoints | DEFAULT_HQ_URL = https://api.linkcode.ai (apps/daemon/src/hq/api.ts); CLOUD_API_URL / sign-in URL (apps/desktop/src/main/cloud-auth/client.ts, overridable via LINKCODE_CLOUD_API_URL / LINKCODE_CLOUD_SIGN_IN_URL); mobile equivalents under apps/mobile/src/runtime/cloud |
Cloud login is opt-in — a fork is fully functional local-first without it. Point these at your own deployment or leave the feature dormant; do not ship a fork that signs users into ArcBox's Cloud under your brand. |
| Sentry / PostHog | Sentry DSN env vars: MAIN_VITE_SENTRY_DSN (desktop, build-time), LINKCODE_SENTRY_DSN (daemon), VITE_SENTRY_DSN (webview), EXPO_PUBLIC_SENTRY_DSN (mobile). PostHog uses a project token + host pair per client; see docs/ENVIRONMENT.md. |
Unset ⇒ the SDKs no-op. Set your own projects if you want crash reporting or opt-in product analytics. PostHog stays user-opt-in even when configured. |
| Package feeds | Homebrew cask in arcboxlabs/homebrew-tap; the R2 release feed |
ArcBox's distribution channels. Publish your fork through your own tap/feeds. |
- Signing and publishing are ArcBox-maintainers-only and live behind the
releaseGitHub environment: macOS Developer ID + notarization, Windows Trusted Signing (OIDC), the R2 feed upload, and the Homebrew cask bump all no-op without its secrets — a fork's CI cannot reach them. - CI is portable: every
runs-onresolves through repo vars with GitHub-hosted fallbacks, so a fork runs the full CI with zero runner setup. - Telemetry and Cloud are opt-in: no Sentry DSN means no crash reporting; PostHog needs both build-time configuration and explicit user consent; no Cloud login means a purely local product.
Local development is unchanged — see DEVELOPMENT.md. For packaged builds, the entry point is apps/desktop/scripts/package-app.mts (driven by .github/workflows/build-desktop.yml; unsigned without the release secrets). Model your release packaging config on electron-builder.release.yml with your own name, ids, scheme, icons, and publish target — and re-read assets/LICENSE before your first distribution.
Official LinkCode releases (signing, notarization, feeds) follow RELEASE.md and are performed only by ArcBox maintainers.