Feature Flags
Manage feature flags to control feature availability across the platform.
Overview
Feature flags let administrators globally enable or disable features without redeploying. They are used as kill-switches for platforms, widgets, integrations, features, bot modules, automation actions, copyright providers, event types, and system-level controls.
Managing Flags
Access feature flag management via Admin > Feature Flags. Flags are grouped by category and toggled individually. Toggling a flag immediately persists the change via PATCH /v1/admin/feature-flags/{id}.
Toggle buttons are gated on the feature-flags:edit permission — users with only feature-flags:read see the toggles but cannot flip them.
Categories
The admin UI groups flags into the following categories (rendered in this order):
systemplatformwidgetfeatureintegrationbot_moduleautomationcopyright_providerevent
Flag Reference
system category
System flags are admin-scope, user-scope flags that apply to the platform as a whole rather than to individual accounts.
| Key | Label | Description |
|---|---|---|
system:account_creation | Account Creation | Controls whether users may create new streaming accounts. When disabled globally, all users are blocked from creating accounts. Per-user overrides (see Users) can grant or deny individual users regardless of the global setting. |
system:copyright_public_directory | Public Copyright Directory | Kill-switch for the unauthenticated /music surface on the marketing site (landing page, song browser, playlists, detail pages, reports). When off, the /music link disappears from header + footer and every page under /music/* returns 404. Account-level copyright detection (feature:copyright_detection) is unaffected. |
system:copyright_public_quick_check | Public Copyright Quick Check | Narrower kill-switch for just the inline paste-a-URL quick-check widget on /music. The rest of the directory stays live when this is off. Typically used for rollout or to shed API load. |
feature category
Feature flags gate individual dashboard pages and major feature areas.
| Key | Label | Description |
|---|---|---|
feature:bots | Bots | Bot Control dashboard page |
feature:bot_modules | Bot Modules | Bot Modules configuration page |
feature:bot_commands | Bot Commands | Bot Commands management page |
feature:music | Music | Music feature (player page + popout, Spotify polling worker, track events, REST/GraphQL controls). Gates the entire music stack. The overlay widget and the {song} bot variable are gated separately by widget:spotify_now_playing. |
feature:connections | Connections | Connections page umbrella — disabling hides the entire Connections section |
feature:streamelements | StreamElements | StreamElements tip ingestion (replaces the former integration:streamelements key) |
feature:obs_remote | OBS Remote | OBS WebSocket remote control feature — gates the OBS integration dashboard page and all OBS config endpoints |
feature:advanced_overlays | Advanced Overlays | Advanced overlay builder features (e.g. multi-plan-only widget library, custom CSS). Paid-tier unlock: disabled on Free by default. |
feature:custom_bot | Custom Bot Account | Allows the account to register a custom bot identity per platform instead of using the shared Lumio bot. Paid-tier unlock: disabled on Free by default. |
widget category
Widget flags gate overlay widgets that render inside a broadcast overlay.
| Key | Label | Description |
|---|---|---|
widget:obs_browser_source | OBS Browser Source | OBS Browser Source widget — overlay element that renders in OBS via browser source (renamed from a former integration: key) |
widget:spotify_now_playing | Spotify Now Playing | Gates the Spotify Now Playing overlay widget and the {song} chat-bot variable (both surfaces that embed "now playing" data in a broadcast). Does not gate the music player, popout, worker, or API controls — those live behind feature:music. |
integration category
Integration flags gate third-party tool integrations displayed in the Connections integrations modal.
| Key | Label | Description |
|---|---|---|
integration:shopify | Shopify | Shopify e-commerce integration (renamed from platform:shopify; not a streaming platform) |
integration:obs_websocket | OBS WebSocket | OBS WebSocket integration entry in the integrations modal — must be enabled for users to save or delete OBS connection settings |
Flag Taxonomy Rules
Use the correct category when adding new flags:
| Category | Use for |
|---|---|
feature:* | Dashboard pages and major feature areas |
widget:* | Overlay widgets only (things that render inside a broadcast overlay) |
integration:* | Third-party integrations in the integrations modal |
platform:{x} / platform:{x}:{type} | Streaming platforms (Twitch, YouTube, Kick, Trovo, Discord) — master switch + login/channel/bot sub-flags |
system:* | Admin-scope system switches with user-scope resolution (e.g., system:account_creation) |
bot_module:* | Individual bot moderation modules (link protection, spam protection, etc.) |
Resolution Chain
Flag resolution differs by scope:
Account-scope flags (feature:*, widget:*, integration:*, platform:*, bot_module:*):
GLOBAL_OFF— the flag is disabled globally (admin kill-switch). Stops here.PLAN_LOCKED— the flag requires a plan the account does not have.ACCOUNT_OVERRIDE— an explicit per-account override set by an admin.- Enabled (no reason set).
User-scope flags (system:account_creation):
USER_OVERRIDE— the user has an explicit per-user override (allowordeny). Stops here.GLOBAL_OFF— the global flag is disabled. Stops here.- Enabled (no reason set).
The reason field on FeatureStatus reflects the first layer that returned enabled=false. When a flag is enabled the reason field is null.
Permissions
feature-flags:read— view the flag listfeature-flags:edit— toggle flags
The dashboard entry itself is gated on admin:access. System admins (is_system: true) implicitly receive all admin permissions.