Create a New Extension
First, log in to your Vision account:Project Structure
src/ file is an independent entry point. You only need to include the targets your extension uses. The server/ directory is created when you opt into server functions during vision init.
Fonts
You can preload Google Fonts for the extension viavision.config.json:
public/ and register them with localFont:
localFont accepts paths like /fonts/MyFont.woff2 (recommended) and also
normalizes ./public/fonts/MyFont.woff2 to the same output path.
When you run vision dev or build for upload, files from public/ are copied to
dist/ automatically, so local fonts are shipped with your extension.
Write Your First Extension
Here’s a minimal extension with a settings panel and an OBS overlay:Editor Panel — src/admin.tsx
The settings UI streamers see in the overlay editor.
OBS Layer — src/layer.tsx
What viewers see on stream. Input components like toggles and text fields render as display-only here.
Interactive Page — src/interactive.tsx (optional)
A dedicated full-screen page for active participants and control workflows. All components are fully interactive here, just like the editor panel.
Interactive pages are not intended as high-scale public viewer pages. Do not
use them as a replacement for a general web app serving thousands of
concurrent stream viewers.
Every entry point must call
Vision.render() within 10 seconds of loading, or
the extension will be terminated.Build
dist/admin.js, dist/layer.js, etc.
React and
@1upvision/sdk are provided by the Vision runtime — they’re not
bundled into your extension. Your output stays small.Upload and Test
1
Create the extension
In Vision, go to Extensions > My Extensions > Create Extension and select Vision SDK as the type.
2
Create a version
Click Create Version and enter a version number (e.g.,
1.0.0).3
Upload your build
Upload your
dist/ folder as a zip file.4
Add to an overlay
Open an overlay in the editor, add a layer, and select your extension. Your settings panel should appear.
Local Development
Usevision dev for the fastest workflow. It watches your project, rebuilds on change, and pushes everything (client bundles, server bundles, and schema) automatically:
https://localhost:3000 in the extension settings. Changes to your build are picked up on reload.
Testing Server Functions
During development, you can invoke server functions directly from the terminal:Agent Skill (Optional)
If you use coding agents, install the Vision Extensions skill so they have SDK-specific guidance:Next Steps
Server Functions
Add a backend with database, auth, and external APIs
Components
All available UI components and how to use them
Hooks
Storage, context, and real-time sync