OpenClaw Main Retires QMD and Makes Builtin the Sole Memory Engine
The QMD backend, its configuration and its process/runtime surface are gone from OpenClaw main. Doctor can remove retired settings, while plugin authors also lose the withLease state API.
OpenClaw has removed QMD from main. The builtin engine is now the only memory-core backend; QMD process management, configuration, UI controls, session-export machinery and Plugin SDK surfaces were deleted. A follow-up also removed the host-owned plugin-state withLease API that QMD had used.
This is a real migration boundary. It is merged source work, not proof that an installed package already contains it. Operators using QMD and authors compiling against api.runtime.state.withLease should identify the containing release before upgrading.
QMD is not merely deprecated
PR #120936 makes builtin the sole memory-core engine. The patch removes the QMD manager, command client, query parser, collection controller, process wrapper, runtime cache and configuration types rather than leaving a compatibility implementation behind.
The active-memory plugin’s QMD search-mode override is retired too. Existing plugins.entries.active-memory.config.qmd configuration is detected before strict validation, and the merged Doctor contract can remove it while preserving sibling active-memory settings.
The current memory documentation now describes the builtin SQLite/vector path and no longer presents QMD as a selectable backend.
Operator consequence: do not treat an old memory.backend: "qmd" setting as a harmless preference that will silently fall back forever. Run the compatibility check before starting a production Gateway on a containing build.
What Doctor can and cannot decide
The merged migration includes Doctor rules for retired QMD configuration and state artifacts. The patch explicitly instructs operators to use openclaw doctor --fix for the obsolete active-memory QMD override.
Doctor can remove keys whose meaning no longer exists. It cannot decide whether an old QMD index contains the only copy of valuable source material. Memory indexes should be reproducible from canonical Markdown and transcripts, but operators must prove that assumption on their own installation.
Before applying cleanup:
- back up the active state directory and memory workspace;
- record the current memory and active-memory configuration;
- run
openclaw doctorwithout--fixand review every proposed QMD migration; - verify that canonical
MEMORY.md,memory/**/*.mdand any configured extra paths exist independently of the QMD index; - apply the repair on a test copy, start memory-core and run known-answer searches; and
- only then repeat the migration on the production profile.
Do not preserve a retired executable or old generated index as a substitute for source files. If the index is the only surviving representation of data, stop and recover that data before upgrading.
Plugin-state leases disappear with it
PR #121140 removes api.runtime.state.withLease, its types, runtime proxy, trust gate and host implementation. Upstream says QMD was its only production consumer.
The replacement guidance is deliberately narrower:
- use short SQLite transactions for atomic database work; and
- use plugin-scoped
openKeyedStoreoropenSyncKeyedStorefor bounded durable state.
Those primitives are not drop-in distributed locks. A keyed value can represent ownership or deduplication, while a transaction can protect database changes, but neither automatically fences a long external side effect. A plugin that used withLease around a remote write, process or filesystem workflow needs a fresh concurrency design rather than a mechanical rename.
Plugin author action: search source and generated declarations for withLease, PluginStateLeaseRunner, PluginStateLeaseOptions and PLUGIN_STATE_LEASE_*. Rebuild against the containing OpenClaw SDK and test two concurrent Gateway processes before declaring the migration complete.
Regression checks that matter
After moving to builtin memory, test behaviour rather than only startup:
- a known handwritten memory is returned with its citation;
- a new memory becomes searchable after indexing;
- private-session recall stays inside its visibility boundary;
- restarting the Gateway does not lose the index or select a retired backend;
- active-memory runs without a QMD override; and
openclaw doctorreports no remaining retired QMD keys after an intentional repair.
Keep the pre-upgrade backup until these checks pass and retention requirements are satisfied.
Bottom line
QMD’s removal simplifies OpenClaw’s memory architecture, but it turns configuration drift into an upgrade blocker instead of an optional warning. Preserve canonical memory sources, inspect Doctor’s migration, prove builtin retrieval, and redesign any plugin that depended on the deleted lease API before adopting the containing release.
THE RECEIPTS
Claims should survive the click.
Primary links used for this article are listed openly. If the evidence changes, the verification date changes with it.THE OPERATOR BRIEF