II.
Page JSON
Structured · livepage:docs-plugins-marketplace-format
Marketplace Format Specification json
Inspect the normalized record payload exactly as the atlas UI reads it.
{
"id": "page:docs-plugins-marketplace-format",
"_kind": "Page",
"_file": "wiki/docs/plugins/marketplace-format.md",
"_cluster": "wiki",
"attributes": {
"nodeKind": "Page",
"sourcePath": "docs/plugins/marketplace-format.md",
"sourceKind": "repo-docs",
"title": "Marketplace Format Specification",
"displayName": "Marketplace Format Specification",
"slug": "docs/plugins/marketplace-format",
"articlePath": "wiki/docs/plugins/marketplace-format.md",
"article": "\n# Marketplace Format Specification\n\nA marketplace is a Git repository that indexes babysitter plugins via a `marketplace.json` manifest. The babysitter SDK clones these repositories locally and reads the manifest to discover available plugins.\n\n## marketplace.json Schema\n\nThe root manifest file must be named `marketplace.json` and placed at the repository root.\n\n### Top-Level Fields\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `name` | string | Yes | Human-readable marketplace name. This becomes the directory name when cloned locally. |\n| `description` | string | Yes | Short description of the marketplace |\n| `url` | string | Yes | Git remote URL of the marketplace repository |\n| `owner` | string | Yes | Marketplace owner name or organization |\n| `plugins` | object | Yes | Map of plugin name to `MarketplacePluginEntry` |\n\n### MarketplacePluginEntry Fields\n\nEach key in the `plugins` object is the plugin name (e.g., `\"babysitter@a5c.ai\"`), and each value has the following structure:\n\n| Field | Type | Required | Description |\n|-------|------|----------|-------------|\n| `name` | string | Yes | Human-readable plugin name (should match the key) |\n| `description` | string | Yes | Short description of the plugin |\n| `latestVersion` | string | Yes | Latest available semantic version |\n| `versions` | string[] | Yes | List of all available versions, newest first |\n| `packagePath` | string | Yes | Relative path to the plugin package directory within the marketplace repository |\n| `tags` | string[] | Yes | Searchable tags for categorization |\n| `author` | string | Yes | Plugin author name or identifier |\n\n### Example marketplace.json\n\n```json\n{\n \"name\": \"babysitter-marketplace\",\n \"description\": \"Official marketplace for babysitter plugins\",\n \"url\": \"https://github.com/a5c-ai/babysitter-marketplace.git\",\n \"owner\": \"a5c-ai\",\n \"plugins\": {\n \"babysitter@a5c.ai\": {\n \"name\": \"babysitter@a5c.ai\",\n \"description\": \"Core babysitter plugin for AI-assisted development workflows\",\n \"latestVersion\": \"0.0.176\",\n \"versions\": [\"0.0.176\", \"0.0.175\", \"0.0.174\"],\n \"packagePath\": \"plugins/babysitter-unified\",\n \"tags\": [\"core\", \"development\", \"ai\"],\n \"author\": \"a5c-ai\"\n },\n \"code-review@a5c.ai\": {\n \"name\": \"code-review@a5c.ai\",\n \"description\": \"Automated code review plugin\",\n \"latestVersion\": \"1.2.0\",\n \"versions\": [\"1.2.0\", \"1.1.0\", \"1.0.0\"],\n \"packagePath\": \"plugins/code-review\",\n \"tags\": [\"review\", \"quality\"],\n \"author\": \"a5c-ai\"\n }\n }\n}\n```\n\n## Repository Directory Structure\n\nA marketplace repository should follow this layout:\n\n```\nbabysitter-marketplace/\n marketplace.json # Manifest (required)\n plugins/\n babysitter-unified/ # Plugin package directory\n install.md\n uninstall.md\n configure.md\n install-process.js\n migrations/\n 0.0.174_to_0.0.175.md\n 0.0.175_to_0.0.176.md\n code-review/\n install.md\n uninstall.md\n configure.md\n migrations/\n 1.0.0_to_1.1.0.md\n 1.1.0_to_1.2.0.md\n```\n\nThe `packagePath` field in each plugin entry points to the relative path within the repository or marketplace checkout (for example, `\"plugins/babysitter-unified\"` in this repo).\n\n## Local Clone Structure\n\nWhen a marketplace is cloned via `plugin:add-marketplace`, it is stored under the babysitter configuration directory:\n\n- **Global scope**: `~/.babysitter/marketplaces/<marketplace-name>/`\n- **Project scope**: `<projectDir>/.babysitter/marketplaces/<marketplace-name>/`\n\nThe marketplace name is derived from the Git URL (the repository name without the `.git` suffix). For example, cloning `https://github.com/a5c-ai/babysitter-marketplace.git` produces a directory named `babysitter-marketplace`.\n\n## Version Tracking\n\nThe `latestVersion` field in each plugin entry determines the default version used during `plugin:install` when no `--plugin-version` flag is provided. The `versions` array provides a complete history for reference, listed newest first.\n\nVersion strings follow semantic versioning conventions (e.g., `1.0.0`, `2.0.0-beta.1`). Pre-release identifiers with dashes and dots are supported.\n\n## Creating a Marketplace Repository\n\n1. Create a new Git repository.\n\n2. Create a `marketplace.json` at the root with the schema described above.\n\n3. Create plugin package directories under a conventional path (typically `plugins/`).\n\n4. For each plugin, add an entry to `marketplace.json` with the `packagePath` pointing to the plugin package directory.\n\n5. Push the repository to a Git remote (GitHub, GitLab, Bitbucket, or any Git-accessible URL).\n\n6. Users can then add the marketplace:\n ```bash\n babysitter plugin:add-marketplace --marketplace-url <your-repo-url> --global\n ```\n\n## Updating the Marketplace\n\nWhen you release a new plugin version:\n\n1. Update the plugin package directory with new instruction files and migration files.\n2. Update the `latestVersion` field in `marketplace.json`.\n3. Add the new version to the front of the `versions` array.\n4. Commit and push the changes.\n\nUsers update their local clone with:\n```bash\nbabysitter plugin:update-marketplace --marketplace-name <name> --global\n```\n\n## TypeScript Interfaces\n\nThe marketplace types are defined in `packages/sdk/src/plugins/types.ts`:\n\n- `MarketplaceManifest` -- The full manifest structure\n- `MarketplacePluginEntry` -- A single plugin entry within the manifest\n- `MARKETPLACE_MANIFEST_FILENAME` -- The constant `\"marketplace.json\"`\n",
"documents": []
},
"outgoingEdges": [],
"incomingEdges": [
{
"from": "page:docs-plugins",
"to": "page:docs-plugins-marketplace-format",
"kind": "contains_page"
}
]
}