On this page

On this page

Plugin internals

Removal timeline

The dates and gates that govern when deprecated surfaces become removable. Part of the Plugin SDK migration guide.

pnpm plugin-sdk:surface:check enforces the latest stable release's committed typed public surface independently of export-count budgets. Removing a shipped subpath or named export requires a covering deprecated, removal-pending, or removed compatibility record with a removeAfter date strictly before the current UTC date; a removalGate alone does not authorize removal. Packaged private runtime facades without a types export condition are excluded because they are not declared typed-public contracts.

Removal timeline

When What happens
Now Warning-capable deprecated surfaces emit runtime warnings; repository guards reject deprecated SDK imports from core and bundled plugins.
Pending owner decision Records without removeAfter or removalGate remain deprecated and ineligible until their owner publishes a gate.
Day after a deprecated record's removeAfter date At 00:00 UTC, that record becomes date-eligible and pnpm plugins:boundary-report --fail-on-eligible-compat exits non-zero. The date itself is the final compatibility day.
A removal-pending record's removeAfter date At 00:00 UTC, the report marks the record due for review and lists its blockers. It does not trigger the compatibility fail flag.
2026-12-31 — final SQLite compatibility day Deprecated synchronous SQLite-backed members retain their released contracts through this date. Migrate to the documented async/V2 replacements before upgrading to the January removal release.
First January 2027 stable release Remove the dated synchronous SQLite compatibility members after the next stable release ships the warnings and migration guide. No SDK major is required. The date gate first permits removal on January 1, 2027 UTC.
Other ordinary stable release gates inbound-reply-dispatch and deprecated Mention Inbox signatures retain separate, undated stable-deprecation-period gates. Their owners must announce a window and authorize removal.

The remaining public SDK surfaces below have registry-backed removal windows. For synchronous SQLite-backed families, removeAfter is 2026-12-31 and the removal target is the first January 2027 stable release. Deprecation metadata written on main is not proof that a warning shipped in a stable release. The next stable release must announce this window and publish the warnings and migration instructions; the surface guard must still see a reached date. This preparation adds deprecations and replacements without removing public members. See the complete member migration table, awaited migration instructions, and transcript and TTS replacements. The July 30 rows were removed after their early maintainer-authorized sweep: unused subpaths were deleted, earlier compatibility aliases were deleted, and bundled-only modules were demoted to private-local build mappings.

The August 15 compatibility subpaths agent-config-primitives, channel-logging, channel-secret-runtime, channel-streaming, group-access, matrix, text-runtime, and zod were retired early by explicit SDK-owner approval in August 2026. Use the focused replacements in the Plugin SDK subpath catalog, and import zod directly from the zod package. inbound-reply-dispatch remains available until owner-authorized removal in a later stable release.

The beta.5 whole-session-store bridge was retired with explicit SDK-owner approval on September 30, 2026, ahead of its former October 12 deadline. The supported-plugin cutoff excludes v2026.7.1-beta.5 and all releases that still import those bridge exports or package-root whole-store aliases. Upgrade affected plugins to scoped row and transcript-identity APIs before upgrading the host. The session-store-runtime subpath and resolveStorePath remain supported; see the removed session APIs and replacements.

Removal gate Tier SDK subpaths
2026-12-31; first January 2027 stable Final compatibility day / removal release Synchronous SQLite-backed session/transcript, plugin-state, binding, auth/provider, channel/approval, workspace, proxy-capture, skill-discovery, runtime-config and TTS preparation APIs documented in the migration guide.
Later ordinary stable release — TBD Owner migration required inbound-reply-dispatch and deprecated Mention Inbox signatures have separate undated windows.
2026-10-01 Media legacy projection agent-media-payload, plus the non-subpath MsgContext Media* fields, channel inbound media payload builders, buildMediaPayload, hook media aliases, and {{Media*}} templates

The five compatibility subpaths channel-lifecycle, channel-message, channel-reply-pipeline, config-runtime, and infra-runtime were retired early by explicit SDK-owner approval on September 30, 2026. That decision supersedes their October 1 gate and external-migration retention blocker; it does not certify that every external plugin has migrated. Their public exports and compatibility aliases are removed. Upgrade affected plugins before loading them on a host containing this removal.

These subpaths remained available in 2026.8.2 under an approved retention exception. On September 2, 2026, the release maintainer renewed their removeAfter date from September 1 to October 1 for 2026.9.1. The September 30 decision replaces that window. See channel import mappings and config and infrastructure migration for replacements and behavioral differences. System-event snapshot inspection and consumption now use openclaw/plugin-sdk/system-event-runtime.

The compatibility subpaths command-auth, discord, and telegram-account were retired early by explicit SDK-owner approval on October 2, 2026. That decision closes their compatibility window; it does not certify that every external plugin has migrated. Their public exports are removed. Upgrade affected plugins before loading them on a host containing this removal. See the command and channel facade replacements.

Bundled-plugin migration does not prove that every external caller can use a path-only replacement. Migrate the functions with verified typed-public mappings; adapt the caller where a removed named type or required behavior lacks a public replacement. Do not substitute a private-local host export. Run pnpm plugins:boundary-report to see the dates, gates, and blockers for the surfaces your plugin uses.

Was this useful?