Submitting to the Community Registry
Community listings go to studiobrain-community (the repo is still named studiobrain-community-plugins). That repo is one public registry with two indexes:
| Index | What you add | What users get |
|---|---|---|
plugins/index.json | WIT Component plugins (plus panels) | Desktop/mobile run the Component. Cloud shows panels and/or calls your backend. |
catalog/index.json | Templates, rules, skills, layouts, packs, providers, abilities, flows, canvas | Files copied into the project. No Worker. |
Do not PR community plugins or community data into studiobrain-templates. That repo is official data only.
Marketplace is the only store UI. CatalogSync does not already merge these indexes into the official catalog.
Where does it run?
| Kind | Desktop | Mobile | Cloud |
|---|---|---|---|
| Official universal | Component (Cranelift) | Same Component (Pulley) | Official Worker at our deploy. Panels all surfaces. |
| Official desktop-only | Component + network:local + environments: ["desktop"] | — | — |
| Community plugin | Component | Same Component | Panel iframe and/or your backend. Never a Worker on BiloxiStudios Cloudflare. |
| Any data kind | Files in the project | Files in the project | Files in the project. No Worker. |
Community plugins are never compiled or loaded as Workers on the BiloxiStudios Cloudflare account. Do not submit a Worker script and expect us to deploy it. Do not require WebAssembly.compile of your .wasm in our isolate. WASI-on-Workers is not the StudioBrain WIT world.
Plugin index requirements
Runtime: WIT Component + panels
- Ship a StudioBrain WIT Component (
plugin.wasm) for desktop and mobile (wasmtime Cranelift / Pulley). - Ship panels as static HTML/JS. Those are what cloud users see inside StudioBrain.
- If you need a server on cloud, host it yourself and document the URL. We will not run it.
- Native Python / Lua /
backend/routes.pyis rejected.
Desktop-only community plugins are allowed (Component, no cloud Worker to begin with). They appear on desktop/mobile Marketplace, not as a cloud Worker. Cloud may still show panels if you include them.
network:local is rejected unless the listing is desktop-only (environments: ["desktop"]). Cloud never grants it.
plugin.json
| Field | Required | Notes |
|---|---|---|
id | Yes | Globally unique. Check both indexes. |
name | Yes | Display name. |
trust_tier | Yes | Must be community. |
version | Yes | Semver. |
description | Yes | 10–200 characters. |
author | Yes | Matches your GitHub user or org. |
license | Yes | Open-source SPDX (MIT, Apache-2.0, …). |
capabilities.backend.entry | Yes for guests | Path to the Component. |
permissions / host functions | Yes | Declare what you call. |
http_domains | If you use HTTP | Required when http_request is declared. |
Do not require a cloud Worker platform. Cloud community is panels / author backend.
No secrets
No hardcoded API keys or tokens. Use settings for user-provided credentials.
Size limits
| Artifact | Limit |
|---|---|
Component .wasm | 10 MB |
| Whole plugin (panels, assets) | 25 MB |
| Each panel HTML | 500 KB |
Trust tier
| Tier | Signed? | Where it lives |
|---|---|---|
first_party / trusted_vendor / partner | Yes | studiobrain-plugins |
community | No | This registry’s plugins index |
Community listings have no Verified badge. Users always see consent. Partner / vendor promotion is a separate program (partners@studiobrain.ai) and still does not turn community WASM into a Worker on our account.
Submit a plugin
1. Fork the registry
Fork studiobrain-community-plugins (studiobrain-community).
2. Add a plugins index entry
{
"id": "my-plugin",
"name": "My Plugin",
"version": "1.0.0",
"description": "Does something useful with entities",
"author": "your-github-username",
"license": "MIT",
"repository": "https://github.com/you/studiobrain-my-plugin",
"download_url": "https://github.com/you/studiobrain-my-plugin/releases/download/v1.0.0/my-plugin.zip",
"icon": "Puzzle",
"category": "development",
"surfaces": ["desktop", "mobile", "cloud-panel"],
"min_studiobrain_version": "2026.8",
"featured": false
}| Field | Description |
|---|---|
id / name / version | Must match plugin.json. |
repository | Public source. |
download_url | HTTPS zip of the built plugin (Component + panels + manifest). |
category | creative, export, integration, project-management, development, ai, field-widget. |
surfaces | Which Marketplace surfaces show it. cloud-panel means iframe / author backend, not our Worker. |
featured | Always false unless we set it. |
3. Release the zip
cargo component build --release
# copy Component → plugin.wasm
zip -r my-plugin.zip plugin.json plugin.wasm frontend/ assets/ README.mdUpload the zip as a GitHub Release asset. Use that URL as download_url.
4. Open the PR
PR against main. Describe the plugin and link the release. CI re-runs on each push.
Submit catalog data
Add a row to catalog/index.json (templates, rules, skills, layouts, packs, providers, abilities, flows, canvas). That CONTRIBUTING section is separate from Submit a plugin. The payload is files users copy into a project. There is no Worker and no Component.
Official data still goes to studiobrain-templates only. Community data stays on this registry.
CI
Typical checks:
- Index schema, unique
id, semver, allowed category. download_urlis reachable HTTPS.- Archive has
plugin.jsonand, for plugin listings, a Component at the declared entry. - No
backend/*.py/*.luaguests. - Size limits.
- Manifest
id/name/versionmatch the index. - No
network:localon community. - Catalog-data entries do not include a Worker or a
.wasmguest.
Review
Automated CI is enough to merge a listing. Featured status is a later, optional human review (does what it says, no obvious abuse, theme-compliant panels, README).
After merge, Marketplace can show the community row. That is not CatalogSync merging community into official templates.
Updates and removal
- New version: new GitHub Release + PR that bumps
versionanddownload_url. - Installed projects may show Update available.
- Removal: PR that deletes your index row. Already-installed project copies stay until the user uninstalls.
Best practices
- IDs like
acme-notesbeatmy-plugin. - Keep the Component small (
wasm-opt). - Document that cloud will not run a Biloxi Worker.
- Document settings (where to get API keys).
- Semver for breaking changes.
- Screenshots of panels.