Start from a template
Use the Level 0 Rust + React template when building a full module plugin.
HaloForge plugins add new modules, panels, slots, assistants, backend services, and workflow capabilities to the desktop app.
The important rule is simple: build against the public plugin API and SDK, not against HaloForge internals. A plugin should continue to work when HaloForge switches between Community Cloud, Enterprise Server, or a future desktop runtime.
Start from a template
Use the Level 0 Rust + React template when building a full module plugin.
Use public SDK hooks
Read host state, theme tokens, AI transport, file dialogs, and managed services through @haloforge/plugin-sdk.
Package consistently
Validate and package with @haloforge/plugin-pack, then install locally with hf plugin install local.
| Level | Surface | Typical use |
|---|---|---|
| 0 | Top-level module | A full workspace such as Image Studio or Switchboard |
| 1 | Feature panel inside a module | A Git tab inside DevKit |
| 2 | UI slot injection | Toolbar buttons or message actions |
| 3 | Assistant registration | A named AI assistant with its own prompt and optional UI |
| 4 | Headless backend service | Workflow step types, native tool integration, or plugin-to-plugin services |
Choose the smallest level that matches the product surface. A plugin that only adds one toolbar action should not register a full module.
my-plugin/ manifest.json backend/ Cargo.toml src/lib.rs app/ package.json src/index.tsx src/Panel.tsx src/styles.css assets/ dist/The official template lives in haloforge-plugin-api/templates/level0-rust-react.
Copy the Level 0 template.
cp -R /path/to/haloforge-plugin-api/templates/level0-rust-react my-pluginRename the plugin ID, package names, crate names, module label, and command names.
Build the frontend and backend.
cd appnpm installnpm run typechecknpm run build
cd ../backendcargo checkValidate and package.
cd ..npx @haloforge/plugin-pack check .npx @haloforge/plugin-pack pack . --out dist/packageInstall locally.
cd /path/to/HaloForgenpm run hf -- plugin install local /path/to/my-plugin/dist/package/dev.example.my-plugin-0.1.0.hfpkg --json@haloforge/plugin-sdk for all host integration.haloforge-plugin-api for Rust backend code.@haloforge/plugin-pack for validation and packaging.AppSelect instead of raw controls when the SDK has a matching component.Do not:
window.__HF_HOSTplugin_invoke wire command namesbody, html, or global selectors from plugin CSS