orbit-client-docs/docs/config.md

2.1 KiB

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.
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

{
  "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 }
}