Skip to main content

lumio init

Create a new extension project. Runs an interactive wizard that registers the extension with Lumio (generating an Extension-ID), scaffolds the project files, and writes lumio.config.json.

Usage

lumio init [project-name]

Example

lumio init my-scoreboard

If project-name is omitted, the wizard asks for it.

Interactive wizard

The wizard asks:

? Extension name: My Scoreboard
? Description: Display live sports scores on your stream overlay
? Category:
widget
extension
overlay
bot_module
integration
theme
? Template:
Blank
Widget (editor + layer)
Full-Stack Widget (editor + layer + server functions)
Interactive Game (editor + layer + interactive + server)
Bot Module (editor + server)
Integration (editor + server)
Theme (layer only)
? Targets: (check all that apply)
[x] editor
[x] layer
[ ] interactive
? Enable server functions: No
? Initial visibility: private

After completing the wizard:

  1. The extension is registered with Lumio (creates the extension record, generates a UUID Extension-ID)
  2. A project directory is created with the scaffolded files
  3. lumio.config.json is written with the extensionId from Lumio
  4. Dependencies are listed in package.json (not installed automatically — run pnpm install)

Templates

TemplateFiles createdTargetsServer
Blankeditor.tsx (or as selected)Chosen in wizardNo
Widgeteditor.tsx, layer.tsxeditor, layerNo
Full-Stack Widgeteditor.tsx, layer.tsx, server/schema.ts, server/functions.tseditor, layerYes
Interactive GameAll four entry files + servereditor, layer, interactiveYes
Bot Moduleeditor.tsx, server fileseditorYes
Integrationeditor.tsx, server fileseditorYes
Themelayer.tsxlayerNo

Generated files

my-scoreboard/
├── lumio.config.json <- Extension manifest
├── package.json <- @zaflun/lumio-sdk + react dependencies
├── tsconfig.json <- TypeScript config
└── src/
├── editor.tsx <- Editor surface entry
└── layer.tsx <- Layer surface entry

For templates with server functions, also:

my-scoreboard/
└── server/
├── schema.ts <- defineSchema + defineTable
└── functions.ts <- queryRows / action exports

Options

FlagDescription
--template <name>Skip template selection, use named template
--no-installSkip prompting (non-interactive mode, for scripting)