Skip to content

Remove deprecated inline plugin definitions in plugins.json (target: ~2026-09) #157

Description

@tadasant

Background

As of v0.13.0 (PR #155), a plugin entry can externalize its body into a <path>/.plugin/plugin.json manifest, keeping plugins.json a lightweight registry of description + path (+ default_in_roots). See docs/plugins.md → Externalizing the Body.

The prior way — declaring a plugin's body (skills, mcp_servers, hooks, plugins, version, author, homepage, repository, license, logo, keywords, title) inline on a plugins.json entry with no path — is deprecated as of v0.13.0. resolveArtifacts now emits a deprecation warning whenever an inline-only plugin is resolved.

Task (do this in ~3 months, targeting roughly 2026-09)

Remove support for inline plugin bodies:

  1. Resolver (packages/core/src/config.ts) — in hydratePluginManifests, turn the inline-body deprecation warning into a hard error (or drop the inline-merge path entirely). A plugin entry must reference a .plugin/plugin.json manifest via path; inline body fields without a path are rejected. Inline fields layered on top of a path (the sanctioned override case) remain allowed.
  2. Schema (schemas/plugins.schema.json) — remove the deprecated inline body properties (skills, mcp_servers, hooks, plugins, version, author, homepage, repository, license, logo, title, keywords) from the Plugin definition, OR constrain the schema so those fields require a sibling path. Keep description, path, default_in_roots.
  3. Types (packages/core/src/types.ts) — narrow PluginEntry accordingly if appropriate.
  4. Tests — flip the deprecation-warning tests in packages/core/tests/plugin-manifest.test.ts to expect a hard error for inline-only plugins; ensure manifest-backed and override cases still pass.
  5. Docs / examples — remove any remaining mention of inline plugin bodies as a supported form; ensure all examples/plugins/ entries use the manifest form.
  6. CHANGELOG — note the removal as a breaking change in the version that ships it.

Migration for users

Move each inline plugin's body into <plugin-dir>/.plugin/plugin.json and replace the inline fields in plugins.json with "path": "./<plugin-dir>". Keep description, path, and default_in_roots on the index entry. The warning emitted in the deprecation window names each affected plugin and the fields to move.

Deprecated in v0.13.0 (PR #155).

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    convergentIssue-work-gate direction: closes a gap the system is already supposed to have closedhold issue work gateHeld by the issue work gate, or parked by a human — no session starts from this rating

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions