Appearance
Are you an LLM? You can read better optimized documentation at /docs/custom-widgets/v2.md for this page in Markdown format
Overview
Extensions let you customize your community from code. You declare widgets, scripts, and stylesheets in a single registry file in your Git repository, push to your watched branch, and the platform publishes everything automatically.
The Three Extension Types
You can publish any combination of the three types — one, two, or all three. They share the same registry file, the same publishing pipeline, and the same page-targeting rules.
| Type | What it is | Scope | When to use |
|---|---|---|---|
| Widgets | Interactive components placed on pages via the No-Code Builder | One placed instance per page zone | Build tailored UI — forms, dashboards, dynamic content |
| Scripts | Global JavaScript injected into the page | Every matching page | Analytics, tracking, shared utilities |
| Stylesheets | Global CSS injected into the page | Every matching page | Sitewide theming, fonts, design tokens |
The Registry File
Every extension you publish is declared in a single file at the root of your repository: extensions_registry.json. The file has three top-level arrays — one per extension type — and each array is optional.
A registry with only scripts publishes no widgets. A registry with only widgets publishes no scripts or stylesheets. You build only what you need.
See Registry Reference for the root object specification.
How It Works
- Connect — Link your GitHub organization to the platform.
- Configure — Select which repositories and branches to watch.
- Push — Commit changes to your watched branch.
- Publish — Extensions update within seconds.
For publishing details, see Build & Publish and Repository & Branch Settings.
Why Extensions
| For Developers | For Teams |
|---|---|
| Version control for every change | No manual uploads |
| Pull requests and code review | Instant deployments |
| Branch-based environments | Audit trail via commits |
| Familiar Git workflow | Rollback via Git |
Start Here
Pick the extension you want to build — each type has its own hands-on tutorial:
| You want to build... | Start with |
|---|---|
| A custom interactive component | Your First Widget |
| A global script | Your First Script |
| A global stylesheet | Your First Stylesheet |
New to the platform entirely? Connect Your GitHub Account first, then return here.
Branch-Based Environments
Each repository watches one branch at a time per community. Use separate communities to run multiple environments (dev, staging, production) — each watching its own branch.
See Repository & Branch Settings and Preview and Promote.
Requirements
- GitHub account with repository access
- Platform access with Sources permissions
- Repository containing
extensions_registry.jsonat the root
Limitations
- One watched branch per repository per community — use a separate community to watch a different branch without affecting your existing setup.
- Extension names must be unique across your community (widget
type, scriptname, stylesheetname).
Security
- Read-only access, scoped to repositories you explicitly grant.
- Extension code is scanned for security issues before publishing.
- Security headers (CSP, X-Content-Type-Options, Referrer-Policy) added to every widget response.
See Content Security for details.
Next Steps
- Your First Widget — hands-on widget tutorial
- Your First Script — hands-on script tutorial
- Your First Stylesheet — hands-on stylesheet tutorial
- Registry Reference — the
extensions_registry.jsonroot object

