This release ships everything required for the v1.0 cut: a signed,
multi-arch container image; a Helm chart and raw K8s manifests; an
explicit public API surface and deprecation policy; and the full
Phase 0–3 enterprise readiness work (auth, hardening, multi-tenancy
scaffold, GDPR scheduled deletion). It is also the first release cut
through the new release.yml + verify-versions + cosign pipeline —
so the version itself is partly a dress rehearsal for v1.0.
Added — v1.0 release readiness
requirements.lock(pip-compile, hash-pinned, includes[web]extras)
and Dockerfile install via--require-hashesagainst it.- Base image pinned by digest (
python@sha256:...) instead of tag in
Dockerfile. docs/RELEASE_RUNBOOK.md— durable,
version-agnostic procedure for cutting a release across PyPI, GHCR,
and the MCP registry.docs/MIGRATION_0.X_TO_1.0.md—
contract for what changes (and what doesn't) at the v1.0 cut.memograph.scripts.migrate_to_multitenant— helper that relocates a
single-vault 0.x deploy under a 1.0 global root with--dry-run.- Expanded
memograph.__all__to declare the 1.0 public Python surface
(MemoryKernel,MemoryQuery,SearchOptions,MemoryNode,
VaultGraph,VaultStorage,HybridRetriever, and the GAM types). helm lint+ doublehelm templaterender job in CI to catch chart
regressions before they reach Helm users.
Added — Phase 0–3 enterprise readiness
The work below makes MemoGraph deployable to multiple paying
tenants with full GDPR procedures, observability, and authentication
without leaving the alpha branch. None of these change the
single-tenant developer experience, but they unlock the SaaS path.
Authentication & web hardening (Phase 1)
- OIDC bearer-token auth with JWKS support — works with Auth0, Clerk,
WorkOS, Keycloak, Azure AD, Okta, Google Workspace. - Hashed-API-key auth (
X-API-Key) for service-to-service callers. MEMOGRAPH_AUTH_PROVIDER=multiaccepts either credential type.slowapirate limiting (per-key + per-IP, configurable).- Restrictive CORS (default-deny, allowlist via
MEMOGRAPH_CORS_ORIGINS). - Request-size cap middleware (default 1 MB).
- Versioned
/api/v1/prefix; old/api/redirects. - Separate
/healthz(liveness) and/readyz(readiness). - Structured JSON logging with request-id propagation.
- Path-traversal-safe
VaultStorage.writewith control-char and
reserved-name rejection. - Vault size soft + hard caps with graceful error responses.
- Schema-versioned cache files with migration on load.
- 16 OWASP-top-10-style security tests under
tests/security/. - OpenAPI snapshot test in CI to catch unintentional contract drift.
Observability & reliability (Phase 2)
- OpenTelemetry FastAPI/asyncio auto-instrumentation; OTLP export.
- Prometheus
/metricsendpoint as fallback for OTLP-less ops. - Manual spans on
kernel.search,kernel.remember, swarm cycles. - Concurrency audit doc + targeted stress tests for concurrent
reads, writes, deletes. - Versioned backup format with sha256 manifest + integrity check
on restore. bandit+pip-auditsecurity workflow on every PR.
Multi-tenancy (Phase 3)
- ADR 0001 documenting the kernel-per-tenant + LRU eviction model.
TenantStorageorchestrator: per-tenant directory layout under
<global_root>/<tenant_id>/, validated tenant ids, filesystem-level
isolation enforced before disk hits.TenantRegistry: bounded LRU of warmMemoryKernelinstances;
cold tenants evict cleanly with cache flush + lock release.- Admin REST routes for tenant lifecycle: create, list, get, usage,
immediate-offboard. kernel_for_requestFastAPI dependency wires the registry into
every non-admin route; per-request kernel resolution from the
authenticated user'sorg_idclaim. Single-tenant deployments
(MEMOGRAPH_TENANCY_ENABLEDunset) continue to work unchanged.- Audit log carries
tenant_idautomatically via the existing
current_userContextVar — no kernel changes required. - End-to-end isolation test suite (
tests/tenancy/test_isolation_e2e.py)
gating the multi-tenant release: cross-tenant search empty,
get-by-id 404, list only own-tenant, admin offboard leaves siblings
byte-identical, orphan users 403, single-tenant smoke preserved.
GDPR scheduled deletion (Phase 3.7)
POST /api/v1/admin/tenants/{id}/schedule-deletewith
configurable grace period (default 7 days) and operator reason.DELETE /api/v1/admin/tenants/{id}/schedule-deletecancels
before the reaper fires.- Tombstone schema (
_tombstone.json, schema-versioned) marks
tenants for deletion; refuses overwrite to prevent misclick
resets. python -m memograph.scripts.run_reaper <global_root>sweeps
expired tombstones, takes a final backup tarball under
.tombstoned-exports/, then destroys. JSON Lines on stdout;
--dry-runfor safe audits.- Tombstoned tenants return 410 Gone to non-admin requests
viatenant_resolver; admin routes still serve so operators
can inspect or cancel. - 33 tests across tombstone primitives, admin routes, routing
layer, and reaper sweep behaviors. docs/GDPR_RUNBOOK.mdrewritten to document the scheduled
flow as the preferred Art. 17 procedure.
Enterprise documentation set
docs/INSTALL_ENTERPRISE.md— multi-tenant on-prem + SaaS install.docs/SSO_SETUP.md— provider-neutral OIDC walkthrough.docs/RBAC_GUIDE.md— roles and scope mapping.docs/GDPR_RUNBOOK.md— Art. 15 / 17 / 20 procedures.docs/BACKUP_RESTORE_RUNBOOK.md— versioned-backup operations.docs/OBSERVABILITY_GUIDE.md— OTLP/Prometheus dashboards.docs/COMPLIANCE_ROADMAP.md— SOC 2 / ISO 27001 plan.docs/HOSTING_GUIDE.md— four genuinely-free hosting paths
(Oracle Free, Cloudflare Tunnel, GCP, GitHub-vault) with
hardening checklist.docs/GOOGLE_WORKSPACE_SETUP.md— Workspace OIDC + Drive
portability backup walkthrough.docs/adr/0001-tenancy-model.md,docs/adr/0002-storage-adapter-strategy.md
— architectural decision records.
Quickstart experience
memograph quickstart— materialises a 15-note interconnected
sample vault (Python development knowledge), ingests it, runs
three illustrative live queries, prints next-step pointers.
Total time frompip installto "wow" under 60 seconds.- 12 tests covering bundled-vault integrity (every note parses,
minimum link count, salience in range), the materialise primitive
(idempotent, refuses to clobber non-empty targets without
--force), and the end-to-end run.
Tests
- 172+ tests passing across
tests/security/,tests/contract/,
tests/tenancy/, plus 12 quickstart tests. Whole-package mypy
clean.