Overview
Developer Mode lets you load extensions from your local filesystem while building them, without needing to publish to GitHub first. This is the fastest way to iterate on integration, plugin, or widget development.Setup
Add your local extension paths toradarboard.config.ts:
radarboard.config.ts
How it works
radarboard.config.tsdeclaresdevExtensions— an array of{ type, path }entries pointing to local directoriespnpm generate:extensionsreads the config and producesdev-extensions-init.tswhich imports each local extension and registers it at startup- Providers.tsx calls
initializeDevExtensions()on mount, which registers each extension with the appropriate registry (integration, plugin, or widget) - Production safety:
initializeDevExtensions()is a no-op whenNODE_ENV === "production", so dev extensions never leak into production builds
Path resolution
Paths can be:- Relative — resolved from the monorepo root (e.g.,
../my-extension/integrations/notion) - Absolute — used as-is (e.g.,
/Users/me/projects/my-widget)
package.json with the correct @radarboard/* package name and export map.
Extension descriptor discovery
Each dev extension module is expected to export a descriptor. The loader tries these patterns in order:module.descriptor— a nameddescriptorexportmodule.default— a default export- First value in the module that has both
idandnameproperties
Workflow
A typical development workflow looks like:Iterate
Edit your extension code. The Next.js dev server will hot-reload changes automatically since the paths are resolved at build time.
Widget Sandbox
While developing widgets, use the Widget Sandbox at/debug/widget-sandbox to preview your widget in all possible states:
- Happy — fully loaded with mock data
- Empty — loaded but no data
- Loading — spinner/skeleton state
- Error — connection failure state
WidgetTemplateConfig sections, so you can see your widget render without setting up real integrations.
Limitations
- Dev extensions are not included in
pnpm installdependency resolution — they must manage their ownnode_modulesor rely on hoisted dependencies - Changes to the extension’s
package.jsonor export map require re-runningpnpm generate:extensions - Dev extensions don’t appear in the Settings UI extension list (they’re loaded directly via code)