Extensions
Extensions add features to Lumio accounts: widgets for overlays, bot modules for chat moderation, automation nodes, themes, and integrations. They are discovered and installed from the Extension Store.
Visibility levels
| Visibility | Description |
|---|---|
system | Built-in extensions maintained by Lumio. Always available, cannot be uninstalled. |
public | Community extensions published by verified developers. Anyone can install them. |
paid | Community extensions with a price. Purchase required to install. |
unlisted | Not shown in Store search. Installable via direct link. |
private | Only accessible by the developer or accounts with explicit access grants. |
System extensions
System extensions replace the former built-in plugin system. They provide the same functionality (chat moderation modules, overlay widgets) but run through the standard extension infrastructure (V8 isolates, Extension Supervisor iframes).
Built-in widgets
| Extension | Slug | Default Install | Description |
|---|---|---|---|
| Chat Box | system-chat-box | Yes | Live chat feed from connected platforms |
| Alert Box | system-alert-box | Yes | Animated alerts for follows, subs, raids |
| Event List | system-event-list | Yes | Scrolling list of recent events |
| Text | system-text | Yes | Labels, titles, and text overlays |
| Image | system-image | Yes | Upload or URL-based image overlays |
| Timer | system-timer | Yes | Countdown / stopwatch timer |
| Spotify Now Playing | system-spotify-now-playing | No | Displays the currently playing Spotify track |
| Browser Source | system-obs-browser-source | No | Headless OBS integration events |
Built-in bot modules
| Extension | Slug | Default Install | Description |
|---|---|---|---|
| Link Protection | system-link-protection | Yes | Block or filter URLs in chat |
| Spam Protection | system-spam-protection | Yes | Detect excessive caps, symbols, emote spam |
| Word Filter | system-word-filter | Yes | Block banned words, phrases, or regex patterns |
| Timed Messages | system-timed-messages | Yes | Send messages on a rotating schedule |
Properties
visibility = 'system'- No developer or team owner (
developer_idandteam_idare NULL) - Always free (
pricing_type = 'free') - Cannot be uninstalled (can be disabled via config)
- Cannot be deleted by users or developers
- 10 of 12 are auto-installed for new accounts on creation
lumio.config.jsonis the single source of truth — the API reads each manifest at compile time viainclude_str!(no hardcoded Rust structs)- All manifests include an
iconfield (Lucide icon name) - In local dev, bundles are uploaded from the filesystem; in production, deployed via CI (
lumio deploy --system)
Config schema
The config_schema field in lumio.config.json defines user-facing settings. The SchemaEditor component auto-generates a settings panel from this schema. 17 field types are supported:
| Type | Description |
|---|---|
string | Single-line text input |
number | Numeric input |
boolean | Toggle switch |
color | Color picker with hex input |
select | Dropdown with predefined options |
textarea | Multi-line text input |
slider | Range slider with min/max/step |
font | Font family picker (Google Fonts catalog) |
icon | Icon picker (Lucide, emoji, emotes, uploads) |
image | Image upload or URL |
sound | Sound file upload or URL |
multiselect | Multiple selection from options |
group | Collapsible group of nested fields |
divider | Visual separator |
info | Read-only informational text |
channel | Multi-platform channel picker |
designer | Fullpage designer surface field |
Field properties
| Property | Applies to | Description |
|---|---|---|
label | All | Display label |
default | All value types | Default value |
required | All value types | Validation requirement |
min / max / step | slider, number | Numeric range constraints |
placeholder | string, textarea | Input placeholder text |
rows | textarea | Number of visible rows |
unit | slider | Unit suffix (e.g. "px", "ms") |
collapsed | group | Start collapsed |
visible_when | All | Conditional visibility based on other field values |
fields | group | Nested child field definitions |
content | info | Informational text content |
options | select, multiselect | Available options array |
multiple | multiselect | Allow multiple selections |
presets | designer | Predefined preset configurations |
A separate designer_schema array in lumio.config.json defines fields for the fullpage designer surface.
Server-side validation
Config values are validated against the config_schema before writing to extension_installs.config. Validates type match, required fields, select options, color hex format, slider range bounds, and rejects unknown keys. Both GraphQL and REST enforce validation.
Widget editor
Two rendering paths produce the same @lumio/ui components:
- config_schema -- The host-side
SchemaEditorcomponent auto-generates form fields directly from the schema definition - editor.tsx -- SDK Editor Components (EditorInput, EditorTextarea, EditorSelect, EditorCheckbox, EditorSlider, EditorColorPicker, EditorGroup, EditorLabel, EditorDivider, EditorInfo, EditorFontRow, EditorButton) serialize via the Worker Reconciler and render as
@lumio/uion the host
Extensions can use config_schema only, editor.tsx only, or both (schema fields render first, custom editor below).
Advanced settings
The AdvancedSettings panel provides:
- Layout: Width, height, rotation, optional X/Y positioning
- Appearance: Opacity
- Corner Radius: Linked (all corners) or individual per-corner control
- Effects: Text shadow, layer blur, background blur
- Strokes: Border styling
- Custom CSS: Fullpage Monaco Editor modal
Extension designer
The ExtensionDesigner is a fullpage overlay with a split pane (preview + settings). It supports both designer_schema (host-side form from lumio.config.json) and designer.tsx (Worker pipeline via SDK Editor Components).
Font proxy
DSGVO-compliant font serving through Lumio infrastructure. No browser requests go to Google.
| Endpoint | Description |
|---|---|
GET /v1/fonts/\{family\}/css | CSS stylesheet with @font-face rules pointing to self-hosted woff2 URLs |
GET /v1/fonts/\{family\}/\{weight\}.woff2 | Proxied font file, cached via lo-storage |
Both endpoints are public scope (no auth required) with immutable cache headers.
Store integration
System extensions appear in the Store alongside community extensions:
- Category filter: Top-3 category chips (All, Built-in, Widgets) plus a "More" dropdown for remaining categories. Sort by Popular, Recent, or Top Rated.
- Built-in filter: A dedicated "Built-in" category shows all system extensions across categories, sorted before community extensions.
- Installed badge: Each card shows a green corner check-mark when the extension is already installed on the current account.
- Detail page: Shows "Built-in by Lumio" instead of a developer panel, with category badge, Lucide icon, and install/uninstall actions.
- Pagination: Load More button fetches the next 20 results.
- Install: Normal install flow. System extensions cannot be uninstalled.
Discovery API
| Endpoint | Description |
|---|---|
GET /v1/extensions?visibility=system&category=widget | List system widget extensions |
GET /v1/extensions?visibility=system&category=bot_module | List system bot module extensions |
GET /v1/platforms/metadata | Static platform info (replaced /v1/plugins?type=platforms) |
platformMetadata (GraphQL) | Same as REST, public query |