When the framework evolves, the plugins evolve in the same commit. Because each plugin rides inside its npm package, there is no separate plugin repo to bump — you edit the skill, bump the package, publish, done.
Where everything lives
Inside the bjsm monorepo:
The catalog is published separately at BabylonJSMarket/claude-plugins:
When the framework adds a hook or method
Edit packages/ecs/skills/ecs-authoring/SKILL.md. Find the relevant class section and add the new method with its real signature, citing the source file. If the new method makes an old approach obsolete, move the old approach into the anti-pattern list with the replacement.
Bump the version in:
packages/ecs/package.json(version)packages/ecs/.claude-plugin/plugin.json(version— keep aligned with the npm version)
Publish via the monorepo's release script:
Users pick up the new version with /plugin marketplace update babylonjsmarket && /plugin install ecs-framework@babylonjsmarket.
When the arcade CLI grows a new command
Edit packages/arcade/skills/arcade-scaffold/SKILL.md to document the new flag or template. Bump packages/arcade/package.json and packages/arcade/.claude-plugin/plugin.json together, then run the release script targeting the arcade package.
When you want a new plugin
- Pick an npm package to host it (or create a new one).
- Add
.claude-plugin/plugin.jsonand askills/directory inside the package. - Update the package's
filesarray to include.claude-pluginandskills. - Add an entry to the catalog's
marketplace.json:{ "name": "my-plugin", "description": "...", "source": { "source": "npm", "package": "@babylonjsmarket/my-package" } } - Publish the package; push the catalog change.
Testing changes locally
Edit SKILL.md. Inside Claude Code:
The change is live without restarting the session.
The rule that's load-bearing
The plugin and its package version must stay in lockstep. The plugin describes API conventions; the package implements them. If they drift, the skill starts lying — telling Claude that world.getEventBus() exists when the runtime still has world.eventBus, or vice versa. Co-locating prevents drift by construction: one publish, both updated.
If a convention genuinely needs to differ between consumers, that's a sign the plugin should expose a configuration knob — not a sign that consumers should hand-roll their own conventions.