Plugins (Extensions)
Quick start
A plugin is either:- a native OpenClaw plugin (
openclaw.plugin.json+ runtime module), or - a compatible bundle (
.codex-plugin/plugin.jsonor.claude-plugin/plugin.json)
openclaw plugins, but only native OpenClaw plugins execute
runtime code in-process.
- See what is already loaded:
- Install an official plugin (example: Voice Call):
- Restart the Gateway, then configure under
plugins.entries.<id>.config.
~/.claude/plugins/known_marketplaces.json. You can also pass an explicit
marketplace source with --marketplace.
Available plugins (official)
Installable plugins
These are published to npm and installed withopenclaw plugins install:
| Plugin | Package | Docs |
|---|---|---|
| Matrix | @openclaw/matrix | Matrix |
| Microsoft Teams | @openclaw/msteams | MS Teams |
| Nostr | @openclaw/nostr | Nostr |
| Voice Call | @openclaw/voice-call | Voice Call |
| Zalo | @openclaw/zalo | Zalo |
| Zalo Personal | @openclaw/zalouser | Zalo Personal |
memory-lancedb: onboarding,
openclaw channels add, openclaw channels login --channel whatsapp, and
other channel setup flows prompt to install them when first used instead of
shipping their full runtime trees inside the main npm tarball.
Bundled plugins
These ship with OpenClaw and are enabled by default unless noted. Memory:memory-core— bundled memory search (default viaplugins.slots.memory)memory-lancedb— install-on-demand long-term memory with auto-recall/capture (setplugins.slots.memory = "memory-lancedb")
anthropic, byteplus, cloudflare-ai-gateway, github-copilot, google, huggingface, kilocode, kimi-coding, minimax, mistral, modelstudio, moonshot, nvidia, openai, opencode, opencode-go, openrouter, qianfan, qwen-portal-auth, synthetic, together, venice, vercel-ai-gateway, volcengine, xiaomi, zai
Speech providers (enabled by default):
elevenlabs, microsoft
Other bundled:
copilot-proxy— VS Code Copilot Proxy bridge (disabled by default)
Compatible bundles
OpenClaw also recognizes compatible external bundle layouts:- Codex-style bundles:
.codex-plugin/plugin.json - Claude-style bundles:
.claude-plugin/plugin.jsonor the default Claude component layout without a manifest - Cursor-style bundles:
.cursor-plugin/plugin.json
format=bundle, with a subtype of
codex, claude, or cursor in verbose/inspect output.
See Plugin bundles for the exact detection rules, mapping
behavior, and current support matrix.
Config
enabled: master toggle (default: true)allow: allowlist (optional)deny: denylist (optional; deny wins)load.paths: extra plugin files/dirsslots: exclusive slot selectors such asmemoryandcontextEngineentries.<id>: per-plugin toggles + config
- Unknown plugin ids in
entries,allow,deny, orslotsare errors. - Unknown
channels.<id>keys are errors unless a plugin manifest declares the channel id. - Native plugin config is validated using the JSON Schema embedded in
openclaw.plugin.json(configSchema). - Compatible bundles currently do not expose native OpenClaw config schemas.
- If a plugin is disabled, its config is preserved and a warning is emitted.
Disabled vs missing vs invalid
These states are intentionally different:- disabled: plugin exists, but enablement rules turned it off
- missing: config references a plugin id that discovery did not find
- invalid: plugin exists, but its config does not match the declared schema
Discovery and precedence
OpenClaw scans, in order:- Config paths
plugins.load.paths(file or directory)
- Workspace extensions
<workspace>/.openclaw/extensions/*.ts<workspace>/.openclaw/extensions/*/index.ts
- Global extensions
~/.openclaw/extensions/*.ts~/.openclaw/extensions/*/index.ts
- Bundled extensions (shipped with OpenClaw; mixed default-on/default-off)
<openclaw>/dist/extensions/*in packaged installs<workspace>/dist-runtime/extensions/*in local built checkouts<workspace>/extensions/*in source/Vitest workflows
plugins.entries.<id>.enabled or
openclaw plugins enable <id>.
Bundled plugin runtime dependencies are owned by each plugin package. Packaged
builds stage opted-in bundled dependencies under
dist/extensions/<id>/node_modules instead of requiring mirrored copies in the
root package. Very large official plugins can ship as metadata-only bundled
entries and install their runtime package on demand. npm artifacts ship the
built dist/extensions/* tree; source extensions/* directories stay in source
checkouts only.
Installed plugins are enabled by default, but can be disabled the same way.
Workspace plugins are disabled by default unless you explicitly enable them
or allowlist them. This is intentional: a checked-out repo should not silently
become production gateway code.
If multiple plugins resolve to the same id, the first match in the order above
wins and lower-precedence copies are ignored.
Enablement rules
Enablement is resolved after discovery:plugins.enabled: falsedisables all pluginsplugins.denyalways winsplugins.entries.<id>.enabled: falsedisables that plugin- workspace-origin plugins are disabled by default
- allowlists restrict the active set when
plugins.allowis non-empty - allowlists are id-based, not source-based
- bundled plugins are disabled by default unless:
- the bundled id is in the built-in default-on set, or
- you explicitly enable it, or
- channel config implicitly enables the bundled channel plugin
- exclusive slots can force-enable the selected plugin for that slot
Plugin slots (exclusive categories)
Some plugin categories are exclusive (only one active at a time). Useplugins.slots to select which plugin owns the slot:
memory: active memory plugin ("none"disables memory plugins)contextEngine: active context engine plugin ("legacy"is the built-in default)
kind: "memory" or kind: "context-engine", only
the selected plugin loads for that slot. Others are disabled with diagnostics.
Declare kind in your plugin manifest.
Plugin IDs
Default plugin ids:- Package packs:
package.jsonname - Standalone file: file base name (
~/.../voice-call.ts->voice-call)
id, OpenClaw uses it but warns when it does not match the
configured id.
Inspection
CLI
openclaw plugins CLI reference for full details on each
command (install rules, inspect output, marketplace installs, uninstall).
Plugins may also register their own top-level commands (example:
openclaw voicecall).
Plugin API (overview)
Plugins export either:- A function:
(api) => { ... } - An object:
{ id, name, configSchema, register(api) { ... } }
register(api) is where plugins attach behavior. Common registrations include:
registerToolregisterHookon(...)for typed lifecycle hooksregisterChannelregisterProviderregisterSpeechProviderregisterMediaUnderstandingProviderregisterWebSearchProviderregisterHttpRouteregisterCommandregisterCliregisterContextEngineregisterService
Further reading
- Plugin architecture and internals — capability model, ownership model, contracts, load pipeline, runtime helpers, and developer API reference
- Building extensions
- Plugin bundles
- Plugin manifest
- Plugin agent tools
- Capability Cookbook
- Community plugins