Section: Configuration Order: 100 # config.json reference Orbit is configured at **runtime** by `config.json`. It is fetched on startup, deep-merged over the built-in defaults, then the app renders — so you can re-point or rebrand **without rebuilding**. - **Source of truth:** `public/config.json` (copied into the build). - **Served at:** `/app/config.json`. - **Edit live:** the service worker serves it *network-first*, so editing the deployed file takes effect on the next reload — no rebuild. Merge rules: objects merge key-by-key; **arrays and scalars replace** wholesale. ## Options | Key | Type | What it does | |-----|------|--------------| | `server.url` | string | WebSocket URL of the IRCv3 server. | | `startup.channels` | string[] | Channels auto-joined (first = active). A `?channel=` URL param overrides. | | `branding.name` | string | App/network name shown in the UI + CTCP VERSION. | | `branding.icon` | string | Logo / favicon URL. | | `branding.url` | string | Homepage (used in CTCP VERSION/SOURCE). | | `branding.tagline` / `taglineEm` / `subtitle` | string | Connect-screen copy. | | `branding.projectUrl` | string | "Powered by Orbit" link in Settings. | | `turnstile.enabled` / `sitekey` | bool / string | Cloudflare Turnstile on registration. | | `report.target` | string | Channel that user reports are sent to. | | `defaults.theme` | string | `light` · `dark` · `yomirc` · `yomirc-dark`. | | `defaults.compact` / `sound` / `hideJoinQuit` / `clock24` | bool | Preset new-user prefs. | | `defaults.lang` | string | Pin a default UI language (e.g. `en`, `fr`, `de`). Overrides browser detection for users who haven't picked one. Omit to auto-detect. | | `features.push` / `imageUpload` / `register` | bool | Turn whole features on/off. | > `defaults.*` only seed a user's preferences the **first** time — once someone changes a setting, > it's stored in their browser and the config no longer overrides it. ## Example ```json { "server": { "url": "wss://irc.example.org/ws/" }, "startup": { "channels": ["#lobby", "#help"] }, "branding": { "name": "ExampleChat", "tagline": "Chat with", "taglineEm": "everyone." }, "turnstile":{ "enabled": false, "sitekey": "" }, "defaults": { "theme": "dark", "compact": true }, "features": { "register": false } } ```