Configuration reference
ExtForge reads its configuration from extforge.config.ts (or .js/.mjs) at the project root. The schema is permissive: unknown top-level keys produce a warning, not an error.
Merging behavior
Section titled “Merging behavior”Defaults and user values are deep-merged for plain-object keys (e.g. dev, build). A partial override like dev: { port: 9000 } keeps host: 'localhost', debounce: 150, and open: false from the defaults rather than dropping them. Arrays (browsers, plugins) and primitives are replaced wholesale.
Config validation failures are hard errors by default. Set EXTFORGE_STRICT_CONFIG=0 to downgrade them to warnings while migrating.
Top-level keys
Section titled “Top-level keys”| Key | Type | Description |
|---|---|---|
root |
string |
Override the project root. Defaults to the directory extforge is invoked from. |
browsers |
Array<'chrome' | 'firefox' | 'edge' | 'safari'> |
Browsers to build for. ExtForge generates a per-browser manifest into dist/<browser>/. |
manifest |
unknown |
The MV3 manifest, ExtForge-flavored. Browser-specific quirks are handled automatically. |
build |
object |
|
dev |
object |
|
framework |
'react' | 'vanilla' |
UI framework. Drives auto-injection of first-party plugins (e.g., presetReact() when set to react). |
css |
'tailwind' | 'vanilla' | 'none' | object |
CSS strategy: a built-in preset ('tailwind', 'vanilla', 'none') or a custom processor object ({ name, transform } or { name, command, args }). See the Styling guide. |
plugins |
Array<unknown> |
List of ExtForge plugins. Both the V1 shape and the legacy thin shape are accepted. |