Removal timeline
When deprecated plugin SDK surfaces become eligible for removal
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. |
| Next Plugin SDK major | inbound-reply-dispatch, synchronous plugin keyed stores, memory session inventory readers, synchronous Mention Inbox persistence methods, and synchronous session/extension/provider replay persistence reach their explicit next-plugin-sdk-major gate; none is date-eligible before that version boundary. |
The remaining public SDK subpaths below have registry-backed removal windows. 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 the next Plugin SDK major.
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 |
|---|---|---|
next-plugin-sdk-major | Major-version compatibility gate | inbound-reply-dispatch; api.runtime.state.openSyncKeyedStore and PluginStateSyncKeyedStore; loadArchivedSessions and resolveMemorySessionTargets; mentionInbox.list, mentionInbox.dismiss, mentionInbox.recordCommittedInput, and mentionInbox.invalidate; synchronous SessionManager, extension session, and provider replay persistence contracts |
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.