This release adds 1 notable feature for engineering teams evaluating rollout.
✓ No known CVEs patched in this version
Topics
+8 more
Affected surfaces
Summary
AI summaryAdd note_content tenant schema primitive.
Changes in this release
| Type | Severity | Summary | CVE |
|---|---|---|---|
| Security | Medium |
Updates dependencies and hardens security Updates dependencies and hardens security Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Feature | Medium |
Makes multi-project search opt-in for MCP Makes multi-project search opt-in for MCP Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Enables creating projects by workspace slug in MCP Enables creating projects by workspace slug in MCP Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Includes search result totals in API responses Includes search result totals in API responses Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Refuses database reset while basic-memory MCP processes run Refuses database reset while basic-memory MCP processes run Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Adds note_content tenant schema primitive Adds note_content tenant schema primitive Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Enables project discovery across workspaces in MCP Enables project discovery across workspaces in MCP Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Adds cloud project visibility support on add command Adds cloud project visibility support on add command Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Medium |
Adds orphan entity command to CLI Adds orphan entity command to CLI Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Feature | Low |
Shows display_name instead of UUID for private projects in CLI Shows display_name instead of UUID for private projects in CLI Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Performance | Medium |
Removes runtime ALTER TABLE from vector initialization Removes runtime ALTER TABLE from vector initialization Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Performance | Medium |
Eliminates N+1 query in search hydrate_results Eliminates N+1 query in search hydrate_results Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Performance | Medium |
Reduces PostgreSQL vector sync work Reduces PostgreSQL vector sync work Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Performance | Medium |
Batches file indexing in core for improved sync performance Batches file indexing in core for improved sync performance Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Performance | Medium |
Speeds up vector sync and tunes fastembed defaults Speeds up vector sync and tunes fastembed defaults Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Performance | Low |
Reuses written note content after writes in core Reuses written note content after writes in core Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Performance | Low |
Eliminates redundant DB queries in upsert_entity_from_markdown Eliminates redundant DB queries in upsert_entity_from_markdown Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Performance | Low |
Defers local ASGI app import in CLI for performance Defers local ASGI app import in CLI for performance Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Performance | Low |
Purges SQLite search_index on project delete in core Purges SQLite search_index on project delete in core Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Bugfix | Medium |
Fixes concurrent delete race conditions in delete_entity Fixes concurrent delete race conditions in delete_entity Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Preserves external_id during entity upsert on re-index Preserves external_id during entity upsert on re-index Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Lists projects from all workspaces in project list command Lists projects from all workspaces in project list command Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Adds workspace routing to cloud upload and API client Adds workspace routing to cloud upload and API client Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Avoids shell for scan subprocesses in sync Avoids shell for scan subprocesses in sync Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Preserves canonical markdown in single-file sync Preserves canonical markdown in single-file sync Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Fixes cloud workspace routing and incremental sync propagation Fixes cloud workspace routing and incremental sync propagation Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Passes workspace parameter through client factory in MCP Passes workspace parameter through client factory in MCP Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Honors BASIC_MEMORY_CONFIG_DIR across all call sites Honors BASIC_MEMORY_CONFIG_DIR across all call sites Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Resolves FastEmbed cache under data directory instead of /tmp Resolves FastEmbed cache under data directory instead of /tmp Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Cleans up delete vectors and cloud sync Cleans up delete vectors and cloud sync Source: llm_adapter@2026-05-21 Confidence: high |
— |
| Bugfix | Medium |
Resolves projects by external_id and removes workspace from MCP tools Resolves projects by external_id and removes workspace from MCP tools Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Degrades gracefully when sqlite-vec fails to load on init Degrades gracefully when sqlite-vec fails to load on init Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Skips Obsidian callouts in observation parser Skips Obsidian callouts in observation parser Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Shows cloud index freshness in project info Shows cloud index freshness in project info Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Speeds up single markdown file indexing Speeds up single markdown file indexing Source: llm_adapter@2026-05-21 Confidence: low |
— |
| Bugfix | Medium |
Increases brew outdated timeout from 15s to 60s Increases brew outdated timeout from 15s to 60s Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
| Bugfix | Medium |
Ignores hidden paths relative to watched project in sync Ignores hidden paths relative to watched project in sync Source: granite4.1:30b@2026-05-22-audit Confidence: low |
— |
Full changelog
What's Changed
- fix: concurrent delete race conditions in delete_entity by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/702
- fix: eliminate N+1 query in search hydrate_results by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/713
- fix(cli): propagate cloud workspace routing and incremental sync by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/712
- chore(deps): bump picomatch from 4.0.3 to 4.0.4 in /ui/tool-ui-react in the npm_and_yarn group across 1 directory by @dependabot[bot] in https://github.com/basicmachines-co/basic-memory/pull/696
- chore(deps): bump the uv group across 1 directory with 2 updates by @dependabot[bot] in https://github.com/basicmachines-co/basic-memory/pull/697
- feat(cli): support cloud project visibility on add by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/715
- test(api): add recent activity hydration regression coverage by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/716
- perf(core): reuse written note content after writes by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/717
- perf: eliminate redundant DB queries in upsert_entity_from_markdown by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/714
- fix: Increase brew outdated timeout from 15s to 60s by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/695
- feat(core): add note_content tenant schema primitive by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/719
- fix(cli): show display_name instead of UUID for private projects in CLI by @jope-bm in https://github.com/basicmachines-co/basic-memory/pull/718
- fix(mcp): pass workspace parameter through client factory by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/722
- fix: add workspace routing to cloud upload and API client by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/704
- fix(core): preserve external_id during entity upsert on re-index by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/724
- perf(core): reduce postgres vector sync work by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/723
- fix(core): remove runtime ALTER TABLE from vector init by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/728
- perf(sync): batch file indexing in core by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/726
- perf(core): speed up vector sync and tune fastembed defaults by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/731
- fix(core): clean up delete vectors and cloud sync by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/733
- fix(cli): show cloud index freshness in project info by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/734
- chore(core): make ty the default typechecker by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/736
- refactor(core): simplify note write flow by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/739
- fix(sync): preserve canonical markdown in single-file sync by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/746
- ci(core): reduce duplicate CI and normalize Windows assertions by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/749
- fix(core): resolve FastEmbed cache under data dir instead of /tmp by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/743
- fix(core): honor BASIC_MEMORY_CONFIG_DIR across remaining call sites by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/744
- perf(sync): speed up single markdown file indexing by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/751
- refactor(core): rip telemetry wrappers, use logfire directly by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/754
- fix(mcp): report cloud projects as source=cloud in factory mode by @jope-bm in https://github.com/basicmachines-co/basic-memory/pull/752
- feat(mcp): discover projects across workspaces by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/757
- fix(sync): constrain watch service to --project scope by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/759
- chore(core): fix typos by @szepeviktor in https://github.com/basicmachines-co/basic-memory/pull/761
- feat(mcp): accept training-data-friendly parameter aliases by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/766
- test(core): regression guard for long relation_type values (#721) by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/770
- fix(mcp): remove no-op pagination params from read_note and view_note by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/768
- fix(core): skip Obsidian callouts in observation parser by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/769
- test(core): regression guard for vector-row cleanup on entity delete (#764) by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/771
- fix(installer): mount docker-compose config volume to appuser home by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/772
- fix(core): degrade gracefully when sqlite-vec cannot load on init by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/774
- fix(cli): clear default_workspace on cloud logout by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/773
- fix(cli): cleanup local DB state on set-cloud/set-local by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/775
- feat(cli): refuse db reset while basic-memory mcp processes run by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/776
- fix(mcp): resolve projects by external_id, remove workspace from MCP tools by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/777
- fix(mcp): list factory projects across workspaces by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/778
- fix(cli): point bm cloud setup hint at bm cloud sync-setup by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/780
- fix(mcp): cap recent_activity rows with explicit truncation footer by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/785
- fix(mcp): route workspace-qualified memory urls by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/790
- feat(mcp): create projects by workspace slug by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/789
- feat(api): include search result totals by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/791
- fix(api): accept qualified project resolver hints by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/795
- fix(core): parse picoschema modifier descriptions by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/796
- fix(mcp): add workspace routing to delete_project by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/803
- fix(mcp): preserve workspace paths in build_context by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/801
- fix(mcp): use lightweight graph hydration lookup by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/806
- fix(mcp): make multi-project search opt-in by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/807
- fix(mcp): centralize workspace permalink routing by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/808
- fix(core): use updated_at for recent_activity filter and ordering by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/812
- fix(sync): avoid shell for scan subprocesses by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/814
- fix(sync): ignore hidden paths relative to watched project by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/815
- feat(cli): add orphan entity command by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/816
- fix(mcp): route edit_note workspace-qualified permalinks by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/813
- fix:
basic-memory project listdoes not list projects from all workspaces by @groksrc in https://github.com/basicmachines-co/basic-memory/pull/822 - fix(core): parse prose wikilinks as inline links by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/824
- chore(deps): update deps and harden security by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/825
- fix(sync): preserve bmignore rclone filters by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/827
- perf(cli): defer local ASGI app import by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/828
- fix(core): purge SQLite search_index on project delete by @phernandez in https://github.com/basicmachines-co/basic-memory/pull/832
New Contributors
- @szepeviktor made their first contribution in https://github.com/basicmachines-co/basic-memory/pull/761
Full Changelog: https://github.com/basicmachines-co/basic-memory/compare/v0.20.3...v0.21.0
Weekly OSS security release digest.
The CVE patches and breaking changes that affected production tools this week. One email, every Sunday.
No spam, unsubscribe anytime.
Share this release
About basic-memory
AI conversations that actually remember. Never re-explain your project to your AI again. Join our Discord: https://discord.gg/tyvKNccgqN
Beta — feedback welcome: [email protected]