Publish Your Widgets

Share your widgets with the Dash community. Follow the steps below to publish your widget package to the registry.

1

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.

# from the dash-registry directory
npm run create-project -- my-widgets MyWidget

Requires 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 --clone
2

Build 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 setup
node scripts/widgetize MyWidget
npm run dev
3

Publish 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-registry
# or specify a custom package name
npm run publish-to-registry -- --name my-widgets

Requires gh CLI installed and authenticated. Your scope is auto-detected from gh. Use --dry-run to preview the manifest without opening a PR.

4

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

FieldRequiredDescription
nameYesUnique package identifier (kebab-case)
scopeYesGitHub username (lowercase)
displayNameYesHuman-readable package name
versionYesSemver version string
downloadUrlYesURL to ZIP file. Supports {version} and {name} placeholders.
widgetsYesArray of widget definitions
authorNoPackage author name
categoryNoCategory for filtering (e.g., utilities, productivity, development)
tagsNoArray of search tags
repositoryNoGitHub repository URL