Plugin authoring & packaging

What a plugin folder contains, how it is packaged, and where the desktop loads it from.

What you ship

A plugin is a folder (or a ZIP of that folder) with:

  • manifest.json at the root (same level as your dist/ folder). See the Manifest reference.
  • A built entry file (for example dist/index.js, ESM) referenced by manifest.json. Bundle your src/index.ts (and any dependencies) into that single file — plugins cannot require/import third-party packages at runtime.
com.example.hello/                 com.example.hello-1.0.0.zip
├── manifest.json                  ├── manifest.json
└── dist/                          └── dist/
    └── index.js                       └── index.js

How it loads

  • Marketplace install (operators): the desktop downloads the ZIP, extracts it, reads manifest.json from the extract root, then loads entry.
  • Where it lives: installed plugins are discovered under %APPDATA%/BodegaSuite/plugins/<id>/. The repo's packages/plugin-* and plugins/ directories are source/mirror only — not loaded.
  • For testing your own build before publishing, see Local testing & troubleshooting.

Where to go next

  1. Developer quickstart — scaffold, build, sideload, publish
  2. Plugin lifecycle — the activate/deactivate contract
  3. BodegaAPI reference — the full mediated API
  4. UI contributions — navbar buttons & theme switching
  5. Publishing to the marketplace — ZIP, checklist, install

Deeper reference (monorepo)

Maintainers also keep docs/03-technology/07-plugin-author-guide.md and docs/harness/plugin-system.md in the Git repository, and the canonical manifest contract lives in packages/schemas/src/plugin-manifest.ts.