Skip to main content
nanoforge.manifest.json sits at the root of the plugin’s source folder. The build copies it into dist/ and adds the build field. The JSON schema is packages/kernel/schemas/plugin.schema.json in the editor repository ($schema gives completion in most editors).

Identity

Compatibility

Entries

Paths relative to the built folder. A plugin that only contributes from its manifest (a theme, icons) has no entry. Any other key is refused: a typo (clinet) keeps the plugin from loading, and the error names the key.

Activation

activation lists the events that load the plugin’s code. Default: ["onStartup"]. Prefer onWidget and onCommand: a plugin loaded at startup delays the others.

Contributions

Everything under contributes is applied when the manifest is read, before the plugin’s code loads.

commands

The code registers the handler with context.registerCommand(id, handler).

widgets

Panels (docks) and screens. The code gives the widget its view with the WIDGET_VIEWS extension point. See widgets and styles.

keybindings

  • Write Mod for Ctrl (Cmd on macOS). Two strokes separated by a space make a chord: Mod+K Mod+S. A modifier twice is a double tap: Shift Shift.
  • These are defaults: users change them in Settings › Keyboard shortcuts.
  • Don’t bind a single stroke that starts an existing chord, and don’t give a default shortcut to an action that publishes or deletes.

keymapPresets

A named set of shortcuts users can choose in Settings › Keyboard shortcuts.
A binding with "remove": true cancels a default shortcut.

settings

The key is prefixed with the plugin’s name: @acme/counter.step. See settings for types and scopes.

themes

A color theme: id, label, and either extends (another theme’s id) with the colors it changes, or kind (dark or light) with every color. Also syntax (code colors) and tokens (fonts and corners). See make a theme.

icons, iconThemes

Icons as SVG files of the plugin, by name, and icon themes that replace the editor’s icons and give file and folder icons. See make a theme.

tours

A guided tour: steps shown one at a time over the editor, each pointing at a control found by its role and accessible name (the way tests find it), optionally inside a panel.
A step shows only while its when holds, and goes on by itself once advanceWhen holds or the key of advanceWhenChanged changes. "exact": false on a target matches a name that only starts with name (a tree row says more than its label). The command tour.start with the tour’s id starts it.

documentEditors

Opens files matching a glob with one of your widgets instead of the code editor.

itemOwner

For plugins that describe items of the game’s code (components, systems…): schema (the version of the data it writes) and tags (the TSDoc tags it owns). See code and code generation.

When clauses

A when is an expression over context keys.
Operators: !, &&, ||, ==, !=, =~ (regular expression), in, and parentheses. A bare word on the right of == is a string. A plugin sets its own keys with context.contextKeys.set(key, value).