Publish Your Widgets
Share your widgets with the Dash community. Follow the steps below to publish your widget package to the registry.
Create a new widget project
The quickest way to get started is with the create-project script. It creates a GitHub repo from the Dash template, configures your package, installs dependencies, and optionally scaffolds your first widget — all in one command.
npm run create-project -- my-widgets MyWidgetRequires gh CLI installed and authenticated. The widget name is optional — you can scaffold widgets later in step 2.
Or create the repo manually
gh repo create my-widgets --template trops/dash-electron --public --cloneBuild your widgets
Use the widgetize script to scaffold new widgets, then develop and test them locally. If you already scaffolded a widget in step 1, skip straight to npm run dev.
npm run setupnode scripts/widgetize MyWidgetnpm run devPublish to the registry
Run the publish script — it builds a release, uploads the ZIP, generates a manifest, and opens a PR to the registry, all in one command.
npm run publish-to-registrynpm run publish-to-registry -- --name my-widgetsRequires gh CLI installed and authenticated. Your scope is auto-detected from gh. Use --dry-run to preview the manifest without opening a PR.
Done!
Once your PR is merged, your widgets will appear in the Dash app's Discover tab for all users to install.
Manifest Reference
The manifest.json file describes your package and its widgets. The publish script generates this automatically, but you can also create it manually.
{
"name": "my-widgets",
"scope": "yourname",
"displayName": "My Widgets",
"author": "Your Name",
"description": "A collection of useful widgets",
"version": "1.0.0",
"category": "utilities",
"tags": ["example", "demo"],
"downloadUrl": "https://github.com/you/my-widgets/releases/download/v{version}/my-widgets-v{version}.zip",
"repository": "https://github.com/you/my-widgets",
"widgets": [
{
"name": "MyWidget",
"displayName": "My Widget",
"description": "Does something useful",
"icon": "sun",
"providers": [
{ "type": "api-name", "required": true }
]
}
]
}Field Reference
| Field | Required | Description |
|---|---|---|
| name | Yes | Unique package identifier (kebab-case) |
| scope | Yes | GitHub username (lowercase) |
| displayName | Yes | Human-readable package name |
| version | Yes | Semver version string |
| downloadUrl | Yes | URL to ZIP file. Supports {version} and {name} placeholders. |
| widgets | Yes | Array of widget definitions |
| author | No | Package author name |
| category | No | Category for filtering (e.g., utilities, productivity, development) |
| tags | No | Array of search tags |
| repository | No | GitHub repository URL |