In-repo source of truth for the elizaOS community plugin registry.
This package replaces the archived, read-only elizaos-plugins/registry GitHub
repository that the publish docs used to point at (see
elizaOS/eliza#8173). Third-party
plugins are now listed by adding one JSON file here and opening a pull request
against this monorepo.
packages/registry/
├── entries/third-party/ one <package>.json per community package (source of truth)
├── schema/registry-entry.schema.json JSON Schema for an entry
├── generated-registry.json wire format the runtime fetches (built from entries/)
└── src/
├── types.ts RegistryEntry + GeneratedRegistry types
├── schema.ts dependency-free entry validation
├── loader.ts read + validate entries/third-party/*.json
├── generate.ts import-safe entries → wire conversion API
├── generate-cli.ts explicit generated-registry.json writer
├── validate-cli.ts `bun run validate`
└── index.ts typed loader for programmatic consumers
Two formats live here:
- Source entry (
entries/third-party/*.json) — what contributors andelizaos plugins submit --dry-runauthor. One file per package. - Generated wire registry (
generated-registry.json) — the{ registry: { "<package>": { … } } }shape the runtime consumes fromplugins.eliza.app/generated-registry.json. Produced bybun run generatethroughgenerate-cli.ts; never hand-edited.
bun run --cwd packages/registry validate # validate every entry against the schema
bun run --cwd packages/registry generate # regenerate generated-registry.json
bun run --cwd packages/registry test # unit tests
bun run --cwd packages/registry typecheckThe runtime auto-discovers any npm package whose keywords include elizaos,
so a listing here is for discoverability and curation, not a hard
requirement to run a plugin. To get listed:
-
Publish your plugin to npm under your own scope or an unscoped
elizaos-plugin-*name. The@elizaos/*scope is reserved for first-party packages and is rejected by the validator. -
Generate the entry metadata from your plugin project:
elizaos plugins submit . --dry-runThis prints the
entries/third-party/<package>.jsonthe CLI derives from yourpackage.json(name, repository, kind, description, tags). -
Add the file under
entries/third-party/, named after the package (/→__,@dropped). Forexample-plugin:{ "package": "example-plugin", "repository": "github:example/example-plugin", "kind": "plugin", "description": "Example community plugin.", "homepage": "https://github.com/example/example-plugin", "version": "1.0.0", "tags": ["utility"] }Required:
package,repository,kind(plugin·connector·app). Optional:description,homepage,version,directory,tags. -
Validate and regenerate:
bun run --cwd packages/registry validate bun run --cwd packages/registry generate
-
Open a pull request with the new entry file and the regenerated
generated-registry.json. Community entries are reviewed for security, functionality, and documentation quality before merge.