Frontend API¶
Your frontend module must export a setup(ctx) function. It receives a SpindleFrontendContext for host DOM rendering, events, backend communication, and opt-in sandbox frames.
import type { SpindleFrontendContext } from 'lumiverse-spindle-types'
export function setup(ctx: SpindleFrontendContext) {
// Your initialization code here
// Return a cleanup function (optional)
return () => {
ctx.dom.cleanup()
}
}
Alternatively, export a teardown() function:
export function setup(ctx: SpindleFrontendContext) {
// init
}
export function teardown() {
// cleanup
}
API Surface¶
Frontend UI can follow two supported rendering paths:
- direct host rendering through
ctx.dom.*andctx.ui.* - isolated iframe rendering through
ctx.dom.createSandboxFrame(...)andctx.messages.renderWidget(...)
| Category | Permission | Description |
|---|---|---|
| DOM Helper | Free | Inject sanitized HTML/CSS in the host DOM and create host-managed sandbox frames |
| UI Event Helpers | Free | Keyboard/Drawer/Settings state and DOM Action delegation |
| HTML Islands | Free | Auto-isolation of styled HTML in messages, and how to opt out |
| Events | Free | Subscribe to WebSocket events, emit custom events |
| UI Placement | Varies | Drawer tabs, float widgets, dock panels, modals, context menus, input bar actions |
| Backend Communication | Free | Send/receive messages to/from backend worker |
| Frontend Process Lifecycle | Free | Register backend-spawned frontend process handlers |
| Message Tags | Free | Intercept custom XML tags in chat messages |
| File Uploads | Free | Open file picker and read selected files |