From bdfb2a29c30f5c673330f75ea9a64817f80b5084 Mon Sep 17 00:00:00 2001 From: Dan Draper Date: Thu, 2 Jul 2026 17:17:51 +1000 Subject: [PATCH 001/151] feat(v2): scaffold the V2 information architecture (CIP-3325) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Foundation for the docs overhaul tracked in CIP-3307: - IA.md: living migration checklist at the repo root (one checkbox per planned page; sections tick off as they land on this branch) - New `v2docs` collection (content/docs) served from the site root via a required catch-all route, alongside the legacy tree (content/stack) at /stack until every section migrates - Frontmatter facet model: Diátaxis `type`, `components`, `audience`, `integration` (category / setup / pairsWith), and review-tracking fields (`verifiedAgainst`, `reviewBy`) - Section scaffold: get-started, integrations (incl. the /integrations/supabase stub the Supabase listing links to), concepts, compare, guides, security, solutions, reference — meta.json + stubs - v2-redirects.mjs: full legacy→v2 map (85/85 pages covered), gated behind ENABLE_V2_REDIRECTS=1 so the preview serves both trees during migration; /quickstart vanity redirect ships ungated - scripts/validate-v2-redirects.ts wired into prebuild: CI fails if a legacy page has no v2 mapping - llms.txt, llms-full.txt, sitemap, and the .mdx raw-markdown mirror now cover both trees Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- IA.md | 173 ++++++++ content/docs/compare/index.mdx | 9 + content/docs/compare/meta.json | 5 + content/docs/concepts/index.mdx | 9 + content/docs/concepts/meta.json | 5 + content/docs/get-started/index.mdx | 9 + content/docs/get-started/meta.json | 5 + content/docs/guides/deployment/index.mdx | 8 + content/docs/guides/deployment/meta.json | 4 + content/docs/guides/development/index.mdx | 8 + content/docs/guides/development/meta.json | 4 + content/docs/guides/index.mdx | 9 + content/docs/guides/meta.json | 5 + content/docs/guides/migration/index.mdx | 8 + content/docs/guides/migration/meta.json | 4 + content/docs/guides/troubleshooting/index.mdx | 8 + content/docs/guides/troubleshooting/meta.json | 4 + content/docs/integrations/index.mdx | 9 + content/docs/integrations/meta.json | 5 + content/docs/integrations/supabase/index.mdx | 20 + content/docs/integrations/supabase/meta.json | 5 + content/docs/meta.json | 12 + content/docs/reference/auth/index.mdx | 8 + content/docs/reference/auth/meta.json | 4 + content/docs/reference/cli/index.mdx | 8 + content/docs/reference/cli/meta.json | 4 + content/docs/reference/eql/index.mdx | 8 + content/docs/reference/eql/meta.json | 4 + content/docs/reference/index.mdx | 9 + content/docs/reference/meta.json | 5 + content/docs/reference/proxy/index.mdx | 8 + content/docs/reference/proxy/meta.json | 4 + content/docs/reference/stack/index.mdx | 8 + content/docs/reference/stack/meta.json | 4 + content/docs/reference/workspace/index.mdx | 8 + content/docs/reference/workspace/meta.json | 4 + content/docs/security/compliance/index.mdx | 8 + content/docs/security/compliance/meta.json | 4 + content/docs/security/index.mdx | 9 + content/docs/security/meta.json | 5 + content/docs/solutions/index.mdx | 9 + content/docs/solutions/meta.json | 5 + next.config.mjs | 23 ++ package.json | 5 +- scripts/validate-v2-redirects.ts | 61 +++ source.config.ts | 48 +++ src/app/(home)/page.tsx | 2 +- src/app/[...slug]/layout.tsx | 15 + src/app/[...slug]/page.tsx | 76 ++++ src/app/api/search/route.ts | 2 +- src/app/layout.tsx | 2 +- src/app/llms-full.txt/route.ts | 4 +- src/app/llms.mdx/v2/[...slug]/route.ts | 44 ++ src/app/llms.txt/route.ts | 5 +- src/app/og/docs/[...slug]/route.tsx | 4 +- src/app/sitemap.ts | 4 +- src/app/stack/[[...slug]]/page.tsx | 8 +- src/app/stack/layout.tsx | 2 +- src/components/icons/supabase.tsx | 2 +- src/lib/posthog/provider.tsx | 6 +- src/lib/source.ts | 17 +- src/proxy.ts | 2 +- v2-redirects.mjs | 375 ++++++++++++++++++ 63 files changed, 1135 insertions(+), 26 deletions(-) create mode 100644 IA.md create mode 100644 content/docs/compare/index.mdx create mode 100644 content/docs/compare/meta.json create mode 100644 content/docs/concepts/index.mdx create mode 100644 content/docs/concepts/meta.json create mode 100644 content/docs/get-started/index.mdx create mode 100644 content/docs/get-started/meta.json create mode 100644 content/docs/guides/deployment/index.mdx create mode 100644 content/docs/guides/deployment/meta.json create mode 100644 content/docs/guides/development/index.mdx create mode 100644 content/docs/guides/development/meta.json create mode 100644 content/docs/guides/index.mdx create mode 100644 content/docs/guides/meta.json create mode 100644 content/docs/guides/migration/index.mdx create mode 100644 content/docs/guides/migration/meta.json create mode 100644 content/docs/guides/troubleshooting/index.mdx create mode 100644 content/docs/guides/troubleshooting/meta.json create mode 100644 content/docs/integrations/index.mdx create mode 100644 content/docs/integrations/meta.json create mode 100644 content/docs/integrations/supabase/index.mdx create mode 100644 content/docs/integrations/supabase/meta.json create mode 100644 content/docs/meta.json create mode 100644 content/docs/reference/auth/index.mdx create mode 100644 content/docs/reference/auth/meta.json create mode 100644 content/docs/reference/cli/index.mdx create mode 100644 content/docs/reference/cli/meta.json create mode 100644 content/docs/reference/eql/index.mdx create mode 100644 content/docs/reference/eql/meta.json create mode 100644 content/docs/reference/index.mdx create mode 100644 content/docs/reference/meta.json create mode 100644 content/docs/reference/proxy/index.mdx create mode 100644 content/docs/reference/proxy/meta.json create mode 100644 content/docs/reference/stack/index.mdx create mode 100644 content/docs/reference/stack/meta.json create mode 100644 content/docs/reference/workspace/index.mdx create mode 100644 content/docs/reference/workspace/meta.json create mode 100644 content/docs/security/compliance/index.mdx create mode 100644 content/docs/security/compliance/meta.json create mode 100644 content/docs/security/index.mdx create mode 100644 content/docs/security/meta.json create mode 100644 content/docs/solutions/index.mdx create mode 100644 content/docs/solutions/meta.json create mode 100644 scripts/validate-v2-redirects.ts create mode 100644 src/app/[...slug]/layout.tsx create mode 100644 src/app/[...slug]/page.tsx create mode 100644 src/app/llms.mdx/v2/[...slug]/route.ts create mode 100644 v2-redirects.mjs diff --git a/IA.md b/IA.md new file mode 100644 index 0000000..4c94f3d --- /dev/null +++ b/IA.md @@ -0,0 +1,173 @@ +# Docs V2 — Information Architecture & migration checklist + +Living checklist for the docs overhaul. Tracked in Linear under +[CIP-3307](https://linear.app/cipherstash/issue/CIP-3307); the full IA rationale +(design principles, audience doors, correctness strategy) lives in +`CipherStash docs IA v1.md` in the content repo. **Tick items here as they land +on the `v2` branch.** Legend: `[ ]` todo · `[x]` done · 🚧 stub exists · ⛔ blocked +on a product decision (see CIP-3307 checklist). + +## How this branch works + +- New IA lives in `content/docs`, served from the site root (`/docs/
/…`). +- The legacy tree (`content/stack`) is served alongside it at `/docs/stack/…` + until every section migrates, then deleted (CIP-3335). +- The full legacy→v2 redirect map is `v2-redirects.mjs`, gated behind + `ENABLE_V2_REDIRECTS=1` (flipped on at merge). `bun run validate-redirects` + enforces that every legacy page has a mapping. +- Frontmatter facets (`type`, `components`, `audience`, `integration`, + `verifiedAgainst`, `reviewBy`) are defined in `source.config.ts` (`v2docs`). +- **Moving a page = ** move the file into `content/docs`, update its facets, + fix inbound links, confirm its `v2-redirects.mjs` entry, tick it here. + +## URL conventions + +Lowercase, hyphens, no trailing slashes, no version numbers in paths. +Integrations are **flat** (no category segment). Error pages (future, miette) +live at `/docs/errors/` — permanent, never restructured (CIP-3338). + +--- + +## Get started — CIP-3327 + +- [x] Section scaffold 🚧 +- [ ] `/get-started/what-is-cipherstash` — mental model, components map, audience router +- [ ] `/get-started/quickstart` — rewritten on EQL v3 (fixes `cs_match_v1`, broken scaffold imports) +- [ ] `/get-started/choose-your-stack` — static matrix v1 (platform × ORM × auth) +- [ ] `/get-started/examples` — runnable example apps index +- [ ] `/docs` landing page (replaces/updates `(home)` route: what-is + audience router) + +## Integrations — CIP-3328 (Supabase), CIP-3330 (auth), CIP-3336 (rest) + +- [x] Section scaffold 🚧 (index + supabase stub with facet exemplar) +- [ ] `/integrations` index — category grid w/ setup badges +- [ ] `/integrations/supabase` — flagship tutorial (CIP-3328) +- [ ] `/integrations/supabase/database` +- [ ] `/integrations/supabase/auth` +- [ ] `/integrations/supabase/dashboard-experience` — Table Editor, expose eql schema +- [ ] ⛔ `/integrations/supabase/edge-functions` — pending Deno/FFI answer +- [ ] ⛔ `/integrations/supabase/realtime` — pending product verification +- [ ] `/integrations/drizzle` — merge the two divergent Drizzle pages +- [ ] `/integrations/prisma-next` +- [ ] `/integrations/aws/rds-aurora` — Proxy path +- [ ] `/integrations/aws/dynamodb` +- [ ] `/integrations/clerk` +- [ ] `/integrations/auth0` — end-to-end example (Clerk parity) +- [ ] `/integrations/okta` — end-to-end example (Clerk parity) +- [ ] `/integrations/nextjs` +- [ ] `/integrations/typescript` — thin router to Stack SDK reference +- [ ] `/integrations/serverless` — Vercel/Lambda, bundling, CS_CONFIG_PATH +- [ ] `/integrations/docker` +- [ ] ⛔ `/integrations/edge-workers` — pending Deno/workerd answer + +## Concepts — CIP-3333 (searchable-encryption), others per section tickets + +- [x] Section scaffold 🚧 +- [ ] `/concepts/privacy-first-design` +- [ ] `/concepts/application-level-encryption` — vs TDE/pgcrypto/RLS +- [ ] `/concepts/searchable-encryption` — REWRITE with honest leakage model (canonical leakage page) +- [ ] `/concepts/eql` — the typed-column model (declare capability in the schema) +- [ ] `/concepts/key-management` — per-value keys, rotation, crypto-shredding +- [ ] `/concepts/identity-aware-encryption` — lock contexts, CTS (CIP-3330) +- [ ] `/concepts/threat-modelling` + +## Comparisons — CIP-3333 + +- [x] Section scaffold 🚧 +- [ ] `/compare/aws-kms` (port) +- [ ] `/compare/fhe` (port) +- [ ] `/compare/rls-and-tde` (new — expand the Supabase-listing RLS contrast) +- [ ] `/compare/hashicorp-vault` (in flight on `docs/vault-comparison` branch — land there or here, then port) + +## Guides + +- [x] Section scaffold 🚧 (development, migration, deployment, troubleshooting) +- [ ] `/guides/development/local-setup` — profiles, device auth, workspaces, keys +- [ ] `/guides/development/schema-design` — which encrypted type/variant per column (CIP-3327) +- [ ] `/guides/development/testing-and-ci` (port deploy/testing) +- [ ] `/guides/development/team-onboarding` (port) +- [ ] `/guides/migration/encrypt-existing-data` — the backfill guide, runnable (CIP-3329) +- [ ] ⛔ `/guides/migration/upgrading-from-eql-v2` — REQUIRED; mechanics pending product answer (CIP-3329) +- [ ] `/guides/migration/adopting-incrementally` (CIP-3329) +- [ ] `/guides/migration/key-rotation-operations` +- [ ] `/guides/deployment/going-to-production` (port) +- [ ] `/guides/deployment/serverless-and-bundling` (merge bundling + sst) +- [ ] `/guides/deployment/proxy-deployment` (merge proxy Docker + aws-ecs) +- [ ] `/guides/troubleshooting` index — symptom-based router +- [ ] `/guides/troubleshooting/query-performance` — seq-scan diagnosis, typed-operand gotcha +- [ ] `/guides/troubleshooting/runtime-errors` +- [ ] `/guides/troubleshooting/cli` (port) +- [ ] `/guides/troubleshooting/proxy` (port) + +## Architecture & security — CIP-3331, CIP-3332 (compliance) + +- [x] Section scaffold 🚧 +- [ ] `/security/architecture` — ONE reconciled ZeroKMS mechanism story (kills the 3 conflicting accounts) +- [ ] `/security/zerokms` +- [ ] `/security/cts` — auth layer architecture (CIP-3330) +- [ ] `/security/stack-sdk` +- [ ] `/security/proxy` +- [ ] `/security/threat-scenarios` +- [ ] ⛔ `/security/availability-and-continuity` — DR (port) + SLA + exit story; pending SLA answer +- [ ] ⛔ `/security/audit-logging` — pending retention answer +- [ ] ⛔ `/security/key-ownership` — BYOK/self-hosted; pending product answer +- [ ] `/security/compliance` index — framework mapping (port, good) +- [ ] `/security/compliance/hipaa` — BAA scope, §164.312 mapping (CIP-3332) +- [ ] `/security/compliance/soc2` — verify Type II report exists +- [ ] `/security/compliance/gdpr` + +## Solutions + +- [x] Section scaffold 🚧 +- [ ] `/solutions/protecting-pii` (new) +- [ ] `/solutions/healthcare-hipaa` (new; pairs with compliance/hipaa) +- [ ] `/solutions/ai-and-rag` (port use-cases/ai-rag) +- [ ] `/solutions/data-residency` (port) +- [ ] `/solutions/provable-access` (port) + +## Reference + +- [x] Section scaffold 🚧 (eql, stack, auth, cli, proxy, workspace) +- **EQL (v3 rewrite — CIP-3326):** +- [ ] `/reference/eql` — overview + install (single SQL file, permissions split, dbdev, Docker) +- [ ] `/reference/eql/types` — 10 scalar families × variants + `eql_v3.json` +- [ ] `/reference/eql/operators` — per-variant matrix incl. what RAISES; typed-operand rule +- [ ] `/reference/eql/indexes` — functional indexes on extractors; Supabase-compatible +- [ ] `/reference/eql/json` — ste_vec, path queries +- [ ] `/reference/eql/functions` — incl. aggregates (min/max only) +- [ ] `/reference/eql/payload-format` — v/i/c envelope, hm/ob/bf (absorbs cipher-cell) +- **Stack SDK:** +- [ ] `/reference/stack` — client + configuration (port encryption/* pages) +- [ ] `/reference/stack/schema` +- [ ] `/reference/stack/encrypt-decrypt` (+ bulk, models) +- [ ] `/reference/stack/supabase` — THE canonical `encryptedSupabase` page, ONE signature (CIP-3328) +- [ ] `/reference/stack/drizzle-operators` +- [ ] `/reference/stack/errors` — port error-handling; miette catalog later (CIP-3338) +- [ ] `/reference/stack/upgrading-from-protect` (retitled package-rename guide) +- **Auth (CIP-3330):** +- [ ] `/reference/auth/lock-contexts` +- [ ] `/reference/auth/cts-tokens` +- [ ] `/reference/auth/oidc-configuration` +- [ ] `/reference/auth/access-keys` (+ clients) +- **CLI / Proxy / Workspace:** +- [ ] `/reference/cli/*` (port 9 pages) +- [ ] `/reference/proxy/*` (configuration, message-flow, multitenant, errors) +- [ ] `/reference/workspace/billing` + `/members` + `/configuration` +- **Cross-cutting:** +- [ ] `/reference/benchmarks` — listing numbers + methodology (CIP-3334) +- [ ] `/reference/agent-skills` (port; expand per CIP-3339) +- [ ] `/reference/glossary` (port) +- [ ] Repoint `scripts/generate-docs.ts` TypeDoc output → `content/docs/reference/stack` + +## Infrastructure / final pass + +- [x] `v2` branch + this checklist +- [x] `v2docs` collection + facet schema (`source.config.ts`) +- [x] Root catch-all routes (`src/app/[...slug]`), llms.mdx mirror, sitemap/llms.txt include v2 +- [x] `v2-redirects.mjs` (flag-gated) + `validate-redirects` gate in prebuild +- [x] `/quickstart` vanity redirect +- [ ] OG images for v2 pages (route only covers legacy tree) +- [ ] Correctness CI: snippet type-checking, SQL-vs-EQL-Docker, terminology lint (CIP-3337) +- [ ] llms.txt curation + Cloudflare AI crawl policy + md-degradation check (CIP-3339) +- [ ] Flip `ENABLE_V2_REDIRECTS=1`, delete `content/stack` + `/stack` routes + legacy loader (CIP-3335) +- [ ] Consistency sweep + Supabase listing v3 revision (CIP-3335) diff --git a/content/docs/compare/index.mdx b/content/docs/compare/index.mdx new file mode 100644 index 0000000..0f07e95 --- /dev/null +++ b/content/docs/compare/index.mdx @@ -0,0 +1,9 @@ +--- +title: Comparisons +description: How CipherStash compares to other approaches to protecting data. +type: concept +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/compare/meta.json b/content/docs/compare/meta.json new file mode 100644 index 0000000..3e374e5 --- /dev/null +++ b/content/docs/compare/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Comparisons", + "icon": "Scale", + "pages": ["index", "..."] +} diff --git a/content/docs/concepts/index.mdx b/content/docs/concepts/index.mdx new file mode 100644 index 0000000..282c15b --- /dev/null +++ b/content/docs/concepts/index.mdx @@ -0,0 +1,9 @@ +--- +title: Concepts +description: How CipherStash works and how to think about searchable encryption, keys, and identity. +type: concept +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/concepts/meta.json b/content/docs/concepts/meta.json new file mode 100644 index 0000000..ca4b08b --- /dev/null +++ b/content/docs/concepts/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Concepts", + "icon": "Lightbulb", + "pages": ["index", "..."] +} diff --git a/content/docs/get-started/index.mdx b/content/docs/get-started/index.mdx new file mode 100644 index 0000000..af235c6 --- /dev/null +++ b/content/docs/get-started/index.mdx @@ -0,0 +1,9 @@ +--- +title: Get started +description: What CipherStash is, a 10-minute quickstart, and how to choose your integration path. +type: tutorial +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/get-started/meta.json b/content/docs/get-started/meta.json new file mode 100644 index 0000000..2d9cfb8 --- /dev/null +++ b/content/docs/get-started/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Get started", + "icon": "Rocket", + "pages": ["index", "..."] +} diff --git a/content/docs/guides/deployment/index.mdx b/content/docs/guides/deployment/index.mdx new file mode 100644 index 0000000..771a593 --- /dev/null +++ b/content/docs/guides/deployment/index.mdx @@ -0,0 +1,8 @@ +--- +title: Deployment +description: Deployment documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/guides/deployment/meta.json b/content/docs/guides/deployment/meta.json new file mode 100644 index 0000000..0bbd244 --- /dev/null +++ b/content/docs/guides/deployment/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Deployment", + "pages": ["index", "..."] +} diff --git a/content/docs/guides/development/index.mdx b/content/docs/guides/development/index.mdx new file mode 100644 index 0000000..c0d4ab1 --- /dev/null +++ b/content/docs/guides/development/index.mdx @@ -0,0 +1,8 @@ +--- +title: Development +description: Development documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/guides/development/meta.json b/content/docs/guides/development/meta.json new file mode 100644 index 0000000..24f8878 --- /dev/null +++ b/content/docs/guides/development/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Development", + "pages": ["index", "..."] +} diff --git a/content/docs/guides/index.mdx b/content/docs/guides/index.mdx new file mode 100644 index 0000000..f034020 --- /dev/null +++ b/content/docs/guides/index.mdx @@ -0,0 +1,9 @@ +--- +title: Guides +description: Task-oriented guides: development workflow, data migration, deployment, and troubleshooting. +type: guide +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/guides/meta.json b/content/docs/guides/meta.json new file mode 100644 index 0000000..810cf95 --- /dev/null +++ b/content/docs/guides/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Guides", + "icon": "Wrench", + "pages": ["index", "..."] +} diff --git a/content/docs/guides/migration/index.mdx b/content/docs/guides/migration/index.mdx new file mode 100644 index 0000000..690a307 --- /dev/null +++ b/content/docs/guides/migration/index.mdx @@ -0,0 +1,8 @@ +--- +title: Data migration +description: Data migration documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/guides/migration/meta.json b/content/docs/guides/migration/meta.json new file mode 100644 index 0000000..db4e68b --- /dev/null +++ b/content/docs/guides/migration/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Data migration", + "pages": ["index", "..."] +} diff --git a/content/docs/guides/troubleshooting/index.mdx b/content/docs/guides/troubleshooting/index.mdx new file mode 100644 index 0000000..f1e926e --- /dev/null +++ b/content/docs/guides/troubleshooting/index.mdx @@ -0,0 +1,8 @@ +--- +title: Troubleshooting +description: Troubleshooting documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/guides/troubleshooting/meta.json b/content/docs/guides/troubleshooting/meta.json new file mode 100644 index 0000000..e5715ad --- /dev/null +++ b/content/docs/guides/troubleshooting/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Troubleshooting", + "pages": ["index", "..."] +} diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx new file mode 100644 index 0000000..dfcf78e --- /dev/null +++ b/content/docs/integrations/index.mdx @@ -0,0 +1,9 @@ +--- +title: Integrations +description: Set up CipherStash with your platform, ORM, framework, auth provider, and runtime. +type: tutorial +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/integrations/meta.json b/content/docs/integrations/meta.json new file mode 100644 index 0000000..62604e2 --- /dev/null +++ b/content/docs/integrations/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Integrations", + "icon": "Blocks", + "pages": ["index", "..."] +} diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx new file mode 100644 index 0000000..6066937 --- /dev/null +++ b/content/docs/integrations/supabase/index.mdx @@ -0,0 +1,20 @@ +--- +title: Supabase +description: Searchable, application-level encryption for your Supabase project — encrypt in your app, query in Postgres. +type: tutorial +components: [encryption, eql, auth] +audience: [developer] +integration: + category: platform + setup: dashboard-required + pairsWith: [drizzle, prisma-next, clerk, nextjs] +--- + +CipherStash adds application-level encryption to your Supabase project: +sensitive fields are encrypted in your application before they reach Postgres, +and stay queryable with the same Supabase.js calls you already use. + +This page is being rebuilt as part of the docs V2 overhaul +([CIP-3328](https://linear.app/cipherstash/issue/CIP-3328)). Until it lands, +the current Supabase integration guide lives at +[CipherStash + Supabase](/docs/stack/cipherstash/supabase). diff --git a/content/docs/integrations/supabase/meta.json b/content/docs/integrations/supabase/meta.json new file mode 100644 index 0000000..a61c668 --- /dev/null +++ b/content/docs/integrations/supabase/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Supabase", + "icon": "Supabase", + "pages": ["index", "..."] +} diff --git a/content/docs/meta.json b/content/docs/meta.json new file mode 100644 index 0000000..8935d68 --- /dev/null +++ b/content/docs/meta.json @@ -0,0 +1,12 @@ +{ + "pages": [ + "get-started", + "integrations", + "concepts", + "compare", + "guides", + "security", + "solutions", + "reference" + ] +} diff --git a/content/docs/reference/auth/index.mdx b/content/docs/reference/auth/index.mdx new file mode 100644 index 0000000..2dea44b --- /dev/null +++ b/content/docs/reference/auth/index.mdx @@ -0,0 +1,8 @@ +--- +title: Auth +description: Auth documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/reference/auth/meta.json b/content/docs/reference/auth/meta.json new file mode 100644 index 0000000..943c560 --- /dev/null +++ b/content/docs/reference/auth/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Auth", + "pages": ["index", "..."] +} diff --git a/content/docs/reference/cli/index.mdx b/content/docs/reference/cli/index.mdx new file mode 100644 index 0000000..90d8cb3 --- /dev/null +++ b/content/docs/reference/cli/index.mdx @@ -0,0 +1,8 @@ +--- +title: CLI +description: CLI documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/reference/cli/meta.json b/content/docs/reference/cli/meta.json new file mode 100644 index 0000000..075b6da --- /dev/null +++ b/content/docs/reference/cli/meta.json @@ -0,0 +1,4 @@ +{ + "title": "CLI", + "pages": ["index", "..."] +} diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx new file mode 100644 index 0000000..e312de2 --- /dev/null +++ b/content/docs/reference/eql/index.mdx @@ -0,0 +1,8 @@ +--- +title: EQL +description: EQL documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/reference/eql/meta.json b/content/docs/reference/eql/meta.json new file mode 100644 index 0000000..be23fb4 --- /dev/null +++ b/content/docs/reference/eql/meta.json @@ -0,0 +1,4 @@ +{ + "title": "EQL", + "pages": ["index", "..."] +} diff --git a/content/docs/reference/index.mdx b/content/docs/reference/index.mdx new file mode 100644 index 0000000..fc2c7e7 --- /dev/null +++ b/content/docs/reference/index.mdx @@ -0,0 +1,9 @@ +--- +title: Reference +description: Precise API documentation for EQL, the Stack SDK, Auth, the CLI, and Proxy. +type: reference +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/reference/meta.json b/content/docs/reference/meta.json new file mode 100644 index 0000000..38c38b5 --- /dev/null +++ b/content/docs/reference/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Reference", + "icon": "Library", + "pages": ["index", "..."] +} diff --git a/content/docs/reference/proxy/index.mdx b/content/docs/reference/proxy/index.mdx new file mode 100644 index 0000000..961c67b --- /dev/null +++ b/content/docs/reference/proxy/index.mdx @@ -0,0 +1,8 @@ +--- +title: Proxy +description: Proxy documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/reference/proxy/meta.json b/content/docs/reference/proxy/meta.json new file mode 100644 index 0000000..a64115c --- /dev/null +++ b/content/docs/reference/proxy/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Proxy", + "pages": ["index", "..."] +} diff --git a/content/docs/reference/stack/index.mdx b/content/docs/reference/stack/index.mdx new file mode 100644 index 0000000..993c909 --- /dev/null +++ b/content/docs/reference/stack/index.mdx @@ -0,0 +1,8 @@ +--- +title: Stack SDK +description: Stack SDK documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/reference/stack/meta.json b/content/docs/reference/stack/meta.json new file mode 100644 index 0000000..3d44235 --- /dev/null +++ b/content/docs/reference/stack/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Stack SDK", + "pages": ["index", "..."] +} diff --git a/content/docs/reference/workspace/index.mdx b/content/docs/reference/workspace/index.mdx new file mode 100644 index 0000000..9bebe76 --- /dev/null +++ b/content/docs/reference/workspace/index.mdx @@ -0,0 +1,8 @@ +--- +title: Workspace & account +description: Workspace & account documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/reference/workspace/meta.json b/content/docs/reference/workspace/meta.json new file mode 100644 index 0000000..2c03700 --- /dev/null +++ b/content/docs/reference/workspace/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Workspace & account", + "pages": ["index", "..."] +} diff --git a/content/docs/security/compliance/index.mdx b/content/docs/security/compliance/index.mdx new file mode 100644 index 0000000..4a25ab6 --- /dev/null +++ b/content/docs/security/compliance/index.mdx @@ -0,0 +1,8 @@ +--- +title: Compliance +description: Compliance documentation — being built as part of the docs V2 overhaul. +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/security/compliance/meta.json b/content/docs/security/compliance/meta.json new file mode 100644 index 0000000..346ed94 --- /dev/null +++ b/content/docs/security/compliance/meta.json @@ -0,0 +1,4 @@ +{ + "title": "Compliance", + "pages": ["index", "..."] +} diff --git a/content/docs/security/index.mdx b/content/docs/security/index.mdx new file mode 100644 index 0000000..6bb327d --- /dev/null +++ b/content/docs/security/index.mdx @@ -0,0 +1,9 @@ +--- +title: Architecture & security +description: Trust model, components, availability, audit, and compliance — self-contained for security review. +type: concept +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/security/meta.json b/content/docs/security/meta.json new file mode 100644 index 0000000..7a3eb64 --- /dev/null +++ b/content/docs/security/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Architecture & security", + "icon": "Shield", + "pages": ["index", "..."] +} diff --git a/content/docs/solutions/index.mdx b/content/docs/solutions/index.mdx new file mode 100644 index 0000000..5189ccf --- /dev/null +++ b/content/docs/solutions/index.mdx @@ -0,0 +1,9 @@ +--- +title: Solutions +description: What CipherStash solves: PII protection, HIPAA, AI/RAG, data residency, provable access. +type: concept +--- + +This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/docs/stack). diff --git a/content/docs/solutions/meta.json b/content/docs/solutions/meta.json new file mode 100644 index 0000000..6b5983d --- /dev/null +++ b/content/docs/solutions/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Solutions", + "icon": "Target", + "pages": ["index", "..."] +} diff --git a/next.config.mjs b/next.config.mjs index 5825239..c6a0f69 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,13 +1,29 @@ import { createMDX } from "fumadocs-mdx/next"; +import { v2Redirects } from "./v2-redirects.mjs"; const withMDX = createMDX(); +// V2 IA migration (CIP-3325): the full legacy→v2 redirect map is gated so the +// preview site serves BOTH trees while sections migrate (legacy at /stack, v2 +// at the root). Flip on at merge; once content/stack is deleted the map +// becomes unconditional (CIP-3335). Coverage is enforced by +// `bun run validate-redirects` regardless of the flag. +const enableV2Redirects = process.env.ENABLE_V2_REDIRECTS === "1"; + /** @type {import('next').NextConfig} */ const config = { basePath: "/docs", reactStrictMode: true, async redirects() { return [ + // Vanity URL for the new IA (safe to ship ungated: the path has no + // legacy traffic). Temporary until the v2 quickstart is canonical. + { + source: "/quickstart", + destination: "/get-started/quickstart", + permanent: false, + }, + ...(enableV2Redirects ? v2Redirects : []), // === 4-section consolidation: product sections under /cipherstash/ === { source: "/stack/encryption/:path*", @@ -317,6 +333,13 @@ const config = { source: "/stack/:path*.mdx", destination: "/llms.mdx/stack/:path*", }, + // Raw-markdown mirror for the v2 tree (Cloudflare/agents fetch + // .mdx). Listed after the /stack rule so legacy paths keep + // resolving to the legacy collection. + { + source: "/:path*.mdx", + destination: "/llms.mdx/v2/:path*", + }, ], afterFiles: [ { diff --git a/package.json b/package.json index 7cc2dfd..3b4681a 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run validate-links", + "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run validate-links && bun run validate-redirects", "build": "next build", "dev": "next dev -p 3001", "start": "next start", @@ -13,7 +13,8 @@ "format": "biome format --write", "generate-docs": "tsx scripts/generate-docs.ts", "generate-docs:eql": "tsx scripts/generate-eql-docs.ts", - "validate-links": "tsx scripts/validate-links.ts" + "validate-links": "tsx scripts/validate-links.ts", + "validate-redirects": "tsx scripts/validate-v2-redirects.ts" }, "dependencies": { "fumadocs-core": "16.6.0", diff --git a/scripts/validate-v2-redirects.ts b/scripts/validate-v2-redirects.ts new file mode 100644 index 0000000..97c90d0 --- /dev/null +++ b/scripts/validate-v2-redirects.ts @@ -0,0 +1,61 @@ +#!/usr/bin/env tsx +/** + * V2 redirect gate (CIP-3325 / CIP-3337 item 7). + * + * Every page in the legacy tree (content/stack) must be covered by an entry + * in v2-redirects.mjs — exact match or `:path*` wildcard — so that no URL is + * orphaned when the v2 IA ships. Run via `bun run validate-redirects`; wired + * into prebuild so a page added to content/stack without a mapping fails CI. + * + * This checks map *coverage*, not destination existence — destinations are + * stubs until each section's migration ticket lands. CIP-3335 verifies + * destinations resolve before merge. + */ +import fs from "node:fs"; +import path from "node:path"; +// eslint-disable-next-line -- .mjs import is intentional; the map is shared with next.config.mjs +import { v2Redirects } from "../v2-redirects.mjs"; + +const LEGACY_DIR = path.join(process.cwd(), "content/stack"); + +function collectSlugs(dir: string, prefix: string[] = []): string[] { + const slugs: string[] = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + if (entry.isDirectory()) { + slugs.push( + ...collectSlugs(path.join(dir, entry.name), [...prefix, entry.name]), + ); + } else if (entry.name.endsWith(".mdx") || entry.name.endsWith(".md")) { + const base = entry.name.replace(/\.mdx?$/, ""); + const parts = base === "index" ? prefix : [...prefix, base]; + slugs.push(`/stack${parts.length ? `/${parts.join("/")}` : ""}`); + } + } + return slugs; +} + +function matches(url: string, source: string): boolean { + if (source.endsWith("/:path*")) { + const base = source.slice(0, -"/:path*".length); + return url === base || url.startsWith(`${base}/`); + } + return url === source; +} + +const urls = collectSlugs(LEGACY_DIR); +const unmatched = urls.filter( + (url) => !v2Redirects.some((r: { source: string }) => matches(url, r.source)), +); + +if (unmatched.length > 0) { + console.error( + `✗ ${unmatched.length} legacy page(s) have no v2 redirect mapping:\n`, + ); + for (const url of unmatched.sort()) { + console.error(` ${url}`); + } + console.error("\nAdd entries to v2-redirects.mjs (see IA.md migration map)."); + process.exit(1); +} + +console.log(`✓ all ${urls.length} legacy pages covered by v2-redirects.mjs`); diff --git a/source.config.ts b/source.config.ts index 7769cf3..18ad3f5 100644 --- a/source.config.ts +++ b/source.config.ts @@ -23,6 +23,54 @@ export const docs = defineDocs({ }, }); +// V2 information architecture (CIP-3325). New content lives in content/docs +// and is served from the site root (e.g. /docs/get-started/...). The legacy +// `docs` collection above (content/stack) is served alongside it during the +// migration and is deleted once the last section moves. See IA.md. +export const v2docs = defineDocs({ + dir: "content/docs", + docs: { + schema: pageSchema.extend({ + seoTitle: z.string().optional(), + // Diátaxis page type. Every page should declare one; enforced by the + // docs lint (CIP-3337) rather than the schema so stubs can land first. + type: z.enum(["tutorial", "guide", "concept", "reference"]).optional(), + // Facets powering index pages, filtered views, and the future + // tailored-quickstart picker (CIP-3339). Nav position never depends on + // these — the sidebar tree comes from meta.json alone. + components: z + .array(z.enum(["encryption", "auth", "zerokms", "eql", "proxy", "cli"])) + .optional(), + audience: z.array(z.enum(["developer", "cto", "ciso"])).optional(), + integration: z + .object({ + category: z.enum([ + "platform", + "orm", + "framework", + "auth-provider", + "language", + "runtime", + ]), + setup: z.enum(["code-only", "dashboard-required"]), + pairsWith: z.array(z.string()).optional(), + }) + .optional(), + // Review tracking (CIP-3337): API pages pin the releases they were + // verified against (e.g. { stack: "1.2.0", eql: "3.0.0" }); claims pages + // (compliance, pricing, comparisons) carry a review-by date instead. + verifiedAgainst: z.record(z.string(), z.string()).optional(), + reviewBy: z.string().optional(), + }), + postprocess: { + includeProcessedMarkdown: true, + }, + }, + meta: { + schema: metaSchema, + }, +}); + // Parse the leftover code-fence meta string (what remains after Fumadocs // extracts `title`, `tab`, and line-number directives) for the analytics // attributes documented for authors: `example-id`, `cta`, and `cta-type`. diff --git a/src/app/(home)/page.tsx b/src/app/(home)/page.tsx index 5311eab..7cad1aa 100644 --- a/src/app/(home)/page.tsx +++ b/src/app/(home)/page.tsx @@ -11,6 +11,7 @@ import { ShieldCheck, Zap, } from "lucide-react"; +import type { Metadata } from "next"; import Link from "next/link"; import type { ComponentType } from "react"; import { @@ -19,7 +20,6 @@ import { PrismaLogo, SupabaseLogo, } from "@/components/integration-logos"; -import type { Metadata } from "next"; // The /docs landing page had no metadata (no ). `absolute` bypasses the // root layout's "%s | CipherStash Docs" template so the title isn't doubled. diff --git a/src/app/[...slug]/layout.tsx b/src/app/[...slug]/layout.tsx new file mode 100644 index 0000000..2045bab --- /dev/null +++ b/src/app/[...slug]/layout.tsx @@ -0,0 +1,15 @@ +import { DocsLayout } from "fumadocs-ui/layouts/docs"; +import { baseOptions } from "@/lib/layout.shared"; +import { v2source } from "@/lib/source"; + +// Layout for the V2 IA tree (content/docs), served from the site root. +// A *required* catch-all (`[...slug]`, not `[[...slug]]`) so it never +// competes with the (home) route for "/". Static routes (/stack, /api, +// /og, …) take precedence over this segment as usual. +export default function Layout({ children }: LayoutProps<"/[...slug]">) { + return ( + <DocsLayout tree={v2source.getPageTree()} {...baseOptions()}> + {children} + </DocsLayout> + ); +} diff --git a/src/app/[...slug]/page.tsx b/src/app/[...slug]/page.tsx new file mode 100644 index 0000000..bc6b521 --- /dev/null +++ b/src/app/[...slug]/page.tsx @@ -0,0 +1,76 @@ +import { + DocsBody, + DocsDescription, + DocsPage, + DocsTitle, +} from "fumadocs-ui/layouts/docs/page"; +import { createRelativeLink } from "fumadocs-ui/mdx"; +import type { Metadata } from "next"; +import { notFound } from "next/navigation"; +import { LLMCopyButton, ViewOptions } from "@/components/ai/page-actions"; +import { gitConfig } from "@/lib/layout.shared"; +import { v2source } from "@/lib/source"; +import { getMDXComponents } from "@/mdx-components"; + +// Page route for the V2 IA tree (content/docs). Mirrors the legacy +// /stack/[[...slug]] route; the legacy route is deleted when the migration +// completes (see IA.md). +export default async function Page(props: PageProps<"/[...slug]">) { + const params = await props.params; + const page = v2source.getPage(params.slug); + if (!page) notFound(); + + const MDX = page.data.body; + + return ( + <DocsPage toc={page.data.toc} full={page.data.full}> + <DocsTitle>{page.data.title}</DocsTitle> + <DocsDescription className="mb-0"> + {page.data.description} + </DocsDescription> + <div className="flex flex-row gap-2 items-center border-b pb-6"> + <LLMCopyButton markdownUrl={`/docs${page.url}.mdx`} /> + <ViewOptions + markdownUrl={`/docs${page.url}.mdx`} + githubUrl={`https://github.com/${gitConfig.user}/${gitConfig.repo}/blob/${gitConfig.branch}/content/docs/${page.path}`} + /> + </div> + <DocsBody> + <MDX + components={getMDXComponents({ + a: createRelativeLink(v2source, page), + })} + /> + </DocsBody> + </DocsPage> + ); +} + +export async function generateStaticParams() { + return v2source.generateParams(); +} + +export async function generateMetadata( + props: PageProps<"/[...slug]">, +): Promise<Metadata> { + const params = await props.params; + const page = v2source.getPage(params.slug); + if (!page) notFound(); + + const title = page.data.seoTitle ?? page.data.title; + const url = `https://cipherstash.com/docs${page.url}`; + + return { + title, + description: page.data.description, + alternates: { canonical: url }, + openGraph: { + type: "article", + url, + title, + description: page.data.description, + // TODO(v2): OG images — the /og route only covers the legacy tree. + // Add a v2 OG route when the first real (non-stub) pages land. + }, + }; +} diff --git a/src/app/api/search/route.ts b/src/app/api/search/route.ts index aa9d5cd..ec6bc8d 100644 --- a/src/app/api/search/route.ts +++ b/src/app/api/search/route.ts @@ -1,5 +1,5 @@ -import { source } from "@/lib/source"; import { createFromSource } from "fumadocs-core/search/server"; +import { source } from "@/lib/source"; export const { GET } = createFromSource(source, { // https://docs.orama.com/docs/orama-js/supported-languages diff --git a/src/app/layout.tsx b/src/app/layout.tsx index e6ff9a2..33912be 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,7 +2,7 @@ import { RootProvider } from "fumadocs-ui/provider/next"; import { PostHogProvider } from "@/lib/posthog/provider"; import "./global.css"; import type { Metadata } from "next"; -import { Inter, Fira_Code } from "next/font/google"; +import { Fira_Code, Inter } from "next/font/google"; // Site-wide title template so every page gets a descriptive, branded // <title>. Per-page metadata returns a bare title (e.g. "Keysets") which diff --git a/src/app/llms-full.txt/route.ts b/src/app/llms-full.txt/route.ts index 8e2efe8..9cd76be 100644 --- a/src/app/llms-full.txt/route.ts +++ b/src/app/llms-full.txt/route.ts @@ -1,5 +1,5 @@ import { getPostHogClient } from "@/lib/posthog/server"; -import { getLLMText, source } from "@/lib/source"; +import { getLLMText, source, v2source } from "@/lib/source"; export const revalidate = false; @@ -18,7 +18,7 @@ export async function GET(request: Request) { await posthog.flush(); } - const scan = source.getPages().map(getLLMText); + const scan = [...v2source.getPages(), ...source.getPages()].map(getLLMText); const scanned = await Promise.all(scan); return new Response(scanned.join("\n\n")); diff --git a/src/app/llms.mdx/v2/[...slug]/route.ts b/src/app/llms.mdx/v2/[...slug]/route.ts new file mode 100644 index 0000000..77dfd1e --- /dev/null +++ b/src/app/llms.mdx/v2/[...slug]/route.ts @@ -0,0 +1,44 @@ +import { notFound } from "next/navigation"; +import { getPostHogClient } from "@/lib/posthog/server"; +import { getLLMText, v2source } from "@/lib/source"; + +// Raw-markdown mirror for the V2 IA tree, reached via the +// `/:path*.mdx` rewrite in next.config.mjs (same pattern as the legacy +// /llms.mdx/stack route). +export const revalidate = false; + +export async function GET( + req: Request, + { params }: RouteContext<"/llms.mdx/v2/[...slug]">, +) { + const { slug } = await params; + const page = v2source.getPage(slug); + if (!page) notFound(); + + const posthog = getPostHogClient(); + if (posthog) { + posthog.capture({ + distinctId: "llm-agent", + event: "llms_mdx_page_fetched", + properties: { + $current_url: req.url, + page_slug: slug?.join("/") ?? "", + page_title: page.data.title, + referer: req.headers.get("referer") ?? "", + user_agent: req.headers.get("user-agent") ?? "", + }, + }); + await posthog.flush(); + } + + return new Response(await getLLMText(page), { + headers: { + "Content-Type": "text/markdown", + "Access-Control-Allow-Origin": "*", + }, + }); +} + +export function generateStaticParams() { + return v2source.generateParams(); +} diff --git a/src/app/llms.txt/route.ts b/src/app/llms.txt/route.ts index 5d6bcbb..2c6696e 100644 --- a/src/app/llms.txt/route.ts +++ b/src/app/llms.txt/route.ts @@ -1,5 +1,5 @@ import { getPostHogClient } from "@/lib/posthog/server"; -import { source } from "@/lib/source"; +import { source, v2source } from "@/lib/source"; export const revalidate = false; @@ -21,7 +21,8 @@ export async function GET(request: Request) { const lines: string[] = []; lines.push("# Documentation"); lines.push(""); - for (const page of source.getPages()) { + // V2 tree first: it's the canonical IA once the migration completes. + for (const page of [...v2source.getPages(), ...source.getPages()]) { lines.push(`- [${page.data.title}](${page.url}): ${page.data.description}`); } return new Response(lines.join("\n")); diff --git a/src/app/og/docs/[...slug]/route.tsx b/src/app/og/docs/[...slug]/route.tsx index 208fdfd..801a890 100644 --- a/src/app/og/docs/[...slug]/route.tsx +++ b/src/app/og/docs/[...slug]/route.tsx @@ -1,7 +1,7 @@ -import { getPageImage, source } from "@/lib/source"; +import { generate as DefaultImage } from "fumadocs-ui/og"; import { notFound } from "next/navigation"; import { ImageResponse } from "next/og"; -import { generate as DefaultImage } from "fumadocs-ui/og"; +import { getPageImage, source } from "@/lib/source"; export const revalidate = false; diff --git a/src/app/sitemap.ts b/src/app/sitemap.ts index 515283d..77fd867 100644 --- a/src/app/sitemap.ts +++ b/src/app/sitemap.ts @@ -1,10 +1,10 @@ import type { MetadataRoute } from "next"; -import { source } from "@/lib/source"; +import { source, v2source } from "@/lib/source"; const BASE_URL = "https://cipherstash.com/docs"; export default function sitemap(): MetadataRoute.Sitemap { - return source.getPages().map((page) => ({ + return [...v2source.getPages(), ...source.getPages()].map((page) => ({ url: `${BASE_URL}${page.url}`, lastModified: new Date(), changeFrequency: "weekly", diff --git a/src/app/stack/[[...slug]]/page.tsx b/src/app/stack/[[...slug]]/page.tsx index 6f5e79a..ef050ee 100644 --- a/src/app/stack/[[...slug]]/page.tsx +++ b/src/app/stack/[[...slug]]/page.tsx @@ -1,16 +1,16 @@ -import { getPageImage, source } from "@/lib/source"; import { DocsBody, DocsDescription, DocsPage, DocsTitle, } from "fumadocs-ui/layouts/docs/page"; -import { notFound } from "next/navigation"; -import { getMDXComponents } from "@/mdx-components"; -import type { Metadata } from "next"; import { createRelativeLink } from "fumadocs-ui/mdx"; +import type { Metadata } from "next"; +import { notFound } from "next/navigation"; import { LLMCopyButton, ViewOptions } from "@/components/ai/page-actions"; import { gitConfig } from "@/lib/layout.shared"; +import { getPageImage, source } from "@/lib/source"; +import { getMDXComponents } from "@/mdx-components"; export default async function Page(props: PageProps<"/stack/[[...slug]]">) { const params = await props.params; diff --git a/src/app/stack/layout.tsx b/src/app/stack/layout.tsx index d5b93ec..78d2389 100644 --- a/src/app/stack/layout.tsx +++ b/src/app/stack/layout.tsx @@ -1,6 +1,6 @@ -import { source } from "@/lib/source"; import { DocsLayout } from "fumadocs-ui/layouts/docs"; import { baseOptions } from "@/lib/layout.shared"; +import { source } from "@/lib/source"; export default function Layout({ children }: LayoutProps<"/stack">) { return ( diff --git a/src/components/icons/supabase.tsx b/src/components/icons/supabase.tsx index c6336f9..492ac61 100644 --- a/src/components/icons/supabase.tsx +++ b/src/components/icons/supabase.tsx @@ -44,5 +44,5 @@ export function SupabaseIcon(props: React.SVGProps<SVGSVGElement>) { </linearGradient> </defs> </svg> - ) + ); } diff --git a/src/lib/posthog/provider.tsx b/src/lib/posthog/provider.tsx index 711982a..9d7a5cb 100644 --- a/src/lib/posthog/provider.tsx +++ b/src/lib/posthog/provider.tsx @@ -1,13 +1,13 @@ "use client"; -import posthog from "posthog-js"; import { usePathname, useSearchParams } from "next/navigation"; +import posthog from "posthog-js"; import { - Suspense, createContext, + type ReactNode, + Suspense, useContext, useEffect, - type ReactNode, } from "react"; const PostHogContext = createContext<typeof posthog | null>(null); diff --git a/src/lib/source.ts b/src/lib/source.ts index 97ae84f..d0bcb1c 100644 --- a/src/lib/source.ts +++ b/src/lib/source.ts @@ -1,7 +1,7 @@ -import { docs } from "fumadocs-mdx:collections/server"; +import { docs, v2docs } from "fumadocs-mdx:collections/server"; import { type InferPageType, loader } from "fumadocs-core/source"; -import { createElement } from "react"; import { icons } from "lucide-react"; +import { createElement } from "react"; import { SupabaseIcon } from "@/components/icons/supabase"; const customIcons: Record<string, () => React.ReactElement> = { @@ -23,6 +23,15 @@ export const source = loader({ icon: resolveIcon, }); +// V2 IA tree (CIP-3325): content/docs served from the site root, e.g. +// /docs/get-started/quickstart. Lives alongside the legacy `source` during +// the migration; the legacy loader and /stack routes are deleted at the end. +export const v2source = loader({ + baseUrl: "/", + source: v2docs.toFumadocsSource(), + icon: resolveIcon, +}); + export function getPageImage(page: InferPageType<typeof source>) { const segments = [...page.slugs, "image.png"]; @@ -32,7 +41,9 @@ export function getPageImage(page: InferPageType<typeof source>) { }; } -export async function getLLMText(page: InferPageType<typeof source>) { +export async function getLLMText( + page: InferPageType<typeof source> | InferPageType<typeof v2source>, +) { const processed = await page.data.getText("processed"); return `# ${page.data.title} diff --git a/src/proxy.ts b/src/proxy.ts index 028dd8f..5d45773 100644 --- a/src/proxy.ts +++ b/src/proxy.ts @@ -1,5 +1,5 @@ -import { NextResponse } from "next/server"; import type { NextFetchEvent, NextRequest } from "next/server"; +import { NextResponse } from "next/server"; import { getPostHogClient } from "@/lib/posthog/server"; const SKIP_PATHS = ["/api", "/_next/static", "/_next/image", "/ingest"]; diff --git a/v2-redirects.mjs b/v2-redirects.mjs new file mode 100644 index 0000000..1f068b1 --- /dev/null +++ b/v2-redirects.mjs @@ -0,0 +1,375 @@ +// V2 IA redirect map (CIP-3325): every legacy /stack/* URL → its new home. +// Derived from the migration map in IA.md; completeness is enforced by +// `scripts/validate-v2-redirects.ts` (every content/stack page must match an +// entry here, exact or wildcard). +// +// Gated behind ENABLE_V2_REDIRECTS=1 in next.config.mjs: during the migration +// the preview site serves BOTH trees (legacy at /stack, v2 at the root), so +// unmigrated content stays reachable. The flag flips on at merge; once +// content/stack is deleted these entries become unconditional (CIP-3335). +// +// Conventions (matching next.config.mjs): sources/destinations omit the +// "/docs" basePath. Order matters — specific entries before wildcards. +export const v2Redirects = [ + // === Roots === + { source: "/stack", destination: "/", permanent: true }, + { + source: "/stack/quickstart", + destination: "/get-started/quickstart", + permanent: true, + }, + { source: "/stack/cipherstash", destination: "/", permanent: true }, + { + source: "/stack/cipherstash/postgres", + destination: "/reference/eql", + permanent: true, + }, + { + source: "/stack/cipherstash/supabase", + destination: "/integrations/supabase", + permanent: true, + }, + + // === Encryption SDK section → Reference/stack + new homes === + { + source: "/stack/cipherstash/encryption", + destination: "/reference/stack", + permanent: true, + }, + { + source: "/stack/cipherstash/encryption/searchable-encryption", + destination: "/concepts/searchable-encryption", + permanent: true, + }, + { + source: "/stack/cipherstash/encryption/identity", + destination: "/concepts/identity-aware-encryption", + permanent: true, + }, + { + source: "/stack/cipherstash/encryption/drizzle", + destination: "/integrations/drizzle", + permanent: true, + }, + { + source: "/stack/cipherstash/encryption/prisma-next", + destination: "/integrations/prisma-next", + permanent: true, + }, + { + source: "/stack/cipherstash/encryption/dynamodb", + destination: "/integrations/aws/dynamodb", + permanent: true, + }, + { + source: "/stack/cipherstash/encryption/supabase", + destination: "/reference/stack/supabase", + permanent: true, + }, + { + source: "/stack/cipherstash/encryption/indexes", + destination: "/reference/eql/indexes", + permanent: true, + }, + { + source: "/stack/cipherstash/encryption/queries", + destination: "/reference/eql/operators", + permanent: true, + }, + // configuration, encrypt-decrypt, bulk-operations, models, schema, storing-data + { + source: "/stack/cipherstash/encryption/:path*", + destination: "/reference/stack/:path*", + permanent: true, + }, + + // === KMS section → Security + Reference/auth + Concepts === + { + source: "/stack/cipherstash/kms", + destination: "/security/zerokms", + permanent: true, + }, + { + source: "/stack/cipherstash/kms/cts", + destination: "/security/cts", + permanent: true, + }, + { + source: "/stack/cipherstash/kms/oidc", + destination: "/reference/auth/oidc-configuration", + permanent: true, + }, + { + source: "/stack/cipherstash/kms/access-keys", + destination: "/reference/auth/access-keys", + permanent: true, + }, + { + source: "/stack/cipherstash/kms/clients", + destination: "/reference/auth/clients", + permanent: true, + }, + { + source: "/stack/cipherstash/kms/disaster-recovery", + destination: "/security/availability-and-continuity", + permanent: true, + }, + { + source: "/stack/cipherstash/kms/keysets", + destination: "/concepts/key-management", + permanent: true, + }, + { + source: "/stack/cipherstash/kms/regions", + destination: "/security/zerokms", + permanent: true, + }, + { + source: "/stack/cipherstash/kms/configuration", + destination: "/reference/workspace/configuration", + permanent: true, + }, + + // === Proxy section → Reference/proxy + new homes === + { + source: "/stack/cipherstash/proxy", + destination: "/reference/proxy", + permanent: true, + }, + { + source: "/stack/cipherstash/proxy/audit", + destination: "/security/audit-logging", + permanent: true, + }, + { + source: "/stack/cipherstash/proxy/getting-started", + destination: "/integrations/aws/rds-aurora", + permanent: true, + }, + { + source: "/stack/cipherstash/proxy/encrypt-tool", + destination: "/guides/migration/encrypt-existing-data", + permanent: true, + }, + { + source: "/stack/cipherstash/proxy/searchable-json", + destination: "/reference/eql/json", + permanent: true, + }, + { + source: "/stack/cipherstash/proxy/troubleshooting", + destination: "/guides/troubleshooting/proxy", + permanent: true, + }, + // configuration, message-flow, multitenant + { + source: "/stack/cipherstash/proxy/:path*", + destination: "/reference/proxy/:path*", + permanent: true, + }, + + // === CLI section → Reference/cli === + { + source: "/stack/cipherstash/cli", + destination: "/reference/cli", + permanent: true, + }, + { + source: "/stack/cipherstash/cli/troubleshooting", + destination: "/guides/troubleshooting/cli", + permanent: true, + }, + { + source: "/stack/cipherstash/cli/:path*", + destination: "/reference/cli/:path*", + permanent: true, + }, + + // === Deploy section → Guides === + { + source: "/stack/deploy", + destination: "/guides/deployment", + permanent: true, + }, + { + source: "/stack/deploy/going-to-production", + destination: "/guides/deployment/going-to-production", + permanent: true, + }, + { + source: "/stack/deploy/aws-ecs", + destination: "/guides/deployment/proxy-deployment", + permanent: true, + }, + { + source: "/stack/deploy/bundling", + destination: "/guides/deployment/serverless-and-bundling", + permanent: true, + }, + { + source: "/stack/deploy/sst", + destination: "/guides/deployment/serverless-and-bundling", + permanent: true, + }, + { + source: "/stack/deploy/testing", + destination: "/guides/development/testing-and-ci", + permanent: true, + }, + { + source: "/stack/deploy/team-onboarding", + destination: "/guides/development/team-onboarding", + permanent: true, + }, + { + source: "/stack/deploy/troubleshooting", + destination: "/guides/troubleshooting", + permanent: true, + }, + + // === Reference section === + { source: "/stack/reference", destination: "/reference", permanent: true }, + { + source: "/stack/reference/what-is-cipherstash", + destination: "/get-started/what-is-cipherstash", + permanent: true, + }, + { + source: "/stack/reference/security-architecture", + destination: "/security/architecture", + permanent: true, + }, + { + source: "/stack/reference/compliance", + destination: "/security/compliance", + permanent: true, + }, + { + source: "/stack/reference/comparisons", + destination: "/compare", + permanent: true, + }, + { + source: "/stack/reference/comparisons/:path*", + destination: "/compare/:path*", + permanent: true, + }, + { + source: "/stack/reference/use-cases", + destination: "/solutions", + permanent: true, + }, + { + source: "/stack/reference/use-cases/ai-rag", + destination: "/solutions/ai-and-rag", + permanent: true, + }, + { + source: "/stack/reference/use-cases/compliance", + destination: "/security/compliance", + permanent: true, + }, + { + source: "/stack/reference/use-cases/:path*", + destination: "/solutions/:path*", + permanent: true, + }, + { + source: "/stack/reference/billing", + destination: "/reference/workspace/billing", + permanent: true, + }, + { + source: "/stack/reference/members", + destination: "/reference/workspace/members", + permanent: true, + }, + { + source: "/stack/reference/cipher-cell", + destination: "/reference/eql/payload-format", + permanent: true, + }, + { + source: "/stack/reference/eql-guide", + destination: "/reference/eql", + permanent: true, + }, + { + source: "/stack/reference/eql", + destination: "/reference/eql", + permanent: true, + }, + { + source: "/stack/reference/eql/:path*", + destination: "/reference/eql/:path*", + permanent: true, + }, + { + source: "/stack/reference/encryption-sdk", + destination: "/reference/stack", + permanent: true, + }, + { + source: "/stack/reference/error-handling", + destination: "/reference/stack/errors", + permanent: true, + }, + // NOTE: legacy "migration" page is the @cipherstash/protect→stack package + // rename guide, NOT data migration (see IA.md). + { + source: "/stack/reference/migration", + destination: "/reference/stack/upgrading-from-protect", + permanent: true, + }, + { + source: "/stack/reference/proxy-errors", + destination: "/reference/proxy/errors", + permanent: true, + }, + { + source: "/stack/reference/proxy-reference", + destination: "/reference/proxy/configuration", + permanent: true, + }, + { + source: "/stack/reference/drizzle", + destination: "/integrations/drizzle", + permanent: true, + }, + { + source: "/stack/reference/dashboard-supabase-integration", + destination: "/integrations/supabase", + permanent: true, + }, + { + source: "/stack/reference/discovery-session", + destination: "/get-started/choose-your-stack", + permanent: true, + }, + { + source: "/stack/reference/planning-guide", + destination: "/get-started/choose-your-stack", + permanent: true, + }, + { + source: "/stack/reference/supported-solutions", + destination: "/integrations", + permanent: true, + }, + { + source: "/stack/reference/agent-skills", + destination: "/reference/agent-skills", + permanent: true, + }, + { + source: "/stack/reference/glossary", + destination: "/reference/glossary", + permanent: true, + }, + // Generated TypeDoc API reference (scripts/generate-docs.ts output) + { + source: "/stack/reference/stack/:path*", + destination: "/reference/stack/:path*", + permanent: true, + }, +]; From af92d2c5cf3cda8eb11f3cbe03dc096351ae3097 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 17:20:00 +1000 Subject: [PATCH 002/151] fix(v2): quote colon-bearing frontmatter descriptions; unshadow /reference/eql MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two issues caught by smoke-testing the scaffold: - Stub descriptions containing ":" broke YAML frontmatter parsing (500s across the v2 tree) — descriptions are now quoted. - The AI-citation redirect "/reference/eql" → "/stack/reference/eql" shadowed the v2 /reference/eql page (redirects run before the filesystem); removed since the v2 page now serves that path. Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- content/docs/compare/index.mdx | 2 +- content/docs/concepts/index.mdx | 2 +- content/docs/get-started/index.mdx | 2 +- content/docs/guides/deployment/index.mdx | 2 +- content/docs/guides/development/index.mdx | 2 +- content/docs/guides/index.mdx | 2 +- content/docs/guides/migration/index.mdx | 2 +- content/docs/guides/troubleshooting/index.mdx | 2 +- content/docs/integrations/index.mdx | 2 +- content/docs/integrations/supabase/index.mdx | 2 +- content/docs/reference/auth/index.mdx | 2 +- content/docs/reference/cli/index.mdx | 2 +- content/docs/reference/eql/index.mdx | 2 +- content/docs/reference/index.mdx | 2 +- content/docs/reference/proxy/index.mdx | 2 +- content/docs/reference/stack/index.mdx | 2 +- content/docs/reference/workspace/index.mdx | 2 +- content/docs/security/compliance/index.mdx | 2 +- content/docs/security/index.mdx | 2 +- content/docs/solutions/index.mdx | 2 +- next.config.mjs | 9 ++++----- 21 files changed, 24 insertions(+), 25 deletions(-) diff --git a/content/docs/compare/index.mdx b/content/docs/compare/index.mdx index 0f07e95..8d19d4b 100644 --- a/content/docs/compare/index.mdx +++ b/content/docs/compare/index.mdx @@ -1,6 +1,6 @@ --- title: Comparisons -description: How CipherStash compares to other approaches to protecting data. +description: "How CipherStash compares to other approaches to protecting data." type: concept --- diff --git a/content/docs/concepts/index.mdx b/content/docs/concepts/index.mdx index 282c15b..26a565e 100644 --- a/content/docs/concepts/index.mdx +++ b/content/docs/concepts/index.mdx @@ -1,6 +1,6 @@ --- title: Concepts -description: How CipherStash works and how to think about searchable encryption, keys, and identity. +description: "How CipherStash works and how to think about searchable encryption, keys, and identity." type: concept --- diff --git a/content/docs/get-started/index.mdx b/content/docs/get-started/index.mdx index af235c6..0e08a05 100644 --- a/content/docs/get-started/index.mdx +++ b/content/docs/get-started/index.mdx @@ -1,6 +1,6 @@ --- title: Get started -description: What CipherStash is, a 10-minute quickstart, and how to choose your integration path. +description: "What CipherStash is, a 10-minute quickstart, and how to choose your integration path." type: tutorial --- diff --git a/content/docs/guides/deployment/index.mdx b/content/docs/guides/deployment/index.mdx index 771a593..8fb92ca 100644 --- a/content/docs/guides/deployment/index.mdx +++ b/content/docs/guides/deployment/index.mdx @@ -1,6 +1,6 @@ --- title: Deployment -description: Deployment documentation — being built as part of the docs V2 overhaul. +description: "Deployment documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/guides/development/index.mdx b/content/docs/guides/development/index.mdx index c0d4ab1..a7a049f 100644 --- a/content/docs/guides/development/index.mdx +++ b/content/docs/guides/development/index.mdx @@ -1,6 +1,6 @@ --- title: Development -description: Development documentation — being built as part of the docs V2 overhaul. +description: "Development documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/guides/index.mdx b/content/docs/guides/index.mdx index f034020..44308b2 100644 --- a/content/docs/guides/index.mdx +++ b/content/docs/guides/index.mdx @@ -1,6 +1,6 @@ --- title: Guides -description: Task-oriented guides: development workflow, data migration, deployment, and troubleshooting. +description: "Task-oriented guides: development workflow, data migration, deployment, and troubleshooting." type: guide --- diff --git a/content/docs/guides/migration/index.mdx b/content/docs/guides/migration/index.mdx index 690a307..97ac0dc 100644 --- a/content/docs/guides/migration/index.mdx +++ b/content/docs/guides/migration/index.mdx @@ -1,6 +1,6 @@ --- title: Data migration -description: Data migration documentation — being built as part of the docs V2 overhaul. +description: "Data migration documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/guides/troubleshooting/index.mdx b/content/docs/guides/troubleshooting/index.mdx index f1e926e..7354565 100644 --- a/content/docs/guides/troubleshooting/index.mdx +++ b/content/docs/guides/troubleshooting/index.mdx @@ -1,6 +1,6 @@ --- title: Troubleshooting -description: Troubleshooting documentation — being built as part of the docs V2 overhaul. +description: "Troubleshooting documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index dfcf78e..6d6e1bb 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -1,6 +1,6 @@ --- title: Integrations -description: Set up CipherStash with your platform, ORM, framework, auth provider, and runtime. +description: "Set up CipherStash with your platform, ORM, framework, auth provider, and runtime." type: tutorial --- diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 6066937..6330cf9 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -1,6 +1,6 @@ --- title: Supabase -description: Searchable, application-level encryption for your Supabase project — encrypt in your app, query in Postgres. +description: "Searchable, application-level encryption for your Supabase project — encrypt in your app, query in Postgres." type: tutorial components: [encryption, eql, auth] audience: [developer] diff --git a/content/docs/reference/auth/index.mdx b/content/docs/reference/auth/index.mdx index 2dea44b..1c05374 100644 --- a/content/docs/reference/auth/index.mdx +++ b/content/docs/reference/auth/index.mdx @@ -1,6 +1,6 @@ --- title: Auth -description: Auth documentation — being built as part of the docs V2 overhaul. +description: "Auth documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/reference/cli/index.mdx b/content/docs/reference/cli/index.mdx index 90d8cb3..2897d5c 100644 --- a/content/docs/reference/cli/index.mdx +++ b/content/docs/reference/cli/index.mdx @@ -1,6 +1,6 @@ --- title: CLI -description: CLI documentation — being built as part of the docs V2 overhaul. +description: "CLI documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index e312de2..276450a 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -1,6 +1,6 @@ --- title: EQL -description: EQL documentation — being built as part of the docs V2 overhaul. +description: "EQL documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/reference/index.mdx b/content/docs/reference/index.mdx index fc2c7e7..287825a 100644 --- a/content/docs/reference/index.mdx +++ b/content/docs/reference/index.mdx @@ -1,6 +1,6 @@ --- title: Reference -description: Precise API documentation for EQL, the Stack SDK, Auth, the CLI, and Proxy. +description: "Precise API documentation for EQL, the Stack SDK, Auth, the CLI, and Proxy." type: reference --- diff --git a/content/docs/reference/proxy/index.mdx b/content/docs/reference/proxy/index.mdx index 961c67b..d3d231e 100644 --- a/content/docs/reference/proxy/index.mdx +++ b/content/docs/reference/proxy/index.mdx @@ -1,6 +1,6 @@ --- title: Proxy -description: Proxy documentation — being built as part of the docs V2 overhaul. +description: "Proxy documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/reference/stack/index.mdx b/content/docs/reference/stack/index.mdx index 993c909..6d79f4c 100644 --- a/content/docs/reference/stack/index.mdx +++ b/content/docs/reference/stack/index.mdx @@ -1,6 +1,6 @@ --- title: Stack SDK -description: Stack SDK documentation — being built as part of the docs V2 overhaul. +description: "Stack SDK documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/reference/workspace/index.mdx b/content/docs/reference/workspace/index.mdx index 9bebe76..e97a9a6 100644 --- a/content/docs/reference/workspace/index.mdx +++ b/content/docs/reference/workspace/index.mdx @@ -1,6 +1,6 @@ --- title: Workspace & account -description: Workspace & account documentation — being built as part of the docs V2 overhaul. +description: "Workspace & account documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/security/compliance/index.mdx b/content/docs/security/compliance/index.mdx index 4a25ab6..70c433a 100644 --- a/content/docs/security/compliance/index.mdx +++ b/content/docs/security/compliance/index.mdx @@ -1,6 +1,6 @@ --- title: Compliance -description: Compliance documentation — being built as part of the docs V2 overhaul. +description: "Compliance documentation — being built as part of the docs V2 overhaul." --- This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/security/index.mdx b/content/docs/security/index.mdx index 6bb327d..da86585 100644 --- a/content/docs/security/index.mdx +++ b/content/docs/security/index.mdx @@ -1,6 +1,6 @@ --- title: Architecture & security -description: Trust model, components, availability, audit, and compliance — self-contained for security review. +description: "Trust model, components, availability, audit, and compliance — self-contained for security review." type: concept --- diff --git a/content/docs/solutions/index.mdx b/content/docs/solutions/index.mdx index 5189ccf..350020d 100644 --- a/content/docs/solutions/index.mdx +++ b/content/docs/solutions/index.mdx @@ -1,6 +1,6 @@ --- title: Solutions -description: What CipherStash solves: PII protection, HIPAA, AI/RAG, data residency, provable access. +description: "What CipherStash solves: PII protection, HIPAA, AI/RAG, data residency, provable access." type: concept --- diff --git a/next.config.mjs b/next.config.mjs index c6a0f69..5b12a91 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -303,11 +303,10 @@ const config = { destination: "/stack/deploy/aws-ecs", permanent: true, }, - { - source: "/reference/eql", - destination: "/stack/reference/eql", - permanent: false, - }, + // NOTE(v2): the AI-citation redirect "/reference/eql" → + // "/stack/reference/eql" was removed here — its source collides with + // the v2 IA's /reference/eql page, which now serves that traffic + // directly (CIP-3325). { source: "/platform/workspaces/key-sets", destination: "/stack/cipherstash/kms/keysets", From a6a4274828e98c56dae3148428822fcfeb1bd19c Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 17:43:40 +1000 Subject: [PATCH 003/151] feat(v2): serve the /docs landing inside the docs navigation; redirect bare root MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two fixes from preview review: - The bare domain root (Vercel preview URLs) 404'd because the app lives under the /docs basePath — added a basePath:false redirect / → /docs. In production only /docs/* reaches this app, so previews-only. - The /docs landing was a standalone (home) page disconnected from the v2 nav, with every link pointing at legacy /stack URLs. It's now content/docs/index.mdx rendered inside DocsLayout (sidebar + search), linking the v2 sections. The catch-all became optional ([[...slug]]) and the (home) route group is deleted (recoverable from history; CIP-3327 refines the landing content). - The landing's raw-markdown mirror serves at /docs/index.mdx (its URL is "/", which can't carry the .mdx suffix). Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- content/docs/index.mdx | 38 ++ content/docs/meta.json | 1 + next.config.mjs | 10 + src/app/(home)/layout.tsx | 6 - src/app/(home)/page.tsx | 346 ------------------ src/app/{[...slug] => [[...slug]]}/layout.tsx | 10 +- src/app/{[...slug] => [[...slug]]}/page.tsx | 24 +- .../v2/{[...slug] => [[...slug]]}/route.ts | 10 +- 8 files changed, 77 insertions(+), 368 deletions(-) create mode 100644 content/docs/index.mdx delete mode 100644 src/app/(home)/layout.tsx delete mode 100644 src/app/(home)/page.tsx rename src/app/{[...slug] => [[...slug]]}/layout.tsx (51%) rename src/app/{[...slug] => [[...slug]]}/page.tsx (70%) rename src/app/llms.mdx/v2/{[...slug] => [[...slug]]}/route.ts (73%) diff --git a/content/docs/index.mdx b/content/docs/index.mdx new file mode 100644 index 0000000..e46f40e --- /dev/null +++ b/content/docs/index.mdx @@ -0,0 +1,38 @@ +--- +title: CipherStash Docs +seoTitle: CipherStash Docs — Searchable encryption for Postgres +description: "Searchable field-level encryption, identity-bound keys, and cryptographic audit trails — built into your existing Postgres stack." +type: concept +audience: [developer, cto, ciso] +--- + +CipherStash encrypts your data at the field level. Every value gets its own +key, bound to an identity — and the ciphertext stays queryable in Postgres. +A breach, a compromised agent, a curious insider: they all see ciphertext +with no key. + +## Start here + +<Cards> + <Card title="Get started" href="/docs/get-started" description="What CipherStash is and your first encrypted fields in 10 minutes." /> + <Card title="Quickstart" href="/docs/stack/quickstart" description="Encrypt, store, query, and decrypt your first fields in any Postgres." /> + <Card title="Supabase" href="/docs/integrations/supabase" description="Searchable, application-level encryption for your Supabase project." /> + <Card title="Agent skills" href="/docs/stack/reference/agent-skills" description="CipherStash knowledge for Cursor, Copilot, and Claude Code." /> +</Cards> + +## Browse the docs + +<Cards> + <Card title="Integrations" href="/docs/integrations" description="Platforms, ORMs, frameworks, auth providers, and runtimes." /> + <Card title="Concepts" href="/docs/concepts" description="How searchable encryption, key management, and identity-aware encryption work." /> + <Card title="Guides" href="/docs/guides" description="Development workflow, data migration, deployment, and troubleshooting." /> + <Card title="Architecture & security" href="/docs/security" description="Trust model, components, availability, audit, and compliance — for security review." /> + <Card title="Solutions" href="/docs/solutions" description="PII protection, HIPAA, AI/RAG, data residency, and provable access." /> + <Card title="Reference" href="/docs/reference" description="EQL, the Stack SDK, Auth, the CLI, and Proxy — precise API documentation." /> +</Cards> + +## AI-ready documentation + +Every page is available as clean markdown: append `.mdx` to any page URL, or +fetch the whole corpus via [llms.txt](/docs/llms.txt) and +[llms-full.txt](/docs/llms-full.txt). diff --git a/content/docs/meta.json b/content/docs/meta.json index 8935d68..74f486e 100644 --- a/content/docs/meta.json +++ b/content/docs/meta.json @@ -1,5 +1,6 @@ { "pages": [ + "index", "get-started", "integrations", "concepts", diff --git a/next.config.mjs b/next.config.mjs index 5b12a91..990a7b3 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -16,6 +16,16 @@ const config = { reactStrictMode: true, async redirects() { return [ + // The app lives under the /docs basePath, so the bare domain root + // (e.g. on Vercel preview URLs) would otherwise 404. In production + // "/" never reaches this app — cipherstash.com routes only /docs/* + // here — so this only affects previews. + { + source: "/", + destination: "/docs", + basePath: false, + permanent: false, + }, // Vanity URL for the new IA (safe to ship ungated: the path has no // legacy traffic). Temporary until the v2 quickstart is canonical. { diff --git a/src/app/(home)/layout.tsx b/src/app/(home)/layout.tsx deleted file mode 100644 index c16b056..0000000 --- a/src/app/(home)/layout.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import { HomeLayout } from "fumadocs-ui/layouts/home"; -import { baseOptions } from "@/lib/layout.shared"; - -export default function Layout({ children }: LayoutProps<"/">) { - return <HomeLayout {...baseOptions()}>{children}</HomeLayout>; -} diff --git a/src/app/(home)/page.tsx b/src/app/(home)/page.tsx deleted file mode 100644 index 7cad1aa..0000000 --- a/src/app/(home)/page.tsx +++ /dev/null @@ -1,346 +0,0 @@ -import { - ArrowRight, - BookOpen, - Code, - Database, - ExternalLinkIcon, - FileText, - KeyRound, - Lock, - Search, - ShieldCheck, - Zap, -} from "lucide-react"; -import type { Metadata } from "next"; -import Link from "next/link"; -import type { ComponentType } from "react"; -import { - DrizzleLogo, - DynamoDBLogo, - PrismaLogo, - SupabaseLogo, -} from "@/components/integration-logos"; - -// The /docs landing page had no metadata (no <title>). `absolute` bypasses the -// root layout's "%s | CipherStash Docs" template so the title isn't doubled. -export const metadata: Metadata = { - title: { - absolute: "CipherStash Docs — Searchable encryption for Postgres", - }, - description: - "Data Level Access Control for Postgres. Searchable field-level encryption, identity-bound keys, and cryptographic audit trails.", - alternates: { canonical: "https://cipherstash.com/docs" }, -}; - -const monoClass = "font-[family-name:var(--font-fira-code)] tracking-[-0.02em]"; -const eyebrowClass = - "font-[family-name:var(--font-fira-code)] text-[10px] font-medium tracking-[0.16em] uppercase text-fd-primary"; - -const products = [ - { - title: "Encryption", - description: - "Searchable field-level encryption. Range queries, exact match, and free-text search over ciphertext. Sub-millisecond overhead.", - href: "/stack/cipherstash/encryption", - icon: Lock, - }, - { - title: "ZeroKMS", - description: - "The key management layer. Unique key per value, derived on demand, never stored. 100x faster than AWS KMS.", - href: "/stack/cipherstash/kms", - icon: KeyRound, - }, - { - title: "Proxy", - description: - "Transparent searchable encryption for existing PostgreSQL databases. Zero application code changes.", - href: "/stack/cipherstash/proxy", - icon: Database, - }, -]; - -const integrations: { - title: string; - description: string; - href: string; - logo: ComponentType<{ className?: string }>; -}[] = [ - { - title: "Supabase", - description: "Field-level encryption for your Supabase project.", - href: "/stack/cipherstash/supabase", - logo: SupabaseLogo, - }, - { - title: "Drizzle ORM", - description: "Encrypted column types and query operators for Drizzle.", - href: "/stack/cipherstash/encryption/drizzle", - logo: DrizzleLogo, - }, - { - title: "Prisma Next", - description: - "Searchable field-level encryption for Postgres with Prisma Next.", - href: "/stack/cipherstash/encryption/prisma-next", - logo: PrismaLogo, - }, - { - title: "DynamoDB", - description: - "Encrypted DynamoDB attributes with searchable equality lookups.", - href: "/stack/cipherstash/encryption/dynamodb", - logo: DynamoDBLogo, - }, -]; - -const resources = [ - { - title: "What is CipherStash?", - description: "DLAC, threat model, how it works", - href: "/stack/reference/what-is-cipherstash", - icon: ShieldCheck, - }, - { - title: "API Reference", - description: "SDK and API reference docs", - href: "/stack/reference", - icon: Code, - }, - { - title: "Agent Skills", - description: "CipherStash knowledge for your AI coding agent", - href: "/stack/reference/agent-skills", - icon: Zap, - }, - { - title: "Use Cases", - description: "AI/RAG, compliance, data residency", - href: "/stack/reference/use-cases", - icon: BookOpen, - }, -]; - -export default function HomePage() { - return ( - <main className="flex flex-col"> - {/* Hero */} - <section className="border-b border-fd-border"> - <div className="mx-auto w-full max-w-[1200px] px-6 pt-24 pb-16 md:px-12 md:pt-32 md:pb-20"> - <p className={eyebrowClass}>DLAC / DATA LEVEL ACCESS CONTROL</p> - <h1 - className={`mt-4 text-3xl font-medium text-fd-foreground md:text-5xl ${monoClass}`} - > - CipherStash Docs - </h1> - <p className="mt-4 max-w-2xl text-[17px] leading-relaxed text-fd-muted-foreground"> - Searchable field-level encryption. Identity-bound keys. - Cryptographic audit trails. Built into your existing Postgres stack. - </p> - - {/* Getting started cards */} - <div className="mt-10 grid gap-px bg-fd-border sm:grid-cols-2 border border-fd-border rounded-[2px] overflow-hidden"> - {[ - { - href: "/stack/quickstart", - icon: Zap, - title: "Quickstart", - desc: "Encrypt your first fields in 15 minutes.", - }, - { - href: "/stack/cipherstash/supabase", - icon: Database, - title: "Supabase", - desc: "Field-level encryption for Supabase.", - }, - { - href: "/stack/cipherstash/encryption/searchable-encryption", - icon: Search, - title: "Searchable encryption", - desc: "Equality, free text, range, ordering, and JSON queries over ciphertext.", - }, - { - href: "/stack/reference/agent-skills", - icon: Zap, - title: "Agent Skills", - desc: "CipherStash knowledge for Cursor, Copilot, Claude Code.", - }, - ].map((card) => ( - <Link - key={card.href} - href={card.href} - className="group flex items-center gap-4 bg-fd-background p-5 transition-colors hover:bg-fd-accent/50" - > - <div className="flex size-10 shrink-0 items-center justify-center rounded-[2px] bg-fd-primary/10 text-fd-primary"> - <card.icon className="size-5" /> - </div> - <div className="min-w-0"> - <p - className={`font-medium text-fd-foreground text-[15px] ${monoClass}`} - > - {card.title} - </p> - <p className="text-sm text-fd-muted-foreground"> - {card.desc} - </p> - </div> - <ArrowRight className="ml-auto size-4 shrink-0 text-fd-muted-foreground transition-colors group-hover:text-fd-primary" /> - </Link> - ))} - </div> - </div> - </section> - - {/* Products */} - <section className="mx-auto w-full max-w-[1200px] px-6 py-16 md:px-12 md:py-24"> - <p className={eyebrowClass}>§ 01 / THE STACK</p> - <h2 - className={`mt-3 text-xl font-medium text-fd-foreground md:text-2xl ${monoClass}`} - > - The Stack - </h2> - <p className="mt-2 text-fd-muted-foreground"> - Encryption, key management, and proxy. - </p> - - <div className="mt-8 grid gap-px bg-fd-border sm:grid-cols-3 border border-fd-border rounded-[2px] overflow-hidden"> - {products.map((product) => ( - <Link - key={product.title} - href={product.href} - className="group relative flex flex-col overflow-hidden bg-fd-background transition-colors hover:bg-fd-accent/50" - > - <div className="flex h-32 items-center justify-center border-b border-fd-border bg-fd-muted/20"> - <product.icon className="size-10 text-fd-muted-foreground/30" /> - </div> - <div className="flex flex-1 flex-col p-5"> - <div className="flex items-center gap-2"> - <product.icon className="size-4 text-fd-primary" /> - <h3 className={`font-medium text-fd-foreground ${monoClass}`}> - {product.title} - </h3> - </div> - <p className="mt-2 flex-1 text-sm leading-relaxed text-fd-muted-foreground"> - {product.description} - </p> - </div> - </Link> - ))} - </div> - </section> - - {/* Integrations */} - <section className="border-t border-fd-border"> - <div className="mx-auto w-full max-w-[1200px] px-6 py-16 md:px-12 md:py-24"> - <p className={eyebrowClass}>§ 02 / INTEGRATIONS</p> - <h2 - className={`mt-3 text-xl font-medium text-fd-foreground md:text-2xl ${monoClass}`} - > - Integrations - </h2> - <p className="mt-2 text-fd-muted-foreground"> - Drop-in encryption for the databases and ORMs you already use. - </p> - - <div className="mt-8 grid gap-px bg-fd-border sm:grid-cols-2 lg:grid-cols-4 border border-fd-border rounded-[2px] overflow-hidden"> - {integrations.map((integration) => ( - <Link - key={integration.title} - href={integration.href} - className="group flex flex-col items-center bg-fd-background p-6 text-center transition-colors hover:bg-fd-accent/50" - > - <div className="flex size-24 items-center justify-center"> - <integration.logo className="h-12 w-auto" /> - </div> - <h3 - className={`mt-4 font-medium text-fd-foreground ${monoClass}`} - > - {integration.title} - </h3> - <p className="mt-1 text-sm text-fd-muted-foreground"> - {integration.description} - </p> - </Link> - ))} - </div> - </div> - </section> - - {/* Resources */} - <section className="border-t border-fd-border"> - <div className="mx-auto w-full max-w-[1200px] px-6 py-16 md:px-12 md:py-24"> - <p className={eyebrowClass}>§ 03 / RESOURCES</p> - <h2 - className={`mt-3 text-xl font-medium text-fd-foreground md:text-2xl ${monoClass}`} - > - Resources - </h2> - - <div className="mt-8 grid gap-px bg-fd-border sm:grid-cols-2 lg:grid-cols-4 border border-fd-border rounded-[2px] overflow-hidden"> - {resources.map((resource) => ( - <Link - key={resource.title} - href={resource.href} - className="group flex items-start gap-3 bg-fd-background p-4 transition-colors hover:bg-fd-accent/50" - > - <resource.icon className="mt-0.5 size-5 shrink-0 text-fd-muted-foreground group-hover:text-fd-primary" /> - <div> - <p - className={`font-medium text-fd-foreground text-[14px] ${monoClass}`} - > - {resource.title} - </p> - <p className="mt-0.5 text-sm text-fd-muted-foreground"> - {resource.description} - </p> - </div> - </Link> - ))} - </div> - </div> - </section> - - {/* AI/LLM + CTA footer */} - <section className="border-t border-fd-border bg-fd-card/50"> - <div className="mx-auto flex w-full max-w-[1200px] flex-col items-center px-6 py-16 text-center md:px-12 md:py-20"> - <div className="flex size-10 items-center justify-center rounded-[2px] bg-fd-primary/10 text-fd-primary"> - <FileText className="size-5" /> - </div> - <h2 - className={`mt-4 text-xl font-medium text-fd-foreground md:text-2xl ${monoClass}`} - > - AI-ready documentation - </h2> - <p className="mx-auto mt-2 max-w-lg text-sm text-fd-muted-foreground"> - Every page is clean markdown. Feed it to your LLM. - </p> - <div className="mt-6 flex flex-wrap justify-center gap-3"> - <Link - href="/llms.txt" - className="inline-flex items-center gap-2 rounded-[2px] border border-fd-border px-4 py-2 text-sm font-medium text-fd-foreground transition-colors hover:border-fd-primary/40 hover:bg-fd-accent/50" - > - <FileText className="size-4" /> - llms.txt - </Link> - <Link - href="/llms-full.txt" - className="inline-flex items-center gap-2 rounded-[2px] border border-fd-border px-4 py-2 text-sm font-medium text-fd-foreground transition-colors hover:border-fd-primary/40 hover:bg-fd-accent/50" - > - <FileText className="size-4" /> - llms-full.txt - </Link> - <a - href="https://github.com/cipherstash/stack" - target="_blank" - rel="noopener noreferrer" - className="inline-flex items-center gap-2 rounded-[2px] border border-fd-border px-4 py-2 text-sm font-medium text-fd-foreground transition-colors hover:border-fd-primary/40 hover:bg-fd-accent/50" - > - <ExternalLinkIcon className="size-4" /> - GitHub - </a> - </div> - </div> - </section> - </main> - ); -} diff --git a/src/app/[...slug]/layout.tsx b/src/app/[[...slug]]/layout.tsx similarity index 51% rename from src/app/[...slug]/layout.tsx rename to src/app/[[...slug]]/layout.tsx index 2045bab..719ab35 100644 --- a/src/app/[...slug]/layout.tsx +++ b/src/app/[[...slug]]/layout.tsx @@ -2,11 +2,11 @@ import { DocsLayout } from "fumadocs-ui/layouts/docs"; import { baseOptions } from "@/lib/layout.shared"; import { v2source } from "@/lib/source"; -// Layout for the V2 IA tree (content/docs), served from the site root. -// A *required* catch-all (`[...slug]`, not `[[...slug]]`) so it never -// competes with the (home) route for "/". Static routes (/stack, /api, -// /og, …) take precedence over this segment as usual. -export default function Layout({ children }: LayoutProps<"/[...slug]">) { +// Layout for the V2 IA tree (content/docs), served from the site root — +// including the /docs landing page (content/docs/index.mdx), which renders +// inside the same navigation shell as every other page. Static routes +// (/stack, /api, /og, …) take precedence over this segment as usual. +export default function Layout({ children }: LayoutProps<"/[[...slug]]">) { return ( <DocsLayout tree={v2source.getPageTree()} {...baseOptions()}> {children} diff --git a/src/app/[...slug]/page.tsx b/src/app/[[...slug]]/page.tsx similarity index 70% rename from src/app/[...slug]/page.tsx rename to src/app/[[...slug]]/page.tsx index bc6b521..5efba49 100644 --- a/src/app/[...slug]/page.tsx +++ b/src/app/[[...slug]]/page.tsx @@ -12,10 +12,18 @@ import { gitConfig } from "@/lib/layout.shared"; import { v2source } from "@/lib/source"; import { getMDXComponents } from "@/mdx-components"; -// Page route for the V2 IA tree (content/docs). Mirrors the legacy -// /stack/[[...slug]] route; the legacy route is deleted when the migration -// completes (see IA.md). -export default async function Page(props: PageProps<"/[...slug]">) { +// Page route for the V2 IA tree (content/docs), including the /docs landing +// page. Mirrors the legacy /stack/[[...slug]] route; the legacy route is +// deleted when the migration completes (see IA.md). + +// The landing page's URL is "/", which would produce "/docs/.mdx" — serve its +// raw-markdown mirror at /docs/index.mdx instead (normalized back to the root +// slug in the llms.mdx/v2 route). +function markdownUrl(pageUrl: string): string { + return `/docs${pageUrl === "/" ? "/index" : pageUrl}.mdx`; +} + +export default async function Page(props: PageProps<"/[[...slug]]">) { const params = await props.params; const page = v2source.getPage(params.slug); if (!page) notFound(); @@ -29,9 +37,9 @@ export default async function Page(props: PageProps<"/[...slug]">) { {page.data.description} </DocsDescription> <div className="flex flex-row gap-2 items-center border-b pb-6"> - <LLMCopyButton markdownUrl={`/docs${page.url}.mdx`} /> + <LLMCopyButton markdownUrl={markdownUrl(page.url)} /> <ViewOptions - markdownUrl={`/docs${page.url}.mdx`} + markdownUrl={markdownUrl(page.url)} githubUrl={`https://github.com/${gitConfig.user}/${gitConfig.repo}/blob/${gitConfig.branch}/content/docs/${page.path}`} /> </div> @@ -51,14 +59,14 @@ export async function generateStaticParams() { } export async function generateMetadata( - props: PageProps<"/[...slug]">, + props: PageProps<"/[[...slug]]">, ): Promise<Metadata> { const params = await props.params; const page = v2source.getPage(params.slug); if (!page) notFound(); const title = page.data.seoTitle ?? page.data.title; - const url = `https://cipherstash.com/docs${page.url}`; + const url = `https://cipherstash.com/docs${page.url === "/" ? "" : page.url}`; return { title, diff --git a/src/app/llms.mdx/v2/[...slug]/route.ts b/src/app/llms.mdx/v2/[[...slug]]/route.ts similarity index 73% rename from src/app/llms.mdx/v2/[...slug]/route.ts rename to src/app/llms.mdx/v2/[[...slug]]/route.ts index 77dfd1e..fc9f251 100644 --- a/src/app/llms.mdx/v2/[...slug]/route.ts +++ b/src/app/llms.mdx/v2/[[...slug]]/route.ts @@ -9,10 +9,14 @@ export const revalidate = false; export async function GET( req: Request, - { params }: RouteContext<"/llms.mdx/v2/[...slug]">, + { params }: RouteContext<"/llms.mdx/v2/[[...slug]]">, ) { const { slug } = await params; - const page = v2source.getPage(slug); + // The landing page's markdown mirror is served at /docs/index.mdx (its URL + // is "/", which can't carry an .mdx suffix) — normalize back to the root. + const normalized = + !slug || (slug.length === 1 && slug[0] === "index") ? [] : slug; + const page = v2source.getPage(normalized); if (!page) notFound(); const posthog = getPostHogClient(); @@ -22,7 +26,7 @@ export async function GET( event: "llms_mdx_page_fetched", properties: { $current_url: req.url, - page_slug: slug?.join("/") ?? "", + page_slug: normalized.join("/"), page_title: page.data.title, referer: req.headers.get("referer") ?? "", user_agent: req.headers.get("user-agent") ?? "", From 5c34cefc6f16721076c71b4f254c0d5537e792bc Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 17:45:47 +1000 Subject: [PATCH 004/151] docs(v2): note landing-page state in IA.md checklist Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- IA.md | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/IA.md b/IA.md index 4c94f3d..f9c6f9e 100644 --- a/IA.md +++ b/IA.md @@ -35,7 +35,9 @@ live at `/docs/errors/<code>` — permanent, never restructured (CIP-3338). - [ ] `/get-started/quickstart` — rewritten on EQL v3 (fixes `cs_match_v1`, broken scaffold imports) - [ ] `/get-started/choose-your-stack` — static matrix v1 (platform × ORM × auth) - [ ] `/get-started/examples` — runnable example apps index -- [ ] `/docs` landing page (replaces/updates `(home)` route: what-is + audience router) +- [ ] `/docs` landing page 🚧 — now `content/docs/index.mdx` rendered inside the docs + nav (the old standalone `(home)` route is deleted; recoverable from git history). + CIP-3327 refines the content (what-is + audience router) ## Integrations — CIP-3328 (Supabase), CIP-3330 (auth), CIP-3336 (rest) From b604d4ff128b992849692afe6f673ae4992eb715 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 17:54:54 +1000 Subject: [PATCH 005/151] fix(v2): merge folder index pages into their nav rows MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Listing "index" explicitly in meta.json pages forced each section's index out as a separate child item with the same title as its folder (clicking "Get started" opened a sub-nav containing another "Get started"). With index unlisted, Fumadocs merges it into the folder row: the folder itself links to the page, and children are only real sub-pages (Integrations → Supabase, not Integrations → Integrations). The root meta.json keeps "index" — at tree root there is no folder row to merge into, so the landing needs its own sidebar item. Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- content/docs/compare/meta.json | 2 +- content/docs/concepts/meta.json | 2 +- content/docs/get-started/meta.json | 2 +- content/docs/guides/deployment/meta.json | 2 +- content/docs/guides/development/meta.json | 2 +- content/docs/guides/meta.json | 2 +- content/docs/guides/migration/meta.json | 2 +- content/docs/guides/troubleshooting/meta.json | 2 +- content/docs/integrations/meta.json | 2 +- content/docs/integrations/supabase/meta.json | 2 +- content/docs/reference/auth/meta.json | 2 +- content/docs/reference/cli/meta.json | 2 +- content/docs/reference/eql/meta.json | 2 +- content/docs/reference/meta.json | 2 +- content/docs/reference/proxy/meta.json | 2 +- content/docs/reference/stack/meta.json | 2 +- content/docs/reference/workspace/meta.json | 2 +- content/docs/security/compliance/meta.json | 2 +- content/docs/security/meta.json | 2 +- content/docs/solutions/meta.json | 2 +- 20 files changed, 20 insertions(+), 20 deletions(-) diff --git a/content/docs/compare/meta.json b/content/docs/compare/meta.json index 3e374e5..76e9696 100644 --- a/content/docs/compare/meta.json +++ b/content/docs/compare/meta.json @@ -1,5 +1,5 @@ { "title": "Comparisons", "icon": "Scale", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/concepts/meta.json b/content/docs/concepts/meta.json index ca4b08b..521f756 100644 --- a/content/docs/concepts/meta.json +++ b/content/docs/concepts/meta.json @@ -1,5 +1,5 @@ { "title": "Concepts", "icon": "Lightbulb", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/get-started/meta.json b/content/docs/get-started/meta.json index 2d9cfb8..3f92dab 100644 --- a/content/docs/get-started/meta.json +++ b/content/docs/get-started/meta.json @@ -1,5 +1,5 @@ { "title": "Get started", "icon": "Rocket", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/guides/deployment/meta.json b/content/docs/guides/deployment/meta.json index 0bbd244..e2ffe90 100644 --- a/content/docs/guides/deployment/meta.json +++ b/content/docs/guides/deployment/meta.json @@ -1,4 +1,4 @@ { "title": "Deployment", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/guides/development/meta.json b/content/docs/guides/development/meta.json index 24f8878..203f9c9 100644 --- a/content/docs/guides/development/meta.json +++ b/content/docs/guides/development/meta.json @@ -1,4 +1,4 @@ { "title": "Development", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/guides/meta.json b/content/docs/guides/meta.json index 810cf95..498dd61 100644 --- a/content/docs/guides/meta.json +++ b/content/docs/guides/meta.json @@ -1,5 +1,5 @@ { "title": "Guides", "icon": "Wrench", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/guides/migration/meta.json b/content/docs/guides/migration/meta.json index db4e68b..941c504 100644 --- a/content/docs/guides/migration/meta.json +++ b/content/docs/guides/migration/meta.json @@ -1,4 +1,4 @@ { "title": "Data migration", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/guides/troubleshooting/meta.json b/content/docs/guides/troubleshooting/meta.json index e5715ad..82c3c83 100644 --- a/content/docs/guides/troubleshooting/meta.json +++ b/content/docs/guides/troubleshooting/meta.json @@ -1,4 +1,4 @@ { "title": "Troubleshooting", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/integrations/meta.json b/content/docs/integrations/meta.json index 62604e2..13995d5 100644 --- a/content/docs/integrations/meta.json +++ b/content/docs/integrations/meta.json @@ -1,5 +1,5 @@ { "title": "Integrations", "icon": "Blocks", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/integrations/supabase/meta.json b/content/docs/integrations/supabase/meta.json index a61c668..b4690bf 100644 --- a/content/docs/integrations/supabase/meta.json +++ b/content/docs/integrations/supabase/meta.json @@ -1,5 +1,5 @@ { "title": "Supabase", "icon": "Supabase", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/reference/auth/meta.json b/content/docs/reference/auth/meta.json index 943c560..d801d12 100644 --- a/content/docs/reference/auth/meta.json +++ b/content/docs/reference/auth/meta.json @@ -1,4 +1,4 @@ { "title": "Auth", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/reference/cli/meta.json b/content/docs/reference/cli/meta.json index 075b6da..0a67892 100644 --- a/content/docs/reference/cli/meta.json +++ b/content/docs/reference/cli/meta.json @@ -1,4 +1,4 @@ { "title": "CLI", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/reference/eql/meta.json b/content/docs/reference/eql/meta.json index be23fb4..d58bc8f 100644 --- a/content/docs/reference/eql/meta.json +++ b/content/docs/reference/eql/meta.json @@ -1,4 +1,4 @@ { "title": "EQL", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/reference/meta.json b/content/docs/reference/meta.json index 38c38b5..b74408a 100644 --- a/content/docs/reference/meta.json +++ b/content/docs/reference/meta.json @@ -1,5 +1,5 @@ { "title": "Reference", "icon": "Library", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/reference/proxy/meta.json b/content/docs/reference/proxy/meta.json index a64115c..85de4fd 100644 --- a/content/docs/reference/proxy/meta.json +++ b/content/docs/reference/proxy/meta.json @@ -1,4 +1,4 @@ { "title": "Proxy", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/reference/stack/meta.json b/content/docs/reference/stack/meta.json index 3d44235..d0f86af 100644 --- a/content/docs/reference/stack/meta.json +++ b/content/docs/reference/stack/meta.json @@ -1,4 +1,4 @@ { "title": "Stack SDK", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/reference/workspace/meta.json b/content/docs/reference/workspace/meta.json index 2c03700..1dc0214 100644 --- a/content/docs/reference/workspace/meta.json +++ b/content/docs/reference/workspace/meta.json @@ -1,4 +1,4 @@ { "title": "Workspace & account", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/security/compliance/meta.json b/content/docs/security/compliance/meta.json index 346ed94..e7c6fa5 100644 --- a/content/docs/security/compliance/meta.json +++ b/content/docs/security/compliance/meta.json @@ -1,4 +1,4 @@ { "title": "Compliance", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/security/meta.json b/content/docs/security/meta.json index 7a3eb64..5aa7273 100644 --- a/content/docs/security/meta.json +++ b/content/docs/security/meta.json @@ -1,5 +1,5 @@ { "title": "Architecture & security", "icon": "Shield", - "pages": ["index", "..."] + "pages": ["..."] } diff --git a/content/docs/solutions/meta.json b/content/docs/solutions/meta.json index 6b5983d..ac4f22b 100644 --- a/content/docs/solutions/meta.json +++ b/content/docs/solutions/meta.json @@ -1,5 +1,5 @@ { "title": "Solutions", "icon": "Target", - "pages": ["index", "..."] + "pages": ["..."] } From f5c9e81192d2aaed038128a3a7da7a7ce0686a2f Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 18:33:33 +1000 Subject: [PATCH 006/151] fix(v2): no chevron on nav items without sub-pages Folders whose only page is their index still rendered as collapsible sidebar folders with a chevron pointing at nothing. getV2PageTree() now collapses such folders into plain page items (recursively, so guides/* and reference/* leaves flatten too); a section becomes a folder again automatically when its first real sub-page lands. Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- src/app/[[...slug]]/layout.tsx | 4 ++-- src/lib/source.ts | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/src/app/[[...slug]]/layout.tsx b/src/app/[[...slug]]/layout.tsx index 719ab35..d121273 100644 --- a/src/app/[[...slug]]/layout.tsx +++ b/src/app/[[...slug]]/layout.tsx @@ -1,6 +1,6 @@ import { DocsLayout } from "fumadocs-ui/layouts/docs"; import { baseOptions } from "@/lib/layout.shared"; -import { v2source } from "@/lib/source"; +import { getV2PageTree } from "@/lib/source"; // Layout for the V2 IA tree (content/docs), served from the site root — // including the /docs landing page (content/docs/index.mdx), which renders @@ -8,7 +8,7 @@ import { v2source } from "@/lib/source"; // (/stack, /api, /og, …) take precedence over this segment as usual. export default function Layout({ children }: LayoutProps<"/[[...slug]]">) { return ( - <DocsLayout tree={v2source.getPageTree()} {...baseOptions()}> + <DocsLayout tree={getV2PageTree()} {...baseOptions()}> {children} </DocsLayout> ); diff --git a/src/lib/source.ts b/src/lib/source.ts index d0bcb1c..c056250 100644 --- a/src/lib/source.ts +++ b/src/lib/source.ts @@ -1,4 +1,5 @@ import { docs, v2docs } from "fumadocs-mdx:collections/server"; +import type * as PageTree from "fumadocs-core/page-tree"; import { type InferPageType, loader } from "fumadocs-core/source"; import { icons } from "lucide-react"; import { createElement } from "react"; @@ -32,6 +33,25 @@ export const v2source = loader({ icon: resolveIcon, }); +// Sidebar folders whose only page is their index render with a collapse +// chevron pointing at nothing. Collapse such folders into plain page items; +// they become folders again automatically once real sub-pages land. +function flattenEmptyFolders(nodes: PageTree.Node[]): PageTree.Node[] { + return nodes.map((node) => { + if (node.type !== "folder") return node; + const children = flattenEmptyFolders(node.children); + if (children.length === 0 && node.index) { + return { ...node.index, icon: node.index.icon ?? node.icon }; + } + return { ...node, children }; + }); +} + +export function getV2PageTree(): PageTree.Root { + const tree = v2source.getPageTree(); + return { ...tree, children: flattenEmptyFolders(tree.children) }; +} + export function getPageImage(page: InferPageType<typeof source>) { const segments = [...page.slugs, "image.png"]; From 85149324539c82644c0c6eaf9842afb1ad417257 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 18:40:54 +1000 Subject: [PATCH 007/151] fix(v2): make all MDX links basePath-relative MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MDX links (markdown and Card hrefs) render through the Link component, which prefixes the /docs basePath — hardcoded /docs/... links rendered as /docs/docs/... and 404'd. Convention (enforce via CIP-3349 lint): internal links in content are always basePath-relative. Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- content/docs/compare/index.mdx | 2 +- content/docs/concepts/index.mdx | 2 +- content/docs/get-started/index.mdx | 2 +- content/docs/guides/deployment/index.mdx | 2 +- content/docs/guides/development/index.mdx | 2 +- content/docs/guides/index.mdx | 2 +- content/docs/guides/migration/index.mdx | 2 +- content/docs/guides/troubleshooting/index.mdx | 2 +- content/docs/index.mdx | 24 +++++++++---------- content/docs/integrations/index.mdx | 2 +- content/docs/integrations/supabase/index.mdx | 2 +- content/docs/reference/auth/index.mdx | 2 +- content/docs/reference/cli/index.mdx | 2 +- content/docs/reference/eql/index.mdx | 2 +- content/docs/reference/index.mdx | 2 +- content/docs/reference/proxy/index.mdx | 2 +- content/docs/reference/stack/index.mdx | 2 +- content/docs/reference/workspace/index.mdx | 2 +- content/docs/security/compliance/index.mdx | 2 +- content/docs/security/index.mdx | 2 +- content/docs/solutions/index.mdx | 2 +- 21 files changed, 32 insertions(+), 32 deletions(-) diff --git a/content/docs/compare/index.mdx b/content/docs/compare/index.mdx index 8d19d4b..5c34ec1 100644 --- a/content/docs/compare/index.mdx +++ b/content/docs/compare/index.mdx @@ -6,4 +6,4 @@ type: concept This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/concepts/index.mdx b/content/docs/concepts/index.mdx index 26a565e..3d36567 100644 --- a/content/docs/concepts/index.mdx +++ b/content/docs/concepts/index.mdx @@ -6,4 +6,4 @@ type: concept This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/get-started/index.mdx b/content/docs/get-started/index.mdx index 0e08a05..a92e606 100644 --- a/content/docs/get-started/index.mdx +++ b/content/docs/get-started/index.mdx @@ -6,4 +6,4 @@ type: tutorial This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/guides/deployment/index.mdx b/content/docs/guides/deployment/index.mdx index 8fb92ca..f269e42 100644 --- a/content/docs/guides/deployment/index.mdx +++ b/content/docs/guides/deployment/index.mdx @@ -5,4 +5,4 @@ description: "Deployment documentation — being built as part of the docs V2 ov This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/guides/development/index.mdx b/content/docs/guides/development/index.mdx index a7a049f..3ac286f 100644 --- a/content/docs/guides/development/index.mdx +++ b/content/docs/guides/development/index.mdx @@ -5,4 +5,4 @@ description: "Development documentation — being built as part of the docs V2 o This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/guides/index.mdx b/content/docs/guides/index.mdx index 44308b2..8d6647e 100644 --- a/content/docs/guides/index.mdx +++ b/content/docs/guides/index.mdx @@ -6,4 +6,4 @@ type: guide This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/guides/migration/index.mdx b/content/docs/guides/migration/index.mdx index 97ac0dc..cd728e5 100644 --- a/content/docs/guides/migration/index.mdx +++ b/content/docs/guides/migration/index.mdx @@ -5,4 +5,4 @@ description: "Data migration documentation — being built as part of the docs V This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/guides/troubleshooting/index.mdx b/content/docs/guides/troubleshooting/index.mdx index 7354565..d049ef4 100644 --- a/content/docs/guides/troubleshooting/index.mdx +++ b/content/docs/guides/troubleshooting/index.mdx @@ -5,4 +5,4 @@ description: "Troubleshooting documentation — being built as part of the docs This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/index.mdx b/content/docs/index.mdx index e46f40e..a2f2d22 100644 --- a/content/docs/index.mdx +++ b/content/docs/index.mdx @@ -14,25 +14,25 @@ with no key. ## Start here <Cards> - <Card title="Get started" href="/docs/get-started" description="What CipherStash is and your first encrypted fields in 10 minutes." /> - <Card title="Quickstart" href="/docs/stack/quickstart" description="Encrypt, store, query, and decrypt your first fields in any Postgres." /> - <Card title="Supabase" href="/docs/integrations/supabase" description="Searchable, application-level encryption for your Supabase project." /> - <Card title="Agent skills" href="/docs/stack/reference/agent-skills" description="CipherStash knowledge for Cursor, Copilot, and Claude Code." /> + <Card title="Get started" href="/get-started" description="What CipherStash is and your first encrypted fields in 10 minutes." /> + <Card title="Quickstart" href="/stack/quickstart" description="Encrypt, store, query, and decrypt your first fields in any Postgres." /> + <Card title="Supabase" href="/integrations/supabase" description="Searchable, application-level encryption for your Supabase project." /> + <Card title="Agent skills" href="/stack/reference/agent-skills" description="CipherStash knowledge for Cursor, Copilot, and Claude Code." /> </Cards> ## Browse the docs <Cards> - <Card title="Integrations" href="/docs/integrations" description="Platforms, ORMs, frameworks, auth providers, and runtimes." /> - <Card title="Concepts" href="/docs/concepts" description="How searchable encryption, key management, and identity-aware encryption work." /> - <Card title="Guides" href="/docs/guides" description="Development workflow, data migration, deployment, and troubleshooting." /> - <Card title="Architecture & security" href="/docs/security" description="Trust model, components, availability, audit, and compliance — for security review." /> - <Card title="Solutions" href="/docs/solutions" description="PII protection, HIPAA, AI/RAG, data residency, and provable access." /> - <Card title="Reference" href="/docs/reference" description="EQL, the Stack SDK, Auth, the CLI, and Proxy — precise API documentation." /> + <Card title="Integrations" href="/integrations" description="Platforms, ORMs, frameworks, auth providers, and runtimes." /> + <Card title="Concepts" href="/concepts" description="How searchable encryption, key management, and identity-aware encryption work." /> + <Card title="Guides" href="/guides" description="Development workflow, data migration, deployment, and troubleshooting." /> + <Card title="Architecture & security" href="/security" description="Trust model, components, availability, audit, and compliance — for security review." /> + <Card title="Solutions" href="/solutions" description="PII protection, HIPAA, AI/RAG, data residency, and provable access." /> + <Card title="Reference" href="/reference" description="EQL, the Stack SDK, Auth, the CLI, and Proxy — precise API documentation." /> </Cards> ## AI-ready documentation Every page is available as clean markdown: append `.mdx` to any page URL, or -fetch the whole corpus via [llms.txt](/docs/llms.txt) and -[llms-full.txt](/docs/llms-full.txt). +fetch the whole corpus via [llms.txt](/llms.txt) and +[llms-full.txt](/llms-full.txt). diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index 6d6e1bb..6148388 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -6,4 +6,4 @@ type: tutorial This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 6330cf9..86e2ef6 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -17,4 +17,4 @@ and stay queryable with the same Supabase.js calls you already use. This page is being rebuilt as part of the docs V2 overhaul ([CIP-3328](https://linear.app/cipherstash/issue/CIP-3328)). Until it lands, the current Supabase integration guide lives at -[CipherStash + Supabase](/docs/stack/cipherstash/supabase). +[CipherStash + Supabase](/stack/cipherstash/supabase). diff --git a/content/docs/reference/auth/index.mdx b/content/docs/reference/auth/index.mdx index 1c05374..9bea074 100644 --- a/content/docs/reference/auth/index.mdx +++ b/content/docs/reference/auth/index.mdx @@ -5,4 +5,4 @@ description: "Auth documentation — being built as part of the docs V2 overhaul This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/reference/cli/index.mdx b/content/docs/reference/cli/index.mdx index 2897d5c..8eeffd3 100644 --- a/content/docs/reference/cli/index.mdx +++ b/content/docs/reference/cli/index.mdx @@ -5,4 +5,4 @@ description: "CLI documentation — being built as part of the docs V2 overhaul. This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index 276450a..551c51e 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -5,4 +5,4 @@ description: "EQL documentation — being built as part of the docs V2 overhaul. This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/reference/index.mdx b/content/docs/reference/index.mdx index 287825a..997dff4 100644 --- a/content/docs/reference/index.mdx +++ b/content/docs/reference/index.mdx @@ -6,4 +6,4 @@ type: reference This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/reference/proxy/index.mdx b/content/docs/reference/proxy/index.mdx index d3d231e..8e59184 100644 --- a/content/docs/reference/proxy/index.mdx +++ b/content/docs/reference/proxy/index.mdx @@ -5,4 +5,4 @@ description: "Proxy documentation — being built as part of the docs V2 overhau This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/reference/stack/index.mdx b/content/docs/reference/stack/index.mdx index 6d79f4c..edac1c3 100644 --- a/content/docs/reference/stack/index.mdx +++ b/content/docs/reference/stack/index.mdx @@ -5,4 +5,4 @@ description: "Stack SDK documentation — being built as part of the docs V2 ove This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/reference/workspace/index.mdx b/content/docs/reference/workspace/index.mdx index e97a9a6..177bb82 100644 --- a/content/docs/reference/workspace/index.mdx +++ b/content/docs/reference/workspace/index.mdx @@ -5,4 +5,4 @@ description: "Workspace & account documentation — being built as part of the d This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/security/compliance/index.mdx b/content/docs/security/compliance/index.mdx index 70c433a..9af190d 100644 --- a/content/docs/security/compliance/index.mdx +++ b/content/docs/security/compliance/index.mdx @@ -5,4 +5,4 @@ description: "Compliance documentation — being built as part of the docs V2 ov This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/security/index.mdx b/content/docs/security/index.mdx index da86585..33b00fe 100644 --- a/content/docs/security/index.mdx +++ b/content/docs/security/index.mdx @@ -6,4 +6,4 @@ type: concept This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/solutions/index.mdx b/content/docs/solutions/index.mdx index 350020d..36278b5 100644 --- a/content/docs/solutions/index.mdx +++ b/content/docs/solutions/index.mdx @@ -6,4 +6,4 @@ type: concept This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). -Until it lands, current documentation lives in the [existing docs](/docs/stack). +Until it lands, current documentation lives in the [existing docs](/stack). From d415a48032f46fcb002cbbb52ed788a198b1de46 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 18:55:57 +1000 Subject: [PATCH 008/151] feat(v2): EQL v3 reference section (CIP-3326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Seven pages replacing the v2-era EQL reference, written against the eql_v3 branch of cipherstash/encrypt-query-language (3.0.0): - index: what EQL is, the v3 domain-variant model, install (single SQL script, idempotent), dbdev, Docker, migration/runtime permission split, managed-Postgres rationale - types: 10 scalar families × variants matrix; bool storage-only; _ord/_ord_ore twins; index terms per variant - operators: per-variant support matrix, typed-operand rule, no-LIKE, fail-loud blockers, query shapes, function-form equivalents - indexes: functional indexes on term extractors, engagement requirements, sort-key form for index-streamed ORDER BY, EXPLAIN checklist, large-table build guidance - json: ste_vec model, per-node-type terms (hm XOR oc), containment + GIN, field access, path queries, blocked native jsonb operators - functions: comparisons, extractors, min/max only (no SUM/AVG), version() - payload-format: v/i/c envelope (wire version still v:2), hm/ob/bf term keys, sv document shape, annotated examples (absorbs the legacy CipherCell page) Cross-page consistency verified against the shipped SQL: equality on _ord variants compares ORE terms (no hm in _ord payloads), and bare ORDER BY is correct but extractor-form sort keys stream from the index. Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- IA.md | 14 +- content/docs/reference/eql/functions.mdx | 112 +++++++++ content/docs/reference/eql/index.mdx | 135 ++++++++++- content/docs/reference/eql/indexes.mdx | 182 ++++++++++++++ content/docs/reference/eql/json.mdx | 228 ++++++++++++++++++ content/docs/reference/eql/meta.json | 9 +- content/docs/reference/eql/operators.mdx | 153 ++++++++++++ content/docs/reference/eql/payload-format.mdx | 123 ++++++++++ content/docs/reference/eql/types.mdx | 95 ++++++++ 9 files changed, 1040 insertions(+), 11 deletions(-) create mode 100644 content/docs/reference/eql/functions.mdx create mode 100644 content/docs/reference/eql/indexes.mdx create mode 100644 content/docs/reference/eql/json.mdx create mode 100644 content/docs/reference/eql/operators.mdx create mode 100644 content/docs/reference/eql/payload-format.mdx create mode 100644 content/docs/reference/eql/types.mdx diff --git a/IA.md b/IA.md index f9c6f9e..b51956c 100644 --- a/IA.md +++ b/IA.md @@ -131,13 +131,13 @@ live at `/docs/errors/<code>` — permanent, never restructured (CIP-3338). - [x] Section scaffold 🚧 (eql, stack, auth, cli, proxy, workspace) - **EQL (v3 rewrite — CIP-3326):** -- [ ] `/reference/eql` — overview + install (single SQL file, permissions split, dbdev, Docker) -- [ ] `/reference/eql/types` — 10 scalar families × variants + `eql_v3.json` -- [ ] `/reference/eql/operators` — per-variant matrix incl. what RAISES; typed-operand rule -- [ ] `/reference/eql/indexes` — functional indexes on extractors; Supabase-compatible -- [ ] `/reference/eql/json` — ste_vec, path queries -- [ ] `/reference/eql/functions` — incl. aggregates (min/max only) -- [ ] `/reference/eql/payload-format` — v/i/c envelope, hm/ob/bf (absorbs cipher-cell) +- [x] `/reference/eql` — overview + install (single SQL file, permissions split, dbdev, Docker) +- [x] `/reference/eql/types` — 10 scalar families × variants + `eql_v3.json` +- [x] `/reference/eql/operators` — per-variant matrix incl. what RAISES; typed-operand rule +- [x] `/reference/eql/indexes` — functional indexes on extractors; Supabase-compatible +- [x] `/reference/eql/json` — ste_vec, path queries +- [x] `/reference/eql/functions` — incl. aggregates (min/max only) +- [x] `/reference/eql/payload-format` — v/i/c envelope, hm/ob/bf (absorbs cipher-cell) - **Stack SDK:** - [ ] `/reference/stack` — client + configuration (port encryption/* pages) - [ ] `/reference/stack/schema` diff --git a/content/docs/reference/eql/functions.mdx b/content/docs/reference/eql/functions.mdx new file mode 100644 index 0000000..210ca31 --- /dev/null +++ b/content/docs/reference/eql/functions.mdx @@ -0,0 +1,112 @@ +--- +title: Functions +description: "The eql_v3 function surface: comparison functions, index-term extractors, MIN/MAX aggregates, JSON functions, and version reporting." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Everything EQL exposes lives in the `eql_v3` schema. Most functions are generated per [domain variant](/reference/eql/types), so PostgreSQL's overload resolution picks the right implementation from the argument type. As with operators, arguments must be typed — see [the typed-operand rule](/reference/eql/operators). + +## Comparison functions + +Function forms of the comparison operators, for platforms that disallow custom operators. Each is generated per capable domain variant, with overloads accepting the domain on either side and `jsonb` on the other: + +```sql +eql_v3.eq(a, b) RETURNS boolean -- = on _eq / _ord / _ord_ore / text_search +eql_v3.neq(a, b) RETURNS boolean -- <> +eql_v3.lt(a, b) RETURNS boolean -- < on _ord / _ord_ore / text_search +eql_v3.lte(a, b) RETURNS boolean -- <= +eql_v3.gt(a, b) RETURNS boolean -- > +eql_v3.gte(a, b) RETURNS boolean -- >= +eql_v3.contains(a, b) RETURNS boolean -- @> on text_match / text_search / eql_v3.json +eql_v3.contained_by(a, b) RETURNS boolean -- <@ +``` + +```sql +SELECT * FROM users WHERE eql_v3.eq(email, $1::eql_v3.text_eq); +SELECT * FROM users WHERE eql_v3.lt(created_at, $1::eql_v3.timestamp_ord); +``` + +Calling a comparison function a variant doesn't support resolves to a blocker that raises `operator … is not supported` — the same [fail-loud behavior](/reference/eql/operators) as the operators. There are no `like` / `ilike` functions: text matching is `eql_v3.contains` on a `text_match` value. + +## Index-term extractors + +These extract the encrypted index term from a domain value. They're generated per eq-, ord-, and match-capable variant of every scalar type, and they return the self-contained `eql_v3` index-term types: + +```sql +-- Equality term (hm) +eql_v3.eq_term(a eql_v3.<T>_eq) RETURNS eql_v3.hmac_256 + +-- Ordering term (ob) +eql_v3.ord_term(a eql_v3.<T>_ord) RETURNS eql_v3.ore_block_256 +eql_v3.ord_term(a eql_v3.<T>_ord_ore) RETURNS eql_v3.ore_block_256 + +-- Text-match term (bf) +eql_v3.match_term(a eql_v3.text_match) RETURNS eql_v3.bloom_filter +``` + +`eql_v3.text_search` carries all three terms, so all three extractors work on it. + +The extractors exist for **indexing**: EQL indexes through a functional index on the extractor, never an operator class on the column. The extractors are inlinable, so bare-form predicates (`WHERE email = $1`) engage the index without rewriting. Sort keys are the exception — see [Range and ORDER BY](/reference/eql/indexes#range-and-order-by): + +```sql +CREATE INDEX users_email_eq ON users USING hash (eql_v3.eq_term(email)); +CREATE INDEX users_salary_ord ON users USING btree (eql_v3.ord_term(salary)); +CREATE INDEX users_name_match ON users USING gin (eql_v3.match_term(name)); +``` + +See [Indexes](/reference/eql/indexes) for the full recipes and performance guidance. + +## Aggregates: `eql_v3.min` and `eql_v3.max` + +`MIN` / `MAX` over encrypted values, defined per ord-capable variant of every scalar type. The input type selects the aggregate; the return type matches the input: + +```sql +eql_v3.min(eql_v3.<T>_ord) RETURNS eql_v3.<T>_ord +eql_v3.max(eql_v3.<T>_ord) RETURNS eql_v3.<T>_ord +eql_v3.min(eql_v3.<T>_ord_ore) RETURNS eql_v3.<T>_ord_ore +eql_v3.max(eql_v3.<T>_ord_ore) RETURNS eql_v3.<T>_ord_ore +``` + +Comparison routes through the variant's `<` / `>` operator, which uses the ORE block term — no decryption happens in the database. `NULL` inputs are skipped, and an all-`NULL` input set returns `NULL`. + +```sql +SELECT eql_v3.min(salary) FROM users; +SELECT eql_v3.max(salary) FROM users WHERE department = 'engineering'; + +-- On a generic jsonb column, cast to the right domain at the call site +SELECT eql_v3.min(salary_jsonb::eql_v3.int8_ord) FROM users; +``` + +<Callout type="warn"> +**`SUM`, `AVG`, and other arithmetic aggregates are not supported** on encrypted columns — they would require homomorphic encryption. `MIN` / `MAX` work because they only need comparison. For sums and averages, decrypt at the application boundary and aggregate client-side. +</Callout> + +## JSON functions + +The encrypted-JSON document type `eql_v3.json` has its own function surface: + +- `eql_v3.jsonb_path_query(doc, selector)` — set-returning path query yielding encrypted entries; also `jsonb_path_query_first` and `jsonb_path_exists` +- `eql_v3.jsonb_array_length` / `jsonb_array_elements` / `jsonb_array_elements_text` — array helpers +- `eql_v3.to_ste_vec_query(doc)` — builds the GIN-indexable containment query form +- Entry-level term extractors: `eql_v3.eq_term(eql_v3.ste_vec_entry)` and `eql_v3.ore_cllw(eql_v3.ste_vec_entry)` + +These are documented with worked examples in [JSON support](/reference/eql/json). + +## `eql_v3.version()` + +Returns the installed EQL version string, baked in at build time: + +```sql +SELECT eql_v3.version(); +-- '3.0.0' +``` + +The same version string is mirrored as a comment on the `eql_v3` schema, so you can read it without calling a function: + +```sql +SELECT obj_description('eql_v3'::regnamespace); +-- '3.0.0' +``` diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index 551c51e..68b95c2 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -1,8 +1,137 @@ --- title: EQL -description: "EQL documentation — being built as part of the docs V2 overhaul." +description: "Encrypt Query Language (EQL) installs encrypted column types and operators into Postgres as plain SQL — encryption itself happens in your client." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +Encrypt Query Language (EQL) is a set of types, operators, and functions for storing and querying encrypted data in PostgreSQL. It installs as a single plain-SQL script — no extension packaging, no superuser, no operator classes — so it runs on Supabase, RDS, Cloud SQL, and self-hosted Postgres alike. -Until it lands, current documentation lives in the [existing docs](/stack). +EQL itself never encrypts anything. Encryption and decryption happen in the client, using the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). EQL provides the database-side surface those clients query against: encrypted column types, the operators that compare them, and the term-extractor functions that make indexes work. + +## The v3 model + +Every encrypted column is a `jsonb`-backed **domain type** in the `eql_v3` schema. The domain variant you choose declares the column's searchable capability: `eql_v3.text_eq` supports equality (`=` / `<>`), `eql_v3.text_match` supports encrypted text containment (`@>` / `<@`), `eql_v3.int4_ord` adds range comparisons, `ORDER BY`, and `MIN` / `MAX`. Each domain carries a `CHECK` constraint that validates the encrypted payload on insert, so a malformed or wrong-version value is rejected at write time rather than surfacing at query time. + +There is no database-side configuration table. Earlier EQL versions tracked encryption config in the database (`config_add_table`, `config_add_column`, and friends) — those are gone in v3. The searchable surface of a column is fixed by the domain variant you type it as, and which index terms travel in a value's payload is decided by the encryption client. Operators that a variant doesn't support raise an "operator not supported" error rather than silently falling through to native `jsonb` semantics — and `LIKE` / `ILIKE` are blocked on every encrypted column. + +```sql +CREATE TABLE users ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email eql_v3.text_eq, -- equality only + salary eql_v3.int4_ord, -- equality + range + ORDER BY + created_at eql_v3.timestamp_ord +); +``` + +## Install + +<Steps> +<Step> + +### Download the install script + +Each [GitHub release](https://github.com/cipherstash/encrypt-query-language/releases) publishes a versioned `cipherstash-encrypt.sql`: + +```sh +curl -sLo cipherstash-encrypt.sql https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql +``` + +</Step> +<Step> + +### Run it against each database + +```sh +psql -f cipherstash-encrypt.sql +``` + +The script installs the `eql_v3` schema with all domain types, operators, functions, and aggregates. It is idempotent: re-running it upgrades the `eql_v3` surface in place and won't remove anything you've built on top of it. To upgrade, download the latest script and run it again. + +</Step> +<Step> + +### Verify + +```sql +SELECT eql_v3.version(); +-- '3.0.0' +``` + +</Step> +</Steps> + +<Callout type="warn"> +`DROP SCHEMA eql_v3 CASCADE` drops every column typed as an `eql_v3` domain. The domain types live in the schema, and your columns depend on them. +</Callout> + +### dbdev + +EQL is also published to [dbdev](https://database.dev/cipherstash/eql). The dbdev release can lag behind GitHub releases, so prefer the install script when you need the latest version. + +### Docker for local development + +Run a Postgres image with EQL pre-installed: + +```sh +docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=postgres \ + ghcr.io/cipherstash/postgres-eql:17 +``` + +EQL installs automatically on first boot. Images are available for PostgreSQL 14–17 (`:14` through `:17`), and you can pin a specific EQL version with a suffixed tag (for example `:17-3.0.0`). + +## Permissions + +Installing EQL and running queries against it need different privileges. A common production pattern splits them across two users. + +**Migration user** — installs EQL and adds encrypted columns during migrations: + +```sql +GRANT CREATE ON DATABASE your_database TO your_migration_user; +GRANT CREATE ON SCHEMA public TO your_migration_user; +GRANT ALTER ON ALL TABLES IN SCHEMA public TO your_migration_user; +``` + +`CREATE ON DATABASE` creates the `eql_v3` schema and its types; `CREATE ON SCHEMA` and `ALTER` are needed to add encrypted columns (typed as `eql_v3` domains, with their `CHECK` constraints) to your tables. + +**Runtime user** — the application's day-to-day access: + +```sql +-- EQL schema usage (resolves the encrypted operators / extractors) +GRANT USAGE ON SCHEMA eql_v3 TO your_app_user; +GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO your_app_user; + +-- User table access (normal application permissions) +GRANT SELECT, INSERT, UPDATE, DELETE ON TABLE your_tables TO your_app_user; +``` + +Schema changes — adding or removing encrypted columns — always go through the migration user. + +## Managed Postgres and Supabase + +EQL v3 is designed to install without superuser. There are no custom operator classes (which managed platforms typically block), no `postgresql.conf` changes, and no separate Supabase build — the single install script is the same artefact everywhere. Indexing works through ordinary functional indexes over EQL's term-extractor functions, which any user who can `CREATE INDEX` can build. See the [Supabase integration](/integrations/supabase) for platform-specific setup. + +## In this section + +<Cards> + <Card title="Types" href="/reference/eql/types"> + The encrypted domain type families and the capability each variant carries. + </Card> + <Card title="Operators" href="/reference/eql/operators"> + Which SQL operators resolve on which variant, and what raises. + </Card> + <Card title="Indexes" href="/reference/eql/indexes"> + Functional-index recipes for equality, range, and text match. + </Card> + <Card title="JSON" href="/reference/eql/json"> + Encrypted JSON documents: containment, field access, and GIN indexing. + </Card> + <Card title="Functions" href="/reference/eql/functions"> + The function equivalents of every operator, extractors, and aggregates. + </Card> + <Card title="Payload format" href="/reference/eql/payload-format"> + The encrypted payload envelope and index terms. + </Card> +</Cards> diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx new file mode 100644 index 0000000..83f354e --- /dev/null +++ b/content/docs/reference/eql/indexes.mdx @@ -0,0 +1,182 @@ +--- +title: Indexes +description: "Create Postgres indexes on encrypted columns using functional indexes over EQL's term-extractor functions." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +EQL indexes are ordinary PostgreSQL functional indexes over **term-extractor functions** — never an index or operator class on the column itself. Each extractor returns a small per-row index term whose return type already carries a default operator class: + +| Extractor | Index method | Term | Capability | +| --- | --- | --- | --- | +| `eql_v3.eq_term(col)` | `hash` (or `btree`) | `hm` (HMAC-256) | equality | +| `eql_v3.ord_term(col)` | `btree` | `ob` (ORE block) | range, `ORDER BY`, `MIN` / `MAX` | +| `eql_v3.match_term(col)` | `gin` | `bf` (bloom filter) | text containment | + +The extractors are inlinable SQL functions, so the planner rewrites a bare-form predicate into the same expression the index was built on. You don't rewrite queries to use the index: + +```sql +SELECT * FROM users WHERE email = $1::eql_v3.text_eq; +-- planner inlines `=` to: eql_v3.eq_term(email) = eql_v3.eq_term($1) +-- Index Cond on USING hash (eql_v3.eq_term(email)) +``` + +<Callout type="warn"> +EQL v3 deliberately ships no operator class for encrypted columns. Operators resolve against the domain's `jsonb` base type, so an opclass on the column would bypass the encrypted surface. Always index through the extractor. +</Callout> + +## Index recipes + +Type the column as the domain variant that carries the term ([Types](/reference/eql/types)), then index the matching extractor: + +```sql +-- Equality: hash index on eq_term +-- (columns typed eql_v3.<T>_eq or text_search; equality on _ord columns +-- compares ORE terms, so the btree on ord_term below serves it) +CREATE INDEX users_email_eq + ON users USING hash (eql_v3.eq_term(email)); + +-- Range / ordering: btree index on ord_term +-- (columns typed eql_v3.<T>_ord or _ord_ore) +CREATE INDEX users_created_at_ord + ON users USING btree (eql_v3.ord_term(created_at)); + +-- Text match: GIN index on match_term +-- (columns typed eql_v3.text_match or text_search) +CREATE INDEX users_name_match + ON users USING gin (eql_v3.match_term(name)); + +ANALYZE users; +``` + +Run `ANALYZE` after every index build. `CREATE INDEX` on an expression gathers no statistics for that expression — without `ANALYZE`, the planner has no histogram for `eql_v3.eq_term(email)` and can misjudge the index it just built. + +Create indexes when the table has a significant number of rows (typically more than 1,000) and you query the column with the matching operator. Drop indexes for capabilities you no longer query — duplicate indexes compete for cache and slow writes. + +## Requirements for an index to engage + +All three must hold: + +1. **The value carries the required term.** Equality needs `hm`, range needs `ob`, containment needs `bf`. Which terms travel in a value's payload is decided by the encryption client — a value with only a bloom term will not drive an equality index. +2. **The index was built after the data carried the term.** If you change which terms a column's values carry, recreate the index. +3. **The query operand is typed.** A typed parameter (`$1`, which CipherStash Proxy supplies) or an explicit cast resolves the encrypted operator; a bare `jsonb` literal falls through to native `jsonb` semantics and skips the index entirely: + +```sql +-- ✓ resolves the encrypted operator → uses the index +WHERE email = $1; +WHERE email = $1::eql_v3.text_eq; + +-- ✗ falls through to native jsonb semantics +WHERE email = '{"hm":"abc"}'::jsonb; +``` + +## Query shapes + +### Equality + +```sql +SELECT * FROM users WHERE email = $1; +-- Index Scan using users_email_eq +-- Index Cond: (eql_v3.eq_term(email) = eql_v3.eq_term($1)) +``` + +### Range and ORDER BY + +The `<`, `<=`, `>`, `>=` operators inline to comparisons on `eql_v3.ord_term`, so natural-form range predicates match the btree: + +```sql +SELECT * FROM users WHERE created_at < $1; +``` + +`ORDER BY` needs care. The planner inlines operators in *predicates* but does not rewrite *sort keys*: `ORDER BY created_at` uses the index for the `WHERE` clause but still adds a `Sort` node, which scales linearly with the rows passing the filter. To stream rows out of the btree already ordered, write the sort key in extractor form: + +```sql +SELECT * FROM users + WHERE created_at < $1 + ORDER BY eql_v3.ord_term(created_at) DESC + LIMIT 10; +``` + +ORE terms are order-preserving, so this sorts identically to the natural form — it just lets the index do the ordering. At large row counts this is the difference between seconds and milliseconds. + +<Callout type="warn"> +If you `SELECT col::jsonb ... ORDER BY col`, Postgres folds the cast into the scan and uses `(col)::jsonb` as the sort key — which matches no index. Project the column raw, or write the sort key as `eql_v3.ord_term(col)`, which sidesteps this entirely. +</Callout> + +### GROUP BY and DISTINCT + +Group on the extractor, not the raw column: + +```sql +SELECT eql_v3.eq_term(email), count(*) + FROM users + GROUP BY eql_v3.eq_term(email); +``` + +`GROUP BY email` uses the entire encrypted payload (1–2 KB per row) as the hash key; Postgres estimates a hash table far larger than the default `work_mem` and falls back to a disk-spilling `GroupAggregate`. The extractor key is a small deterministic term, so the hash table fits in `work_mem` and the planner picks `HashAggregate` reliably. If an ORM forces the raw-column form, raising `work_mem` is the rescue knob — but the extractor form is the design. + +## Encrypted JSON + +Containment (`@>` / `<@`) on `eql_v3.json` document columns uses a GIN index over `eql_v3.to_ste_vec_query(col)::jsonb`, and field-level equality and ordering have their own extractor recipes. See [JSON](/reference/eql/json). + +## Verify with EXPLAIN + +The first move on a slow query is `EXPLAIN (COSTS OFF)`: + +- **`Index Scan using <your-index>`** — the functional index is engaged. +- **`Index Cond:` referencing the extractor** (`eql_v3.eq_term(...)`, `eql_v3.ord_term(...)`) — the inlined predicate matched the index. +- **`Seq Scan`** — no index used. Check the three requirements above. +- **`Filter:` showing the raw operator** — inlining did not happen. Usual causes: a pinned `search_path` on a customised function, or the planner judging another plan cheaper. +- **`Sort` node above an Index Scan** — natural-form `ORDER BY`. Switch the sort key to `eql_v3.ord_term(col)` to eliminate it. + +Once the plan looks right, repeat with `EXPLAIN ANALYZE` to measure actual timings. For a full diagnosis walkthrough, see [query performance troubleshooting](/guides/troubleshooting/query-performance). + +## Building indexes on large tables + +Index *build* time is a separate axis from query time — a functional index that queries in a millisecond can take hours to `CREATE` on a large table. + +**Raise `maintenance_work_mem`.** `CREATE INDEX` draws on `maintenance_work_mem` (default 64 MB — far too small for a multi-million-row build). It's the single highest-leverage knob: + +```sql +SET maintenance_work_mem = '2GB'; +CREATE INDEX users_email_eq ON users USING btree (eql_v3.eq_term(email)); +``` + +**Prefer `btree` over `hash` for equality on large tables.** A btree build sorts then bulk-loads with sequential writes and can parallelise; a hash build scatters rows to random buckets and degrades to random I/O once the index outgrows cache — it cannot parallelise. A btree on `eql_v3.eq_term(col)` serves `=` exactly as well as a hash index, with no query-side cost. Hash is fine up to mid-six-figure row counts. + +**Expect a de-TOAST floor.** A functional index over a large encrypted column de-TOASTs the whole stored value once per row to evaluate the extractor. This cost is identical across access methods and sets the build's floor rate. Index builds are also I/O-heavy in a way queries are not — containerised Postgres on a virtualised filesystem (Docker Desktop on macOS, notably) pays a steep penalty, so run large builds on native storage. + +**Watch the build.** From a second session while `CREATE INDEX` runs: + +```sql +SELECT phase, tuples_done, tuples_total, + round(100.0 * tuples_done / nullif(tuples_total, 0), 1) AS pct +FROM pg_stat_progress_create_index; +``` + +A steady `tuples_done` rate is healthy. A rate that decays over time is the cache/memory wall — raise `maintenance_work_mem`, and if it's a hash index, rebuild it as a btree. + +## Why this works on managed Postgres + +Everything above is a functional index over an `IMMUTABLE` SQL function — no operator class on a column, no superuser, no `postgresql.conf` changes. Managed platforms that block custom operator classes (Supabase among them) run these recipes unchanged, so the indexing model is identical on Supabase, RDS, Cloud SQL, and self-hosted Postgres. See the [Supabase integration](/integrations/supabase). + +## Troubleshooting + +**Index not being used:** + +1. Verify the value carries the term: + + ```sql + SELECT email::jsonb ? 'hm' AS has_hmac, + email::jsonb ? 'ob' AS has_ore_block, + email::jsonb ? 'bf' AS has_bloom + FROM users LIMIT 1; + ``` + +2. Verify the operand is typed (`$1::eql_v3.text_eq`, not `$1::jsonb`). +3. Recreate the index if the column's terms changed after it was built. +4. Run `ANALYZE`. Very small tables may still choose a sequential scan — that's correct. + +**`=` returns zero rows on a populated column:** equality requires the term its variant compares — `hm` on `_eq` / `text_search`, `ob` on `_ord` variants. Type the column as an equality-capable variant and confirm the encryption client is emitting that term. diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx new file mode 100644 index 0000000..6ef2e60 --- /dev/null +++ b/content/docs/reference/eql/json.mdx @@ -0,0 +1,228 @@ +--- +title: Encrypted JSON +description: "Store and query encrypted JSON documents with eql_v3.json — containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +`eql_v3.json` is EQL's encrypted JSON document type, built on structured encryption (**ste_vec**). The document is encrypted as a vector of encrypted entries — one entry per path inside the document — and every path is queryable without decryption: containment, field and array access, and equality or range comparisons on extracted leaves. + +Like every EQL type, `eql_v3.json` holds ciphertext the database can't read. Encryption, decryption, and selector generation happen in the client — the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). See [Searchable encryption](/concepts/searchable-encryption) for how querying ciphertext works at all. + +## The types + +Three `jsonb`-backed domains make up the encrypted JSON surface: + +| Type | What it is | +| --- | --- | +| `eql_v3.json` | The column type. An encrypted document envelope carrying an `sv` array — one encrypted entry per path in the document. | +| `eql_v3.ste_vec_entry` | A single entry from the vector: a selector, a ciphertext, and exactly one index term. This is what `->` returns. | +| `eql_v3.ste_vec_query` | A containment needle: entries with selectors and index terms but **no ciphertext**. This is what you cast a `@>` operand to. | + +The full wire shape of each is documented in [Payload format](/reference/eql/payload-format). + +## Storing encrypted JSON + +Type the column as `eql_v3.json`: + +```sql +CREATE TABLE orders ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + metadata eql_v3.json +); +``` + +There is no database-side configuration step. Which index terms a document carries is decided by the encryption client; typing the column as `eql_v3.json` is what makes the encrypted operators and functions resolve. The domain's `CHECK` constraint validates the payload shape on insert, so malformed values are rejected at write time. + +Insert and read through the Stack SDK or Proxy, which encrypt the document into the ste_vec payload on write and decrypt it on read. + +## What each node type supports + +During encryption, the client flattens the document: each unique path gets a deterministic **selector** hash, and each node gets an entry in the `sv` vector carrying index terms for its JSON type: + +| JSON node type | Index term | Equality (`=`, `<>`, `GROUP BY`) | Ordering (`<` … `>=`, `MIN`/`MAX`) | +| --- | --- | --- | --- | +| Object | `hm` (HMAC-256) | Yes | No | +| Array | `hm` (HMAC-256) | Yes | No | +| Boolean / JSON `null` | `hm` (HMAC-256) | Yes | No | +| String | `oc` (CLLW ORE, string domain) | Yes | Yes | +| Number | `oc` (CLLW ORE, numeric domain) | Yes | Yes | + +Each entry carries exactly one of `hm` or `oc` — the domain `CHECK` enforces the exclusivity. `hm` is a deterministic hash, so it supports equality only. `oc` is a CLLW ORE term that reveals ordering and, being deterministic, collapses to equality on matching selectors — `eql_v3.eq_term` reads whichever term an entry carries, so equality works uniformly across all node types. Earlier payload versions split the ORE term into `ocf` (fixed-width, numeric) and `ocv` (variable-width, string); current payloads emit a single `oc` whose leading domain-tag byte carries the numeric/string distinction. + +JSON `null` here means a `null` literal *inside* the document. A SQL `NULL` column value is not encrypted at all. + +## Blocked native jsonb operators + +These native PostgreSQL `jsonb` operators are **blocked** on `eql_v3.json`. They raise an error rather than silently running plaintext-jsonb semantics against the encrypted payload: + +- Key/path existence: `?`, `?|`, `?&`, `@?`, `@@` +- Path extraction: `#>`, `#>>` +- Mutation: `-`, `#-`, `||` +- Root-document comparison: `=`, `<>`, `<`, `<=`, `>`, `>=` + +Use containment (`@>` / `<@`), field access (`->` / `->>`), or the `eql_v3.jsonb_path_*` functions instead. There is no server-side mutation of an encrypted document — updates re-encrypt in the client. + +<Callout type="warn"> +**Type your operands.** `eql_v3.json` is a domain over `jsonb`, and PostgreSQL resolves `domain OP untyped_literal` to the **native** `jsonb` operator — bypassing both the encrypted operator and the blockers. `WHERE doc -> 'email'` silently runs native `jsonb ->` and returns `NULL`; `WHERE doc -> 'email'::text` resolves the encrypted operator. This is the same rule as the [scalar operators](/reference/eql/operators). Queries through CipherStash Proxy always bind typed parameters, so this only bites hand-written ad-hoc SQL. +</Callout> + +## Containment: `@>` and `<@` + +`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle with the client and cast it to `eql_v3.ste_vec_query` (a typed `eql_v3.json` or `eql_v3.ste_vec_entry` operand also works): + +```sql +SELECT * FROM orders +WHERE metadata @> $1::eql_v3.ste_vec_query; +``` + +This is the encrypted equivalent of the plaintext `metadata @> '{"customer": {"tier": "premium"}}'`: containment checks that every encrypted term in the needle exists in the document's `sv` vector. `eql_v3.to_ste_vec_query(doc)` converts a stored document into the needle shape, and `eql_v3.ste_vec_contains(a, b)` is the function form backing `@>`. + +For large tables, back containment with a GIN index. The typed `@>` overload inlines to a native `jsonb @>` over `eql_v3.to_ste_vec_query(col)::jsonb`, so a GIN index on that same expression engages: + +```sql +CREATE INDEX orders_metadata_gin + ON orders USING gin (eql_v3.to_ste_vec_query(metadata)::jsonb jsonb_path_ops); +ANALYZE orders; +``` + +See [Indexes](/reference/eql/indexes) for the full recipes. + +## Field access: `->` and `->>` + +Fields are addressed by **selector hash** — the deterministic identifier the client emits for a JSON path during encryption — not a plaintext path string like `$.customer.tier`. + +```sql +-- Field access by selector (returns eql_v3.ste_vec_entry) +SELECT metadata -> 'selector_hash'::text FROM orders; + +-- The entry serialized as text (ciphertext JSON, not decrypted plaintext) +SELECT metadata ->> 'selector_hash'::text FROM orders; + +-- Array element by 0-based index +SELECT metadata -> 0 FROM orders; +``` + +The extracted `eql_v3.ste_vec_entry` is itself comparable: + +- `=` / `<>` resolve via `eql_v3.eq_term` — works on every node type +- `<` / `<=` / `>` / `>=` resolve via `eql_v3.ore_cllw` — String and Number leaves only +- `MIN` / `MAX` over an extracted ordered leaf use the `eql_v3.min` / `eql_v3.max` aggregates + +```sql +-- Equality on an extracted leaf +SELECT * FROM orders +WHERE metadata -> 'email_selector'::text = $1::eql_v3.ste_vec_entry; + +-- Group by an extracted leaf's equality term +SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) +FROM orders +GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); +``` + +A hash index on `eql_v3.eq_term(col -> '<selector>'::text)` engages the equality lookup; a btree on `eql_v3.ore_cllw(...)` engages range and `ORDER BY`. See [Indexes](/reference/eql/indexes). + +## Path queries and array helpers + +The function forms take the same selector hashes: + +```sql +-- All entries matching a selector +SELECT eql_v3.jsonb_path_query(metadata, 'selector_hash') FROM orders; + +-- First match only +SELECT eql_v3.jsonb_path_query_first(metadata, 'selector_hash') FROM orders; + +-- Does the selector exist in this document? +SELECT eql_v3.jsonb_path_exists(metadata, 'selector_hash') FROM orders; +``` + +For encrypted array nodes: + +```sql +SELECT eql_v3.jsonb_array_length(metadata -> 'items_selector'::text) FROM orders; +SELECT eql_v3.jsonb_array_elements(metadata -> 'items_selector'::text) FROM orders; +SELECT eql_v3.jsonb_array_elements_text(metadata -> 'items_selector'::text) FROM orders; +``` + +`jsonb_array_elements` yields encrypted entries; `jsonb_array_elements_text` yields each element as ciphertext text. + +## Worked example + +An `orders` table with an encrypted `metadata` document. The plaintext your application works with: + +```json +{ + "customer": { + "tier": "premium", + "region": "apac" + }, + "items": ["sku-1042", "sku-2210"] +} +``` + +The client encrypts this into a ste_vec payload with selectors for `$`, `$.customer`, `$.customer.tier`, `$.customer.region`, `$.items`, and each array element — every path becomes queryable. + +<Steps> +<Step> + +### Create the table and insert + +```sql +CREATE TABLE orders ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + metadata eql_v3.json +); + +INSERT INTO orders (metadata) VALUES ($1); +-- $1 is the encrypted ste_vec payload produced by the Stack SDK or Proxy +``` + +</Step> +<Step> + +### Query by containment + +Find premium orders. The client encrypts the needle `{"customer": {"tier": "premium"}}` into a `ste_vec_query`: + +```sql +SELECT id FROM orders +WHERE metadata @> $1::eql_v3.ste_vec_query; +``` + +Add the GIN index from above once the table grows. + +</Step> +<Step> + +### Query by path + +Count orders per region, grouping on the encrypted leaf — the database never sees `"apac"`: + +```sql +SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) +FROM orders +WHERE eql_v3.jsonb_path_exists(metadata, 'region_selector') +GROUP BY 1; +``` + +The rows come back as ciphertext; decrypt them in the client. + +</Step> +</Steps> + +## In this section + +<Cards> + <Card title="Payload format" href="/reference/eql/payload-format"> + The wire shape of the ste_vec envelope and its entries. + </Card> + <Card title="Indexes" href="/reference/eql/indexes"> + GIN containment and field-level functional index recipes. + </Card> + <Card title="Operators" href="/reference/eql/operators"> + The full operator surface, including the typed-operand rule. + </Card> +</Cards> diff --git a/content/docs/reference/eql/meta.json b/content/docs/reference/eql/meta.json index d58bc8f..48fe2e7 100644 --- a/content/docs/reference/eql/meta.json +++ b/content/docs/reference/eql/meta.json @@ -1,4 +1,11 @@ { "title": "EQL", - "pages": ["..."] + "pages": [ + "types", + "operators", + "indexes", + "json", + "functions", + "payload-format" + ] } diff --git a/content/docs/reference/eql/operators.mdx b/content/docs/reference/eql/operators.mdx new file mode 100644 index 0000000..60a5fff --- /dev/null +++ b/content/docs/reference/eql/operators.mdx @@ -0,0 +1,153 @@ +--- +title: Operators +description: "Which SQL operators work on each eql_v3 encrypted-domain variant, how unsupported operators fail, and why operands must be typed." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +EQL overloads standard PostgreSQL operators on the [encrypted-domain types](/reference/eql/types). Type the column as the variant that carries the right index term and the operator resolves — and engages a matching [functional index](/reference/eql/indexes). + +<Callout type="warn"> +**Operands must be typed.** The `eql_v3` domains are backed by `jsonb`. When an operand has no known type — a bare string literal, an untyped parameter — PostgreSQL reduces the domain to its `jsonb` base type and resolves the **native `jsonb` operator** instead of the encrypted one. The query doesn't fail; it silently returns native `jsonb` semantics, which are meaningless for encrypted payloads. + +Always type the operand: a typed parameter (`$1::eql_v3.text_eq`) or an explicit cast (`'…'::eql_v3.int4_ord`). The [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) type bound parameters automatically — raw SQL must do it by hand. +</Callout> + +## Operator support by variant + +A ✅ means the operator resolves on a column typed as that variant. A ❌ means it is blocked — it raises, it does not return wrong rows. + +| SQL operator | Meaning | `eql_v3.<T>` | `_eq` | `_ord` / `_ord_ore` | `text_match` | `text_search` | +| --- | --- | :---: | :---: | :---: | :---: | :---: | +| `=` | Equality | ❌ | ✅ | ✅ | ❌ | ✅ | +| `<>` / `!=` | Inequality | ❌ | ✅ | ✅ | ❌ | ✅ | +| `<` `<=` `>` `>=` | Ordered comparison | ❌ | ❌ | ✅ | ❌ | ✅ | +| `@>` / `<@` | Bloom-filter token containment | ❌ | ❌ | ❌ | ✅ | ✅ | +| `LIKE` / `ILIKE` (`~~` / `~~*`) | SQL pattern match | ❌ | ❌ | ❌ | ❌ | ❌ | +| `IS NULL` / `IS NOT NULL` | Null check | ✅ | ✅ | ✅ | ✅ | ✅ | + +A SQL `NULL` column value is not encrypted, so `IS NULL` / `IS NOT NULL` always work regardless of variant. + +## There is no `LIKE` + +`LIKE` and `ILIKE` (`~~` / `~~*`) raise on **every** encrypted-domain variant. SQL pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter token containment — `@>` on a `text_match` or `text_search` column: + +```sql +-- ❌ Raises: operator not supported +SELECT * FROM users WHERE email LIKE '%alice%'; + +-- ✅ Encrypted free-text match +SELECT * FROM users WHERE email @> $1::eql_v3.text_match; +``` + +`@>` / `<@` here is **probabilistic ngram-bloom containment** — it tests whether the encrypted text contains the (encrypted) search terms. It is not JSONB containment and not `LIKE`. The client encrypts the search term into a bloom-filter query value; false positives are possible, false negatives are not. + +## Unsupported operators fail loudly + +Unsupported operators are not silent no-ops. Every operator that a variant doesn't support is still *defined* — it routes to a blocker function that raises an `operator … is not supported` exception. A mis-typed query fails loudly instead of silently returning wrong results: + +```sql +-- salary is eql_v3.int8_eq (equality only) +SELECT * FROM users WHERE salary > $1::eql_v3.int8_eq; +-- ERROR: operator > is not supported for eql_v3.int8_eq +``` + +A `NULL` operand still raises — the blockers are deliberately not `STRICT`, so PostgreSQL can't skip the check. + +## Query shapes + +### Equality: `=` and `<>` + +Works on `_eq`, `_ord` / `_ord_ore`, and `text_search`. On `_eq` and `text_search`, equality compares the HMAC (`hm`) term; on `_ord` variants it compares the ORE (`ob`) term, which collapses to equality — so `_ord` columns get equality without carrying an `hm` term: + +```sql +SELECT * FROM users WHERE email = $1::eql_v3.text_eq; +SELECT * FROM users WHERE email <> $1::eql_v3.text_eq; +``` + +### Comparison, `BETWEEN`, and `ORDER BY` + +Works on `_ord` / `_ord_ore` and `text_search` (variants carrying an `ob` ORE term): + +```sql +SELECT * FROM users WHERE salary >= $1::eql_v3.int8_ord; + +-- BETWEEN desugars to >= and <= +SELECT * FROM users +WHERE created_at BETWEEN $1::eql_v3.timestamp_ord AND $2::eql_v3.timestamp_ord; + +-- ORDER BY is meaningful only with an ORE term +SELECT * FROM users ORDER BY salary DESC; +``` + +`ORDER BY` on a variant without an `ob` term won't produce a meaningful order — type the column as an `_ord` variant when ordering matters. + +Bare `ORDER BY col` sorts correctly, but the planner doesn't rewrite sort keys, so it adds a `Sort` node even when a btree index exists. To stream rows out of the index already ordered, write the sort key in extractor form (`ORDER BY eql_v3.ord_term(col)`) — see [Range and ORDER BY](/reference/eql/indexes#range-and-order-by). + +### Text containment: `@>` and `<@` + +Works on `text_match` and `text_search` only: + +```sql +SELECT * FROM users WHERE email @> $1::eql_v3.text_match; +``` + +### `IN` + +Desugars to `=`, so it needs an equality-capable variant (`_eq`, `_ord`, `text_search`): + +```sql +SELECT * FROM users +WHERE email IN ($1::eql_v3.text_eq, $2::eql_v3.text_eq); +``` + +### `GROUP BY` and `DISTINCT` + +Need an equality term (`_eq`, `_ord`, `text_search`): + +```sql +SELECT email, COUNT(*) FROM logins GROUP BY email; +SELECT DISTINCT email FROM logins; +``` + +Plain `COUNT(col)` needs no term and works on any variant; `COUNT(DISTINCT col)` needs an equality term. + +### Joins + +Equijoins work on equality-capable variants, with one extra constraint: **both sides must have been encrypted with the same keyset and typed as a matching variant** — otherwise the equality terms can never match: + +```sql +SELECT u.*, o.total +FROM users u +JOIN orders o ON u.email = o.customer_email; -- both eql_v3.text_eq, same keyset +``` + +The same rule applies to `IN (subquery)` and set-operation deduplication. + +## Function-form equivalents + +Some managed platforms disallow custom operators. Every operator has a function form, generated per domain variant, taking the same domain types: + +| Function | Operator | Available on | +| --- | --- | --- | +| `eql_v3.eq(a, b)` | `=` | `_eq`, `_ord` / `_ord_ore`, `text_search` | +| `eql_v3.neq(a, b)` | `<>` | `_eq`, `_ord` / `_ord_ore`, `text_search` | +| `eql_v3.lt(a, b)` | `<` | `_ord` / `_ord_ore`, `text_search` | +| `eql_v3.lte(a, b)` | `<=` | `_ord` / `_ord_ore`, `text_search` | +| `eql_v3.gt(a, b)` | `>` | `_ord` / `_ord_ore`, `text_search` | +| `eql_v3.gte(a, b)` | `>=` | `_ord` / `_ord_ore`, `text_search` | +| `eql_v3.contains(a, b)` | `@>` | `text_match`, `text_search`, `eql_v3.json` | +| `eql_v3.contained_by(a, b)` | `<@` | `text_match`, `text_search`, `eql_v3.json` | + +```sql +SELECT * FROM users WHERE eql_v3.eq(email, $1::eql_v3.text_eq); +SELECT * FROM users WHERE eql_v3.lt(created_at, $1::eql_v3.timestamp_ord); +``` + +There are no `like` / `ilike` function forms — text matching is `eql_v3.contains` on a `text_match` value. See [Functions](/reference/eql/functions) for the full function surface, including `MIN` / `MAX`. + +## JSON operators + +`eql_v3.json` has its own operator surface — document containment (`@>` / `<@`), field access (`->` / `->>`), and comparisons on extracted leaves — and its own set of blocked native JSONB operators. See [JSON support](/reference/eql/json). diff --git a/content/docs/reference/eql/payload-format.mdx b/content/docs/reference/eql/payload-format.mdx new file mode 100644 index 0000000..24af439 --- /dev/null +++ b/content/docs/reference/eql/payload-format.mdx @@ -0,0 +1,123 @@ +--- +title: Payload format +description: "The wire format of every EQL encrypted value: the v/i/c envelope, the index-term keys, and the ste_vec document shape." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Every EQL encrypted value is a `jsonb` payload with a shared envelope plus the index terms that make it queryable. This page defines that wire format. Earlier CipherStash docs called this format the **CipherCell** — this page is the current definition of the same structure. + +Payloads are produced by the encryption clients — the [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) — and consumed by EQL's operators and functions inside Postgres. EQL never sees plaintext: it validates, stores, and compares these payloads; it cannot produce or decrypt them. + +## The envelope + +Every payload carries three envelope keys. Each `eql_v3` domain's `CHECK` constraint requires them, so a value missing any of these is rejected at write time: + +| Key | Contents | Notes | +| --- | --- | --- | +| `v` | Payload version | Always exactly `2` on the wire. The domain `CHECK`s assert it and raise on any other value. | +| `i` | Ident: `{"t": "<table>", "c": "<column>"}` | Binds the ciphertext to the table and column it was encrypted for. Both keys required. | +| `c` | Ciphertext | The opaque, non-deterministic encrypted blob (mp_base85-encoded). Never used in comparisons. | + +<Callout> +`eql_v3` names the **SQL schema generation**, not the payload version. The JSON envelope version is still `v: 2` — the wire field names are unchanged from EQL v2, and the domain `CHECK`s assert `v = 2`. +</Callout> + +A `k` discriminator (`"ct"` for a scalar ciphertext, `"sv"` for a JSON document) also appears on payloads emitted by the clients, distinguishing the two top-level shapes. + +## Index-term keys + +Alongside the envelope, a payload carries the index terms for its column's capability. On the wire, a payload is discriminated by *which term key is present* — the SQL domain name carries the rest. Each key is backed by a SEM (searchable encrypted metadata) type in the `eql_v3` schema: + +| Key | SEM type | Wire shape | Enables | Reveals | +| --- | --- | --- | --- | --- | +| `hm` | `eql_v3.hmac_256` (domain over `text`) | Hex string (HMAC-SHA-256) | `=`, `<>` on `_eq` and `text_search` domains | Whether two values are equal — nothing else | +| `ob` | `eql_v3.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | +| `bf` | `eql_v3.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | + +Notes on the wire shapes: + +- **`ob` block count is width-agnostic**: 8 blocks for the int scalars, 12 for timestamp, 14 for numeric — the array just carries more block strings. +- **`bf` positions are signed**: EQL stores the filter as PostgreSQL `smallint[]`, and filters sized above 32768 emit upper-half bit positions as *negative* signed values. Consumers must use a signed 16-bit integer type. + +The capability is encoded as **required keys**: the payload for an `eql_v3.text_eq` column must carry `hm`; an `eql_v3.int4_ord` payload must carry `ob` (and only `ob` — equality on `_ord` domains compares ORE terms, so no `hm` is needed); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. See [Types](/reference/eql/types) for the domain-to-capability mapping, and [Searchable encryption](/concepts/searchable-encryption) for what these terms do and don't leak. + +## JSON documents: the `sv` vector + +An [encrypted JSON document](/reference/eql/json) uses a different payload shape: no root ciphertext, and an `sv` array with one encrypted entry per path in the document. Each entry carries: + +| Key | Contents | +| --- | --- | +| `s` | Selector — a deterministic hash of the JSON path. Required; entry matching compares selectors first. | +| `c` | Ciphertext for the node at that path. | +| `hm` **or** `oc` | Exactly one, never both — the domain `CHECK` enforces the exclusivity. `hm` (HMAC-256) on Boolean/`null` leaves and Object/Array roots; `oc` (CLLW ORE, backed by `eql_v3.ore_cllw`) on String/Number leaves. | +| `a` | Optional array marker — `true` when the selector points at an array context. | + +The decoded `oc` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier payload versions split this into two fields — `ocf` (fixed-width, numeric) and `ocv` (variable-width, string) — which consolidated into the single `oc` key; the tag byte now carries the distinction. + +A containment **query** payload (`eql_v3.ste_vec_query`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. + +## Example payloads + +A scalar payload for an `eql_v3.text_search` column (lookup + ordering + free-text match, so all three terms are required): + +```json +{ + "v": 2, + "i": { "t": "users", "c": "email" }, + "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", + "hm": "9c8ec1d2f9932b979b1bf3f09f8a4e2f6a41f8de2f0c8b7a52e1f5c3d4b6a790", + "ob": ["7a1fd0c2...", "d24c9be1...", "03fa66b8..."], + "bf": [42, 1290, -8113, 30201] +} +``` + +- `v`, `i`, `c` — the envelope +- `hm` — equality term: `WHERE email = $1` compares this +- `ob` — ordering term: `ORDER BY` and range comparisons walk these blocks +- `bf` — bloom-filter term: `@>` token containment tests these bit positions + +A JSON document payload for an `eql_v3.json` column: + +```json +{ + "v": 2, + "k": "sv", + "i": { "t": "orders", "c": "metadata" }, + "sv": [ + { "s": "2517068c0d1f9d4d41d2c666211f785e", "c": "mBbKmM...", "hm": "b0e0..." }, + { "s": "f510853a4ab9d4f75f51a533ac264c5d", "c": "mBbKmQ...", "oc": "01a3f2..." }, + { "s": "33743aed3ae636f6bf05cff11ac4b519", "c": "mBbKmR...", "oc": "004e19..." } + ] +} +``` + +- First entry: an object root — `hm` only, equality/containment +- Second entry: a string leaf — `oc` starting with tag `01` +- Third entry: a numeric leaf — `oc` starting with tag `00` + +And the containment needle the client builds for a `@>` query — index terms, no ciphertexts: + +```json +{ + "sv": [ + { "s": "f510853a4ab9d4f75f51a533ac264c5d", "oc": "01a3f2..." } + ] +} +``` + +## Machine-readable schemas + +The [EQL repository](https://github.com/cipherstash/encrypt-query-language) publishes the format as JSON Schema in two places: + +- **`crates/eql-bindings/schema/`** — one schema per scalar domain (`$id`s under `https://schemas.cipherstash.com/eql/v3/`), generated from the canonical Rust wire types in the `eql-bindings` crate. TypeScript bindings are generated from the same definitions, so every producer and consumer shares one source of truth. +- **`docs/reference/schema/`** — full-payload schemas covering both the scalar and `sv` document shapes. These files are currently named for the v2.x payload releases (`eql-payload-v2.2.schema.json`, `eql-payload-v2.3.schema.json`) and reference `eql_v2` function names, even though the current SQL surface is `eql_v3` — the v2.3 schema is the applicable document-shape definition, matching the still-`v: 2` envelope. + +## Who produces and consumes this + +- **Produce:** the Stack SDK and CipherStash Proxy encrypt plaintext into these payloads — ciphertext, index terms, selectors — using keys the database never holds. +- **Consume:** EQL's domain `CHECK`s validate the shape on write, and its operators and extractor functions ([Operators](/reference/eql/operators), [Indexes](/reference/eql/indexes)) compare the term keys at query time. + +The division is strict: EQL never sees plaintext, and the clients never rely on the database for key material. diff --git a/content/docs/reference/eql/types.mdx b/content/docs/reference/eql/types.mdx new file mode 100644 index 0000000..e4eb005 --- /dev/null +++ b/content/docs/reference/eql/types.mdx @@ -0,0 +1,95 @@ +--- +title: Encrypted types +description: "The eql_v3 encrypted-domain type families: which domain variant to declare for each scalar type, and what each variant lets you query." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +EQL ships its searchable-encryption surface as PostgreSQL **domains in the `eql_v3` schema**. There are two kinds: + +- **Per-scalar encrypted-domain types** — `eql_v3.int4`, `eql_v3.text`, `eql_v3.timestamp`, and so on. One family of domain *variants* per scalar type. +- **An encrypted-JSON document type** — `eql_v3.json` — for structured encryption of whole JSONB documents. See [JSON support](/reference/eql/json). + +A column's query capability is fixed by the **domain variant you type it as**. There is no database-side configuration step: which index terms travel in a value's payload is decided by the encryption client (the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy)), and the column's domain variant is what makes the matching operators resolve. + +## The family model + +Every scalar type `<T>` generates a storage-only variant plus the query variants its capabilities allow. All variants are `jsonb`-backed domains. + +| Domain variant | Capability | Index term carried | +| --- | --- | --- | +| `eql_v3.<T>` | Storage and decryption only. Every comparison operator is blocked — only `IS NULL` / `IS NOT NULL` work. | none | +| `eql_v3.<T>_eq` | Equality: `=` and `<>` (plus `IN`, `GROUP BY`, `DISTINCT`, equijoins). | `hm` (`eql_v3.hmac_256`) | +| `eql_v3.<T>_ord` / `eql_v3.<T>_ord_ore` | Full comparison surface: `=` `<>` `<` `<=` `>` `>=`, `BETWEEN`, `ORDER BY`, and the `eql_v3.min` / `eql_v3.max` aggregates. | `ob` (`eql_v3.ore_block_256`) | +| `eql_v3.text_match` (text only) | Encrypted free-text token containment via `@>` / `<@`. No equality, no ordering. | `bf` (`eql_v3.bloom_filter`) | +| `eql_v3.text_search` (text only) | Everything: equality, ordering, and token containment combined. | `hm` + `ob` + `bf` | + +Two things worth calling out: + +- **The bare variant blocks everything.** `eql_v3.<T>` carries no index term. Querying it with any comparison operator raises an "operator not supported" exception. Use it for columns you only ever store and decrypt. If you later need to query, type the column as a query variant — or cast at the call site (`col::eql_v3.int4_ord`) if the payload already carries the term. +- **`_ord` and `_ord_ore` are twins.** They are byte-identical surfaces backed by the same ORE block term. Pick the name that documents intent — "ordered" versus "ordered via ORE block". Both support the full ordered surface and `MIN` / `MAX`. + +## Type matrix + +The scalar tokens that ship in EQL 3.0.0 are `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool`. + +| Scalar | `eql_v3.<T>` | `<T>_eq` | `<T>_ord` | `<T>_ord_ore` | `text_match` | `text_search` | +| --- | :---: | :---: | :---: | :---: | :---: | :---: | +| `int2` | ✅ | ✅ | ✅ | ✅ | — | — | +| `int4` | ✅ | ✅ | ✅ | ✅ | — | — | +| `int8` | ✅ | ✅ | ✅ | ✅ | — | — | +| `float4` | ✅ | ✅ | ✅ | ✅ | — | — | +| `float8` | ✅ | ✅ | ✅ | ✅ | — | — | +| `numeric` | ✅ | ✅ | ✅ | ✅ | — | — | +| `date` | ✅ | ✅ | ✅ | ✅ | — | — | +| `timestamp` | ✅ | ✅ | ✅ | ✅ | — | — | +| `text` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | +| `bool` | ✅ | ❌ | ❌ | ❌ | — | — | + +<Callout type="warn"> +**`bool` is storage-only by design.** A two-value column has too little cardinality for any searchable index to be safe — an equality index over `true`/`false` would leak the value distribution outright. EQL ships only `eql_v3.bool`, with no `_eq` or `_ord` variants. Store and decrypt boolean columns; filter on them client-side. +</Callout> + +## Index terms + +Each query variant stores one or more encrypted index terms alongside the ciphertext: + +- **`hm`** — an HMAC-256 term (`eql_v3.hmac_256`). Supports exact equality. +- **`ob`** — an ORE block term (`eql_v3.ore_block_256`). Order-revealing: supports comparison and sorting. +- **`bf`** — a bloom filter term (`eql_v3.bloom_filter`). Supports probabilistic ngram token containment. + +The payload structure — envelope keys plus per-variant term keys — is documented in [Payload format](/reference/eql/payload-format). What each term mathematically reveals about the plaintext (and why you should only carry the terms you need) is covered in [Searchable encryption](/concepts/searchable-encryption). + +## Encrypted JSON: `eql_v3.json` + +`eql_v3.json` is the encrypted-JSON document domain, built on the structured-encryption ("ste_vec") model: a JSONB document is encrypted into a searchable vector of terms, one per path inside the document, supporting containment (`@>`), field access (`->` / `->>`), and path queries. It has its own operator and function surface — see [JSON support](/reference/eql/json). + +## Choosing a variant + +Declare only the capabilities you query on. Every index term a value carries is extra material stored in the database, and each term class reveals different structure to an observer — equality terms reveal value repetition, ORE terms reveal ordering, bloom terms reveal token overlap (see [Searchable encryption](/concepts/searchable-encryption)): + +- Never queried, only decrypted → bare `eql_v3.<T>` +- Exact lookup, `IN`, joins, `GROUP BY` → `<T>_eq` +- Ranges, `ORDER BY`, `MIN`/`MAX` → `<T>_ord` +- Free-text matching on text → `text_match` +- Text you need to look up, sort, *and* search → `text_search` + +The variant you declare must match the terms the client is configured to emit for that column — the domain makes the operator resolve, but the term in the payload is what makes it answer. + +## Example + +```sql +CREATE TABLE users ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email eql_v3.text_search, -- lookup, sort, and free-text match + name eql_v3.text_match, -- free-text match only + tax_id eql_v3.text_eq, -- exact lookup only + salary eql_v3.int8_ord, -- range queries, ORDER BY, MIN/MAX + is_active eql_v3.bool, -- storage only (by design) + created_at eql_v3.timestamp_ord +); +``` + +Once the table exists, add functional indexes on the term extractors so queries engage an index — see [Indexes](/reference/eql/indexes). The operators each variant supports are listed in [Operators](/reference/eql/operators). From dd2a8d68b431b40abad7e4aac811029a2b826586 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 19:56:24 +1000 Subject: [PATCH 009/151] refactor(v2): restructure EQL reference Tailwind-style (CIP-3326) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EQL is an abstraction over SQL the way Tailwind is over CSS — the docs now follow the same shape: Install → Core concepts → type categories → Indexes → query patterns, increasing in complexity. Each type-category page is the complete reference for its types (variants, payload shape, operators/functions, example queries on one page). - index: trimmed to the Install page - core-concepts (new): the canonical home for shared mechanics — variant model, payload anatomy (v/i/c envelope + hm/ob/bf terms, absorbs payload-format/CipherCell), typed-operand rule, fail-loud blockers, ORE-equality on _ord, term-leakage pointer - numbers-and-dates, text, booleans (new) + json (reworked): category pages; text owns the no-LIKE treatment; json absorbs the sv payload shape; booleans framed as "every type has a storage-only variant — for bool it's the only one" - filtering, sorting, grouping-and-aggregates, joins (new): cross-type query patterns; joins headlines the same-keyset constraint - deleted: types.mdx, operators.mdx, functions.mdx, payload-format.mdx (content redistributed; URLs never shipped publicly, no redirect debt) - Anti-drift rule recorded in IA.md: mechanics live ONLY in core-concepts; category/query pages link, never restate - meta.json: flat URLs with ---Types---/---Indexes---/---Queries--- sidebar separators; legacy redirect map retargeted (queries → filtering, cipher-cell → core-concepts) Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- IA.md | 22 ++- content/docs/reference/eql/booleans.mdx | 62 +++++++ content/docs/reference/eql/core-concepts.mdx | 142 ++++++++++++++++ content/docs/reference/eql/filtering.mdx | 124 ++++++++++++++ content/docs/reference/eql/functions.mdx | 112 ------------- .../reference/eql/grouping-and-aggregates.mdx | 104 ++++++++++++ content/docs/reference/eql/index.mdx | 54 +++--- content/docs/reference/eql/indexes.mdx | 4 +- content/docs/reference/eql/joins.mdx | 112 +++++++++++++ content/docs/reference/eql/json.mdx | 60 +++++-- content/docs/reference/eql/meta.json | 17 +- .../docs/reference/eql/numbers-and-dates.mdx | 140 ++++++++++++++++ content/docs/reference/eql/operators.mdx | 153 ----------------- content/docs/reference/eql/payload-format.mdx | 123 -------------- content/docs/reference/eql/sorting.mdx | 96 +++++++++++ content/docs/reference/eql/text.mdx | 157 ++++++++++++++++++ content/docs/reference/eql/types.mdx | 95 ----------- v2-redirects.mjs | 4 +- 18 files changed, 1047 insertions(+), 534 deletions(-) create mode 100644 content/docs/reference/eql/booleans.mdx create mode 100644 content/docs/reference/eql/core-concepts.mdx create mode 100644 content/docs/reference/eql/filtering.mdx delete mode 100644 content/docs/reference/eql/functions.mdx create mode 100644 content/docs/reference/eql/grouping-and-aggregates.mdx create mode 100644 content/docs/reference/eql/joins.mdx create mode 100644 content/docs/reference/eql/numbers-and-dates.mdx delete mode 100644 content/docs/reference/eql/operators.mdx delete mode 100644 content/docs/reference/eql/payload-format.mdx create mode 100644 content/docs/reference/eql/sorting.mdx create mode 100644 content/docs/reference/eql/text.mdx delete mode 100644 content/docs/reference/eql/types.mdx diff --git a/IA.md b/IA.md index b51956c..6db1dee 100644 --- a/IA.md +++ b/IA.md @@ -130,14 +130,22 @@ live at `/docs/errors/<code>` — permanent, never restructured (CIP-3338). ## Reference - [x] Section scaffold 🚧 (eql, stack, auth, cli, proxy, workspace) -- **EQL (v3 rewrite — CIP-3326):** -- [x] `/reference/eql` — overview + install (single SQL file, permissions split, dbdev, Docker) -- [x] `/reference/eql/types` — 10 scalar families × variants + `eql_v3.json` -- [x] `/reference/eql/operators` — per-variant matrix incl. what RAISES; typed-operand rule +- **EQL (v3 rewrite — CIP-3326; Tailwind-shaped: install → core concepts → type + categories → indexes → query patterns). Anti-drift rule: shared mechanics + (typed operands, blockers, envelope, variant model, ORE-equality) live ONLY in + core-concepts — category/query pages link, never restate:** +- [x] `/reference/eql` — install (single SQL file, permissions split, dbdev, Docker) +- [x] `/reference/eql/core-concepts` — variant model, payload anatomy (absorbs + cipher-cell), typed-operand rule, fail-loud blockers, term leakage pointer +- [x] `/reference/eql/numbers-and-dates` — int*/float*/numeric/date/timestamp +- [x] `/reference/eql/text` — all six text variants; owns the no-LIKE treatment +- [x] `/reference/eql/json` — ste_vec + sv payload shape + containment/path queries +- [x] `/reference/eql/booleans` — storage-only variants (bool has only that one) - [x] `/reference/eql/indexes` — functional indexes on extractors; Supabase-compatible -- [x] `/reference/eql/json` — ste_vec, path queries -- [x] `/reference/eql/functions` — incl. aggregates (min/max only) -- [x] `/reference/eql/payload-format` — v/i/c envelope, hm/ob/bf (absorbs cipher-cell) +- [x] `/reference/eql/filtering` — =, IN, ranges, token match, containment +- [x] `/reference/eql/sorting` — ORDER BY, extractor sort-key form, pagination +- [x] `/reference/eql/grouping-and-aggregates` — GROUP BY/DISTINCT, min/max, no SUM/AVG +- [x] `/reference/eql/joins` — equijoins, the same-keyset constraint - **Stack SDK:** - [ ] `/reference/stack` — client + configuration (port encryption/* pages) - [ ] `/reference/stack/schema` diff --git a/content/docs/reference/eql/booleans.mdx b/content/docs/reference/eql/booleans.mdx new file mode 100644 index 0000000..390dc97 --- /dev/null +++ b/content/docs/reference/eql/booleans.mdx @@ -0,0 +1,62 @@ +--- +title: Booleans +description: "Encrypted booleans are storage-only by design: eql_v3.bool stores and decrypts, carries no index terms, and blocks every comparison." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Every scalar type has a storage-only variant — for `bool` it's the only one. EQL ships `eql_v3.bool` and nothing else: there is no `bool_eq` and no `bool_ord`. An encrypted boolean column can be stored, decrypted, and null-checked; it cannot be filtered, sorted, grouped, or joined on. + +## Why there are no query variants + +A two-value column has too little cardinality for any searchable index to be safe. An equality term over `true` / `false` would partition the table into two visible buckets — leaking the value distribution (and, with any outside knowledge, the values themselves) outright. Rather than ship an index term that can't keep its promise, EQL omits the query variants entirely. See [Searchable encryption](/concepts/searchable-encryption) for the general analysis of what index terms reveal. + +## What works, what raises + +`eql_v3.bool` follows the bare-variant contract described in [Core concepts](/reference/eql/core-concepts#variants-declare-capability): it carries no index terms, so `IS NULL` / `IS NOT NULL` are the only predicates that work. Every comparison operator routes to a blocker and raises — the [fail-loud behavior](/reference/eql/core-concepts#unsupported-operations-fail-loudly) shared by all encrypted variants: + +```sql +-- ❌ Raises: operator = is not supported for eql_v3.bool +SELECT * FROM users WHERE is_active = $1::eql_v3.bool; + +-- ✅ Works: NULL columns are not encrypted +SELECT * FROM users WHERE is_active IS NOT NULL; +``` + +## Filter client-side + +Query on other columns, decrypt the boolean in your application, and filter there: + +```sql +CREATE TABLE users ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email eql_v3.text_eq, -- exact lookup + created_at eql_v3.timestamp_ord, -- range queries, ORDER BY + is_active eql_v3.bool -- storage only (by design) +); +``` + +```sql +-- Narrow the result set with the columns that do carry index terms… +SELECT id, email, is_active FROM users +WHERE created_at >= $1::eql_v3.timestamp_ord; +-- …then decrypt is_active in the client and filter on the plaintext. +``` + +The [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) decrypt the payload back to a plain boolean on read, so the client-side filter is an ordinary `if`. + +If a boolean genuinely needs to be a server-side predicate, that is a data-modelling signal: consider whether the flag is actually sensitive. A non-sensitive flag can stay a plain PostgreSQL `boolean` column alongside your encrypted columns. + +## Storing without querying + +`bool` is the forced case of a pattern available to every scalar type: the bare variant `eql_v3.<T>` (for example `eql_v3.int4`, `eql_v3.text`, `eql_v3.timestamp`) is storage-and-decryption only. It carries no index terms, and every comparison operator raises — use it for columns you only ever store and decrypt, so the database holds no searchable material for them at all. + +For every type other than `bool`, storage-only is a choice you can walk back. If you later need to query, retype the column as a query variant — or, if the payloads already carry the needed term (the client decides which terms travel in the payload), cast at the call site: + +```sql +SELECT * FROM readings WHERE value::eql_v3.int4_ord > $1::eql_v3.int4_ord; +``` + +The variant families and what each one enables are covered in [Core concepts](/reference/eql/core-concepts); the per-type specifics live in [Numbers and dates](/reference/eql/numbers-and-dates) and [Text](/reference/eql/text). diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx new file mode 100644 index 0000000..a262fe8 --- /dev/null +++ b/content/docs/reference/eql/core-concepts.mdx @@ -0,0 +1,142 @@ +--- +title: Core concepts +description: "The model behind every EQL page: domain variants that declare capability, the encrypted payload envelope, the typed-operand rule, and fail-loud blockers." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Everything in the EQL reference builds on four ideas: columns are typed as **domain variants** that declare what they can do, every value is a **`jsonb` payload** carrying encrypted index terms, **operands must be typed** for the encrypted operators to resolve, and anything a column can't do **fails loudly** instead of returning wrong rows. This page is the canonical home for all four — the per-type and per-query pages link back here rather than restating them. + +## Variants declare capability + +EQL ships its searchable-encryption surface as PostgreSQL **domains in the `eql_v3` schema**, all backed by `jsonb`. Each scalar type generates a *family* of domain variants, and the variant you type a column as fixes its query capability. Each domain carries a `CHECK` constraint that validates the encrypted payload on insert, so a malformed or wrong-version value is rejected at write time rather than surfacing at query time. + +There is no database-side configuration table. Earlier EQL versions tracked encryption config in the database (`config_add_table`, `config_add_column`, and friends) — those are gone in v3. The searchable surface of a column is fixed by the domain variant you type it as, and which index terms travel in a value's payload is decided by the encryption client (the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy)). The domain makes the matching operators resolve; the term in the payload is what makes them answer. + +For any scalar type `<T>`, the family looks like this: + +| Domain variant | Capability | Index term carried | +| --- | --- | --- | +| `eql_v3.<T>` | Storage and decryption only. Every comparison operator is blocked — only `IS NULL` / `IS NOT NULL` work. | none | +| `eql_v3.<T>_eq` | Equality: `=` and `<>` (plus `IN`, `GROUP BY`, `DISTINCT`, equijoins). | `hm` (`eql_v3.hmac_256`) | +| `eql_v3.<T>_ord` / `eql_v3.<T>_ord_ore` | Full comparison surface: `=` `<>` `<` `<=` `>` `>=`, `BETWEEN`, `ORDER BY`, and the `eql_v3.min` / `eql_v3.max` aggregates. | `ob` (`eql_v3.ore_block_256`) | +| `eql_v3.text_match` (text only) | Encrypted free-text token containment via `@>` / `<@`. No equality, no ordering. | `bf` (`eql_v3.bloom_filter`) | +| `eql_v3.text_search` (text only) | Everything: equality, ordering, and token containment combined. | `hm` + `ob` + `bf` | + +Two things worth calling out: + +- **The bare variant blocks everything.** `eql_v3.<T>` carries no index term. Querying it with any comparison operator raises an "operator not supported" exception. Use it for columns you only ever store and decrypt — [Booleans](/reference/eql/booleans) covers this pattern in full. +- **`_ord` and `_ord_ore` are twins.** They are byte-identical surfaces backed by the same ORE block term. Pick the name that documents intent — "ordered" versus "ordered via ORE block". Both support the full ordered surface and `MIN` / `MAX`. + +Declaring a table is just typing each column as the variant it needs: + +```sql +CREATE TABLE users ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email eql_v3.text_eq, -- equality only + salary eql_v3.int4_ord, -- equality + range + ORDER BY + created_at eql_v3.timestamp_ord +); +``` + +Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers and dates](/reference/eql/numbers-and-dates), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `eql_v3.json`, with its own operator surface — see [JSON](/reference/eql/json). + +## Anatomy of an encrypted value + +Every EQL encrypted value is a `jsonb` payload with a shared envelope plus the index terms that make it queryable. Earlier CipherStash docs called this format the **CipherCell** — this section is the current definition of the same structure. + +Payloads are **produced** by the encryption clients — the [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) — and **consumed** by EQL's operators and functions inside Postgres. EQL never sees plaintext: it validates, stores, and compares these payloads; it cannot produce or decrypt them. The division is strict: the clients never rely on the database for key material. + +### The envelope + +Every payload carries three envelope keys. Each `eql_v3` domain's `CHECK` constraint requires them, so a value missing any of these is rejected at write time: + +| Key | Contents | Notes | +| --- | --- | --- | +| `v` | Payload version | Always exactly `2` on the wire. The domain `CHECK`s assert it and raise on any other value. | +| `i` | Ident: `{"t": "<table>", "c": "<column>"}` | Binds the ciphertext to the table and column it was encrypted for. Both keys required. | +| `c` | Ciphertext | The opaque, non-deterministic encrypted blob (mp_base85-encoded). Never used in comparisons. | + +<Callout> +`eql_v3` names the **SQL schema generation**, not the payload version. The JSON envelope version is still `v: 2` — the wire field names are unchanged from EQL v2, and the domain `CHECK`s assert `v = 2`. +</Callout> + +A `k` discriminator (`"ct"` for a scalar ciphertext, `"sv"` for a JSON document) also appears on payloads emitted by the clients, distinguishing the two top-level shapes. + +### Index-term keys + +Alongside the envelope, a payload carries the index terms for its column's capability. Each key is backed by a SEM (searchable encrypted metadata) type in the `eql_v3` schema: + +| Key | SEM type | Wire shape | Enables | Reveals | +| --- | --- | --- | --- | --- | +| `hm` | `eql_v3.hmac_256` (domain over `text`) | Hex string (HMAC-SHA-256) | `=`, `<>` on `_eq` and `text_search` domains | Whether two values are equal — nothing else | +| `ob` | `eql_v3.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks (block count varies by scalar width) | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | +| `bf` | `eql_v3.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit — large filters emit negative positions) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | + +The capability is encoded as **required keys**: the payload for an `eql_v3.text_eq` column must carry `hm`; an `eql_v3.int4_ord` payload must carry `ob` (and only `ob`); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. + +A scalar payload for an `eql_v3.text_search` column (lookup + ordering + free-text match, so all three terms are required): + +```json +{ + "v": 2, + "i": { "t": "users", "c": "email" }, + "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", + "hm": "9c8ec1d2f9932b979b1bf3f09f8a4e2f6a41f8de2f0c8b7a52e1f5c3d4b6a790", + "ob": ["7a1fd0c2...", "d24c9be1...", "03fa66b8..."], + "bf": [42, 1290, -8113, 30201] +} +``` + +- `v`, `i`, `c` — the envelope +- `hm` — equality term: `WHERE email = $1` compares this +- `ob` — ordering term: `ORDER BY` and range comparisons walk these blocks +- `bf` — bloom-filter term: `@>` token containment tests these bit positions + +Encrypted JSON documents use a different payload shape — an `sv` array with one encrypted entry per path in the document instead of a root ciphertext — defined in [JSON](/reference/eql/json). + +### Machine-readable schemas + +The [EQL repository](https://github.com/cipherstash/encrypt-query-language) publishes the format as JSON Schema in two places: + +- **`crates/eql-bindings/schema/`** — one schema per scalar domain (`$id`s under `https://schemas.cipherstash.com/eql/v3/`), generated from the canonical Rust wire types in the `eql-bindings` crate. TypeScript bindings are generated from the same definitions, so every producer and consumer shares one source of truth. +- **`docs/reference/schema/`** — full-payload schemas covering both the scalar and `sv` document shapes. These files are currently named for the v2.x payload releases (`eql-payload-v2.2.schema.json`, `eql-payload-v2.3.schema.json`) and reference `eql_v2` function names, even though the current SQL surface is `eql_v3` — the v2.3 schema is the applicable document-shape definition, matching the still-`v: 2` envelope. + +## The typed-operand rule + +The `eql_v3` domains are backed by `jsonb`. When an operand has no known type — a bare string literal, an untyped parameter — PostgreSQL reduces the domain to its `jsonb` base type and resolves the **native `jsonb` operator** instead of the encrypted one. The query doesn't fail; it silently returns native `jsonb` semantics, which are meaningless for encrypted payloads. + +```sql +-- ❌ Wrong: untyped parameter. PostgreSQL falls back to the native jsonb `=`, +-- which compares raw payloads — syntactically valid, semantically meaningless. +SELECT * FROM users WHERE email = $1; + +-- ✅ Right: typed operand — the encrypted `=` resolves. +SELECT * FROM users WHERE email = $1::eql_v3.text_eq; +``` + +Always type the operand: a typed parameter (`$1::eql_v3.text_eq`) or an explicit cast (`'…'::eql_v3.int4_ord`). The [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) type bound parameters automatically — raw SQL must do it by hand. + +This is the one place where a mistake is *silent*. Everything else fails loudly: + +## Unsupported operations fail loudly + +Unsupported operators are not silent no-ops. Every operator that a variant doesn't support is still *defined* — it routes to a blocker function that raises an `operator … is not supported` exception. A mis-typed query fails loudly instead of silently returning wrong results: + +```sql +-- salary is eql_v3.int8_eq (equality only) +SELECT * FROM users WHERE salary > $1::eql_v3.int8_eq; +-- ERROR: operator > is not supported for eql_v3.int8_eq +``` + +A `NULL` operand still raises — the blockers are deliberately not `STRICT`, so PostgreSQL can't skip the check. (A SQL `NULL` column value is not encrypted, so `IS NULL` / `IS NOT NULL` themselves always work, on every variant.) + +`LIKE` and `ILIKE` are blocked on **every** encrypted variant — pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter token containment instead; [Text](/reference/eql/text) covers it. + +One equality subtlety follows from the term table above: on `_ord` / `_ord_ore` columns, `=` and `<>` compare the **ORE (`ob`) term** — ORE comparison collapses to equality — so `_ord` payloads carry no `hm` term at all. On `_eq` and `text_search` columns, equality compares the HMAC (`hm`) term. + +## What the terms reveal + +Every index term a value carries is extra material stored in the database, and each term class reveals defined structure to an observer who can read the stored payloads: equality terms reveal *value repetition* (which rows share a value), ORE terms reveal *ordering* (which of two values is larger), and bloom terms reveal *probabilistic token overlap*. None of them reveal the plaintext — but you should only carry the terms you actually query on. The full analysis of what each term does and doesn't leak is in [Searchable encryption](/concepts/searchable-encryption). diff --git a/content/docs/reference/eql/filtering.mdx b/content/docs/reference/eql/filtering.mdx new file mode 100644 index 0000000..6f1b779 --- /dev/null +++ b/content/docs/reference/eql/filtering.mdx @@ -0,0 +1,124 @@ +--- +title: Filtering +description: "WHERE-clause patterns on encrypted columns: equality, IN lists, ranges and BETWEEN, text token matching, JSON containment, and combining encrypted and plaintext predicates." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Every filter below is ordinary SQL — the encrypted operators resolve from the column's domain variant, and a functional index on the matching term extractor serves the predicate. One rule applies throughout: **operands must be typed** (`$1::eql_v3.text_eq`, not a bare literal), or PostgreSQL falls through to native `jsonb` semantics. See [Core concepts](/reference/eql/core-concepts) for the typed-operand rule and how unsupported operators fail loudly instead of returning wrong rows. + +## Equality: `=` and `<>` + +Works on `_eq` and `_ord` / `_ord_ore` variants of every scalar, and on `text_search`: + +```sql +SELECT * FROM users WHERE email = $1::eql_v3.text_eq; +SELECT * FROM users WHERE tax_id <> $1::eql_v3.text_eq; +``` + +On `_eq` and `text_search` columns equality compares the HMAC (`hm`) term. On `_ord` variants there is no `hm` — equality compares the ORE (`ob`) term, which collapses to equality, so `_ord` columns get `=` and `<>` for free. See [Core concepts](/reference/eql/core-concepts) for the mechanism. + +```sql +-- salary is eql_v3.int8_ord: equality works without an hm term +SELECT * FROM users WHERE salary = $1::eql_v3.int8_ord; +``` + +Bare storage-only variants (`eql_v3.text`, `eql_v3.int4`, …) block every comparison — see the type pages for what each variant supports: [Numbers & dates](/reference/eql/numbers-and-dates), [Text](/reference/eql/text), [Booleans](/reference/eql/booleans). + +## `IN` lists + +`IN` desugars to `=`, so it needs the same equality-capable variants. Each list element is a separately encrypted, typed operand: + +```sql +SELECT * FROM users +WHERE email IN ($1::eql_v3.text_eq, $2::eql_v3.text_eq, $3::eql_v3.text_eq); +``` + +There is no way to encrypt a list as one value — the client encrypts each element and binds it as its own parameter. `IN (subquery)` also works, subject to the same-keyset rule covered in [Joins](/reference/eql/joins). + +## Ranges and `BETWEEN` + +`<`, `<=`, `>`, `>=` work on `_ord` / `_ord_ore` variants and `text_search` — the variants carrying an ORE (`ob`) term: + +```sql +SELECT * FROM users WHERE salary >= $1::eql_v3.int8_ord; + +-- BETWEEN desugars to >= and <= +SELECT * FROM users +WHERE created_at BETWEEN $1::eql_v3.timestamp_ord AND $2::eql_v3.timestamp_ord; +``` + +Half-open ranges compose the same way: + +```sql +SELECT * FROM events +WHERE occurred_at >= $1::eql_v3.timestamp_ord + AND occurred_at < $2::eql_v3.timestamp_ord; +``` + +## Text token matching: `@>` + +There is no `LIKE` on encrypted columns — encrypted free-text matching is bloom-filter token containment via `@>` on a `text_match` or `text_search` column: + +```sql +SELECT * FROM users WHERE name @> $1::eql_v3.text_match; +``` + +The client encrypts the search term into a bloom-filter query value; matching is probabilistic (false positives possible, false negatives not). For the full no-`LIKE` story and match-term tuning, see [Text](/reference/eql/text). + +## JSON containment and path filters + +Encrypted JSON documents (`eql_v3.json`) filter by containment and path existence: + +```sql +-- Does the document contain this (encrypted) structure? +SELECT * FROM orders WHERE metadata @> $1::eql_v3.ste_vec_query; + +-- Does this path exist in the document? +SELECT * FROM orders WHERE eql_v3.jsonb_path_exists(metadata, 'region_selector'); + +-- Equality on an extracted leaf +SELECT * FROM orders +WHERE metadata -> 'email_selector'::text = $1::eql_v3.ste_vec_entry; +``` + +Field access is by selector hash, not plaintext path. The full JSON surface — containment, field access, path queries, and range filters on extracted leaves — is in [JSON](/reference/eql/json). + +## Combining predicates + +Encrypted predicates compose with `AND`, `OR`, `NOT`, and parentheses like any other predicate — and plaintext columns filter normally alongside encrypted ones in the same `WHERE` clause: + +```sql +SELECT * FROM users +WHERE status = 'active' -- plaintext column, native operator + AND created_at >= $1::eql_v3.timestamp_ord -- encrypted range + AND (email = $2::eql_v3.text_eq -- encrypted equality + OR name @> $3::eql_v3.text_match); -- encrypted token match +``` + +The planner treats each encrypted predicate independently, so it can combine an index on a plaintext column with a functional index on an encrypted one (bitmap-AND, or whichever plan is cheapest). + +## `IS NULL` and `IS NOT NULL` + +A SQL `NULL` column value is never encrypted — there is no payload to encrypt — so null checks work on **every** variant, including storage-only ones: + +```sql +SELECT * FROM users WHERE tax_id IS NULL; +SELECT * FROM users WHERE tax_id IS NOT NULL; +``` + +Don't confuse this with a JSON `null` *inside* an encrypted document, which is an encrypted value like any other — see [JSON](/reference/eql/json). + +## Shape summary + +| Filter shape | Operators | Works on | Index | +| --- | --- | --- | --- | +| Equality | `=` `<>` `IN` | `_eq`, `_ord` / `_ord_ore`, `text_search` | hash (or btree) on `eql_v3.eq_term` — btree on `eql_v3.ord_term` for `_ord` | +| Range | `<` `<=` `>` `>=` `BETWEEN` | `_ord` / `_ord_ore`, `text_search` | btree on `eql_v3.ord_term` | +| Text token match | `@>` `<@` | `text_match`, `text_search` | GIN on `eql_v3.match_term` | +| JSON containment | `@>` `<@` | `eql_v3.json` | GIN on `eql_v3.to_ste_vec_query(col)::jsonb` | +| Null check | `IS NULL` / `IS NOT NULL` | every variant | — | + +Every one of these has a full index recipe — which method, which extractor, and how to confirm the index engages with `EXPLAIN` — in [Indexes](/reference/eql/indexes). diff --git a/content/docs/reference/eql/functions.mdx b/content/docs/reference/eql/functions.mdx deleted file mode 100644 index 210ca31..0000000 --- a/content/docs/reference/eql/functions.mdx +++ /dev/null @@ -1,112 +0,0 @@ ---- -title: Functions -description: "The eql_v3 function surface: comparison functions, index-term extractors, MIN/MAX aggregates, JSON functions, and version reporting." -type: reference -components: [eql] -verifiedAgainst: - eql: "3.0.0" ---- - -Everything EQL exposes lives in the `eql_v3` schema. Most functions are generated per [domain variant](/reference/eql/types), so PostgreSQL's overload resolution picks the right implementation from the argument type. As with operators, arguments must be typed — see [the typed-operand rule](/reference/eql/operators). - -## Comparison functions - -Function forms of the comparison operators, for platforms that disallow custom operators. Each is generated per capable domain variant, with overloads accepting the domain on either side and `jsonb` on the other: - -```sql -eql_v3.eq(a, b) RETURNS boolean -- = on _eq / _ord / _ord_ore / text_search -eql_v3.neq(a, b) RETURNS boolean -- <> -eql_v3.lt(a, b) RETURNS boolean -- < on _ord / _ord_ore / text_search -eql_v3.lte(a, b) RETURNS boolean -- <= -eql_v3.gt(a, b) RETURNS boolean -- > -eql_v3.gte(a, b) RETURNS boolean -- >= -eql_v3.contains(a, b) RETURNS boolean -- @> on text_match / text_search / eql_v3.json -eql_v3.contained_by(a, b) RETURNS boolean -- <@ -``` - -```sql -SELECT * FROM users WHERE eql_v3.eq(email, $1::eql_v3.text_eq); -SELECT * FROM users WHERE eql_v3.lt(created_at, $1::eql_v3.timestamp_ord); -``` - -Calling a comparison function a variant doesn't support resolves to a blocker that raises `operator … is not supported` — the same [fail-loud behavior](/reference/eql/operators) as the operators. There are no `like` / `ilike` functions: text matching is `eql_v3.contains` on a `text_match` value. - -## Index-term extractors - -These extract the encrypted index term from a domain value. They're generated per eq-, ord-, and match-capable variant of every scalar type, and they return the self-contained `eql_v3` index-term types: - -```sql --- Equality term (hm) -eql_v3.eq_term(a eql_v3.<T>_eq) RETURNS eql_v3.hmac_256 - --- Ordering term (ob) -eql_v3.ord_term(a eql_v3.<T>_ord) RETURNS eql_v3.ore_block_256 -eql_v3.ord_term(a eql_v3.<T>_ord_ore) RETURNS eql_v3.ore_block_256 - --- Text-match term (bf) -eql_v3.match_term(a eql_v3.text_match) RETURNS eql_v3.bloom_filter -``` - -`eql_v3.text_search` carries all three terms, so all three extractors work on it. - -The extractors exist for **indexing**: EQL indexes through a functional index on the extractor, never an operator class on the column. The extractors are inlinable, so bare-form predicates (`WHERE email = $1`) engage the index without rewriting. Sort keys are the exception — see [Range and ORDER BY](/reference/eql/indexes#range-and-order-by): - -```sql -CREATE INDEX users_email_eq ON users USING hash (eql_v3.eq_term(email)); -CREATE INDEX users_salary_ord ON users USING btree (eql_v3.ord_term(salary)); -CREATE INDEX users_name_match ON users USING gin (eql_v3.match_term(name)); -``` - -See [Indexes](/reference/eql/indexes) for the full recipes and performance guidance. - -## Aggregates: `eql_v3.min` and `eql_v3.max` - -`MIN` / `MAX` over encrypted values, defined per ord-capable variant of every scalar type. The input type selects the aggregate; the return type matches the input: - -```sql -eql_v3.min(eql_v3.<T>_ord) RETURNS eql_v3.<T>_ord -eql_v3.max(eql_v3.<T>_ord) RETURNS eql_v3.<T>_ord -eql_v3.min(eql_v3.<T>_ord_ore) RETURNS eql_v3.<T>_ord_ore -eql_v3.max(eql_v3.<T>_ord_ore) RETURNS eql_v3.<T>_ord_ore -``` - -Comparison routes through the variant's `<` / `>` operator, which uses the ORE block term — no decryption happens in the database. `NULL` inputs are skipped, and an all-`NULL` input set returns `NULL`. - -```sql -SELECT eql_v3.min(salary) FROM users; -SELECT eql_v3.max(salary) FROM users WHERE department = 'engineering'; - --- On a generic jsonb column, cast to the right domain at the call site -SELECT eql_v3.min(salary_jsonb::eql_v3.int8_ord) FROM users; -``` - -<Callout type="warn"> -**`SUM`, `AVG`, and other arithmetic aggregates are not supported** on encrypted columns — they would require homomorphic encryption. `MIN` / `MAX` work because they only need comparison. For sums and averages, decrypt at the application boundary and aggregate client-side. -</Callout> - -## JSON functions - -The encrypted-JSON document type `eql_v3.json` has its own function surface: - -- `eql_v3.jsonb_path_query(doc, selector)` — set-returning path query yielding encrypted entries; also `jsonb_path_query_first` and `jsonb_path_exists` -- `eql_v3.jsonb_array_length` / `jsonb_array_elements` / `jsonb_array_elements_text` — array helpers -- `eql_v3.to_ste_vec_query(doc)` — builds the GIN-indexable containment query form -- Entry-level term extractors: `eql_v3.eq_term(eql_v3.ste_vec_entry)` and `eql_v3.ore_cllw(eql_v3.ste_vec_entry)` - -These are documented with worked examples in [JSON support](/reference/eql/json). - -## `eql_v3.version()` - -Returns the installed EQL version string, baked in at build time: - -```sql -SELECT eql_v3.version(); --- '3.0.0' -``` - -The same version string is mirrored as a comment on the `eql_v3` schema, so you can read it without calling a function: - -```sql -SELECT obj_description('eql_v3'::regnamespace); --- '3.0.0' -``` diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx new file mode 100644 index 0000000..544a91c --- /dev/null +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -0,0 +1,104 @@ +--- +title: Grouping & aggregates +description: "GROUP BY, DISTINCT, COUNT, and eql_v3.min/max on encrypted columns — why to group on the extractor, and why SUM and AVG stay client-side." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Grouping and deduplication need an equality term, so they work on the same variants as `=`: `_eq`, `_ord` / `_ord_ore`, and `text_search`. `MIN` / `MAX` need an ordering term (`_ord` / `_ord_ore`, `text_search`). Arithmetic aggregates don't work at all — that's the last section. As everywhere, operands and call-site casts must be typed; see [Core concepts](/reference/eql/core-concepts). + +## `GROUP BY` and `DISTINCT` + +Both work in natural form on equality-capable variants: + +```sql +SELECT email, COUNT(*) FROM logins GROUP BY email; +SELECT DISTINCT email FROM logins; +``` + +Grouping compares equality terms, so rows encrypting the same plaintext land in the same group — but the group key that comes back is ciphertext. Decrypt it in the client if you need to display it. + +## Group on the extractor + +For anything beyond small tables, group on the equality-term extractor instead of the raw column: + +```sql +SELECT eql_v3.eq_term(email) AS email_term, COUNT(*) + FROM logins + GROUP BY eql_v3.eq_term(email); +``` + +The reason is planner economics. `GROUP BY email` uses the entire encrypted payload — 1–2 KB per row — as the hash key. Postgres estimates a hash table far larger than the default `work_mem` and falls back to a disk-spilling `GroupAggregate`. The extractor key is a small deterministic term: the hash table fits in `work_mem` and the planner picks `HashAggregate` reliably. If an ORM forces the raw-column form, raising `work_mem` is the rescue knob — but the extractor form is the design. The same reasoning, from the index-tuning angle, is in [Indexes](/reference/eql/indexes). + +Note the trade-off: grouping on `eq_term` returns the *term*, not the encrypted value — fine for counting, but the term itself can't be decrypted. If you need the group key's plaintext, join the grouped result back to the table on the term to recover a representative encrypted value, then decrypt that in the client. + +## `COUNT` and `COUNT(DISTINCT)` + +Plain `COUNT(col)` counts non-`NULL` rows — it never compares values, so it works on **any** variant, including storage-only ones: + +```sql +SELECT COUNT(tax_id) FROM users; -- works even on bare eql_v3.text +``` + +`COUNT(DISTINCT col)` deduplicates, so it needs an equality-capable variant — and the same extractor advice applies: + +```sql +SELECT COUNT(DISTINCT eql_v3.eq_term(email)) FROM logins; +``` + +## `MIN` and `MAX`: `eql_v3.min` / `eql_v3.max` + +EQL ships `min` / `max` aggregates per ord-capable variant of every scalar type. The input type selects the aggregate, and the return type matches the input: + +```sql +eql_v3.min(eql_v3.<T>_ord) RETURNS eql_v3.<T>_ord +eql_v3.max(eql_v3.<T>_ord) RETURNS eql_v3.<T>_ord +eql_v3.min(eql_v3.<T>_ord_ore) RETURNS eql_v3.<T>_ord_ore +eql_v3.max(eql_v3.<T>_ord_ore) RETURNS eql_v3.<T>_ord_ore +``` + +Comparison routes through the variant's `<` / `>` operator on the ORE term — no decryption happens in the database, and the result is an encrypted value the client decrypts. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`, matching native aggregate semantics. + +```sql +SELECT eql_v3.min(salary) FROM users; +SELECT eql_v3.max(salary) FROM users WHERE department = 'engineering'; + +-- Combined with grouping +SELECT eql_v3.eq_term(department_code) AS dept, eql_v3.max(salary) + FROM users + GROUP BY eql_v3.eq_term(department_code); +``` + +If the column is generic `jsonb` rather than a domain, cast to the right variant at the call site so overload resolution can pick the aggregate: + +```sql +SELECT eql_v3.min(salary_jsonb::eql_v3.int8_ord) FROM users; +``` + +A btree on `eql_v3.ord_term(col)` serves `MIN` / `MAX` — the [Indexes](/reference/eql/indexes) page has the recipe. + +## No `SUM`, no `AVG` + +<Callout type="warn"> +**`SUM`, `AVG`, and every other arithmetic aggregate are unsupported** on encrypted columns — they would require homomorphic encryption, which EQL does not do. `MIN` / `MAX` work because they only need *comparison*, which the ORE term provides. For sums and averages, select the rows (or `MIN`/`MAX`/`COUNT` server-side to narrow them) and aggregate client-side after decryption. +</Callout> + +## Grouping on extracted JSON leaves + +Leaves inside an encrypted JSON document group the same way — extract the entry by selector, then group on its equality term: + +```sql +SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) + FROM orders + GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); +``` + +`eql_v3.eq_term` reads whichever term the entry carries, so this works on every JSON node type. String and Number leaves also support `eql_v3.min` / `eql_v3.max` via their CLLW ORE term. Selectors and node capabilities are in [JSON](/reference/eql/json). + +## Where to go next + +- [Indexes](/reference/eql/indexes) — the hash/btree recipes that back these shapes, and the full `work_mem` / `HashAggregate` story. +- [Joins](/reference/eql/joins) — equality terms across tables, and the same-keyset rule. +- [Filtering](/reference/eql/filtering) — the `WHERE` shapes that feed these aggregates. diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index 68b95c2..e3d7f0f 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -11,20 +11,7 @@ Encrypt Query Language (EQL) is a set of types, operators, and functions for sto EQL itself never encrypts anything. Encryption and decryption happen in the client, using the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). EQL provides the database-side surface those clients query against: encrypted column types, the operators that compare them, and the term-extractor functions that make indexes work. -## The v3 model - -Every encrypted column is a `jsonb`-backed **domain type** in the `eql_v3` schema. The domain variant you choose declares the column's searchable capability: `eql_v3.text_eq` supports equality (`=` / `<>`), `eql_v3.text_match` supports encrypted text containment (`@>` / `<@`), `eql_v3.int4_ord` adds range comparisons, `ORDER BY`, and `MIN` / `MAX`. Each domain carries a `CHECK` constraint that validates the encrypted payload on insert, so a malformed or wrong-version value is rejected at write time rather than surfacing at query time. - -There is no database-side configuration table. Earlier EQL versions tracked encryption config in the database (`config_add_table`, `config_add_column`, and friends) — those are gone in v3. The searchable surface of a column is fixed by the domain variant you type it as, and which index terms travel in a value's payload is decided by the encryption client. Operators that a variant doesn't support raise an "operator not supported" error rather than silently falling through to native `jsonb` semantics — and `LIKE` / `ILIKE` are blocked on every encrypted column. - -```sql -CREATE TABLE users ( - id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email eql_v3.text_eq, -- equality only - salary eql_v3.int4_ord, -- equality + range + ORDER BY - created_at eql_v3.timestamp_ord -); -``` +Every encrypted column is a `jsonb`-backed domain type in the `eql_v3` schema, and the domain variant you choose declares what the column can do — the full model is in [Core concepts](/reference/eql/core-concepts). ## Install @@ -113,25 +100,42 @@ Schema changes — adding or removing encrypted columns — always go through th EQL v3 is designed to install without superuser. There are no custom operator classes (which managed platforms typically block), no `postgresql.conf` changes, and no separate Supabase build — the single install script is the same artefact everywhere. Indexing works through ordinary functional indexes over EQL's term-extractor functions, which any user who can `CREATE INDEX` can build. See the [Supabase integration](/integrations/supabase) for platform-specific setup. -## In this section +## Understand <Cards> - <Card title="Types" href="/reference/eql/types"> - The encrypted domain type families and the capability each variant carries. + <Card title="Core concepts" href="/reference/eql/core-concepts"> + Domain variants, the encrypted payload, typed operands, and fail-loud blockers — the model every other page assumes. </Card> - <Card title="Operators" href="/reference/eql/operators"> - Which SQL operators resolve on which variant, and what raises. + <Card title="Numbers and dates" href="/reference/eql/numbers-and-dates"> + Encrypted integers, floats, numerics, dates, and timestamps. </Card> - <Card title="Indexes" href="/reference/eql/indexes"> - Functional-index recipes for equality, range, and text match. + <Card title="Text" href="/reference/eql/text"> + Encrypted text: equality, ordering, and free-text token matching — and why there is no `LIKE`. </Card> <Card title="JSON" href="/reference/eql/json"> Encrypted JSON documents: containment, field access, and GIN indexing. </Card> - <Card title="Functions" href="/reference/eql/functions"> - The function equivalents of every operator, extractors, and aggregates. + <Card title="Booleans" href="/reference/eql/booleans"> + Storage-only by design: why encrypted booleans carry no index terms. + </Card> + <Card title="Indexes" href="/reference/eql/indexes"> + Functional-index recipes over the term extractors, and what it takes for an index to engage. + </Card> +</Cards> + +## Use + +<Cards> + <Card title="Filtering" href="/reference/eql/filtering"> + `WHERE` clauses on encrypted columns: equality, ranges, and text containment. + </Card> + <Card title="Sorting" href="/reference/eql/sorting"> + `ORDER BY` on encrypted columns, and how to keep the sort in the index. + </Card> + <Card title="Grouping and aggregates" href="/reference/eql/grouping-and-aggregates"> + `GROUP BY`, `DISTINCT`, `COUNT`, and the `MIN` / `MAX` aggregates. </Card> - <Card title="Payload format" href="/reference/eql/payload-format"> - The encrypted payload envelope and index terms. + <Card title="Joins" href="/reference/eql/joins"> + Equijoins on encrypted columns and the same-keyset rule. </Card> </Cards> diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index 83f354e..3d1df3e 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -29,7 +29,7 @@ EQL v3 deliberately ships no operator class for encrypted columns. Operators res ## Index recipes -Type the column as the domain variant that carries the term ([Types](/reference/eql/types)), then index the matching extractor: +Type the column as the domain variant that carries the term (see [Core concepts](/reference/eql/core-concepts) for the variant model, and the per-type pages for specifics), then index the matching extractor: ```sql -- Equality: hash index on eq_term @@ -65,8 +65,8 @@ All three must hold: ```sql -- ✓ resolves the encrypted operator → uses the index -WHERE email = $1; WHERE email = $1::eql_v3.text_eq; +WHERE email = $1; -- only when the client (Stack SDK / Proxy) binds $1 typed -- ✗ falls through to native jsonb semantics WHERE email = '{"hm":"abc"}'::jsonb; diff --git a/content/docs/reference/eql/joins.mdx b/content/docs/reference/eql/joins.mdx new file mode 100644 index 0000000..fdcc0e4 --- /dev/null +++ b/content/docs/reference/eql/joins.mdx @@ -0,0 +1,112 @@ +--- +title: Joins +description: "Equijoins on encrypted columns: the same-keyset and matching-variant constraint, IN (subquery) and set operations, a worked example, and how to diagnose a join that returns nothing." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Equijoins work on equality-capable variants (`_eq`, `_ord` / `_ord_ore`, `text_search`) — the join condition is just encrypted equality. But there is one constraint that has no plaintext equivalent, and it is the single thing to internalize on this page: + +<Callout type="warn"> +**Both sides of the join must be encrypted with the same keyset and typed as a matching variant.** Encrypted equality compares deterministic index terms, and those terms are derived from the encryption keys. Two columns encrypted under different keysets produce different terms for the *same plaintext* — their terms can **never** match, and the join returns no rows. This is not an error the database can detect: the query is valid, the plan is fine, the result is simply empty. +</Callout> + +"Matching variant" means both sides compare the same term kind: `_eq` with `_eq` (or `text_search`, which carries an `hm` term too) compares HMAC terms; `_ord` with `_ord` compares ORE terms. An `_eq` column can't join an `_ord` column — one side has no `hm`, the other no `ob`, and the equality operator between mismatched variants doesn't resolve. See [Core concepts](/reference/eql/core-concepts) for the term model. + +## Equijoin + +```sql +SELECT u.*, o.total +FROM users u +JOIN orders o ON u.email = o.customer_email; +-- both columns eql_v3.text_eq, encrypted with the same keyset +``` + +No typed-operand cast is needed here — both operands are encrypted columns, so their domain types resolve the encrypted operator directly. All join types (`INNER`, `LEFT`, `RIGHT`, `FULL`) work; `LEFT JOIN` null-extension behaves normally because SQL `NULL`s are not encrypted. + +Index both sides for anything beyond small tables — a hash (or btree) index on `eql_v3.eq_term(col)` on each column. Recipes are in [Indexes](/reference/eql/indexes). + +## `IN (subquery)` and set operations + +Both follow the same rule, because both compare equality terms across two column sources: + +```sql +-- IN (subquery): users.email and orders.customer_email must share a keyset +SELECT * FROM users +WHERE email IN (SELECT customer_email FROM orders WHERE flagged); + +-- Set-operation dedup: UNION / INTERSECT / EXCEPT dedupe by equality term +SELECT email FROM users +UNION +SELECT customer_email FROM orders; +``` + +If the two columns are under different keysets, `IN (subquery)` matches nothing, `INTERSECT` is empty, `EXCEPT` returns everything, and `UNION` never merges duplicates — all silently. + +## Worked example + +Two tables sharing an encrypted customer identifier, both columns typed `eql_v3.text_eq` and encrypted by the same client configuration (same keyset): + +```sql +CREATE TABLE users ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email eql_v3.text_eq +); + +CREATE TABLE orders ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + customer_email eql_v3.text_eq, + total BIGINT NOT NULL +); + +CREATE INDEX users_email_eq ON users USING hash (eql_v3.eq_term(email)); +CREATE INDEX orders_cust_eq ON orders USING hash (eql_v3.eq_term(customer_email)); +ANALYZE users; ANALYZE orders; +``` + +Orders per user, filtered by an encrypted lookup on one side: + +```sql +SELECT u.id, COUNT(o.id) AS order_count +FROM users u +LEFT JOIN orders o ON u.email = o.customer_email +WHERE u.email = $1::eql_v3.text_eq +GROUP BY u.id; +``` + +The `WHERE` engages the hash index on `users`; the join condition engages the one on `orders`. The grouping key here is a plaintext `id`, so no extractor is needed — grouping on encrypted columns is covered in [Grouping & aggregates](/reference/eql/grouping-and-aggregates). + +## Anti-pattern: joining across keysets + +The failure mode is quiet. A join across keysets doesn't raise, doesn't warn, and produces a plan that looks healthy — the terms just never match, so it behaves exactly like a join where no rows happen to correlate: + +```sql +-- users encrypted by service A's keyset, partners by service B's: +SELECT * FROM users u JOIN partners p ON u.email = p.contact_email; +-- 0 rows. Always. Even when the plaintext emails overlap. +``` + +To diagnose a join that returns fewer rows than expected (or none): + +1. **Check the variants.** Both columns must be equality-capable and compare the same term kind. A blocked operator raises loudly, so if the query *runs*, the variants at least resolve — but confirm they compare the same term (`hm` vs `ob`). +2. **Compare terms for a known-matching pair.** Take one row from each table that you know holds the same plaintext and compare their equality terms: + + ```sql + SELECT eql_v3.eq_term(u.email) = eql_v3.eq_term(p.contact_email) AS terms_match + FROM users u, partners p + WHERE u.id = 42 AND p.id = 7; -- rows known to share a plaintext value + ``` + + `false` for plaintext-identical values means the terms were derived under different keysets (or different client configurations) — no SQL will make them join. +3. **Fix it at the encryption layer.** Configure both columns under the same keyset in the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy) and re-encrypt one side. Cross-keyset correlation otherwise has to happen in the client, after decryption. + +Treat shared keysets as part of your schema design: columns you intend to join are a unit, the same way a foreign key pair is. + +## Where to go next + +- [Filtering](/reference/eql/filtering) — the equality and `IN` shapes joins are built from. +- [Grouping & aggregates](/reference/eql/grouping-and-aggregates) — grouping joined results on encrypted keys. +- [Indexes](/reference/eql/indexes) — equality index recipes for both sides of a join. +- [Core concepts](/reference/eql/core-concepts) — index terms, variants, and why determinism makes joins possible at all. diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index 6ef2e60..4204ca8 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -1,6 +1,6 @@ --- -title: Encrypted JSON -description: "Store and query encrypted JSON documents with eql_v3.json — containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." +title: JSON +description: "The complete reference for encrypted JSON documents with eql_v3.json — the ste_vec payload shape, containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." type: reference components: [eql] verifiedAgainst: @@ -21,7 +21,47 @@ Three `jsonb`-backed domains make up the encrypted JSON surface: | `eql_v3.ste_vec_entry` | A single entry from the vector: a selector, a ciphertext, and exactly one index term. This is what `->` returns. | | `eql_v3.ste_vec_query` | A containment needle: entries with selectors and index terms but **no ciphertext**. This is what you cast a `@>` operand to. | -The full wire shape of each is documented in [Payload format](/reference/eql/payload-format). +## Payload shape + +An encrypted JSON document uses a different payload shape from the scalar types: the standard envelope keys are present (`v`, `i`, plus the `k: "sv"` discriminator — envelope anatomy is covered in [Core concepts](/reference/eql/core-concepts)), but there is no root ciphertext. Instead, an `sv` array carries one encrypted entry per path in the document. Each entry has: + +| Key | Contents | +| --- | --- | +| `s` | Selector — a deterministic hash of the JSON path. Required; entry matching compares selectors first. | +| `c` | Ciphertext for the node at that path. | +| `hm` **or** `oc` | Exactly one, never both — the domain `CHECK` enforces the exclusivity. `hm` (HMAC-256) on Boolean/`null` leaves and Object/Array roots; `oc` (CLLW ORE, backed by `eql_v3.ore_cllw`) on String/Number leaves. | +| `a` | Optional array marker — `true` when the selector points at an array context. | + +The decoded `oc` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier payload versions split this into two fields — `ocf` (fixed-width, numeric) and `ocv` (variable-width, string) — which consolidated into the single `oc` key; the tag byte now carries the distinction. + +A document payload for an `eql_v3.json` column: + +```json +{ + "v": 2, + "k": "sv", + "i": { "t": "orders", "c": "metadata" }, + "sv": [ + { "s": "2517068c0d1f9d4d41d2c666211f785e", "c": "mBbKmM...", "hm": "b0e0..." }, + { "s": "f510853a4ab9d4f75f51a533ac264c5d", "c": "mBbKmQ...", "oc": "01a3f2..." }, + { "s": "33743aed3ae636f6bf05cff11ac4b519", "c": "mBbKmR...", "oc": "004e19..." } + ] +} +``` + +- First entry: an object root — `hm` only, equality/containment +- Second entry: a string leaf — `oc` starting with tag `01` +- Third entry: a numeric leaf — `oc` starting with tag `00` + +A containment **query** payload (`eql_v3.ste_vec_query`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. This is the needle the client builds for a `@>` query: + +```json +{ + "sv": [ + { "s": "f510853a4ab9d4f75f51a533ac264c5d", "oc": "01a3f2..." } + ] +} +``` ## Storing encrypted JSON @@ -50,7 +90,7 @@ During encryption, the client flattens the document: each unique path gets a det | String | `oc` (CLLW ORE, string domain) | Yes | Yes | | Number | `oc` (CLLW ORE, numeric domain) | Yes | Yes | -Each entry carries exactly one of `hm` or `oc` — the domain `CHECK` enforces the exclusivity. `hm` is a deterministic hash, so it supports equality only. `oc` is a CLLW ORE term that reveals ordering and, being deterministic, collapses to equality on matching selectors — `eql_v3.eq_term` reads whichever term an entry carries, so equality works uniformly across all node types. Earlier payload versions split the ORE term into `ocf` (fixed-width, numeric) and `ocv` (variable-width, string); current payloads emit a single `oc` whose leading domain-tag byte carries the numeric/string distinction. +Each entry carries exactly one of `hm` or `oc` — the domain `CHECK` enforces the exclusivity. `hm` is a deterministic hash, so it supports equality only. `oc` is a CLLW ORE term that reveals ordering and, being deterministic, collapses to equality on matching selectors — `eql_v3.eq_term` reads whichever term an entry carries, so equality works uniformly across all node types. JSON `null` here means a `null` literal *inside* the document. A SQL `NULL` column value is not encrypted at all. @@ -66,7 +106,7 @@ These native PostgreSQL `jsonb` operators are **blocked** on `eql_v3.json`. They Use containment (`@>` / `<@`), field access (`->` / `->>`), or the `eql_v3.jsonb_path_*` functions instead. There is no server-side mutation of an encrypted document — updates re-encrypt in the client. <Callout type="warn"> -**Type your operands.** `eql_v3.json` is a domain over `jsonb`, and PostgreSQL resolves `domain OP untyped_literal` to the **native** `jsonb` operator — bypassing both the encrypted operator and the blockers. `WHERE doc -> 'email'` silently runs native `jsonb ->` and returns `NULL`; `WHERE doc -> 'email'::text` resolves the encrypted operator. This is the same rule as the [scalar operators](/reference/eql/operators). Queries through CipherStash Proxy always bind typed parameters, so this only bites hand-written ad-hoc SQL. +**Operands must be typed** (`doc -> 'email'::text`, not `doc -> 'email'`) — an untyped operand resolves the native `jsonb` operator, bypassing both the encrypted operator and the blockers. See [Core concepts](/reference/eql/core-concepts). </Callout> ## Containment: `@>` and `<@` @@ -213,16 +253,16 @@ The rows come back as ciphertext; decrypt them in the client. </Step> </Steps> -## In this section +## Where to next <Cards> - <Card title="Payload format" href="/reference/eql/payload-format"> - The wire shape of the ste_vec envelope and its entries. + <Card title="Core concepts" href="/reference/eql/core-concepts"> + The envelope anatomy, typed-operand rule, and fail-loud behavior shared by every EQL type. </Card> <Card title="Indexes" href="/reference/eql/indexes"> GIN containment and field-level functional index recipes. </Card> - <Card title="Operators" href="/reference/eql/operators"> - The full operator surface, including the typed-operand rule. + <Card title="Filtering" href="/reference/eql/filtering"> + WHERE-clause patterns across all encrypted types. </Card> </Cards> diff --git a/content/docs/reference/eql/meta.json b/content/docs/reference/eql/meta.json index 48fe2e7..3f4469e 100644 --- a/content/docs/reference/eql/meta.json +++ b/content/docs/reference/eql/meta.json @@ -1,11 +1,18 @@ { "title": "EQL", "pages": [ - "types", - "operators", - "indexes", + "core-concepts", + "---Types---", + "numbers-and-dates", + "text", "json", - "functions", - "payload-format" + "booleans", + "---Indexes---", + "indexes", + "---Queries---", + "filtering", + "sorting", + "grouping-and-aggregates", + "joins" ] } diff --git a/content/docs/reference/eql/numbers-and-dates.mdx b/content/docs/reference/eql/numbers-and-dates.mdx new file mode 100644 index 0000000..1d01dec --- /dev/null +++ b/content/docs/reference/eql/numbers-and-dates.mdx @@ -0,0 +1,140 @@ +--- +title: Numbers & dates +description: "The complete reference for encrypted numeric and date/time columns: the int, float, numeric, date, and timestamp domain variants, the ORE-backed payload they carry, and range, ORDER BY, and MIN/MAX queries." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Eight scalar types share one identical query surface: `int2`, `int4`, `int8`, `float4`, `float8`, `numeric`, `date`, and `timestamp`. These are the columns you filter by range, sort newest-first, and take a `MIN` / `MAX` over — salaries, totals, rates, hire dates, timestamps. Everything on this page applies to all eight; only the domain name changes. + +There is no free-text matching for these types — `_match` and `_search` are [text-only variants](/reference/eql/text). Boolean columns are a separate, storage-only story — see [Booleans](/reference/eql/booleans). + +## Variants + +Each of the eight scalar types generates the same four `jsonb`-backed domain variants: + +| Domain variant | Capability | Index term carried | +| --- | --- | --- | +| `eql_v3.<T>` | Storage and decryption only. Every comparison operator is blocked — only `IS NULL` / `IS NOT NULL` work. | none | +| `eql_v3.<T>_eq` | Equality: `=` and `<>` (plus `IN`, `GROUP BY`, `DISTINCT`, equijoins). | `hm` (HMAC-256) | +| `eql_v3.<T>_ord` | Full comparison surface: `=` `<>` `<` `<=` `>` `>=`, `BETWEEN`, `ORDER BY`, and `MIN` / `MAX`. | `ob` (ORE block) | +| `eql_v3.<T>_ord_ore` | Identical to `<T>_ord` — a twin name that documents intent. | `ob` (ORE block) | + +Declare only the capability you query on — each index term class reveals different structure to an observer (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts): + +```sql +CREATE TABLE employees ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + salary eql_v3.int8_ord, -- range queries, ORDER BY, MIN/MAX + tax_rate eql_v3.numeric_eq, -- exact lookup only + net_worth eql_v3.numeric, -- store and decrypt only, never queried + hired_on eql_v3.date_ord, + created_at eql_v3.timestamp_ord +); +``` + +## Payload + +A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `eql_v3.int8_ord` `salary` column: + +```json +{ + "v": 2, + "i": { "t": "employees", "c": "salary" }, + "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", + "ob": [ + "7a1fd0c2...", "d24c9be1...", "03fa66b8...", "91b7e04d...", + "5c28aa19...", "e6f3071c...", "48d92ab5...", "0b64cf37..." + ] +} +``` + +- **`ob` is the only index term.** An `_ord` payload carries no `hm`: equality on `_ord` variants compares ORE terms, which collapse to equality — see [Core concepts](/reference/eql/core-concepts). Only `_eq` payloads carry `hm` (a single hex HMAC-SHA-256 string) instead of `ob`. +- **The `ob` block count varies with the plaintext width**: 8 blocks for the int scalars, 12 for `timestamp`, 14 for `numeric` — the array just carries more block strings. + +## Operators and functions + +The function forms exist for managed platforms that disallow custom operators — they take the same typed arguments and resolve identically. + +| SQL operator | Function form | `eql_v3.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | +| --- | --- | :---: | :---: | :---: | +| `=` / `<>` | `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | ❌ | ✅ | ✅ | +| `<` `<=` `>` `>=` | `eql_v3.lt` / `lte` / `gt` / `gte` | ❌ | ❌ | ✅ | +| `BETWEEN` | desugars to `>=` and `<=` | ❌ | ❌ | ✅ | +| `IN` | desugars to `=` | ❌ | ✅ | ✅ | +| `GROUP BY` / `DISTINCT` | — (needs an equality term) | ❌ | ✅ | ✅ | +| `ORDER BY` | sort key: `eql_v3.ord_term(col)` | ❌ | ❌ | ✅ | +| `MIN` / `MAX` | `eql_v3.min(col)` / `eql_v3.max(col)` | ❌ | ❌ | ✅ | +| `IS NULL` / `IS NOT NULL` | — | ✅ | ✅ | ✅ | + +Blocked cells raise an `operator … is not supported` exception — they never silently return wrong rows. Operands must be typed (`$1::eql_v3.int8_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). + +**`SUM`, `AVG`, and other arithmetic aggregates are not supported** on encrypted columns — they would require homomorphic encryption. `MIN` / `MAX` work because they only need comparison; for sums and averages, decrypt at the application boundary and aggregate client-side. + +## Example queries + +### Range filter + +```sql +SELECT * FROM employees +WHERE salary >= $1::eql_v3.int8_ord; + +SELECT * FROM employees +WHERE salary BETWEEN $1::eql_v3.int8_ord AND $2::eql_v3.int8_ord; +``` + +### Date window + +`BETWEEN` works the same on `date` and `timestamp` columns: + +```sql +SELECT * FROM employees +WHERE hired_on BETWEEN $1::eql_v3.date_ord AND $2::eql_v3.date_ord; +``` + +### Newest-first listing + +Bare `ORDER BY created_at` sorts correctly, but the planner doesn't rewrite sort keys, so it adds a `Sort` node even when a btree index exists. Write the sort key in extractor form to stream rows out of the index already ordered — at large row counts this is the difference between seconds and milliseconds (see [Sorting](/reference/eql/sorting)): + +```sql +SELECT * FROM employees +WHERE created_at >= $1::eql_v3.timestamp_ord +ORDER BY eql_v3.ord_term(created_at) DESC +LIMIT 10; +``` + +### MIN and MAX + +`eql_v3.min` / `eql_v3.max` compare ORE terms — no decryption happens in the database, and the encrypted result decrypts in the client. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`: + +```sql +SELECT eql_v3.min(salary) FROM employees; +SELECT eql_v3.max(created_at) FROM employees; +``` + +### Cast at the call site + +On a generic `jsonb` column whose payloads already carry the `ob` term, cast to the right domain in the query: + +```sql +SELECT eql_v3.min(salary_jsonb::eql_v3.int8_ord) FROM employees; +``` + +## Where to next + +<Cards> + <Card title="Indexes" href="/reference/eql/indexes"> + Btree recipes on `eql_v3.ord_term` for range, ORDER BY, and MIN/MAX. + </Card> + <Card title="Filtering" href="/reference/eql/filtering"> + WHERE-clause patterns across all encrypted types. + </Card> + <Card title="Sorting" href="/reference/eql/sorting"> + Why the extractor-form sort key matters, and how to verify with EXPLAIN. + </Card> + <Card title="Grouping & aggregates" href="/reference/eql/grouping-and-aggregates"> + GROUP BY, DISTINCT, and the aggregate surface on encrypted columns. + </Card> +</Cards> diff --git a/content/docs/reference/eql/operators.mdx b/content/docs/reference/eql/operators.mdx deleted file mode 100644 index 60a5fff..0000000 --- a/content/docs/reference/eql/operators.mdx +++ /dev/null @@ -1,153 +0,0 @@ ---- -title: Operators -description: "Which SQL operators work on each eql_v3 encrypted-domain variant, how unsupported operators fail, and why operands must be typed." -type: reference -components: [eql] -verifiedAgainst: - eql: "3.0.0" ---- - -EQL overloads standard PostgreSQL operators on the [encrypted-domain types](/reference/eql/types). Type the column as the variant that carries the right index term and the operator resolves — and engages a matching [functional index](/reference/eql/indexes). - -<Callout type="warn"> -**Operands must be typed.** The `eql_v3` domains are backed by `jsonb`. When an operand has no known type — a bare string literal, an untyped parameter — PostgreSQL reduces the domain to its `jsonb` base type and resolves the **native `jsonb` operator** instead of the encrypted one. The query doesn't fail; it silently returns native `jsonb` semantics, which are meaningless for encrypted payloads. - -Always type the operand: a typed parameter (`$1::eql_v3.text_eq`) or an explicit cast (`'…'::eql_v3.int4_ord`). The [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) type bound parameters automatically — raw SQL must do it by hand. -</Callout> - -## Operator support by variant - -A ✅ means the operator resolves on a column typed as that variant. A ❌ means it is blocked — it raises, it does not return wrong rows. - -| SQL operator | Meaning | `eql_v3.<T>` | `_eq` | `_ord` / `_ord_ore` | `text_match` | `text_search` | -| --- | --- | :---: | :---: | :---: | :---: | :---: | -| `=` | Equality | ❌ | ✅ | ✅ | ❌ | ✅ | -| `<>` / `!=` | Inequality | ❌ | ✅ | ✅ | ❌ | ✅ | -| `<` `<=` `>` `>=` | Ordered comparison | ❌ | ❌ | ✅ | ❌ | ✅ | -| `@>` / `<@` | Bloom-filter token containment | ❌ | ❌ | ❌ | ✅ | ✅ | -| `LIKE` / `ILIKE` (`~~` / `~~*`) | SQL pattern match | ❌ | ❌ | ❌ | ❌ | ❌ | -| `IS NULL` / `IS NOT NULL` | Null check | ✅ | ✅ | ✅ | ✅ | ✅ | - -A SQL `NULL` column value is not encrypted, so `IS NULL` / `IS NOT NULL` always work regardless of variant. - -## There is no `LIKE` - -`LIKE` and `ILIKE` (`~~` / `~~*`) raise on **every** encrypted-domain variant. SQL pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter token containment — `@>` on a `text_match` or `text_search` column: - -```sql --- ❌ Raises: operator not supported -SELECT * FROM users WHERE email LIKE '%alice%'; - --- ✅ Encrypted free-text match -SELECT * FROM users WHERE email @> $1::eql_v3.text_match; -``` - -`@>` / `<@` here is **probabilistic ngram-bloom containment** — it tests whether the encrypted text contains the (encrypted) search terms. It is not JSONB containment and not `LIKE`. The client encrypts the search term into a bloom-filter query value; false positives are possible, false negatives are not. - -## Unsupported operators fail loudly - -Unsupported operators are not silent no-ops. Every operator that a variant doesn't support is still *defined* — it routes to a blocker function that raises an `operator … is not supported` exception. A mis-typed query fails loudly instead of silently returning wrong results: - -```sql --- salary is eql_v3.int8_eq (equality only) -SELECT * FROM users WHERE salary > $1::eql_v3.int8_eq; --- ERROR: operator > is not supported for eql_v3.int8_eq -``` - -A `NULL` operand still raises — the blockers are deliberately not `STRICT`, so PostgreSQL can't skip the check. - -## Query shapes - -### Equality: `=` and `<>` - -Works on `_eq`, `_ord` / `_ord_ore`, and `text_search`. On `_eq` and `text_search`, equality compares the HMAC (`hm`) term; on `_ord` variants it compares the ORE (`ob`) term, which collapses to equality — so `_ord` columns get equality without carrying an `hm` term: - -```sql -SELECT * FROM users WHERE email = $1::eql_v3.text_eq; -SELECT * FROM users WHERE email <> $1::eql_v3.text_eq; -``` - -### Comparison, `BETWEEN`, and `ORDER BY` - -Works on `_ord` / `_ord_ore` and `text_search` (variants carrying an `ob` ORE term): - -```sql -SELECT * FROM users WHERE salary >= $1::eql_v3.int8_ord; - --- BETWEEN desugars to >= and <= -SELECT * FROM users -WHERE created_at BETWEEN $1::eql_v3.timestamp_ord AND $2::eql_v3.timestamp_ord; - --- ORDER BY is meaningful only with an ORE term -SELECT * FROM users ORDER BY salary DESC; -``` - -`ORDER BY` on a variant without an `ob` term won't produce a meaningful order — type the column as an `_ord` variant when ordering matters. - -Bare `ORDER BY col` sorts correctly, but the planner doesn't rewrite sort keys, so it adds a `Sort` node even when a btree index exists. To stream rows out of the index already ordered, write the sort key in extractor form (`ORDER BY eql_v3.ord_term(col)`) — see [Range and ORDER BY](/reference/eql/indexes#range-and-order-by). - -### Text containment: `@>` and `<@` - -Works on `text_match` and `text_search` only: - -```sql -SELECT * FROM users WHERE email @> $1::eql_v3.text_match; -``` - -### `IN` - -Desugars to `=`, so it needs an equality-capable variant (`_eq`, `_ord`, `text_search`): - -```sql -SELECT * FROM users -WHERE email IN ($1::eql_v3.text_eq, $2::eql_v3.text_eq); -``` - -### `GROUP BY` and `DISTINCT` - -Need an equality term (`_eq`, `_ord`, `text_search`): - -```sql -SELECT email, COUNT(*) FROM logins GROUP BY email; -SELECT DISTINCT email FROM logins; -``` - -Plain `COUNT(col)` needs no term and works on any variant; `COUNT(DISTINCT col)` needs an equality term. - -### Joins - -Equijoins work on equality-capable variants, with one extra constraint: **both sides must have been encrypted with the same keyset and typed as a matching variant** — otherwise the equality terms can never match: - -```sql -SELECT u.*, o.total -FROM users u -JOIN orders o ON u.email = o.customer_email; -- both eql_v3.text_eq, same keyset -``` - -The same rule applies to `IN (subquery)` and set-operation deduplication. - -## Function-form equivalents - -Some managed platforms disallow custom operators. Every operator has a function form, generated per domain variant, taking the same domain types: - -| Function | Operator | Available on | -| --- | --- | --- | -| `eql_v3.eq(a, b)` | `=` | `_eq`, `_ord` / `_ord_ore`, `text_search` | -| `eql_v3.neq(a, b)` | `<>` | `_eq`, `_ord` / `_ord_ore`, `text_search` | -| `eql_v3.lt(a, b)` | `<` | `_ord` / `_ord_ore`, `text_search` | -| `eql_v3.lte(a, b)` | `<=` | `_ord` / `_ord_ore`, `text_search` | -| `eql_v3.gt(a, b)` | `>` | `_ord` / `_ord_ore`, `text_search` | -| `eql_v3.gte(a, b)` | `>=` | `_ord` / `_ord_ore`, `text_search` | -| `eql_v3.contains(a, b)` | `@>` | `text_match`, `text_search`, `eql_v3.json` | -| `eql_v3.contained_by(a, b)` | `<@` | `text_match`, `text_search`, `eql_v3.json` | - -```sql -SELECT * FROM users WHERE eql_v3.eq(email, $1::eql_v3.text_eq); -SELECT * FROM users WHERE eql_v3.lt(created_at, $1::eql_v3.timestamp_ord); -``` - -There are no `like` / `ilike` function forms — text matching is `eql_v3.contains` on a `text_match` value. See [Functions](/reference/eql/functions) for the full function surface, including `MIN` / `MAX`. - -## JSON operators - -`eql_v3.json` has its own operator surface — document containment (`@>` / `<@`), field access (`->` / `->>`), and comparisons on extracted leaves — and its own set of blocked native JSONB operators. See [JSON support](/reference/eql/json). diff --git a/content/docs/reference/eql/payload-format.mdx b/content/docs/reference/eql/payload-format.mdx deleted file mode 100644 index 24af439..0000000 --- a/content/docs/reference/eql/payload-format.mdx +++ /dev/null @@ -1,123 +0,0 @@ ---- -title: Payload format -description: "The wire format of every EQL encrypted value: the v/i/c envelope, the index-term keys, and the ste_vec document shape." -type: reference -components: [eql] -verifiedAgainst: - eql: "3.0.0" ---- - -Every EQL encrypted value is a `jsonb` payload with a shared envelope plus the index terms that make it queryable. This page defines that wire format. Earlier CipherStash docs called this format the **CipherCell** — this page is the current definition of the same structure. - -Payloads are produced by the encryption clients — the [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) — and consumed by EQL's operators and functions inside Postgres. EQL never sees plaintext: it validates, stores, and compares these payloads; it cannot produce or decrypt them. - -## The envelope - -Every payload carries three envelope keys. Each `eql_v3` domain's `CHECK` constraint requires them, so a value missing any of these is rejected at write time: - -| Key | Contents | Notes | -| --- | --- | --- | -| `v` | Payload version | Always exactly `2` on the wire. The domain `CHECK`s assert it and raise on any other value. | -| `i` | Ident: `{"t": "<table>", "c": "<column>"}` | Binds the ciphertext to the table and column it was encrypted for. Both keys required. | -| `c` | Ciphertext | The opaque, non-deterministic encrypted blob (mp_base85-encoded). Never used in comparisons. | - -<Callout> -`eql_v3` names the **SQL schema generation**, not the payload version. The JSON envelope version is still `v: 2` — the wire field names are unchanged from EQL v2, and the domain `CHECK`s assert `v = 2`. -</Callout> - -A `k` discriminator (`"ct"` for a scalar ciphertext, `"sv"` for a JSON document) also appears on payloads emitted by the clients, distinguishing the two top-level shapes. - -## Index-term keys - -Alongside the envelope, a payload carries the index terms for its column's capability. On the wire, a payload is discriminated by *which term key is present* — the SQL domain name carries the rest. Each key is backed by a SEM (searchable encrypted metadata) type in the `eql_v3` schema: - -| Key | SEM type | Wire shape | Enables | Reveals | -| --- | --- | --- | --- | --- | -| `hm` | `eql_v3.hmac_256` (domain over `text`) | Hex string (HMAC-SHA-256) | `=`, `<>` on `_eq` and `text_search` domains | Whether two values are equal — nothing else | -| `ob` | `eql_v3.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | -| `bf` | `eql_v3.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | - -Notes on the wire shapes: - -- **`ob` block count is width-agnostic**: 8 blocks for the int scalars, 12 for timestamp, 14 for numeric — the array just carries more block strings. -- **`bf` positions are signed**: EQL stores the filter as PostgreSQL `smallint[]`, and filters sized above 32768 emit upper-half bit positions as *negative* signed values. Consumers must use a signed 16-bit integer type. - -The capability is encoded as **required keys**: the payload for an `eql_v3.text_eq` column must carry `hm`; an `eql_v3.int4_ord` payload must carry `ob` (and only `ob` — equality on `_ord` domains compares ORE terms, so no `hm` is needed); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. See [Types](/reference/eql/types) for the domain-to-capability mapping, and [Searchable encryption](/concepts/searchable-encryption) for what these terms do and don't leak. - -## JSON documents: the `sv` vector - -An [encrypted JSON document](/reference/eql/json) uses a different payload shape: no root ciphertext, and an `sv` array with one encrypted entry per path in the document. Each entry carries: - -| Key | Contents | -| --- | --- | -| `s` | Selector — a deterministic hash of the JSON path. Required; entry matching compares selectors first. | -| `c` | Ciphertext for the node at that path. | -| `hm` **or** `oc` | Exactly one, never both — the domain `CHECK` enforces the exclusivity. `hm` (HMAC-256) on Boolean/`null` leaves and Object/Array roots; `oc` (CLLW ORE, backed by `eql_v3.ore_cllw`) on String/Number leaves. | -| `a` | Optional array marker — `true` when the selector points at an array context. | - -The decoded `oc` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier payload versions split this into two fields — `ocf` (fixed-width, numeric) and `ocv` (variable-width, string) — which consolidated into the single `oc` key; the tag byte now carries the distinction. - -A containment **query** payload (`eql_v3.ste_vec_query`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. - -## Example payloads - -A scalar payload for an `eql_v3.text_search` column (lookup + ordering + free-text match, so all three terms are required): - -```json -{ - "v": 2, - "i": { "t": "users", "c": "email" }, - "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", - "hm": "9c8ec1d2f9932b979b1bf3f09f8a4e2f6a41f8de2f0c8b7a52e1f5c3d4b6a790", - "ob": ["7a1fd0c2...", "d24c9be1...", "03fa66b8..."], - "bf": [42, 1290, -8113, 30201] -} -``` - -- `v`, `i`, `c` — the envelope -- `hm` — equality term: `WHERE email = $1` compares this -- `ob` — ordering term: `ORDER BY` and range comparisons walk these blocks -- `bf` — bloom-filter term: `@>` token containment tests these bit positions - -A JSON document payload for an `eql_v3.json` column: - -```json -{ - "v": 2, - "k": "sv", - "i": { "t": "orders", "c": "metadata" }, - "sv": [ - { "s": "2517068c0d1f9d4d41d2c666211f785e", "c": "mBbKmM...", "hm": "b0e0..." }, - { "s": "f510853a4ab9d4f75f51a533ac264c5d", "c": "mBbKmQ...", "oc": "01a3f2..." }, - { "s": "33743aed3ae636f6bf05cff11ac4b519", "c": "mBbKmR...", "oc": "004e19..." } - ] -} -``` - -- First entry: an object root — `hm` only, equality/containment -- Second entry: a string leaf — `oc` starting with tag `01` -- Third entry: a numeric leaf — `oc` starting with tag `00` - -And the containment needle the client builds for a `@>` query — index terms, no ciphertexts: - -```json -{ - "sv": [ - { "s": "f510853a4ab9d4f75f51a533ac264c5d", "oc": "01a3f2..." } - ] -} -``` - -## Machine-readable schemas - -The [EQL repository](https://github.com/cipherstash/encrypt-query-language) publishes the format as JSON Schema in two places: - -- **`crates/eql-bindings/schema/`** — one schema per scalar domain (`$id`s under `https://schemas.cipherstash.com/eql/v3/`), generated from the canonical Rust wire types in the `eql-bindings` crate. TypeScript bindings are generated from the same definitions, so every producer and consumer shares one source of truth. -- **`docs/reference/schema/`** — full-payload schemas covering both the scalar and `sv` document shapes. These files are currently named for the v2.x payload releases (`eql-payload-v2.2.schema.json`, `eql-payload-v2.3.schema.json`) and reference `eql_v2` function names, even though the current SQL surface is `eql_v3` — the v2.3 schema is the applicable document-shape definition, matching the still-`v: 2` envelope. - -## Who produces and consumes this - -- **Produce:** the Stack SDK and CipherStash Proxy encrypt plaintext into these payloads — ciphertext, index terms, selectors — using keys the database never holds. -- **Consume:** EQL's domain `CHECK`s validate the shape on write, and its operators and extractor functions ([Operators](/reference/eql/operators), [Indexes](/reference/eql/indexes)) compare the term keys at query time. - -The division is strict: EQL never sees plaintext, and the clients never rely on the database for key material. diff --git a/content/docs/reference/eql/sorting.mdx b/content/docs/reference/eql/sorting.mdx new file mode 100644 index 0000000..b684f3e --- /dev/null +++ b/content/docs/reference/eql/sorting.mdx @@ -0,0 +1,96 @@ +--- +title: Sorting +description: "ORDER BY on encrypted columns: which variants sort, when to write the sort key in extractor form, keyset pagination, and the ::jsonb projection trap." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +`ORDER BY` on an encrypted column needs an ORE ordering term: it works on `_ord` / `_ord_ore` variants of every scalar and on `text_search`. ORE terms are order-preserving, so the database sorts ciphertext in exactly the order the plaintext would sort — without decrypting anything. Which variants carry the term is covered in [Numbers & dates](/reference/eql/numbers-and-dates) and [Text](/reference/eql/text); the variant model itself is in [Core concepts](/reference/eql/core-concepts). + +Sorting a variant *without* an ORE term (`_eq`, `text_match`, bare storage variants) won't raise — but the order is meaningless. Type the column as an `_ord` variant when ordering matters. + +## Bare form vs extractor form + +Both of these sort correctly: + +```sql +-- Bare form +SELECT * FROM users ORDER BY created_at DESC; + +-- Extractor form +SELECT * FROM users ORDER BY eql_v3.ord_term(created_at) DESC; +``` + +The difference is the plan. The planner inlines encrypted operators in *predicates*, so a `WHERE created_at < $1` matches a btree on `eql_v3.ord_term(created_at)` without rewriting — but it does **not** rewrite *sort keys*. Bare `ORDER BY created_at` therefore adds a `Sort` node above the scan, and that sort's cost scales linearly with the rows passing the filter. + +Writing the sort key in extractor form makes it textually match the index expression, so rows stream out of the btree already ordered — no `Sort` node at all: + +```sql +CREATE INDEX users_created_at_ord + ON users USING btree (eql_v3.ord_term(created_at)); +ANALYZE users; + +SELECT * FROM users + WHERE created_at < $1::eql_v3.timestamp_ord + ORDER BY eql_v3.ord_term(created_at) DESC + LIMIT 10; +-- Index Scan Backward using users_created_at_ord — no Sort node +``` + +At large row counts this is the difference between seconds and milliseconds, and it matters most for `LIMIT` queries: with a `Sort` node, Postgres must sort *every* matching row before it can return the top 10; streaming from the index, it stops after 10. + +Rule of thumb: bare form is fine for small result sets or when no ordering index exists; any hot query with `ORDER BY ... LIMIT` should use the extractor form. Confirm with `EXPLAIN (COSTS OFF)` — a `Sort` node above an `Index Scan` means the sort key didn't match the index. Full plan-reading guidance is in [Indexes](/reference/eql/indexes). + +## `ASC`, `DESC`, and `NULLS` + +`ASC` / `DESC` behave normally — a btree serves both directions (backward scans handle `DESC`). SQL `NULL` column values are not encrypted, so `NULLS FIRST` / `NULLS LAST` also behave normally: + +```sql +SELECT * FROM users +ORDER BY eql_v3.ord_term(last_login) DESC NULLS LAST; +``` + +## Keyset pagination + +`OFFSET` pagination degrades on encrypted columns the same way it does on plaintext ones — every page re-sorts and discards the rows before the offset. Keyset (cursor) pagination composes an encrypted range filter with an extractor-form sort: + +```sql +-- Page 1 +SELECT id, email, created_at FROM users + ORDER BY eql_v3.ord_term(created_at) DESC + LIMIT 20; + +-- Next page: pass the last row's created_at back, re-encrypted as the cursor +SELECT id, email, created_at FROM users + WHERE created_at < $1::eql_v3.timestamp_ord + ORDER BY eql_v3.ord_term(created_at) DESC + LIMIT 20; +``` + +Both the filter and the sort ride the same btree on `eql_v3.ord_term(created_at)`, so every page is an index scan that stops after 20 rows. The client re-encrypts the cursor value for the next request — the database only ever sees ciphertext. + +## The `::jsonb` projection trap + +<Callout type="warn"> +If you project the column with a cast and sort on it — `SELECT col::jsonb ... ORDER BY col` — Postgres folds the cast into the scan and uses `(col)::jsonb` as the sort key, which matches no index. Project the column raw and let the client decode it, or write the sort key as `eql_v3.ord_term(col)`, which sidesteps the problem entirely. +</Callout> + +## Sorting extracted JSON leaves + +String and Number leaves inside an encrypted JSON document carry a CLLW ORE term, so they sort too — the extractor is `eql_v3.ore_cllw` on the extracted entry: + +```sql +SELECT * FROM orders +ORDER BY eql_v3.ore_cllw(metadata -> 'total_selector'::text) DESC +LIMIT 10; +``` + +A btree on the same `eql_v3.ore_cllw(...)` expression streams this ordered, exactly like `ord_term` on a scalar column. Selectors, node types, and which leaves are orderable are covered in [JSON](/reference/eql/json). + +## Where to go next + +- [Indexes](/reference/eql/indexes) — the btree recipe behind every sort on this page, plus `EXPLAIN` verification and large-table build guidance. +- [Filtering](/reference/eql/filtering) — the range predicates that pair with these sorts. +- [Grouping & aggregates](/reference/eql/grouping-and-aggregates) — `MIN` / `MAX`, which use the same ordering term. diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx new file mode 100644 index 0000000..c70ee13 --- /dev/null +++ b/content/docs/reference/eql/text.mdx @@ -0,0 +1,157 @@ +--- +title: Text +description: "The complete reference for encrypted text columns: all six text domain variants, the multi-term payload, why LIKE is gone everywhere, and bloom-filter token containment as the encrypted free-text match." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +Text is the richest encrypted scalar. Beyond the four variants every scalar type gets, `text` adds two of its own: `text_match` for encrypted free-text matching, and `text_search` for columns you need to look up, sort, *and* search. Emails, names, tax IDs, addresses — this page is the full surface for all of them. + +## Variants + +All six are `jsonb`-backed domains. Which one you declare fixes the column's query capability — the variant model itself is covered in [Core concepts](/reference/eql/core-concepts): + +| Domain variant | Capability | Index terms carried | +| --- | --- | --- | +| `eql_v3.text` | Storage and decryption only. Every comparison operator is blocked — only `IS NULL` / `IS NOT NULL` work. | none | +| `eql_v3.text_eq` | Equality: `=` and `<>` (plus `IN`, `GROUP BY`, `DISTINCT`, equijoins). | `hm` (HMAC-256) | +| `eql_v3.text_ord` | Full comparison surface: `=` `<>` `<` `<=` `>` `>=`, `BETWEEN`, `ORDER BY`, `MIN` / `MAX`. | `ob` (ORE block) | +| `eql_v3.text_ord_ore` | Identical to `text_ord` — a twin name that documents intent. | `ob` (ORE block) | +| `eql_v3.text_match` | Encrypted free-text token containment via `@>` / `<@`. No equality, no ordering. | `bf` (bloom filter) | +| `eql_v3.text_search` | Everything: equality, ordering, and token containment combined. | `hm` + `ob` + `bf` | + +Declare only the capabilities you query on — each term class reveals different structure to an observer: equality terms reveal value repetition, ORE terms reveal ordering, bloom terms reveal token overlap (see [Searchable encryption](/concepts/searchable-encryption)): + +```sql +CREATE TABLE users ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email eql_v3.text_search, -- lookup, sort, and free-text match + name eql_v3.text_match, -- free-text match only + tax_id eql_v3.text_eq, -- exact lookup only + notes eql_v3.text -- store and decrypt only +); +``` + +## Payload + +A value for a `text_search` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus all three index terms: + +```json +{ + "v": 2, + "i": { "t": "users", "c": "email" }, + "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", + "hm": "9c8ec1d2f9932b979b1bf3f09f8a4e2f6a41f8de2f0c8b7a52e1f5c3d4b6a790", + "ob": ["7a1fd0c2...", "d24c9be1...", "03fa66b8..."], + "bf": [42, 1290, -8113, 30201] +} +``` + +- `hm` — equality term: `WHERE email = $1` compares this +- `ob` — ordering term: `ORDER BY` and range comparisons walk these blocks +- `bf` — bloom-filter term: `@>` token containment tests these bit positions + +The narrower variants carry only their own term: a `text_eq` payload carries `hm` only, `text_match` carries `bf` only, and `text_ord` / `text_ord_ore` carry `ob` only (no `hm` — equality on `_ord` variants compares ORE terms, see [Core concepts](/reference/eql/core-concepts)). A payload missing its variant's required term fails the domain `CHECK` at write time. + +**`bf` positions are signed**: EQL stores the filter as PostgreSQL `smallint[]`, and filters sized above 32768 emit upper-half bit positions as *negative* signed values. Consumers must use a signed 16-bit integer type. + +## Operators and functions + +The function forms exist for managed platforms that disallow custom operators — they take the same typed arguments and resolve identically. + +| SQL operator | Function form | `eql_v3.text` | `text_eq` | `text_ord` / `text_ord_ore` | `text_match` | `text_search` | +| --- | --- | :---: | :---: | :---: | :---: | :---: | +| `=` / `<>` | `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | ❌ | ✅ | ✅ | ❌ | ✅ | +| `<` `<=` `>` `>=` | `eql_v3.lt` / `lte` / `gt` / `gte` | ❌ | ❌ | ✅ | ❌ | ✅ | +| `@>` / `<@` | `eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)` | ❌ | ❌ | ❌ | ✅ | ✅ | +| `LIKE` / `ILIKE` (`~~` / `~~*`) | none | ❌ | ❌ | ❌ | ❌ | ❌ | +| `IN` / `GROUP BY` / `DISTINCT` | desugar to `=` / need an equality term | ❌ | ✅ | ✅ | ❌ | ✅ | +| `ORDER BY`, `MIN` / `MAX` | `eql_v3.min(col)` / `eql_v3.max(col)` | ❌ | ❌ | ✅ | ❌ | ✅ | +| `IS NULL` / `IS NOT NULL` | — | ✅ | ✅ | ✅ | ✅ | ✅ | + +Blocked cells raise an `operator … is not supported` exception — they never silently return wrong rows. Operands must be typed (`$1::eql_v3.text_eq`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). + +## There is no `LIKE` + +`LIKE` and `ILIKE` (`~~` / `~~*`) raise on **every** encrypted-domain variant — including `text_match` and `text_search`. SQL pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter token containment — `@>` on a `text_match` or `text_search` column: + +```sql +-- ❌ Raises: operator not supported +SELECT * FROM users WHERE email LIKE '%alice%'; + +-- ✅ Encrypted free-text match +SELECT * FROM users WHERE email @> $1::eql_v3.text_match; +``` + +`@>` / `<@` here is **probabilistic ngram-bloom containment** — it tests whether the encrypted text contains the (encrypted) search terms. It is not JSONB containment and not `LIKE`. The client encrypts the search term into a bloom-filter query value; false positives are possible, false negatives are not. There are no `like` / `ilike` function forms either — text matching is `eql_v3.contains` on a `text_match` value. + +## Example queries + +### Exact lookup + +Equality on a `text_eq` column compares HMAC terms. `IN` desugars to `=`: + +```sql +SELECT * FROM users WHERE tax_id = $1::eql_v3.text_eq; + +SELECT * FROM users +WHERE tax_id IN ($1::eql_v3.text_eq, $2::eql_v3.text_eq); +``` + +### Free-text match + +The client encrypts the search term into the bloom-filter needle: + +```sql +SELECT * FROM users WHERE name @> $1::eql_v3.text_match; + +-- Function form, for platforms without custom operators +SELECT * FROM users WHERE eql_v3.contains(name, $1::eql_v3.text_match); +``` + +### The works: `text_search` + +A `text_search` column answers exact lookup, free-text match, and ordering — here, all three in one query: + +```sql +SELECT id, email FROM users +WHERE email @> $1::eql_v3.text_match -- token containment on bf + AND email <> $2::eql_v3.text_eq -- exclude an exact value via hm +ORDER BY eql_v3.ord_term(email) -- sort on ob +LIMIT 20; +``` + +### Sorting text + +ORE terms are order-preserving, so `ORDER BY` sorts encrypted text correctly. Write the sort key in extractor form so a btree index can do the ordering instead of a `Sort` node — see [Sorting](/reference/eql/sorting): + +```sql +SELECT * FROM users +ORDER BY eql_v3.ord_term(email) +LIMIT 50; +``` + +`MIN` / `MAX` work on any ord-capable text column too: + +```sql +SELECT eql_v3.min(email) FROM users; +``` + +## Where to next + +<Cards> + <Card title="Indexes" href="/reference/eql/indexes"> + Hash on `eq_term`, btree on `ord_term`, GIN on `match_term`. + </Card> + <Card title="Filtering" href="/reference/eql/filtering"> + WHERE-clause patterns across all encrypted types. + </Card> + <Card title="Sorting" href="/reference/eql/sorting"> + Extractor-form sort keys and index-backed ordering. + </Card> + <Card title="Joins" href="/reference/eql/joins"> + Equijoins on encrypted text columns, and the same-keyset rule. + </Card> +</Cards> diff --git a/content/docs/reference/eql/types.mdx b/content/docs/reference/eql/types.mdx deleted file mode 100644 index e4eb005..0000000 --- a/content/docs/reference/eql/types.mdx +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: Encrypted types -description: "The eql_v3 encrypted-domain type families: which domain variant to declare for each scalar type, and what each variant lets you query." -type: reference -components: [eql] -verifiedAgainst: - eql: "3.0.0" ---- - -EQL ships its searchable-encryption surface as PostgreSQL **domains in the `eql_v3` schema**. There are two kinds: - -- **Per-scalar encrypted-domain types** — `eql_v3.int4`, `eql_v3.text`, `eql_v3.timestamp`, and so on. One family of domain *variants* per scalar type. -- **An encrypted-JSON document type** — `eql_v3.json` — for structured encryption of whole JSONB documents. See [JSON support](/reference/eql/json). - -A column's query capability is fixed by the **domain variant you type it as**. There is no database-side configuration step: which index terms travel in a value's payload is decided by the encryption client (the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy)), and the column's domain variant is what makes the matching operators resolve. - -## The family model - -Every scalar type `<T>` generates a storage-only variant plus the query variants its capabilities allow. All variants are `jsonb`-backed domains. - -| Domain variant | Capability | Index term carried | -| --- | --- | --- | -| `eql_v3.<T>` | Storage and decryption only. Every comparison operator is blocked — only `IS NULL` / `IS NOT NULL` work. | none | -| `eql_v3.<T>_eq` | Equality: `=` and `<>` (plus `IN`, `GROUP BY`, `DISTINCT`, equijoins). | `hm` (`eql_v3.hmac_256`) | -| `eql_v3.<T>_ord` / `eql_v3.<T>_ord_ore` | Full comparison surface: `=` `<>` `<` `<=` `>` `>=`, `BETWEEN`, `ORDER BY`, and the `eql_v3.min` / `eql_v3.max` aggregates. | `ob` (`eql_v3.ore_block_256`) | -| `eql_v3.text_match` (text only) | Encrypted free-text token containment via `@>` / `<@`. No equality, no ordering. | `bf` (`eql_v3.bloom_filter`) | -| `eql_v3.text_search` (text only) | Everything: equality, ordering, and token containment combined. | `hm` + `ob` + `bf` | - -Two things worth calling out: - -- **The bare variant blocks everything.** `eql_v3.<T>` carries no index term. Querying it with any comparison operator raises an "operator not supported" exception. Use it for columns you only ever store and decrypt. If you later need to query, type the column as a query variant — or cast at the call site (`col::eql_v3.int4_ord`) if the payload already carries the term. -- **`_ord` and `_ord_ore` are twins.** They are byte-identical surfaces backed by the same ORE block term. Pick the name that documents intent — "ordered" versus "ordered via ORE block". Both support the full ordered surface and `MIN` / `MAX`. - -## Type matrix - -The scalar tokens that ship in EQL 3.0.0 are `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool`. - -| Scalar | `eql_v3.<T>` | `<T>_eq` | `<T>_ord` | `<T>_ord_ore` | `text_match` | `text_search` | -| --- | :---: | :---: | :---: | :---: | :---: | :---: | -| `int2` | ✅ | ✅ | ✅ | ✅ | — | — | -| `int4` | ✅ | ✅ | ✅ | ✅ | — | — | -| `int8` | ✅ | ✅ | ✅ | ✅ | — | — | -| `float4` | ✅ | ✅ | ✅ | ✅ | — | — | -| `float8` | ✅ | ✅ | ✅ | ✅ | — | — | -| `numeric` | ✅ | ✅ | ✅ | ✅ | — | — | -| `date` | ✅ | ✅ | ✅ | ✅ | — | — | -| `timestamp` | ✅ | ✅ | ✅ | ✅ | — | — | -| `text` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | -| `bool` | ✅ | ❌ | ❌ | ❌ | — | — | - -<Callout type="warn"> -**`bool` is storage-only by design.** A two-value column has too little cardinality for any searchable index to be safe — an equality index over `true`/`false` would leak the value distribution outright. EQL ships only `eql_v3.bool`, with no `_eq` or `_ord` variants. Store and decrypt boolean columns; filter on them client-side. -</Callout> - -## Index terms - -Each query variant stores one or more encrypted index terms alongside the ciphertext: - -- **`hm`** — an HMAC-256 term (`eql_v3.hmac_256`). Supports exact equality. -- **`ob`** — an ORE block term (`eql_v3.ore_block_256`). Order-revealing: supports comparison and sorting. -- **`bf`** — a bloom filter term (`eql_v3.bloom_filter`). Supports probabilistic ngram token containment. - -The payload structure — envelope keys plus per-variant term keys — is documented in [Payload format](/reference/eql/payload-format). What each term mathematically reveals about the plaintext (and why you should only carry the terms you need) is covered in [Searchable encryption](/concepts/searchable-encryption). - -## Encrypted JSON: `eql_v3.json` - -`eql_v3.json` is the encrypted-JSON document domain, built on the structured-encryption ("ste_vec") model: a JSONB document is encrypted into a searchable vector of terms, one per path inside the document, supporting containment (`@>`), field access (`->` / `->>`), and path queries. It has its own operator and function surface — see [JSON support](/reference/eql/json). - -## Choosing a variant - -Declare only the capabilities you query on. Every index term a value carries is extra material stored in the database, and each term class reveals different structure to an observer — equality terms reveal value repetition, ORE terms reveal ordering, bloom terms reveal token overlap (see [Searchable encryption](/concepts/searchable-encryption)): - -- Never queried, only decrypted → bare `eql_v3.<T>` -- Exact lookup, `IN`, joins, `GROUP BY` → `<T>_eq` -- Ranges, `ORDER BY`, `MIN`/`MAX` → `<T>_ord` -- Free-text matching on text → `text_match` -- Text you need to look up, sort, *and* search → `text_search` - -The variant you declare must match the terms the client is configured to emit for that column — the domain makes the operator resolve, but the term in the payload is what makes it answer. - -## Example - -```sql -CREATE TABLE users ( - id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email eql_v3.text_search, -- lookup, sort, and free-text match - name eql_v3.text_match, -- free-text match only - tax_id eql_v3.text_eq, -- exact lookup only - salary eql_v3.int8_ord, -- range queries, ORDER BY, MIN/MAX - is_active eql_v3.bool, -- storage only (by design) - created_at eql_v3.timestamp_ord -); -``` - -Once the table exists, add functional indexes on the term extractors so queries engage an index — see [Indexes](/reference/eql/indexes). The operators each variant supports are listed in [Operators](/reference/eql/operators). diff --git a/v2-redirects.mjs b/v2-redirects.mjs index 1f068b1..a4d8129 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -73,7 +73,7 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/encryption/queries", - destination: "/reference/eql/operators", + destination: "/reference/eql/filtering", permanent: true, }, // configuration, encrypt-decrypt, bulk-operations, models, schema, storing-data @@ -286,7 +286,7 @@ export const v2Redirects = [ }, { source: "/stack/reference/cipher-cell", - destination: "/reference/eql/payload-format", + destination: "/reference/eql/core-concepts", permanent: true, }, { From 9cecb45f043a5c430fa318e262370fa59965cf21 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 20:18:03 +1000 Subject: [PATCH 010/151] refactor(v2): SEM specifiers, Tailwind-style variant enumeration, payload v:3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review feedback on the EQL section: - Variant tables: generic form first, then full enumeration of every concrete domain name (Tailwind-style); capability column made concise; "index term carried" column dropped — term internals live in core-concepts' payload anatomy - SEM specifiers documented as a concept in core-concepts: a trailing mechanism suffix (_ord_ore) pins WHICH searchable-encryption mechanism implements a capability; _ord tracks the default (currently ORE). Replaces the "twins" framing. Each orderable type page lists its specifiers under an "SEM specifiers" heading, noting the OPE specifier arriving for all orderable types (incl. text) in the v3 release - Payload `v` field documented as the EQL version (3) per team decision 2026-07-02; all payload examples updated from v:2 Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- content/docs/reference/eql/core-concepts.mdx | 34 +++++++++----- content/docs/reference/eql/json.mdx | 2 +- .../docs/reference/eql/numbers-and-dates.mdx | 46 ++++++++++++++----- content/docs/reference/eql/text.mdx | 31 +++++++++---- 4 files changed, 79 insertions(+), 34 deletions(-) diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index a262fe8..11b6a0f 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -17,18 +17,28 @@ There is no database-side configuration table. Earlier EQL versions tracked encr For any scalar type `<T>`, the family looks like this: -| Domain variant | Capability | Index term carried | -| --- | --- | --- | -| `eql_v3.<T>` | Storage and decryption only. Every comparison operator is blocked — only `IS NULL` / `IS NOT NULL` work. | none | -| `eql_v3.<T>_eq` | Equality: `=` and `<>` (plus `IN`, `GROUP BY`, `DISTINCT`, equijoins). | `hm` (`eql_v3.hmac_256`) | -| `eql_v3.<T>_ord` / `eql_v3.<T>_ord_ore` | Full comparison surface: `=` `<>` `<` `<=` `>` `>=`, `BETWEEN`, `ORDER BY`, and the `eql_v3.min` / `eql_v3.max` aggregates. | `ob` (`eql_v3.ore_block_256`) | -| `eql_v3.text_match` (text only) | Encrypted free-text token containment via `@>` / `<@`. No equality, no ordering. | `bf` (`eql_v3.bloom_filter`) | -| `eql_v3.text_search` (text only) | Everything: equality, ordering, and token containment combined. | `hm` + `ob` + `bf` | +| Domain variant | Capability | +| --- | --- | +| `eql_v3.<T>` | Storage and decryption only. | +| `eql_v3.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `eql_v3.<T>_ord` | Comparisons (`<` … `>=`), `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `eql_v3.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | +| `eql_v3.text_match` (text only) | Free-text token containment: `@>` / `<@`. | +| `eql_v3.text_search` (text only) | Equality + ordering + token containment. | Two things worth calling out: - **The bare variant blocks everything.** `eql_v3.<T>` carries no index term. Querying it with any comparison operator raises an "operator not supported" exception. Use it for columns you only ever store and decrypt — [Booleans](/reference/eql/booleans) covers this pattern in full. -- **`_ord` and `_ord_ore` are twins.** They are byte-identical surfaces backed by the same ORE block term. Pick the name that documents intent — "ordered" versus "ordered via ORE block". Both support the full ordered surface and `MIN` / `MAX`. +- **Which index term backs each capability** is an implementation detail of the payload — covered in [Anatomy of an encrypted value](#anatomy-of-an-encrypted-value) below. + +### SEM specifiers + +A trailing mechanism suffix — the `_ore` in `_ord_ore` — is a **SEM specifier**: it pins *which* searchable-encryption mechanism implements the capability, rather than just declaring the capability itself. + +- `eql_v3.<T>_ord` declares *orderable* and leaves the mechanism to EQL's default — currently ORE (order-revealing encryption). +- `eql_v3.<T>_ord_ore` declares *orderable via ORE, explicitly*. Today the two are byte-identical surfaces backed by the same term. + +The distinction earns its keep as mechanisms multiply: the EQL v3 release adds an **OPE** (order-preserving encryption) specifier for every orderable type — including `text` — at which point pinning a specifier documents and freezes a column's mechanism choice, while unspecified variants track the default. Each type page lists its available specifiers under an "SEM specifiers" heading. Declaring a table is just typing each column as the variant it needs: @@ -55,12 +65,12 @@ Every payload carries three envelope keys. Each `eql_v3` domain's `CHECK` constr | Key | Contents | Notes | | --- | --- | --- | -| `v` | Payload version | Always exactly `2` on the wire. The domain `CHECK`s assert it and raise on any other value. | +| `v` | The EQL version | `3` — the payload version matches the EQL major version. The domain `CHECK`s assert it and raise on any other value. | | `i` | Ident: `{"t": "<table>", "c": "<column>"}` | Binds the ciphertext to the table and column it was encrypted for. Both keys required. | | `c` | Ciphertext | The opaque, non-deterministic encrypted blob (mp_base85-encoded). Never used in comparisons. | <Callout> -`eql_v3` names the **SQL schema generation**, not the payload version. The JSON envelope version is still `v: 2` — the wire field names are unchanged from EQL v2, and the domain `CHECK`s assert `v = 2`. +Payloads produced by EQL v2 clients carried `v: 2`; from 3.0.0 the payload version and the EQL version move together. </Callout> A `k` discriminator (`"ct"` for a scalar ciphertext, `"sv"` for a JSON document) also appears on payloads emitted by the clients, distinguishing the two top-level shapes. @@ -81,7 +91,7 @@ A scalar payload for an `eql_v3.text_search` column (lookup + ordering + free-te ```json { - "v": 2, + "v": 3, "i": { "t": "users", "c": "email" }, "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", "hm": "9c8ec1d2f9932b979b1bf3f09f8a4e2f6a41f8de2f0c8b7a52e1f5c3d4b6a790", @@ -102,7 +112,7 @@ Encrypted JSON documents use a different payload shape — an `sv` array with on The [EQL repository](https://github.com/cipherstash/encrypt-query-language) publishes the format as JSON Schema in two places: - **`crates/eql-bindings/schema/`** — one schema per scalar domain (`$id`s under `https://schemas.cipherstash.com/eql/v3/`), generated from the canonical Rust wire types in the `eql-bindings` crate. TypeScript bindings are generated from the same definitions, so every producer and consumer shares one source of truth. -- **`docs/reference/schema/`** — full-payload schemas covering both the scalar and `sv` document shapes. These files are currently named for the v2.x payload releases (`eql-payload-v2.2.schema.json`, `eql-payload-v2.3.schema.json`) and reference `eql_v2` function names, even though the current SQL surface is `eql_v3` — the v2.3 schema is the applicable document-shape definition, matching the still-`v: 2` envelope. +- **`docs/reference/schema/`** — full-payload schemas covering both the scalar and `sv` document shapes. These files are still named for the v2.x payload releases (`eql-payload-v2.2.schema.json`, `eql-payload-v2.3.schema.json`); the v2.3 schema describes the document shape, with the payload version field moving to `3` alongside the EQL 3.0.0 release. ## The typed-operand rule diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index 4204ca8..93eb920 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -38,7 +38,7 @@ A document payload for an `eql_v3.json` column: ```json { - "v": 2, + "v": 3, "k": "sv", "i": { "t": "orders", "c": "metadata" }, "sv": [ diff --git a/content/docs/reference/eql/numbers-and-dates.mdx b/content/docs/reference/eql/numbers-and-dates.mdx index 1d01dec..a78052f 100644 --- a/content/docs/reference/eql/numbers-and-dates.mdx +++ b/content/docs/reference/eql/numbers-and-dates.mdx @@ -13,16 +13,29 @@ There is no free-text matching for these types — `_match` and `_search` are [t ## Variants -Each of the eight scalar types generates the same four `jsonb`-backed domain variants: - -| Domain variant | Capability | Index term carried | -| --- | --- | --- | -| `eql_v3.<T>` | Storage and decryption only. Every comparison operator is blocked — only `IS NULL` / `IS NOT NULL` work. | none | -| `eql_v3.<T>_eq` | Equality: `=` and `<>` (plus `IN`, `GROUP BY`, `DISTINCT`, equijoins). | `hm` (HMAC-256) | -| `eql_v3.<T>_ord` | Full comparison surface: `=` `<>` `<` `<=` `>` `>=`, `BETWEEN`, `ORDER BY`, and `MIN` / `MAX`. | `ob` (ORE block) | -| `eql_v3.<T>_ord_ore` | Identical to `<T>_ord` — a twin name that documents intent. | `ob` (ORE block) | - -Declare only the capability you query on — each index term class reveals different structure to an observer (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts): +Each of the eight scalar types generates the same `jsonb`-backed domain variants. The generic form: + +| Domain variant | Capability | +| --- | --- | +| `eql_v3.<T>` | Storage and decryption only. | +| `eql_v3.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `eql_v3.<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `eql_v3.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | + +And every concrete domain this page covers: + +| Type | Variants | +| --- | --- | +| `int2` | `eql_v3.int2` · `eql_v3.int2_eq` · `eql_v3.int2_ord` · `eql_v3.int2_ord_ore` | +| `int4` | `eql_v3.int4` · `eql_v3.int4_eq` · `eql_v3.int4_ord` · `eql_v3.int4_ord_ore` | +| `int8` | `eql_v3.int8` · `eql_v3.int8_eq` · `eql_v3.int8_ord` · `eql_v3.int8_ord_ore` | +| `float4` | `eql_v3.float4` · `eql_v3.float4_eq` · `eql_v3.float4_ord` · `eql_v3.float4_ord_ore` | +| `float8` | `eql_v3.float8` · `eql_v3.float8_eq` · `eql_v3.float8_ord` · `eql_v3.float8_ord_ore` | +| `numeric` | `eql_v3.numeric` · `eql_v3.numeric_eq` · `eql_v3.numeric_ord` · `eql_v3.numeric_ord_ore` | +| `date` | `eql_v3.date` · `eql_v3.date_eq` · `eql_v3.date_ord` · `eql_v3.date_ord_ore` | +| `timestamp` | `eql_v3.timestamp` · `eql_v3.timestamp_eq` · `eql_v3.timestamp_ord` · `eql_v3.timestamp_ord_ore` | + +Declare only the capability you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts): ```sql CREATE TABLE employees ( @@ -35,13 +48,24 @@ CREATE TABLE employees ( ); ``` +### SEM specifiers + +All eight types take the same mechanism specifiers on their orderable variant (the concept is defined in [Core concepts](/reference/eql/core-concepts#sem-specifiers)): + +| Specifier | Meaning | +| --- | --- | +| `_ord` | Orderable, using EQL's default mechanism (currently ORE). | +| `_ord_ore` | Orderable via ORE, pinned explicitly. | + +The EQL v3 release adds an OPE specifier for every orderable type; unspecified `_ord` columns keep tracking the default. + ## Payload A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `eql_v3.int8_ord` `salary` column: ```json { - "v": 2, + "v": 3, "i": { "t": "employees", "c": "salary" }, "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", "ob": [ diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index c70ee13..25228c9 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -13,16 +13,16 @@ Text is the richest encrypted scalar. Beyond the four variants every scalar type All six are `jsonb`-backed domains. Which one you declare fixes the column's query capability — the variant model itself is covered in [Core concepts](/reference/eql/core-concepts): -| Domain variant | Capability | Index terms carried | -| --- | --- | --- | -| `eql_v3.text` | Storage and decryption only. Every comparison operator is blocked — only `IS NULL` / `IS NOT NULL` work. | none | -| `eql_v3.text_eq` | Equality: `=` and `<>` (plus `IN`, `GROUP BY`, `DISTINCT`, equijoins). | `hm` (HMAC-256) | -| `eql_v3.text_ord` | Full comparison surface: `=` `<>` `<` `<=` `>` `>=`, `BETWEEN`, `ORDER BY`, `MIN` / `MAX`. | `ob` (ORE block) | -| `eql_v3.text_ord_ore` | Identical to `text_ord` — a twin name that documents intent. | `ob` (ORE block) | -| `eql_v3.text_match` | Encrypted free-text token containment via `@>` / `<@`. No equality, no ordering. | `bf` (bloom filter) | -| `eql_v3.text_search` | Everything: equality, ordering, and token containment combined. | `hm` + `ob` + `bf` | +| Domain variant | Capability | +| --- | --- | +| `eql_v3.text` | Storage and decryption only. | +| `eql_v3.text_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `eql_v3.text_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `eql_v3.text_ord_ore` | As `text_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | +| `eql_v3.text_match` | Free-text token containment: `@>` / `<@`. | +| `eql_v3.text_search` | Equality + ordering + token containment. | -Declare only the capabilities you query on — each term class reveals different structure to an observer: equality terms reveal value repetition, ORE terms reveal ordering, bloom terms reveal token overlap (see [Searchable encryption](/concepts/searchable-encryption)): +Declare only the capabilities you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)): ```sql CREATE TABLE users ( @@ -34,13 +34,24 @@ CREATE TABLE users ( ); ``` +### SEM specifiers + +Text takes the same mechanism specifiers as the other orderable types (the concept is defined in [Core concepts](/reference/eql/core-concepts#sem-specifiers)): + +| Specifier | Meaning | +| --- | --- | +| `_ord` | Orderable, using EQL's default mechanism (currently ORE). | +| `_ord_ore` | Orderable via ORE, pinned explicitly. | + +The EQL v3 release adds an OPE specifier for every orderable type — including `text` — so lexicographic ordering can be pinned to either mechanism; unspecified `_ord` columns keep tracking the default. + ## Payload A value for a `text_search` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus all three index terms: ```json { - "v": 2, + "v": 3, "i": { "t": "users", "c": "email" }, "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", "hm": "9c8ec1d2f9932b979b1bf3f09f8a4e2f6a41f8de2f0c8b7a52e1f5c3d4b6a790", From 127f0a6ce3d55ae6bdb1ffc27c55f75ebdafa4ec Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 21:27:44 +1000 Subject: [PATCH 011/151] refactor(v2): split numbers/dates pages, Example headings, separate Operators and Functions MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Review feedback: - Dates & times split out of Numbers — same traits, distinct semantics; each page's examples now match its domain (payroll vs audit-event time windows / retention cutoffs / newest-first) - CREATE TABLE examples get an explicit "Example" sub-heading + lead-in - Operators and Functions are separate sections on every type page — operators as the per-variant support matrix, functions as the form-equivalents table (+ MIN/MAX, which only exist as functions) - IA.md: split reflected; query-performance follow-up added (CIP-3351 — the v3 branch already folded the v2 perf guide into database-indexes.md, which our indexes page absorbed) Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- IA.md | 7 +- content/docs/reference/eql/booleans.mdx | 2 +- content/docs/reference/eql/core-concepts.mdx | 2 +- .../docs/reference/eql/dates-and-times.mdx | 151 ++++++++++++++++++ content/docs/reference/eql/filtering.mdx | 2 +- content/docs/reference/eql/index.mdx | 7 +- content/docs/reference/eql/meta.json | 3 +- .../{numbers-and-dates.mdx => numbers.mdx} | 89 +++++------ content/docs/reference/eql/sorting.mdx | 2 +- content/docs/reference/eql/text.mdx | 41 +++-- 10 files changed, 239 insertions(+), 67 deletions(-) create mode 100644 content/docs/reference/eql/dates-and-times.mdx rename content/docs/reference/eql/{numbers-and-dates.mdx => numbers.mdx} (59%) diff --git a/IA.md b/IA.md index 6db1dee..d5736a9 100644 --- a/IA.md +++ b/IA.md @@ -137,7 +137,9 @@ live at `/docs/errors/<code>` — permanent, never restructured (CIP-3338). - [x] `/reference/eql` — install (single SQL file, permissions split, dbdev, Docker) - [x] `/reference/eql/core-concepts` — variant model, payload anatomy (absorbs cipher-cell), typed-operand rule, fail-loud blockers, term leakage pointer -- [x] `/reference/eql/numbers-and-dates` — int*/float*/numeric/date/timestamp +- [x] `/reference/eql/numbers` — int*/float*/numeric +- [x] `/reference/eql/dates-and-times` — date/timestamp (same traits as numbers, + distinct semantics) - [x] `/reference/eql/text` — all six text variants; owns the no-LIKE treatment - [x] `/reference/eql/json` — ste_vec + sv payload shape + containment/path queries - [x] `/reference/eql/booleans` — storage-only variants (bool has only that one) @@ -146,6 +148,9 @@ live at `/docs/errors/<code>` — permanent, never restructured (CIP-3338). - [x] `/reference/eql/sorting` — ORDER BY, extractor sort-key form, pagination - [x] `/reference/eql/grouping-and-aggregates` — GROUP BY/DISTINCT, min/max, no SUM/AVG - [x] `/reference/eql/joins` — equijoins, the same-keyset constraint +- [ ] ⛔ `/reference/eql/query-performance` — port the EQL repo performance guide once + rewritten for v3 upstream (v3 branch folded it into database-indexes.md; verify + nothing from the v2 guide on main was lost) — see CIP-3351 - **Stack SDK:** - [ ] `/reference/stack` — client + configuration (port encryption/* pages) - [ ] `/reference/stack/schema` diff --git a/content/docs/reference/eql/booleans.mdx b/content/docs/reference/eql/booleans.mdx index 390dc97..5403fc9 100644 --- a/content/docs/reference/eql/booleans.mdx +++ b/content/docs/reference/eql/booleans.mdx @@ -59,4 +59,4 @@ For every type other than `bool`, storage-only is a choice you can walk back. If SELECT * FROM readings WHERE value::eql_v3.int4_ord > $1::eql_v3.int4_ord; ``` -The variant families and what each one enables are covered in [Core concepts](/reference/eql/core-concepts); the per-type specifics live in [Numbers and dates](/reference/eql/numbers-and-dates) and [Text](/reference/eql/text). +The variant families and what each one enables are covered in [Core concepts](/reference/eql/core-concepts); the per-type specifics live in [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), and [Text](/reference/eql/text). diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index 11b6a0f..427bc7b 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -51,7 +51,7 @@ CREATE TABLE users ( ); ``` -Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers and dates](/reference/eql/numbers-and-dates), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `eql_v3.json`, with its own operator surface — see [JSON](/reference/eql/json). +Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `eql_v3.json`, with its own operator surface — see [JSON](/reference/eql/json). ## Anatomy of an encrypted value diff --git a/content/docs/reference/eql/dates-and-times.mdx b/content/docs/reference/eql/dates-and-times.mdx new file mode 100644 index 0000000..1014599 --- /dev/null +++ b/content/docs/reference/eql/dates-and-times.mdx @@ -0,0 +1,151 @@ +--- +title: Dates & times +description: "The complete reference for encrypted date and timestamp columns: the domain variants, the ORE-backed payload, and time-window, newest-first, and MIN/MAX queries." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0" +--- + +`date` and `timestamp` columns carry the same capabilities as [encrypted numbers](/reference/eql/numbers) — equality, ranges, ordering, `MIN` / `MAX` — but the queries they serve are temporal: time windows, newest-first listings, retention cutoffs, "when did this last happen". + +## Variants + +Both types generate the same `jsonb`-backed domain variants. The generic form: + +| Domain variant | Capability | +| --- | --- | +| `eql_v3.<T>` | Storage and decryption only. | +| `eql_v3.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `eql_v3.<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `eql_v3.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | + +And every concrete domain this page covers: + +| Type | Variants | +| --- | --- | +| `date` | `eql_v3.date` · `eql_v3.date_eq` · `eql_v3.date_ord` · `eql_v3.date_ord_ore` | +| `timestamp` | `eql_v3.timestamp` · `eql_v3.timestamp_eq` · `eql_v3.timestamp_ord` · `eql_v3.timestamp_ord_ore` | + +Time columns are nearly always ranged and sorted, so `_ord` is the usual choice. Declare only the capability you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts). + +### Example + +An audit-events table where the timestamps drive time-window queries and sorting: + +```sql +CREATE TABLE audit_events ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + occurred_at eql_v3.timestamp_ord, -- time windows, newest-first, MIN/MAX + review_due eql_v3.date_ord, -- range filters + sealed_on eql_v3.date -- store and decrypt only +); +``` + +### SEM specifiers + +Both types take the same mechanism specifiers on their orderable variant (the concept is defined in [Core concepts](/reference/eql/core-concepts#sem-specifiers)): + +| Specifier | Meaning | +| --- | --- | +| `_ord` | Orderable, using EQL's default mechanism (currently ORE). | +| `_ord_ore` | Orderable via ORE, pinned explicitly. | + +The EQL v3 release adds an OPE specifier for every orderable type; unspecified `_ord` columns keep tracking the default. + +## Payload + +A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `eql_v3.timestamp_ord` `occurred_at` column: + +```json +{ + "v": 3, + "i": { "t": "audit_events", "c": "occurred_at" }, + "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", + "ob": [ + "7a1fd0c2...", "d24c9be1...", "03fa66b8...", "91b7e04d...", + "5c28aa19...", "e6f3071c...", "48d92ab5...", "0b64cf37...", + "2ce8b1f4...", "a90d57e2...", "6f13c8ba...", "d4720e95..." + ] +} +``` + +- **`ob` is the only index term.** An `_ord` payload carries no `hm`: equality on `_ord` variants compares ORE terms, which collapse to equality — see [Core concepts](/reference/eql/core-concepts). +- **The `ob` block count varies with the plaintext width** — `timestamp` values carry 12 blocks. + +## Operators + +| SQL operator | `eql_v3.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | +| --- | :---: | :---: | :---: | +| `=` / `<>` | ❌ | ✅ | ✅ | +| `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | +| `BETWEEN` (desugars to `>=` and `<=`) | ❌ | ❌ | ✅ | +| `IN` (desugars to `=`) | ❌ | ✅ | ✅ | +| `GROUP BY` / `DISTINCT` | ❌ | ✅ | ✅ | +| `ORDER BY` | ❌ | ❌ | ✅ | +| `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | + +Blocked cells raise an `operator … is not supported` exception — they never silently return wrong rows. Operands must be typed (`$1::eql_v3.timestamp_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). + +## Functions + +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: + +| Function | Equivalent | Available on | +| --- | --- | --- | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, `_ord` / `_ord_ore` | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | `_ord` / `_ord_ore` | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | `_ord` / `_ord_ore` | + +## Example queries + +### Time window + +```sql +SELECT * FROM audit_events +WHERE occurred_at BETWEEN $1::eql_v3.timestamp_ord AND $2::eql_v3.timestamp_ord; + +SELECT * FROM audit_events +WHERE review_due BETWEEN $1::eql_v3.date_ord AND $2::eql_v3.date_ord; +``` + +### Retention cutoff + +```sql +SELECT id FROM audit_events +WHERE occurred_at < $1::eql_v3.timestamp_ord; +``` + +### Newest-first listing + +Write the sort key in extractor form to stream rows out of the index already ordered — at large row counts this is the difference between seconds and milliseconds (see [Sorting](/reference/eql/sorting)): + +```sql +SELECT * FROM audit_events +WHERE occurred_at >= $1::eql_v3.timestamp_ord +ORDER BY eql_v3.ord_term(occurred_at) DESC +LIMIT 10; +``` + +### First and last event + +```sql +SELECT eql_v3.min(occurred_at), eql_v3.max(occurred_at) FROM audit_events; +``` + +## Where to next + +<Cards> + <Card title="Numbers" href="/reference/eql/numbers"> + The same capabilities on int, float, and numeric columns. + </Card> + <Card title="Indexes" href="/reference/eql/indexes"> + Btree recipes on `eql_v3.ord_term` for range, ORDER BY, and MIN/MAX. + </Card> + <Card title="Sorting" href="/reference/eql/sorting"> + Why the extractor-form sort key matters, and how to verify with EXPLAIN. + </Card> + <Card title="Filtering" href="/reference/eql/filtering"> + WHERE-clause patterns across all encrypted types. + </Card> +</Cards> diff --git a/content/docs/reference/eql/filtering.mdx b/content/docs/reference/eql/filtering.mdx index 6f1b779..9fe45a2 100644 --- a/content/docs/reference/eql/filtering.mdx +++ b/content/docs/reference/eql/filtering.mdx @@ -25,7 +25,7 @@ On `_eq` and `text_search` columns equality compares the HMAC (`hm`) term. On `_ SELECT * FROM users WHERE salary = $1::eql_v3.int8_ord; ``` -Bare storage-only variants (`eql_v3.text`, `eql_v3.int4`, …) block every comparison — see the type pages for what each variant supports: [Numbers & dates](/reference/eql/numbers-and-dates), [Text](/reference/eql/text), [Booleans](/reference/eql/booleans). +Bare storage-only variants (`eql_v3.text`, `eql_v3.int4`, …) block every comparison — see the type pages for what each variant supports: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), [Booleans](/reference/eql/booleans). ## `IN` lists diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index e3d7f0f..6b9ce9e 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -106,8 +106,11 @@ EQL v3 is designed to install without superuser. There are no custom operator cl <Card title="Core concepts" href="/reference/eql/core-concepts"> Domain variants, the encrypted payload, typed operands, and fail-loud blockers — the model every other page assumes. </Card> - <Card title="Numbers and dates" href="/reference/eql/numbers-and-dates"> - Encrypted integers, floats, numerics, dates, and timestamps. + <Card title="Numbers" href="/reference/eql/numbers"> + Encrypted integers, floats, and numerics. + </Card> + <Card title="Dates & times" href="/reference/eql/dates-and-times"> + Encrypted dates and timestamps: time windows, newest-first, retention cutoffs. </Card> <Card title="Text" href="/reference/eql/text"> Encrypted text: equality, ordering, and free-text token matching — and why there is no `LIKE`. diff --git a/content/docs/reference/eql/meta.json b/content/docs/reference/eql/meta.json index 3f4469e..f4268ce 100644 --- a/content/docs/reference/eql/meta.json +++ b/content/docs/reference/eql/meta.json @@ -3,7 +3,8 @@ "pages": [ "core-concepts", "---Types---", - "numbers-and-dates", + "numbers", + "dates-and-times", "text", "json", "booleans", diff --git a/content/docs/reference/eql/numbers-and-dates.mdx b/content/docs/reference/eql/numbers.mdx similarity index 59% rename from content/docs/reference/eql/numbers-and-dates.mdx rename to content/docs/reference/eql/numbers.mdx index a78052f..cda9471 100644 --- a/content/docs/reference/eql/numbers-and-dates.mdx +++ b/content/docs/reference/eql/numbers.mdx @@ -1,19 +1,19 @@ --- -title: Numbers & dates -description: "The complete reference for encrypted numeric and date/time columns: the int, float, numeric, date, and timestamp domain variants, the ORE-backed payload they carry, and range, ORDER BY, and MIN/MAX queries." +title: Numbers +description: "The complete reference for encrypted numeric columns: the int, float, and numeric domain variants, the ORE-backed payload they carry, and range, ORDER BY, and MIN/MAX queries." type: reference components: [eql] verifiedAgainst: eql: "3.0.0" --- -Eight scalar types share one identical query surface: `int2`, `int4`, `int8`, `float4`, `float8`, `numeric`, `date`, and `timestamp`. These are the columns you filter by range, sort newest-first, and take a `MIN` / `MAX` over — salaries, totals, rates, hire dates, timestamps. Everything on this page applies to all eight; only the domain name changes. +Six numeric types share one identical query surface: `int2`, `int4`, `int8`, `float4`, `float8`, and `numeric`. These are the columns you filter by range, sort, and take a `MIN` / `MAX` over — salaries, totals, rates, quantities. -There is no free-text matching for these types — `_match` and `_search` are [text-only variants](/reference/eql/text). Boolean columns are a separate, storage-only story — see [Booleans](/reference/eql/booleans). +Date and time columns have the same capabilities but their own semantics — see [Dates & times](/reference/eql/dates-and-times). There is no free-text matching for numeric types — `_match` and `_search` are [text-only variants](/reference/eql/text). ## Variants -Each of the eight scalar types generates the same `jsonb`-backed domain variants. The generic form: +Each numeric type generates the same `jsonb`-backed domain variants. The generic form: | Domain variant | Capability | | --- | --- | @@ -32,25 +32,25 @@ And every concrete domain this page covers: | `float4` | `eql_v3.float4` · `eql_v3.float4_eq` · `eql_v3.float4_ord` · `eql_v3.float4_ord_ore` | | `float8` | `eql_v3.float8` · `eql_v3.float8_eq` · `eql_v3.float8_ord` · `eql_v3.float8_ord_ore` | | `numeric` | `eql_v3.numeric` · `eql_v3.numeric_eq` · `eql_v3.numeric_ord` · `eql_v3.numeric_ord_ore` | -| `date` | `eql_v3.date` · `eql_v3.date_eq` · `eql_v3.date_ord` · `eql_v3.date_ord_ore` | -| `timestamp` | `eql_v3.timestamp` · `eql_v3.timestamp_eq` · `eql_v3.timestamp_ord` · `eql_v3.timestamp_ord_ore` | -Declare only the capability you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts): +Declare only the capability you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts). + +### Example + +A payroll table mixing the variants by how each column is queried: ```sql CREATE TABLE employees ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, salary eql_v3.int8_ord, -- range queries, ORDER BY, MIN/MAX tax_rate eql_v3.numeric_eq, -- exact lookup only - net_worth eql_v3.numeric, -- store and decrypt only, never queried - hired_on eql_v3.date_ord, - created_at eql_v3.timestamp_ord + net_worth eql_v3.numeric -- store and decrypt only, never queried ); ``` ### SEM specifiers -All eight types take the same mechanism specifiers on their orderable variant (the concept is defined in [Core concepts](/reference/eql/core-concepts#sem-specifiers)): +All six types take the same mechanism specifiers on their orderable variant (the concept is defined in [Core concepts](/reference/eql/core-concepts#sem-specifiers)): | Specifier | Meaning | | --- | --- | @@ -76,25 +76,32 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — ``` - **`ob` is the only index term.** An `_ord` payload carries no `hm`: equality on `_ord` variants compares ORE terms, which collapse to equality — see [Core concepts](/reference/eql/core-concepts). Only `_eq` payloads carry `hm` (a single hex HMAC-SHA-256 string) instead of `ob`. -- **The `ob` block count varies with the plaintext width**: 8 blocks for the int scalars, 12 for `timestamp`, 14 for `numeric` — the array just carries more block strings. - -## Operators and functions +- **The `ob` block count varies with the plaintext width**: 8 blocks for the int types, 14 for `numeric`. -The function forms exist for managed platforms that disallow custom operators — they take the same typed arguments and resolve identically. +## Operators -| SQL operator | Function form | `eql_v3.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | -| --- | --- | :---: | :---: | :---: | -| `=` / `<>` | `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | ❌ | ✅ | ✅ | -| `<` `<=` `>` `>=` | `eql_v3.lt` / `lte` / `gt` / `gte` | ❌ | ❌ | ✅ | -| `BETWEEN` | desugars to `>=` and `<=` | ❌ | ❌ | ✅ | -| `IN` | desugars to `=` | ❌ | ✅ | ✅ | -| `GROUP BY` / `DISTINCT` | — (needs an equality term) | ❌ | ✅ | ✅ | -| `ORDER BY` | sort key: `eql_v3.ord_term(col)` | ❌ | ❌ | ✅ | -| `MIN` / `MAX` | `eql_v3.min(col)` / `eql_v3.max(col)` | ❌ | ❌ | ✅ | -| `IS NULL` / `IS NOT NULL` | — | ✅ | ✅ | ✅ | +| SQL operator | `eql_v3.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | +| --- | :---: | :---: | :---: | +| `=` / `<>` | ❌ | ✅ | ✅ | +| `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | +| `BETWEEN` (desugars to `>=` and `<=`) | ❌ | ❌ | ✅ | +| `IN` (desugars to `=`) | ❌ | ✅ | ✅ | +| `GROUP BY` / `DISTINCT` | ❌ | ✅ | ✅ | +| `ORDER BY` | ❌ | ❌ | ✅ | +| `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | Blocked cells raise an `operator … is not supported` exception — they never silently return wrong rows. Operands must be typed (`$1::eql_v3.int8_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +## Functions + +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: + +| Function | Equivalent | Available on | +| --- | --- | --- | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, `_ord` / `_ord_ore` | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | `_ord` / `_ord_ore` | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | `_ord` / `_ord_ore` | + **`SUM`, `AVG`, and other arithmetic aggregates are not supported** on encrypted columns — they would require homomorphic encryption. `MIN` / `MAX` work because they only need comparison; for sums and averages, decrypt at the application boundary and aggregate client-side. ## Example queries @@ -109,35 +116,25 @@ SELECT * FROM employees WHERE salary BETWEEN $1::eql_v3.int8_ord AND $2::eql_v3.int8_ord; ``` -### Date window +### MIN and MAX -`BETWEEN` works the same on `date` and `timestamp` columns: +`eql_v3.min` / `eql_v3.max` compare ORE terms — no decryption happens in the database, and the encrypted result decrypts in the client. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`: ```sql -SELECT * FROM employees -WHERE hired_on BETWEEN $1::eql_v3.date_ord AND $2::eql_v3.date_ord; +SELECT eql_v3.min(salary) FROM employees; +SELECT eql_v3.max(salary) FROM employees; ``` -### Newest-first listing +### Sorted listing -Bare `ORDER BY created_at` sorts correctly, but the planner doesn't rewrite sort keys, so it adds a `Sort` node even when a btree index exists. Write the sort key in extractor form to stream rows out of the index already ordered — at large row counts this is the difference between seconds and milliseconds (see [Sorting](/reference/eql/sorting)): +Write the sort key in extractor form to stream rows out of the index already ordered (see [Sorting](/reference/eql/sorting) for why): ```sql SELECT * FROM employees -WHERE created_at >= $1::eql_v3.timestamp_ord -ORDER BY eql_v3.ord_term(created_at) DESC +ORDER BY eql_v3.ord_term(salary) DESC LIMIT 10; ``` -### MIN and MAX - -`eql_v3.min` / `eql_v3.max` compare ORE terms — no decryption happens in the database, and the encrypted result decrypts in the client. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`: - -```sql -SELECT eql_v3.min(salary) FROM employees; -SELECT eql_v3.max(created_at) FROM employees; -``` - ### Cast at the call site On a generic `jsonb` column whose payloads already carry the `ob` term, cast to the right domain in the query: @@ -149,15 +146,15 @@ SELECT eql_v3.min(salary_jsonb::eql_v3.int8_ord) FROM employees; ## Where to next <Cards> + <Card title="Dates & times" href="/reference/eql/dates-and-times"> + The same capabilities on date and timestamp columns. + </Card> <Card title="Indexes" href="/reference/eql/indexes"> Btree recipes on `eql_v3.ord_term` for range, ORDER BY, and MIN/MAX. </Card> <Card title="Filtering" href="/reference/eql/filtering"> WHERE-clause patterns across all encrypted types. </Card> - <Card title="Sorting" href="/reference/eql/sorting"> - Why the extractor-form sort key matters, and how to verify with EXPLAIN. - </Card> <Card title="Grouping & aggregates" href="/reference/eql/grouping-and-aggregates"> GROUP BY, DISTINCT, and the aggregate surface on encrypted columns. </Card> diff --git a/content/docs/reference/eql/sorting.mdx b/content/docs/reference/eql/sorting.mdx index b684f3e..eb34f12 100644 --- a/content/docs/reference/eql/sorting.mdx +++ b/content/docs/reference/eql/sorting.mdx @@ -7,7 +7,7 @@ verifiedAgainst: eql: "3.0.0" --- -`ORDER BY` on an encrypted column needs an ORE ordering term: it works on `_ord` / `_ord_ore` variants of every scalar and on `text_search`. ORE terms are order-preserving, so the database sorts ciphertext in exactly the order the plaintext would sort — without decrypting anything. Which variants carry the term is covered in [Numbers & dates](/reference/eql/numbers-and-dates) and [Text](/reference/eql/text); the variant model itself is in [Core concepts](/reference/eql/core-concepts). +`ORDER BY` on an encrypted column needs an ORE ordering term: it works on `_ord` / `_ord_ore` variants of every scalar and on `text_search`. ORE terms are order-preserving, so the database sorts ciphertext in exactly the order the plaintext would sort — without decrypting anything. Which variants carry the term is covered in [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), and [Text](/reference/eql/text); the variant model itself is in [Core concepts](/reference/eql/core-concepts). Sorting a variant *without* an ORE term (`_eq`, `text_match`, bare storage variants) won't raise — but the order is meaningless. Type the column as an `_ord` variant when ordering matters. diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index 25228c9..9fe995f 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -22,7 +22,11 @@ All six are `jsonb`-backed domains. Which one you declare fixes the column's que | `eql_v3.text_match` | Free-text token containment: `@>` / `<@`. | | `eql_v3.text_search` | Equality + ordering + token containment. | -Declare only the capabilities you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)): +Declare only the capabilities you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)). + +### Example + +A users table mixing the variants by how each column is queried: ```sql CREATE TABLE users ( @@ -68,22 +72,33 @@ The narrower variants carry only their own term: a `text_eq` payload carries `hm **`bf` positions are signed**: EQL stores the filter as PostgreSQL `smallint[]`, and filters sized above 32768 emit upper-half bit positions as *negative* signed values. Consumers must use a signed 16-bit integer type. -## Operators and functions +## Operators -The function forms exist for managed platforms that disallow custom operators — they take the same typed arguments and resolve identically. - -| SQL operator | Function form | `eql_v3.text` | `text_eq` | `text_ord` / `text_ord_ore` | `text_match` | `text_search` | -| --- | --- | :---: | :---: | :---: | :---: | :---: | -| `=` / `<>` | `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | ❌ | ✅ | ✅ | ❌ | ✅ | -| `<` `<=` `>` `>=` | `eql_v3.lt` / `lte` / `gt` / `gte` | ❌ | ❌ | ✅ | ❌ | ✅ | -| `@>` / `<@` | `eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)` | ❌ | ❌ | ❌ | ✅ | ✅ | -| `LIKE` / `ILIKE` (`~~` / `~~*`) | none | ❌ | ❌ | ❌ | ❌ | ❌ | -| `IN` / `GROUP BY` / `DISTINCT` | desugar to `=` / need an equality term | ❌ | ✅ | ✅ | ❌ | ✅ | -| `ORDER BY`, `MIN` / `MAX` | `eql_v3.min(col)` / `eql_v3.max(col)` | ❌ | ❌ | ✅ | ❌ | ✅ | -| `IS NULL` / `IS NOT NULL` | — | ✅ | ✅ | ✅ | ✅ | ✅ | +| SQL operator | `eql_v3.text` | `text_eq` | `text_ord` / `text_ord_ore` | `text_match` | `text_search` | +| --- | :---: | :---: | :---: | :---: | :---: | +| `=` / `<>` | ❌ | ✅ | ✅ | ❌ | ✅ | +| `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | ❌ | ✅ | +| `@>` / `<@` | ❌ | ❌ | ❌ | ✅ | ✅ | +| `LIKE` / `ILIKE` (`~~` / `~~*`) | ❌ | ❌ | ❌ | ❌ | ❌ | +| `IN` / `GROUP BY` / `DISTINCT` | ❌ | ✅ | ✅ | ❌ | ✅ | +| `ORDER BY` | ❌ | ❌ | ✅ | ❌ | ✅ | +| `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | ✅ | ✅ | Blocked cells raise an `operator … is not supported` exception — they never silently return wrong rows. Operands must be typed (`$1::eql_v3.text_eq`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +## Functions + +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: + +| Function | Equivalent | Available on | +| --- | --- | --- | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `text_eq`, `text_ord` / `text_ord_ore`, `text_search` | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | `text_ord` / `text_ord_ore`, `text_search` | +| `eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)` | `@>` / `<@` | `text_match`, `text_search` | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | `text_ord` / `text_ord_ore`, `text_search` | + +There are no `like` / `ilike` function forms — encrypted text matching is `eql_v3.contains` on a `text_match` value. + ## There is no `LIKE` `LIKE` and `ILIKE` (`~~` / `~~*`) raise on **every** encrypted-domain variant — including `text_match` and `text_search`. SQL pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter token containment — `@>` on a `text_match` or `text_search` column: From 123a544c36d09d456ae86c1477710db5f743f003 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 21:39:31 +1000 Subject: [PATCH 012/151] docs(v2): track EQL 3.0.0 release-alignment gate in IA.md (CIP-3352) Claude-Session: https://claude.ai/code/session_01ACPpFPHvKtrV48nbEYuv7P --- IA.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/IA.md b/IA.md index d5736a9..6a13da8 100644 --- a/IA.md +++ b/IA.md @@ -184,5 +184,9 @@ live at `/docs/errors/<code>` — permanent, never restructured (CIP-3338). - [ ] OG images for v2 pages (route only covers legacy tree) - [ ] Correctness CI: snippet type-checking, SQL-vs-EQL-Docker, terminology lint (CIP-3337) - [ ] llms.txt curation + Cloudflare AI crawl policy + md-degradation check (CIP-3339) +- [ ] ⛔ EQL 3.0.0 release alignment (CIP-3352, blocks CIP-3335) — the EQL reference + documents the release as decided, ahead of the eql_v3 branch: payload `v: 3`, + OPE SEM specifier, Docker tag `:17-3.0.0`, `version()` output, schema files. + Each must land upstream or be walked back in the docs before merge - [ ] Flip `ENABLE_V2_REDIRECTS=1`, delete `content/stack` + `/stack` routes + legacy loader (CIP-3335) - [ ] Consistency sweep + Supabase listing v3 revision (CIP-3335) From 896eae51206add738221ed869cb8a5e0eec7321f Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 22:07:13 +1000 Subject: [PATCH 013/151] docs(v2): address Copilot review on EQL reference (PR #38) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - indexes.mdx: cast query-shape example params to their EQL domain types, consistent with the typed-operand rule - numbers/dates-and-times/text: the fail-loud note now scopes to operators — ORDER BY on a variant without an ordering term doesn't raise, it silently returns a meaningless order (links Sorting) --- content/docs/reference/eql/dates-and-times.mdx | 2 +- content/docs/reference/eql/indexes.mdx | 6 +++--- content/docs/reference/eql/numbers.mdx | 2 +- content/docs/reference/eql/text.mdx | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/content/docs/reference/eql/dates-and-times.mdx b/content/docs/reference/eql/dates-and-times.mdx index 1014599..3af2b9c 100644 --- a/content/docs/reference/eql/dates-and-times.mdx +++ b/content/docs/reference/eql/dates-and-times.mdx @@ -85,7 +85,7 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — | `ORDER BY` | ❌ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | -Blocked cells raise an `operator … is not supported` exception — they never silently return wrong rows. Operands must be typed (`$1::eql_v3.timestamp_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::eql_v3.timestamp_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index 3d1df3e..ff4b1fe 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -77,7 +77,7 @@ WHERE email = '{"hm":"abc"}'::jsonb; ### Equality ```sql -SELECT * FROM users WHERE email = $1; +SELECT * FROM users WHERE email = $1::eql_v3.text_eq; -- Index Scan using users_email_eq -- Index Cond: (eql_v3.eq_term(email) = eql_v3.eq_term($1)) ``` @@ -87,14 +87,14 @@ SELECT * FROM users WHERE email = $1; The `<`, `<=`, `>`, `>=` operators inline to comparisons on `eql_v3.ord_term`, so natural-form range predicates match the btree: ```sql -SELECT * FROM users WHERE created_at < $1; +SELECT * FROM users WHERE created_at < $1::eql_v3.timestamp_ord; ``` `ORDER BY` needs care. The planner inlines operators in *predicates* but does not rewrite *sort keys*: `ORDER BY created_at` uses the index for the `WHERE` clause but still adds a `Sort` node, which scales linearly with the rows passing the filter. To stream rows out of the btree already ordered, write the sort key in extractor form: ```sql SELECT * FROM users - WHERE created_at < $1 + WHERE created_at < $1::eql_v3.timestamp_ord ORDER BY eql_v3.ord_term(created_at) DESC LIMIT 10; ``` diff --git a/content/docs/reference/eql/numbers.mdx b/content/docs/reference/eql/numbers.mdx index cda9471..2d9a2a0 100644 --- a/content/docs/reference/eql/numbers.mdx +++ b/content/docs/reference/eql/numbers.mdx @@ -90,7 +90,7 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — | `ORDER BY` | ❌ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | -Blocked cells raise an `operator … is not supported` exception — they never silently return wrong rows. Operands must be typed (`$1::eql_v3.int8_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::eql_v3.int8_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index 9fe995f..f08eafc 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -84,7 +84,7 @@ The narrower variants carry only their own term: a `text_eq` payload carries `hm | `ORDER BY` | ❌ | ❌ | ✅ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | ✅ | ✅ | -Blocked cells raise an `operator … is not supported` exception — they never silently return wrong rows. Operands must be typed (`$1::eql_v3.text_eq`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::eql_v3.text_eq`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions From d0ccd7e68ae0c8a4b12304a9c21886d7b2cc1ec5 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 22:08:23 +1000 Subject: [PATCH 014/151] docs(v2): address PR #37 review comments - v2-redirects.mjs: all entries permanent: false while the IA settles (per review); flip to permanent post-merge soak (CIP-3335) - IA.md: fix unmatched bold around 'Moving a page' - add placeholder pages for /concepts/searchable-encryption (CIP-3333) and /guides/troubleshooting/query-performance (CIP-3351) so the EQL reference's forward links resolve instead of 404ing --- IA.md | 2 +- .../docs/concepts/searchable-encryption.mdx | 9 ++ .../troubleshooting/query-performance.mdx | 9 ++ v2-redirects.mjs | 147 +++++++++--------- 4 files changed, 95 insertions(+), 72 deletions(-) create mode 100644 content/docs/concepts/searchable-encryption.mdx create mode 100644 content/docs/guides/troubleshooting/query-performance.mdx diff --git a/IA.md b/IA.md index f9c6f9e..cbcabec 100644 --- a/IA.md +++ b/IA.md @@ -17,7 +17,7 @@ on a product decision (see CIP-3307 checklist). enforces that every legacy page has a mapping. - Frontmatter facets (`type`, `components`, `audience`, `integration`, `verifiedAgainst`, `reviewBy`) are defined in `source.config.ts` (`v2docs`). -- **Moving a page = ** move the file into `content/docs`, update its facets, +- **Moving a page** = move the file into `content/docs`, update its facets, fix inbound links, confirm its `v2-redirects.mjs` entry, tick it here. ## URL conventions diff --git a/content/docs/concepts/searchable-encryption.mdx b/content/docs/concepts/searchable-encryption.mdx new file mode 100644 index 0000000..689d1fd --- /dev/null +++ b/content/docs/concepts/searchable-encryption.mdx @@ -0,0 +1,9 @@ +--- +title: Searchable encryption +description: "How querying encrypted data works, and exactly what each index term reveals." +type: concept +--- + +This page is being rewritten as part of the docs V2 overhaul ([CIP-3333](https://linear.app/cipherstash/issue/CIP-3333)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, the current version lives in the [existing docs](/stack/cipherstash/encryption/searchable-encryption). diff --git a/content/docs/guides/troubleshooting/query-performance.mdx b/content/docs/guides/troubleshooting/query-performance.mdx new file mode 100644 index 0000000..a128a95 --- /dev/null +++ b/content/docs/guides/troubleshooting/query-performance.mdx @@ -0,0 +1,9 @@ +--- +title: Query performance +description: "Diagnosing and fixing slow queries on encrypted columns." +type: guide +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3351](https://linear.app/cipherstash/issue/CIP-3351)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, the EQL reference covers the essentials: [Indexes](/reference/eql/indexes) walks through `EXPLAIN` verification and large-table index builds, and [Sorting](/reference/eql/sorting) covers extractor-form sort keys. diff --git a/v2-redirects.mjs b/v2-redirects.mjs index 1f068b1..3b0f78e 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -10,366 +10,371 @@ // // Conventions (matching next.config.mjs): sources/destinations omit the // "/docs" basePath. Order matters — specific entries before wildcards. +// +// All entries are `permanent: false` (307) while the IA settles — browsers +// and crawlers cache 308s aggressively, and a mis-cached destination is hard +// to walk back. Flip to permanent once the map has soaked post-merge +// (CIP-3335). export const v2Redirects = [ // === Roots === - { source: "/stack", destination: "/", permanent: true }, + { source: "/stack", destination: "/", permanent: false }, { source: "/stack/quickstart", destination: "/get-started/quickstart", - permanent: true, + permanent: false, }, - { source: "/stack/cipherstash", destination: "/", permanent: true }, + { source: "/stack/cipherstash", destination: "/", permanent: false }, { source: "/stack/cipherstash/postgres", destination: "/reference/eql", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/supabase", destination: "/integrations/supabase", - permanent: true, + permanent: false, }, // === Encryption SDK section → Reference/stack + new homes === { source: "/stack/cipherstash/encryption", destination: "/reference/stack", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/encryption/searchable-encryption", destination: "/concepts/searchable-encryption", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/encryption/identity", destination: "/concepts/identity-aware-encryption", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/encryption/drizzle", destination: "/integrations/drizzle", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/encryption/prisma-next", destination: "/integrations/prisma-next", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/encryption/dynamodb", destination: "/integrations/aws/dynamodb", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/encryption/supabase", destination: "/reference/stack/supabase", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/encryption/indexes", destination: "/reference/eql/indexes", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/encryption/queries", destination: "/reference/eql/operators", - permanent: true, + permanent: false, }, // configuration, encrypt-decrypt, bulk-operations, models, schema, storing-data { source: "/stack/cipherstash/encryption/:path*", destination: "/reference/stack/:path*", - permanent: true, + permanent: false, }, // === KMS section → Security + Reference/auth + Concepts === { source: "/stack/cipherstash/kms", destination: "/security/zerokms", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/kms/cts", destination: "/security/cts", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/kms/oidc", destination: "/reference/auth/oidc-configuration", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/kms/access-keys", destination: "/reference/auth/access-keys", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/kms/clients", destination: "/reference/auth/clients", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/kms/disaster-recovery", destination: "/security/availability-and-continuity", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/kms/keysets", destination: "/concepts/key-management", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/kms/regions", destination: "/security/zerokms", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/kms/configuration", destination: "/reference/workspace/configuration", - permanent: true, + permanent: false, }, // === Proxy section → Reference/proxy + new homes === { source: "/stack/cipherstash/proxy", destination: "/reference/proxy", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/proxy/audit", destination: "/security/audit-logging", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/proxy/getting-started", destination: "/integrations/aws/rds-aurora", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/proxy/encrypt-tool", destination: "/guides/migration/encrypt-existing-data", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/proxy/searchable-json", destination: "/reference/eql/json", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/proxy/troubleshooting", destination: "/guides/troubleshooting/proxy", - permanent: true, + permanent: false, }, // configuration, message-flow, multitenant { source: "/stack/cipherstash/proxy/:path*", destination: "/reference/proxy/:path*", - permanent: true, + permanent: false, }, // === CLI section → Reference/cli === { source: "/stack/cipherstash/cli", destination: "/reference/cli", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/cli/troubleshooting", destination: "/guides/troubleshooting/cli", - permanent: true, + permanent: false, }, { source: "/stack/cipherstash/cli/:path*", destination: "/reference/cli/:path*", - permanent: true, + permanent: false, }, // === Deploy section → Guides === { source: "/stack/deploy", destination: "/guides/deployment", - permanent: true, + permanent: false, }, { source: "/stack/deploy/going-to-production", destination: "/guides/deployment/going-to-production", - permanent: true, + permanent: false, }, { source: "/stack/deploy/aws-ecs", destination: "/guides/deployment/proxy-deployment", - permanent: true, + permanent: false, }, { source: "/stack/deploy/bundling", destination: "/guides/deployment/serverless-and-bundling", - permanent: true, + permanent: false, }, { source: "/stack/deploy/sst", destination: "/guides/deployment/serverless-and-bundling", - permanent: true, + permanent: false, }, { source: "/stack/deploy/testing", destination: "/guides/development/testing-and-ci", - permanent: true, + permanent: false, }, { source: "/stack/deploy/team-onboarding", destination: "/guides/development/team-onboarding", - permanent: true, + permanent: false, }, { source: "/stack/deploy/troubleshooting", destination: "/guides/troubleshooting", - permanent: true, + permanent: false, }, // === Reference section === - { source: "/stack/reference", destination: "/reference", permanent: true }, + { source: "/stack/reference", destination: "/reference", permanent: false }, { source: "/stack/reference/what-is-cipherstash", destination: "/get-started/what-is-cipherstash", - permanent: true, + permanent: false, }, { source: "/stack/reference/security-architecture", destination: "/security/architecture", - permanent: true, + permanent: false, }, { source: "/stack/reference/compliance", destination: "/security/compliance", - permanent: true, + permanent: false, }, { source: "/stack/reference/comparisons", destination: "/compare", - permanent: true, + permanent: false, }, { source: "/stack/reference/comparisons/:path*", destination: "/compare/:path*", - permanent: true, + permanent: false, }, { source: "/stack/reference/use-cases", destination: "/solutions", - permanent: true, + permanent: false, }, { source: "/stack/reference/use-cases/ai-rag", destination: "/solutions/ai-and-rag", - permanent: true, + permanent: false, }, { source: "/stack/reference/use-cases/compliance", destination: "/security/compliance", - permanent: true, + permanent: false, }, { source: "/stack/reference/use-cases/:path*", destination: "/solutions/:path*", - permanent: true, + permanent: false, }, { source: "/stack/reference/billing", destination: "/reference/workspace/billing", - permanent: true, + permanent: false, }, { source: "/stack/reference/members", destination: "/reference/workspace/members", - permanent: true, + permanent: false, }, { source: "/stack/reference/cipher-cell", destination: "/reference/eql/payload-format", - permanent: true, + permanent: false, }, { source: "/stack/reference/eql-guide", destination: "/reference/eql", - permanent: true, + permanent: false, }, { source: "/stack/reference/eql", destination: "/reference/eql", - permanent: true, + permanent: false, }, { source: "/stack/reference/eql/:path*", destination: "/reference/eql/:path*", - permanent: true, + permanent: false, }, { source: "/stack/reference/encryption-sdk", destination: "/reference/stack", - permanent: true, + permanent: false, }, { source: "/stack/reference/error-handling", destination: "/reference/stack/errors", - permanent: true, + permanent: false, }, // NOTE: legacy "migration" page is the @cipherstash/protect→stack package // rename guide, NOT data migration (see IA.md). { source: "/stack/reference/migration", destination: "/reference/stack/upgrading-from-protect", - permanent: true, + permanent: false, }, { source: "/stack/reference/proxy-errors", destination: "/reference/proxy/errors", - permanent: true, + permanent: false, }, { source: "/stack/reference/proxy-reference", destination: "/reference/proxy/configuration", - permanent: true, + permanent: false, }, { source: "/stack/reference/drizzle", destination: "/integrations/drizzle", - permanent: true, + permanent: false, }, { source: "/stack/reference/dashboard-supabase-integration", destination: "/integrations/supabase", - permanent: true, + permanent: false, }, { source: "/stack/reference/discovery-session", destination: "/get-started/choose-your-stack", - permanent: true, + permanent: false, }, { source: "/stack/reference/planning-guide", destination: "/get-started/choose-your-stack", - permanent: true, + permanent: false, }, { source: "/stack/reference/supported-solutions", destination: "/integrations", - permanent: true, + permanent: false, }, { source: "/stack/reference/agent-skills", destination: "/reference/agent-skills", - permanent: true, + permanent: false, }, { source: "/stack/reference/glossary", destination: "/reference/glossary", - permanent: true, + permanent: false, }, // Generated TypeDoc API reference (scripts/generate-docs.ts output) { source: "/stack/reference/stack/:path*", destination: "/reference/stack/:path*", - permanent: true, + permanent: false, }, ]; From 4901b0f23e277379a00081af93780c52fdb2c82f Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Sun, 5 Jul 2026 22:13:15 +1000 Subject: [PATCH 015/151] docs(v2): add the two-axis content model to IA.md MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Slots the content-model spec in above the migration checklist: mode vs component axes, hubs at /components/<component>, the placement test, invariants, the mode-first sidebar (compare folded into concepts, hubs anchored under Get started), the hub-page template, and the auth worked example. Page placement is now decided by mode + components facet rather than re-litigated per PR. Note: this documents the target model; reconciling the migration checklist below (Comparisons → Concepts) and the components facet enum in source.config.ts (auth/zerokms → platform) are follow-ups. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- IA.md | 260 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 260 insertions(+) diff --git a/IA.md b/IA.md index 4be54ce..3fb2645 100644 --- a/IA.md +++ b/IA.md @@ -28,6 +28,266 @@ live at `/docs/errors/<code>` — permanent, never restructured (CIP-3338). --- +## Content model — two axes + +The migration checklist below tracks _what_ moves; this section fixes _where +things go and why_, so placement stops being re-litigated per PR. + +### Terms + +- **Mode** — what the reader is trying to do. The four Diátaxis kinds + (tutorial, how-to, reference, explanation), plus our three audience doors + (integrations, solutions, security) which serve the same placement role. + A page has exactly one mode; the mode decides its sidebar home. +- **Component** — a layer of the product stack, drawn from the `components` + facet enum: `encryption` (Stack SDK), `platform` (CTS + ZeroKMS), `eql`, + `proxy`, `cli`. A page can touch several components at once. +- **Facet** — structured frontmatter that classifies a page along one axis + (`type`, `components`, `audience`, `integration`). Queryable; never shown + raw to users; independent of nav position. +- **Hub** — a per-component page at `/components/<component>` that gathers + every page tagged with that component. A generated view, not a subtree. + Not every component has a hub: hubs are for _layers_ of the stack + (`encryption`, `platform`, `eql`, `proxy`). `cli` is a component but a + cross-cutting tool, not a layer, so it has no hub. +- **Locator** — the one hand-written paragraph (plus mini stack diagram) at the + top of a hub, orienting the reader: what the component is, what sits above and + below it. Prose, nothing else. + +### The rule + +**The sidebar is organized only by mode. The by-component view lives only on the hubs.** + +CipherStash is a dependency stack, not a set of independent product pillars: +integrations sit on the Stack SDK and Proxy, both consume EQL, and EQL sits on +the Platform (CTS + ZeroKMS). That is a graph. A sidebar is a tree. So we split +the two axes rather than forcing the graph into the tree. + +- **Mode axis (the tree).** Every page has exactly one home, chosen by _what the + reader is doing_: Diátaxis mode (`get-started`, `guides`, `reference`, + `concepts`) plus three audience doors (`integrations`, `solutions`, + `security`). The sidebar is built from `meta.json` and nothing else. +- **Component axis (the graph).** Which layers a page touches is the `components` + facet — never a sidebar section. The dependency graph is expressed by facets + and surfaced by hub pages, so a shared layer like EQL is documented once and + referenced everywhere. + +Why the pillar layouts (Supabase, Clerk, GitHub) don't transfer: those are +feature-pillar products whose parts are independent, so each pillar can be its +own subtree. Our parts are layers in a dependency stack — a shared layer has no +single natural parent, so it cannot be a tree node without duplication. + +### Placement test + +Two questions, in this order, for every page: + +1. _Which mode is this?_ → decides the folder (its one sidebar home). +2. _Which components does it touch?_ → sets the `components` facet. + +Never the reverse. If you are tempted to file a page _under_ a component, that is +the signal to file it by mode and tag the component instead. + +### Invariants + +- The sidebar tree is `meta.json` only. Facets never affect nav position + (already asserted by the schema comment in `source.config.ts`). +- A page appears in exactly one place in the tree. Cross-cutting reuse happens + through links and hubs, never by duplicating a page under a second parent. +- Shared mechanics have exactly one canonical page; every other page links, + never restates. This generalises the existing EQL rule (mechanics live in + `/reference/eql/core-concepts`; category pages link to it) to every component. +- Each component has exactly one hub at `/components/<component>`. A hub is a + facet-driven _view_: it links to canonical pages and owns no mechanics. +- `/get-started/what-is-cipherstash` renders the components map; its nodes link + to the hubs. The hubs are the _only_ component-first surface, and they hold no + primary content — so they do not recreate the legacy component-first tree + (the old `root: true` Encryption/KMS/Proxy/Platform tabs). + +#### A note on hub URLs + +Hubs live at the top-level path `/components/<component>` for a short, memorable +front door, but are anchored in the sidebar under Get started (Fumadocs takes +nav position from `meta.json` independently of the URL). If you would rather the +URL mirror the nav, use `/get-started/components/<component>` instead — either +works; pick one and add it to `v2-redirects.mjs`. + +### Sidebar + +Mode-first, seven top-level sections. `compare` is folded into `concepts` (each +comparison already belongs to a door: aws-kms and vault are security-review +material, fhe and rls-and-tde are concepts). Component hubs are anchored under +Get started, not given their own top-level tab. + +``` +Get started +├─ What is CipherStash mental model · components map · audience router +├─ Quickstart +├─ Choose your stack platform × ORM × auth matrix +├─ Examples +└─ Components ← hub views (facet-driven, link-only) + ├─ Stack SDK + ├─ Proxy + ├─ EQL (shared) + └─ Platform (CTS + ZeroKMS) +Integrations flat; category grid on the index +├─ Supabase (Database · Auth · Dashboard) +├─ Drizzle · Prisma · Next.js · TypeScript +├─ Clerk · Auth0 · Okta +├─ AWS (RDS/Aurora · DynamoDB) +└─ Serverless · Docker +Concepts +├─ Privacy-first design +├─ Application-level encryption +├─ Searchable encryption canonical leakage model +├─ EQL typed-column model +├─ Key management +├─ Identity-aware encryption +├─ Threat modelling +└─ Compare aws-kms · fhe · rls-and-tde · hashicorp-vault +Guides +├─ Development local setup · schema design · testing & CI · onboarding +├─ Migration encrypt existing data · adopt incrementally · key rotation +├─ Deployment production · serverless & bundling · proxy deployment +└─ Troubleshooting query performance · runtime errors · cli · proxy +Security +├─ Architecture one reconciled ZeroKMS story +├─ ZeroKMS · CTS · Stack SDK · Proxy +├─ Threat scenarios +├─ Availability · Audit logging · Key ownership +└─ Compliance HIPAA · SOC 2 · GDPR +Solutions +└─ Protecting PII · Healthcare/HIPAA · AI & RAG · Data residency · Provable access +Reference +├─ EQL core-concepts · numbers · dates · text · json · … · joins +├─ Stack SDK client · schema · encrypt-decrypt · supabase · drizzle-operators · errors +├─ Auth lock-contexts · cts-tokens · oidc · access-keys +├─ CLI · Proxy · Workspace +└─ Benchmarks · Agent skills · Glossary +``` + +### Hub pages + +One per component, at `/components/<component>`. Same template every time: + +1. **Locator** — one paragraph plus the stack diagram with this layer + highlighted: what it is, what it sits on, what sits on it. +2. **Start here** — the one or two canonical entry pages. +3. **By mode** — grouped links (Concepts · Guides · Reference · Security · + Integrations that use it). Every entry links to its canonical mode-home. +4. Nothing else. No mechanics, no examples that live elsewhere. + +The "By mode" lists are generated, not hand-maintained: filter +`source.getPages()` to pages whose `components` facet includes this component, +then group by `type`. "Integrations that use it" is the subset whose frontmatter +also carries an `integration` block. This is why the facet earns its keep — the +hubs cost nothing to maintain once a page is correctly tagged. + +**Tagging rule — `eql` is conditional, not automatic.** Stack encrypts values +in three modes: general-purpose (a value in your app), Postgres columns, and +non-Postgres stores like DynamoDB. Only the Postgres path involves EQL. So tag +`eql` only when the page is actually about queryable-in-Postgres ciphertext. +General-purpose and DynamoDB pages are `components: [encryption, platform]` with +_no_ `eql` — DynamoDB (`encryptedDynamoDB`) is the canonical no-EQL example and +the reason "Stack depends on EQL" is wrong. EQL is the Postgres searchability +layer, not a layer every Stack page sits on. + +#### Stack SDK — `/components/stack-sdk` (facet: `encryption`) + +- Locator: the TypeScript SDK; encrypt and decrypt values in your app. Sits on + the Platform. Add EQL when the data lives in Postgres and you want the + ciphertext queryable there — but Stack also encrypts general-purpose values + and non-Postgres stores (e.g. DynamoDB) with no EQL at all. +- Start here: Quickstart · Reference → Stack SDK (client + configuration) +- Concepts: application-level encryption · searchable encryption · identity-aware encryption +- Guides: schema design · encrypt existing data · testing & CI · serverless & bundling +- Reference: `/reference/stack/*` (schema · encrypt-decrypt · supabase · drizzle-operators · errors) +- Security: `/security/stack-sdk` +- Integrations (auto): Supabase · Drizzle · Prisma · DynamoDB · Next.js … + +#### Proxy — `/components/proxy` (facet: `proxy`) + +- Locator: the no-app-changes path; sits in front of Postgres and speaks EQL for you. +- Start here: Reference → Proxy (configuration) · Guides → Proxy deployment +- Concepts: application-level encryption · searchable encryption +- Guides: proxy deployment · going to production +- Reference: `/reference/proxy/*` (configuration · message-flow · multitenant · errors) +- Security: `/security/proxy` +- Integrations (auto): AWS RDS/Aurora · Docker +- See also: EQL hub (shared dependency) + +#### EQL — `/components/eql` (facet: `eql`) ← the shared spine + +- Locator: the Postgres searchability layer. Makes ciphertext queryable in + Postgres by declaring an encrypted column's capability in the schema. The + Proxy always speaks EQL; the Stack SDK uses it only on its Postgres path (not + for general-purpose or DynamoDB encryption). +- Start here: Reference → EQL (install) · EQL core-concepts +- Concepts: EQL (typed-column model) · searchable encryption (leakage model) +- Reference: the whole `/reference/eql/*` tree +- Guides: troubleshooting → query performance +- Consumed by: Proxy hub (always) · Stack SDK hub (Postgres path only) +- Anti-drift: mechanics live in `/reference/eql/core-concepts`; this hub links only. + +#### Platform — `/components/platform` (facet: see vocab note) ← the foundation + +- Locator: the base everything relies on — key management (ZeroKMS) and identity-bound access (CTS). +- Start here: Security → Architecture · Concepts → Key management +- Concepts: key management · identity-aware encryption +- Reference: `/reference/auth/*` (lock-contexts · cts-tokens · oidc · access-keys) +- Security: architecture · zerokms · cts · availability · audit logging · key ownership +- Integrations (auto): Clerk · Auth0 · Okta + +### Worked example: how auth fits + +Auth is the concern most likely to feel like it needs its own section — it spans +the SDK, the Proxy, local dev, the Platform, and every auth provider. It doesn't +get one. It's the case that shows the model absorbing a cross-cutting concern +without bending: auth isn't a _layer_, it's a concern that shows up _on_ layers, +so it lives as facets and links, never as a tree section or a hub. + +"Auth" names several distinct things. Keep them separate: + +| Thing | What it is | `components` | Canonical home | +|---|---|---|---| +| CTS | Identity service in the Platform | `platform` | `/security/cts`, `/reference/auth/*` | +| `@cipherstash/auth` | Stack package (identity-aware encryption) | `[encryption, platform]` | `/reference/stack/auth` | +| Proxy stack-auth | How auth works inside the Proxy | `[proxy, platform]` | `/reference/proxy/*`, `/security/proxy` | +| Next.js adapter | Framework integration | `[encryption, platform]` | `/integrations/nextjs` | +| Clerk / Auth0 / Okta | Auth-provider integrations | `[platform]` | `/integrations/*` (`category: auth-provider`) | + +None of these is filed under an "auth" section, because there isn't one. Each is +filed by _mode_ (service → Security/Reference, package → Reference, providers → +Integrations) and tagged by _component_. The through-line is reassembled by +queries, not by a subtree: + +- The Platform hub gathers all of it — everything above carries `platform`. +- Faceted search on `integration.category: auth-provider` gives the providers. +- `/concepts/identity-aware-encryption` is the one explanatory page that ties the + concept together in prose; everything else links to it (anti-drift rule). + +Naming caution: `/reference/auth/*` means the CTS _service_; the `@cipherstash/auth` +_package_ lives at `/reference/stack/auth`. Two different things both called +"auth" — keep the paths distinct so contributors don't merge them. + +The `components` facet enum is `[encryption, platform, eql, proxy, cli]` +(collapsing the former `auth` and `zerokms` into a single `platform`, matching +the product story "Platform = CTS + ZeroKMS"). This maps 1:1 onto the hubs: +`encryption` → Stack SDK, `platform`, `eql`, `proxy`. + +Two notes: + +- The `encryption` facet value and its hub title **Stack SDK** differ on + purpose — the facet names the capability, the hub names the product. Document + once, move on. +- Collapsing `auth`/`zerokms` into `platform` means you can't isolate the + CTS/identity pages by facet query anymore — a `platform` query returns all of + Platform. That distinction still lives in nav location (`/security/cts` vs + `/security/zerokms`) and in `integration.category: auth-provider` for the + Clerk/Auth0/Okta pages, so it isn't lost — it just isn't on the `components` + axis. + +--- + ## Get started — CIP-3327 - [x] Section scaffold 🚧 From 299c1cb4f9a8541edd6f6ebd18aaaf3656e15b9c Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 6 Jul 2026 23:42:21 +1000 Subject: [PATCH 016/151] docs(v2): reconcile structure with the two-axis IA Closes the two follow-ups the IA content-model commit (4901b0f) flagged: - Comparisons -> Concepts: move content/docs/compare into content/docs/concepts/compare, drop `compare` from the root meta.json, sort the Compare group last under Concepts, and repoint the /stack/reference/comparisons redirects to /concepts/compare. The IA had already folded compare into Concepts in the sidebar spec; this makes the tree match. IA.md Comparisons checklist repointed to /concepts/compare/*. - components facet enum: collapse `auth`/`zerokms` into `platform` (source.config.ts), matching "Platform = CTS + ZeroKMS". Update the one current-content user of the old value (integrations/supabase/index.mdx). Component hubs (/components/<component>) remain future todos; not built here. Verified: types:check, validate-redirects (194/194), and next build all pass. --- IA.md | 15 ++++++++++----- content/docs/{ => concepts}/compare/index.mdx | 0 content/docs/{ => concepts}/compare/meta.json | 0 content/docs/concepts/meta.json | 2 +- content/docs/integrations/supabase/index.mdx | 2 +- content/docs/meta.json | 1 - source.config.ts | 2 +- v2-redirects.mjs | 4 ++-- 8 files changed, 15 insertions(+), 11 deletions(-) rename content/docs/{ => concepts}/compare/index.mdx (100%) rename content/docs/{ => concepts}/compare/meta.json (100%) diff --git a/IA.md b/IA.md index 3fb2645..a56a5cc 100644 --- a/IA.md +++ b/IA.md @@ -335,11 +335,16 @@ Two notes: ## Comparisons — CIP-3333 -- [x] Section scaffold 🚧 -- [ ] `/compare/aws-kms` (port) -- [ ] `/compare/fhe` (port) -- [ ] `/compare/rls-and-tde` (new — expand the Supabase-listing RLS contrast) -- [ ] `/compare/hashicorp-vault` (in flight on `docs/vault-comparison` branch — land there or here, then port) +Folded into Concepts (see the sidebar spec above): the comparison pages live at +`/concepts/compare/*`, not a top-level `/compare` tab. `/stack/reference/comparisons` +and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). + +- [x] Section scaffold 🚧 (moved under `concepts/`) +- [ ] `/concepts/compare/aws-kms` (port) +- [ ] `/concepts/compare/fhe` (port) +- [ ] `/concepts/compare/zerokms-vs-hsm` (ZeroKMS vs hardware security modules) +- [ ] `/concepts/compare/rls-and-tde` (new — expand the Supabase-listing RLS contrast) +- [ ] `/concepts/compare/hashicorp-vault` (in flight on `docs/vault-comparison` branch — land there or here, then port) ## Guides diff --git a/content/docs/compare/index.mdx b/content/docs/concepts/compare/index.mdx similarity index 100% rename from content/docs/compare/index.mdx rename to content/docs/concepts/compare/index.mdx diff --git a/content/docs/compare/meta.json b/content/docs/concepts/compare/meta.json similarity index 100% rename from content/docs/compare/meta.json rename to content/docs/concepts/compare/meta.json diff --git a/content/docs/concepts/meta.json b/content/docs/concepts/meta.json index 521f756..49d9122 100644 --- a/content/docs/concepts/meta.json +++ b/content/docs/concepts/meta.json @@ -1,5 +1,5 @@ { "title": "Concepts", "icon": "Lightbulb", - "pages": ["..."] + "pages": ["...", "compare"] } diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 86e2ef6..5ce53db 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -2,7 +2,7 @@ title: Supabase description: "Searchable, application-level encryption for your Supabase project — encrypt in your app, query in Postgres." type: tutorial -components: [encryption, eql, auth] +components: [encryption, eql, platform] audience: [developer] integration: category: platform diff --git a/content/docs/meta.json b/content/docs/meta.json index 74f486e..5d7ad44 100644 --- a/content/docs/meta.json +++ b/content/docs/meta.json @@ -4,7 +4,6 @@ "get-started", "integrations", "concepts", - "compare", "guides", "security", "solutions", diff --git a/source.config.ts b/source.config.ts index 18ad3f5..a95efc4 100644 --- a/source.config.ts +++ b/source.config.ts @@ -39,7 +39,7 @@ export const v2docs = defineDocs({ // tailored-quickstart picker (CIP-3339). Nav position never depends on // these — the sidebar tree comes from meta.json alone. components: z - .array(z.enum(["encryption", "auth", "zerokms", "eql", "proxy", "cli"])) + .array(z.enum(["encryption", "platform", "eql", "proxy", "cli"])) .optional(), audience: z.array(z.enum(["developer", "cto", "ciso"])).optional(), integration: z diff --git a/v2-redirects.mjs b/v2-redirects.mjs index dec811a..8779a7b 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -251,12 +251,12 @@ export const v2Redirects = [ }, { source: "/stack/reference/comparisons", - destination: "/compare", + destination: "/concepts/compare", permanent: false, }, { source: "/stack/reference/comparisons/:path*", - destination: "/compare/:path*", + destination: "/concepts/compare/:path*", permanent: false, }, { From 9bbdcfb91f40b4b8895b6048fc5108380ad7c806 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 7 Jul 2026 11:03:18 +1000 Subject: [PATCH 017/151] chore(v2): fix Biome lint errors so `bun run lint` passes clean MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The v2 branch had a failing `biome check` (12 errors, 19 warnings), all pre-existing and unrelated to content. Cleared them: - a11y/noSvgWithoutTitle (5 errors): add role="img" + aria-label to the Prisma/Drizzle/Supabase/DynamoDB logo SVGs and the Supabase icon (empty/ missing accessible name). - Biome can't parse Tailwind v4 at-rules (@custom-variant) in src/app/global.css — it raised parse+format errors and 18 noImportantStyles warnings on intentional theme overrides. Exclude that one file from Biome (Tailwind owns it); nothing else authors CSS. - format (4): reformat scripts/generate-eql-docs.ts + three legacy content/stack meta.json files (whitespace only). - performance/noImgElement (2 warnings): documented biome-ignore on the two static SVG logos in layout.shared.tsx (next/image gives SVGs no benefit). - Bump the biome.json $schema to the installed 2.3.15. `bun run lint` now exits 0; types:check still passes. --- biome.json | 12 ++++++++++-- content/stack/meta.json | 7 +------ content/stack/reference/eql/meta.json | 6 ++---- content/stack/reference/stack/meta.json | 6 ++---- scripts/generate-eql-docs.ts | 18 ++++++++++-------- src/components/icons/supabase.tsx | 2 ++ src/components/integration-logos.tsx | 7 +++++++ src/lib/layout.shared.tsx | 2 ++ 8 files changed, 36 insertions(+), 24 deletions(-) diff --git a/biome.json b/biome.json index 95df3a1..ebbb858 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.0/schema.json", + "$schema": "https://biomejs.dev/schemas/2.3.15/schema.json", "vcs": { "enabled": true, "clientKind": "git", @@ -7,7 +7,15 @@ }, "files": { "ignoreUnknown": true, - "includes": ["**", "!node_modules", "!.next", "!dist", "!build", "!.source"] + "includes": [ + "**", + "!node_modules", + "!.next", + "!dist", + "!build", + "!.source", + "!src/app/global.css" + ] }, "formatter": { "enabled": true, diff --git a/content/stack/meta.json b/content/stack/meta.json index 340df56..34e13fc 100644 --- a/content/stack/meta.json +++ b/content/stack/meta.json @@ -1,8 +1,3 @@ { - "pages": [ - "quickstart", - "cipherstash", - "deploy", - "reference" - ] + "pages": ["quickstart", "cipherstash", "deploy", "reference"] } diff --git a/content/stack/reference/eql/meta.json b/content/stack/reference/eql/meta.json index 7568e54..d20d140 100644 --- a/content/stack/reference/eql/meta.json +++ b/content/stack/reference/eql/meta.json @@ -1,5 +1,3 @@ { - "pages": [ - "index" - ] -} \ No newline at end of file + "pages": ["index"] +} diff --git a/content/stack/reference/stack/meta.json b/content/stack/reference/stack/meta.json index 6f40473..dbb256d 100644 --- a/content/stack/reference/stack/meta.json +++ b/content/stack/reference/stack/meta.json @@ -1,5 +1,3 @@ { - "pages": [ - "latest" - ] -} \ No newline at end of file + "pages": ["latest"] +} diff --git a/scripts/generate-eql-docs.ts b/scripts/generate-eql-docs.ts index 4c85527..0625226 100644 --- a/scripts/generate-eql-docs.ts +++ b/scripts/generate-eql-docs.ts @@ -116,14 +116,16 @@ function escapeMdxSpecials(content: string): string { const escaped = parts .map((part, i) => { if (i % 2 === 1) return part; - return part - .replace(/\{/g, "\\{") - .replace(/\}/g, "\\}") - // Escape `<` unless it begins a real JSX/HTML tag, a closing - // tag, or an autolink (followed by a lowercase letter, `_`, `$`, - // or `/`). Uppercase-led tokens like `<T>` are type placeholders - // in the API reference, not JSX, so they must be escaped too. - .replace(/<(?![a-z_$/])/g, "\\<"); + return ( + part + .replace(/\{/g, "\\{") + .replace(/\}/g, "\\}") + // Escape `<` unless it begins a real JSX/HTML tag, a closing + // tag, or an autolink (followed by a lowercase letter, `_`, `$`, + // or `/`). Uppercase-led tokens like `<T>` are type placeholders + // in the API reference, not JSX, so they must be escaped too. + .replace(/<(?![a-z_$/])/g, "\\<") + ); }) .join(""); result.push(escaped); diff --git a/src/components/icons/supabase.tsx b/src/components/icons/supabase.tsx index 492ac61..1b9b9bb 100644 --- a/src/components/icons/supabase.tsx +++ b/src/components/icons/supabase.tsx @@ -4,6 +4,8 @@ export function SupabaseIcon(props: React.SVGProps<SVGSVGElement>) { viewBox="0 0 109 113" fill="none" xmlns="http://www.w3.org/2000/svg" + role="img" + aria-label="Supabase" {...props} > <path diff --git a/src/components/integration-logos.tsx b/src/components/integration-logos.tsx index 2ea7c85..e679d23 100644 --- a/src/components/integration-logos.tsx +++ b/src/components/integration-logos.tsx @@ -5,6 +5,7 @@ export function PrismaLogo({ className }: { className?: string }) { fill="currentColor" xmlns="http://www.w3.org/2000/svg" className={className} + role="img" aria-label="Prisma" > <path d="M254.313 235.519 148.057 4.5a8.288 8.288 0 0 0-7.215-4.486 8.534 8.534 0 0 0-7.499 4.084L1.296 212.55a8.521 8.521 0 0 0 .1 9.282l54.915 82.731a8.518 8.518 0 0 0 9.687 3.396l181.79-59.7a8.518 8.518 0 0 0 5.282-4.79 8.524 8.524 0 0 0 1.243-7.95Zm-23.077 5.769-156.642 51.45c-2.871.943-5.704-1.689-4.876-4.573l54.45-189.751a3.453 3.453 0 0 1 6.541-.252l103.013 137.317a3.454 3.454 0 0 1-2.486 5.809Z" /> @@ -19,6 +20,8 @@ export function DrizzleLogo({ className }: { className?: string }) { fill="currentColor" xmlns="http://www.w3.org/2000/svg" className={className} + role="img" + aria-label="Drizzle" > <rect width="5.25365" @@ -65,6 +68,8 @@ export function SupabaseLogo({ className }: { className?: string }) { fill="none" xmlns="http://www.w3.org/2000/svg" className={className} + role="img" + aria-label="Supabase" > {/* Wordmark — uses currentColor */} <path @@ -121,6 +126,8 @@ export function DynamoDBLogo({ className }: { className?: string }) { height="446" viewBox="0 0 561 446" className={className} + role="img" + aria-label="DynamoDB" > <g fill="none" transform="translate(.311)"> {/* Wordmark — uses currentColor */} diff --git a/src/lib/layout.shared.tsx b/src/lib/layout.shared.tsx index cba3da9..f0505ad 100644 --- a/src/lib/layout.shared.tsx +++ b/src/lib/layout.shared.tsx @@ -9,11 +9,13 @@ export const gitConfig = { function Logo() { return ( <div className="flex items-center gap-3"> + {/* biome-ignore lint/performance/noImgElement: static SVG logo; next/image gives no benefit for SVGs and would need extra config */} <img src="/docs/images/cipherstash-logo-dark.svg" alt="CipherStash" className="h-5 w-5 hidden dark:block" /> + {/* biome-ignore lint/performance/noImgElement: static SVG logo; next/image gives no benefit for SVGs and would need extra config */} <img src="/docs/images/cipherstash-logo-light.svg" alt="CipherStash" From a900369106956397b390f79c81851ec3d6f387b1 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 7 Jul 2026 12:02:43 +1000 Subject: [PATCH 018/151] chore: ignore .serena/ (local MCP tooling state) --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 1520277..7d245b9 100644 --- a/.gitignore +++ b/.gitignore @@ -39,3 +39,6 @@ content/stack/reference/drizzle/latest/ content/stack/reference/drizzle/v*/ .tmp-* .env.local + +# serena (local MCP tooling state) +.serena/ From 064c176669ce16c97d3c2a9d0f42b1ab44dc268a Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 16:48:13 +1000 Subject: [PATCH 019/151] fix(eql-docs): strip Doxygen <tt> tags so a stray one can't break the build MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The EQL reference generator fetches the latest release's API.md at build time and passes lowercase-led tags (e.g. `<tt>`) through as real HTML. MDX requires every tag to be balanced, so a mangled SQL-comment source that emits an unclosed `<tt>` fails the whole Vercel build — which is exactly what eql-3.0.0-alpha.3 did (index.mdx:2153, `Expected a closing tag for <tt>`). `<tt>` is Doxygen's teletype tag; MDX doesn't need it. Strip `<tt>`/`</tt>` (non-code text only) before escaping, so malformed upstream docs degrade gracefully instead of taking the deploy down. Verified: regenerated content/stack/reference/eql/index.mdx from the live eql-3.0.0-alpha.3 release and `next build` compiles all 329 pages. --- scripts/generate-eql-docs.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/scripts/generate-eql-docs.ts b/scripts/generate-eql-docs.ts index 0625226..975b9c1 100644 --- a/scripts/generate-eql-docs.ts +++ b/scripts/generate-eql-docs.ts @@ -120,6 +120,12 @@ function escapeMdxSpecials(content: string): string { part .replace(/\{/g, "\\{") .replace(/\}/g, "\\}") + // Strip Doxygen's `<tt>` teletype tags. They're a lowercase-led + // "tag" so the `<` rule below leaves them intact, but MDX requires + // every tag to be balanced — and mangled SQL-comment source can + // emit a stray, unclosed `<tt>` (e.g. eql-3.0.0-alpha.3's API.md), + // which fails the whole build. MDX doesn't need the tag, so drop it. + .replace(/<\/?tt\b[^>]*>/gi, "") // Escape `<` unless it begins a real JSX/HTML tag, a closing // tag, or an autolink (followed by a lowercase letter, `_`, `$`, // or `/`). Uppercase-led tokens like `<T>` are type placeholders From ccca2e5c80bda9986435d86893d7a8e676c8ddab Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Sun, 5 Jul 2026 23:03:19 +1000 Subject: [PATCH 020/151] =?UTF-8?q?docs(v2):=20prototype=20=E2=80=94=20gen?= =?UTF-8?q?erate=20the=20CLI=20reference=20from=20`stash=20--help`?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PROTOTYPE for review. Generates /reference/cli from the shipped `stash` CLI so the reference can't drift from the actual command surface, and stamps every page with the CLI version it was generated from. - scripts/generate-cli-docs.ts — parses `stash --help` (captured to a fixture) into a manifest, then renders one page per top-level command (grouped Setup/Auth/Database/Schema/Encrypt/Deployment) with a "Generated from stash v0.16.0" banner, a verifiedAgainst.cli facet, and [cli] / [cli, eql] components per the content-model tagging rule. - `bun run generate-docs:cli` (package.json). - scripts/fixtures/stash-help-0.16.0.txt — captured input. - content/docs/reference/cli/* — generated output (10 command pages + index). Bootstrap note: `stash` 0.16.0 is a hand-rolled TS CLI with no machine-readable output and no per-command --help, so we parse the single top-level --help. Target: add `stash manifest --json` to the CLI, then swap loadManifest() to read it and delete the parser — the page format stays identical. Today's --help is thin (no args, no per-command examples, auth/encrypt subcommands undetailed); those gaps are exactly what the JSON manifest fills. Surfaces the drift too: 0.16.0 uses `db install` (not `eql install`) and has ~15 commands the hand-written pages never documented. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/cli/auth.mdx | 26 ++ content/docs/reference/cli/db.mdx | 163 ++++++++++ content/docs/reference/cli/encrypt.mdx | 56 ++++ content/docs/reference/cli/env.mdx | 20 ++ content/docs/reference/cli/impl.mdx | 36 +++ content/docs/reference/cli/index.mdx | 65 +++- content/docs/reference/cli/init.mdx | 39 +++ content/docs/reference/cli/meta.json | 19 +- content/docs/reference/cli/plan.mdx | 34 ++ content/docs/reference/cli/schema.mdx | 30 ++ content/docs/reference/cli/status.mdx | 35 +++ content/docs/reference/cli/wizard.mdx | 26 ++ package.json | 1 + scripts/fixtures/stash-help-0.16.0.txt | 98 ++++++ scripts/generate-cli-docs.ts | 410 +++++++++++++++++++++++++ 15 files changed, 1054 insertions(+), 4 deletions(-) create mode 100644 content/docs/reference/cli/auth.mdx create mode 100644 content/docs/reference/cli/db.mdx create mode 100644 content/docs/reference/cli/encrypt.mdx create mode 100644 content/docs/reference/cli/env.mdx create mode 100644 content/docs/reference/cli/impl.mdx create mode 100644 content/docs/reference/cli/init.mdx create mode 100644 content/docs/reference/cli/plan.mdx create mode 100644 content/docs/reference/cli/schema.mdx create mode 100644 content/docs/reference/cli/status.mdx create mode 100644 content/docs/reference/cli/wizard.mdx create mode 100644 scripts/fixtures/stash-help-0.16.0.txt create mode 100644 scripts/generate-cli-docs.ts diff --git a/content/docs/reference/cli/auth.mdx b/content/docs/reference/cli/auth.mdx new file mode 100644 index 0000000..338e854 --- /dev/null +++ b/content/docs/reference/cli/auth.mdx @@ -0,0 +1,26 @@ +--- +title: stash auth +description: "Authenticate with CipherStash" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +Authenticate with CipherStash + +```bash +npx stash auth +``` + +## Examples + +```bash +npx stash auth login +``` diff --git a/content/docs/reference/cli/db.mdx b/content/docs/reference/cli/db.mdx new file mode 100644 index 0000000..82ffcd7 --- /dev/null +++ b/content/docs/reference/cli/db.mdx @@ -0,0 +1,163 @@ +--- +title: stash db +description: "Reference for the `stash db` commands." +type: reference +components: [cli, eql] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +The `stash db` command group. + +### `db install` + +Scaffold stash.config.ts (if missing) and install EQL extensions + +```bash +npx stash db install [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--force` | Reinstall / overwrite even if already installed | +| `--dry-run` | Show what would happen without making changes | +| `--supabase` | Use Supabase-compatible mode (auto-detected from DATABASE_URL) | +| `--drizzle` | Generate a Drizzle migration instead of direct install (auto-detected from project) | +| `--migration` | (requires --supabase) Write a Supabase migration file instead of running SQL directly | +| `--direct` | (requires --supabase) Run the SQL directly against the database (mutually exclusive with --migration) | +| `--migrations-dir <path>` | (requires --supabase) Override the Supabase migrations directory (default: supabase/migrations) | +| `--exclude-operator-family` | Skip operator family creation | +| `--latest` | Fetch the latest EQL from GitHub | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | + + +#### Examples + +```bash +npx stash db install +``` + +### `db upgrade` + +Upgrade EQL extensions to the latest version + +```bash +npx stash db upgrade [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--dry-run` | Show what would happen without making changes | +| `--supabase` | Use Supabase-compatible mode (auto-detected from DATABASE_URL) | +| `--exclude-operator-family` | Skip operator family creation | +| `--latest` | Fetch the latest EQL from GitHub | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | + + +### `db push` + +Push encryption schema (writes pending if active config already exists) + +```bash +npx stash db push [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--dry-run` | Show what would happen without making changes | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | + + +#### Examples + +```bash +npx stash db push +``` + +### `db activate` + +Promote pending → active without renames (use after additive db push) + +```bash +npx stash db activate [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | + + +### `db validate` + +Validate encryption schema + +```bash +npx stash db validate [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--supabase` | Use Supabase-compatible mode (auto-detected from DATABASE_URL) | +| `--exclude-operator-family` | Skip operator family creation | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | + + +### `db migrate` + +Run pending encrypt config migrations + +```bash +npx stash db migrate [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | + + +### `db status` + +Show EQL installation status + +```bash +npx stash db status [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | + + +### `db test-connection` + +Test database connectivity + +```bash +npx stash db test-connection [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | diff --git a/content/docs/reference/cli/encrypt.mdx b/content/docs/reference/cli/encrypt.mdx new file mode 100644 index 0000000..887983e --- /dev/null +++ b/content/docs/reference/cli/encrypt.mdx @@ -0,0 +1,56 @@ +--- +title: stash encrypt +description: "Reference for the `stash encrypt` commands." +type: reference +components: [cli, eql] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +The `stash encrypt` command group. + +### `encrypt status` + +Show per-column migration status (phase, progress, drift) + +```bash +npx stash encrypt status +``` + +### `encrypt plan` + +Diff intent (.cipherstash/migrations.json) vs observed state + +```bash +npx stash encrypt plan +``` + +### `encrypt backfill` + +Resumably encrypt plaintext into the encrypted column + +```bash +npx stash encrypt backfill +``` + +### `encrypt cutover` + +Rename swap encrypted → primary column + +```bash +npx stash encrypt cutover +``` + +### `encrypt drop` + +Generate a migration to drop the plaintext column + +```bash +npx stash encrypt drop +``` diff --git a/content/docs/reference/cli/env.mdx b/content/docs/reference/cli/env.mdx new file mode 100644 index 0000000..f30dc09 --- /dev/null +++ b/content/docs/reference/cli/env.mdx @@ -0,0 +1,20 @@ +--- +title: stash env +description: "(experimental) Print production env vars for deployment" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +(experimental) Print production env vars for deployment + +```bash +npx stash env +``` diff --git a/content/docs/reference/cli/impl.mdx b/content/docs/reference/cli/impl.mdx new file mode 100644 index 0000000..5604c50 --- /dev/null +++ b/content/docs/reference/cli/impl.mdx @@ -0,0 +1,36 @@ +--- +title: stash impl +description: "Execute the plan with a local agent" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +Execute the plan with a local agent + +```bash +npx stash impl [flags] +``` + +### Flags + +| Flag | Description | +| --- | --- | +| `--continue-without-plan` | Skip planning and go straight to implementation (interactively confirms before proceeding) | +| `--target <name>` | Skip the agent-target picker and hand off directly to one of claude-code \| codex \| agents-md \| wizard. Safe to call from non-TTY contexts (CI, pipes). Without --target in non-TTY, the command prints a hint and exits cleanly instead of hanging. | + + +## Examples + +```bash +npx stash impl +npx stash impl --continue-without-plan +npx stash impl --target claude-code +``` diff --git a/content/docs/reference/cli/index.mdx b/content/docs/reference/cli/index.mdx index 8eeffd3..8b4ab15 100644 --- a/content/docs/reference/cli/index.mdx +++ b/content/docs/reference/cli/index.mdx @@ -1,8 +1,67 @@ --- title: CLI -description: "CLI documentation — being built as part of the docs V2 overhaul." +description: "Command reference for the stash CLI, generated from v0.16.0." +type: reference +components: [cli] +verifiedAgainst: + cli: "0.16.0" --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} -Until it lands, current documentation lives in the [existing docs](/stack). +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +The `stash` CLI. Install with `npx stash@0.16.0`. Every command accepts `--help` and `--version`. + +### Setup & workflow + +| Command | Description | +| --- | --- | +| [`init`](/reference/cli/init) | Initialize CipherStash for your project | +| [`plan`](/reference/cli/plan) | Draft a reviewable encryption plan at .cipherstash/plan.md | +| [`impl`](/reference/cli/impl) | Execute the plan with a local agent | +| [`status`](/reference/cli/status) | Displays implementation status | +| [`wizard`](/reference/cli/wizard) | AI-guided encryption setup (reads your codebase) | + +### Auth + +| Command | Description | +| --- | --- | +| [`auth`](/reference/cli/auth) | Authenticate with CipherStash | + +### Database + +| Command | Description | +| --- | --- | +| [`db install`](/reference/cli/db#db-install) | Scaffold stash.config.ts (if missing) and install EQL extensions | +| [`db upgrade`](/reference/cli/db#db-upgrade) | Upgrade EQL extensions to the latest version | +| [`db push`](/reference/cli/db#db-push) | Push encryption schema (writes pending if active config already exists) | +| [`db activate`](/reference/cli/db#db-activate) | Promote pending → active without renames (use after additive db push) | +| [`db validate`](/reference/cli/db#db-validate) | Validate encryption schema | +| [`db migrate`](/reference/cli/db#db-migrate) | Run pending encrypt config migrations | +| [`db status`](/reference/cli/db#db-status) | Show EQL installation status | +| [`db test-connection`](/reference/cli/db#db-test-connection) | Test database connectivity | + +### Schema + +| Command | Description | +| --- | --- | +| [`schema build`](/reference/cli/schema#schema-build) | Build an encryption schema from your database | + +### Encrypt + +| Command | Description | +| --- | --- | +| [`encrypt status`](/reference/cli/encrypt#encrypt-status) | Show per-column migration status (phase, progress, drift) | +| [`encrypt plan`](/reference/cli/encrypt#encrypt-plan) | Diff intent (.cipherstash/migrations.json) vs observed state | +| [`encrypt backfill`](/reference/cli/encrypt#encrypt-backfill) | Resumably encrypt plaintext into the encrypted column | +| [`encrypt cutover`](/reference/cli/encrypt#encrypt-cutover) | Rename swap encrypted → primary column | +| [`encrypt drop`](/reference/cli/encrypt#encrypt-drop) | Generate a migration to drop the plaintext column | + +### Deployment + +| Command | Description | +| --- | --- | +| [`env`](/reference/cli/env) | (experimental) Print production env vars for deployment | diff --git a/content/docs/reference/cli/init.mdx b/content/docs/reference/cli/init.mdx new file mode 100644 index 0000000..0e843c3 --- /dev/null +++ b/content/docs/reference/cli/init.mdx @@ -0,0 +1,39 @@ +--- +title: stash init +description: "Initialize CipherStash for your project" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +Initialize CipherStash for your project + +```bash +npx stash init [flags] +``` + +### Flags + +| Flag | Description | +| --- | --- | +| `--supabase` | Use Supabase-specific setup flow | +| `--drizzle` | Use Drizzle-specific setup flow | +| `--prisma-next` | Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migration apply) | +| `--proxy` | Query encrypted data via CipherStash Proxy | +| `--no-proxy` | Query encrypted data directly via the SDK (default) | + + +## Examples + +```bash +npx stash init +npx stash init --supabase +npx stash init --prisma-next +``` diff --git a/content/docs/reference/cli/meta.json b/content/docs/reference/cli/meta.json index 0a67892..5e139d7 100644 --- a/content/docs/reference/cli/meta.json +++ b/content/docs/reference/cli/meta.json @@ -1,4 +1,21 @@ { "title": "CLI", - "pages": ["..."] + "pages": [ + "---Setup & workflow---", + "init", + "plan", + "impl", + "status", + "wizard", + "---Auth---", + "auth", + "---Database---", + "db", + "---Schema---", + "schema", + "---Encrypt---", + "encrypt", + "---Deployment---", + "env" + ] } diff --git a/content/docs/reference/cli/plan.mdx b/content/docs/reference/cli/plan.mdx new file mode 100644 index 0000000..0c536df --- /dev/null +++ b/content/docs/reference/cli/plan.mdx @@ -0,0 +1,34 @@ +--- +title: stash plan +description: "Draft a reviewable encryption plan at .cipherstash/plan.md" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +Draft a reviewable encryption plan at .cipherstash/plan.md + +```bash +npx stash plan [flags] +``` + +### Flags + +| Flag | Description | +| --- | --- | +| `--complete-rollout` | Plan the entire encryption lifecycle (schema-add through drop) in one document. Skips the production-deploy gate that normally separates rollout from cutover. Only safe when this database is not backing a deployed application (local dev, sandbox, freshly seeded test environment). | +| `--target <name>` | Skip the agent-target picker and hand off directly to one of claude-code \| codex \| agents-md \| wizard. Safe to call from non-TTY contexts (CI, pipes). Without --target in non-TTY, the command prints a hint and exits cleanly instead of hanging. | + + +## Examples + +```bash +npx stash plan +``` diff --git a/content/docs/reference/cli/schema.mdx b/content/docs/reference/cli/schema.mdx new file mode 100644 index 0000000..bd8400c --- /dev/null +++ b/content/docs/reference/cli/schema.mdx @@ -0,0 +1,30 @@ +--- +title: stash schema +description: "Reference for the `stash schema` commands." +type: reference +components: [cli, eql] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +The `stash schema` command group. + +### `schema build` + +Build an encryption schema from your database + +```bash +npx stash schema build +``` + +#### Examples + +```bash +npx stash schema build +``` diff --git a/content/docs/reference/cli/status.mdx b/content/docs/reference/cli/status.mdx new file mode 100644 index 0000000..8fc84b6 --- /dev/null +++ b/content/docs/reference/cli/status.mdx @@ -0,0 +1,35 @@ +--- +title: stash status +description: "Displays implementation status" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +Displays implementation status + +```bash +npx stash status [flags] +``` + +### Flags + +| Flag | Description | +| --- | --- | +| `--quest` | Force the quest-log output (emoji + progress bars) even in non-TTY contexts. Default is auto: fancy in a terminal, plain in CI / pipes / agents. | +| `--plain` | Force the plain-text output even in TTY contexts. | +| `--json` | Emit a structured JSON document instead. | + + +## Examples + +```bash +npx stash status +``` diff --git a/content/docs/reference/cli/wizard.mdx b/content/docs/reference/cli/wizard.mdx new file mode 100644 index 0000000..e79f82d --- /dev/null +++ b/content/docs/reference/cli/wizard.mdx @@ -0,0 +1,26 @@ +--- +title: stash wizard +description: "AI-guided encryption setup (reads your codebase)" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.16.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} + +<Callout type="info"> +Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +</Callout> + +AI-guided encryption setup (reads your codebase) + +```bash +npx stash wizard +``` + +## Examples + +```bash +npx stash wizard +``` diff --git a/package.json b/package.json index 3b4681a..210cfd6 100644 --- a/package.json +++ b/package.json @@ -13,6 +13,7 @@ "format": "biome format --write", "generate-docs": "tsx scripts/generate-docs.ts", "generate-docs:eql": "tsx scripts/generate-eql-docs.ts", + "generate-docs:cli": "tsx scripts/generate-cli-docs.ts", "validate-links": "tsx scripts/validate-links.ts", "validate-redirects": "tsx scripts/validate-v2-redirects.ts" }, diff --git a/scripts/fixtures/stash-help-0.16.0.txt b/scripts/fixtures/stash-help-0.16.0.txt new file mode 100644 index 0000000..ad4f17f --- /dev/null +++ b/scripts/fixtures/stash-help-0.16.0.txt @@ -0,0 +1,98 @@ +◇ injected env (0) from .env.local // tip: ⌘ multiple files { path: ['.env.local', '.env'] } +◇ injected env (0) from .env.development.local // tip: ⌘ override existing { override: true } +◇ injected env (0) from .env.development // tip: ⌘ enable debugging { debug: true } +◇ injected env (0) from .env // tip: ⌘ enable debugging { debug: true } +CipherStash CLI v0.16.0 + +Usage: bunx stash <command> [options] + +Commands: + init Initialize CipherStash for your project + plan Draft a reviewable encryption plan at .cipherstash/plan.md + impl Execute the plan with a local agent + status Displays implementation status + auth <subcommand> Authenticate with CipherStash + wizard AI-guided encryption setup (reads your codebase) + + db install Scaffold stash.config.ts (if missing) and install EQL extensions + db upgrade Upgrade EQL extensions to the latest version + db push Push encryption schema (writes pending if active config already exists) + db activate Promote pending → active without renames (use after additive db push) + db validate Validate encryption schema + db migrate Run pending encrypt config migrations + db status Show EQL installation status + db test-connection Test database connectivity + + schema build Build an encryption schema from your database + + encrypt status Show per-column migration status (phase, progress, drift) + encrypt plan Diff intent (.cipherstash/migrations.json) vs observed state + encrypt backfill Resumably encrypt plaintext into the encrypted column + encrypt cutover Rename swap encrypted → primary column + encrypt drop Generate a migration to drop the plaintext column + + env (experimental) Print production env vars for deployment + +Options: + --help, -h Show help + --version, -v Show version + +Init Flags: + --supabase Use Supabase-specific setup flow + --drizzle Use Drizzle-specific setup flow + --prisma-next Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migration apply) + --proxy Query encrypted data via CipherStash Proxy + --no-proxy Query encrypted data directly via the SDK (default) + +Plan Flags: + --complete-rollout Plan the entire encryption lifecycle (schema-add through drop) + in one document. Skips the production-deploy gate that + normally separates rollout from cutover. Only safe when this + database is not backing a deployed application (local dev, + sandbox, freshly seeded test environment). + --target <name> Skip the agent-target picker and hand off directly to one of + claude-code | codex | agents-md | wizard. Safe to call from + non-TTY contexts (CI, pipes). Without --target in non-TTY, + the command prints a hint and exits cleanly instead of hanging. + +Status Flags: + --quest Force the quest-log output (emoji + progress bars) + even in non-TTY contexts. Default is auto: fancy + in a terminal, plain in CI / pipes / agents. + --plain Force the plain-text output even in TTY contexts. + --json Emit a structured JSON document instead. + +Impl Flags: + --continue-without-plan Skip planning and go straight to implementation + (interactively confirms before proceeding) + --target <name> Skip the agent-target picker and hand off directly to one of + claude-code | codex | agents-md | wizard. Safe to call from + non-TTY contexts (CI, pipes). Without --target in non-TTY, + the command prints a hint and exits cleanly instead of hanging. + +DB Flags: + --force (install) Reinstall / overwrite even if already installed + --dry-run (install, push, upgrade) Show what would happen without making changes + --supabase (install, upgrade, validate) Use Supabase-compatible mode (auto-detected from DATABASE_URL) + --drizzle (install) Generate a Drizzle migration instead of direct install (auto-detected from project) + --migration (install, requires --supabase) Write a Supabase migration file instead of running SQL directly + --direct (install, requires --supabase) Run the SQL directly against the database (mutually exclusive with --migration) + --migrations-dir <path> (install, requires --supabase) Override the Supabase migrations directory (default: supabase/migrations) + --exclude-operator-family (install, upgrade, validate) Skip operator family creation + --latest (install, upgrade) Fetch the latest EQL from GitHub + --database-url <url> (all db / schema commands) Override DATABASE_URL for this run only — never written to disk + +Examples: + bunx stash init + bunx stash init --supabase + bunx stash init --prisma-next + bunx stash plan + bunx stash impl + bunx stash impl --continue-without-plan + bunx stash impl --target claude-code + bunx stash status + bunx stash auth login + bunx stash wizard + bunx stash db install + bunx stash db push + bunx stash schema build diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts new file mode 100644 index 0000000..73e21bd --- /dev/null +++ b/scripts/generate-cli-docs.ts @@ -0,0 +1,410 @@ +#!/usr/bin/env tsx +/** + * CLI reference generator — PROTOTYPE (CIP-33xx). + * + * Generates the `/reference/cli` pages from the `stash` CLI itself, so the + * reference can never drift from the shipped command surface. Every page is + * stamped with the CLI version it was generated from. + * + * ── Data source ─────────────────────────────────────────────────────────── + * TODAY (bootstrap): we parse `stash --help`, captured to a fixture. `stash` + * is a hand-rolled TS CLI with no machine-readable output yet, and no + * per-command `--help` (every command prints the top-level help), so the + * single top-level help is the whole surface. It is thin — no args, no + * per-command examples, `auth`/`encrypt` subcommands undetailed. + * + * TARGET: add `stash manifest --json` to the CLI (it already has the command + * registry it prints `--help` from). Then replace `loadManifest()` with: + * + * JSON.parse(execSync(`npx stash@${CLI_VERSION} manifest --json`)) + * + * and delete the parser below. The renderer and page format stay identical — + * that is the point of this prototype. + * + * ── Versioning ──────────────────────────────────────────────────────────── + * CLI_VERSION is pinned. Bump it (Renovate can watch the `stash` npm dep), + * re-run `bun run generate-docs:cli`, commit the regenerated pages. Every page + * carries `verifiedAgainst.cli` and a visible banner, so readers and agents + * always know which version the docs describe. + */ +import { execSync } from "node:child_process"; +import fs from "node:fs"; +import path from "node:path"; + +const CLI_NAME = "stash"; +const CLI_VERSION = "0.16.0"; // pinned; bump + regenerate on each release +const RUNNER = "npx"; // normalized invocation shown in docs +const FIXTURE = path.join( + process.cwd(), + "scripts/fixtures", + `stash-help-${CLI_VERSION}.txt`, +); +const OUT_DIR = path.join(process.cwd(), "content/docs/reference/cli"); + +// ── Types (this shape is the spec for `stash manifest --json`) ────────────── +interface Flag { + name: string; // "--supabase" + value?: string; // "<path>" + description: string; + appliesTo?: string[]; // db-flag applicability: ["install", "upgrade"] or ["all"] +} +interface Command { + path: string; // "db install" + base: string; // "db" + sub?: string; // "install" + summary: string; + flags: Flag[]; + examples: string[]; +} +interface Manifest { + name: string; + version: string; + usage: string; + globalFlags: Flag[]; + commands: Command[]; +} + +// Which nav group each top-level command belongs to, and the group order. +const GROUPS: Record<string, string> = { + init: "Setup & workflow", + plan: "Setup & workflow", + impl: "Setup & workflow", + status: "Setup & workflow", + wizard: "Setup & workflow", + auth: "Auth", + db: "Database", + schema: "Schema", + encrypt: "Encrypt", + env: "Deployment", +}; +const GROUP_ORDER = [ + "Setup & workflow", + "Auth", + "Database", + "Schema", + "Encrypt", + "Deployment", +]; +// Known db/schema subcommand names, used to resolve db-flag applicability. +const DB_SUBCOMMANDS = new Set([ + "install", + "upgrade", + "push", + "activate", + "validate", + "migrate", + "status", + "test-connection", +]); + +// EQL/Postgres commands get the `eql` component facet too (content-model rule: +// tag `eql` only for queryable-in-Postgres ciphertext). +const componentsFor = (base: string): string[] => + ["db", "schema", "encrypt"].includes(base) ? ["cli", "eql"] : ["cli"]; + +// ── Source ────────────────────────────────────────────────────────────────── +function loadHelp(): string { + if (fs.existsSync(FIXTURE)) return fs.readFileSync(FIXTURE, "utf8"); + // Bootstrap: fetch and cache. (Target: `stash manifest --json`.) + const out = execSync(`npx --yes ${CLI_NAME}@${CLI_VERSION} --help`, { + encoding: "utf8", + cwd: require("node:os").tmpdir(), + }); + fs.mkdirSync(path.dirname(FIXTURE), { recursive: true }); + fs.writeFileSync(FIXTURE, out); + return out; +} + +// Drop dotenvx's env-injection tips and blank leading noise. +const stripNoise = (text: string): string[] => + text + .split("\n") + .filter((l) => !/^\s*◇|injected env|dotenvx|www\.(dotenvx|vestauth)/.test(l)); + +// ── Parser (delete once `stash manifest --json` exists) ───────────────────── +function parseHelp(text: string): Manifest { + const lines = stripNoise(text); + const joined = lines.join("\n"); + + const version = joined.match(/CipherStash CLI v([0-9]+\.[0-9]+\.[0-9]+)/)?.[1] ?? CLI_VERSION; + + // Section boundaries: a line like "Commands:", "Options:", "DB Flags:", "Examples:". + const sections: Record<string, string[]> = {}; + let current = ""; + for (const line of lines) { + const header = line.match(/^([A-Za-z][A-Za-z ]*):\s*$/); + if (header && !line.startsWith(" ")) { + current = header[1].trim(); + sections[current] = []; + } else if (current) { + sections[current].push(line); + } + } + + // Commands: " db install Scaffold ..." (name is non-greedy up to 2+ spaces) + const commands: Command[] = []; + for (const line of sections.Commands ?? []) { + const m = line.match(/^ {2}(\S.*?) {2,}(.+)$/); + if (!m) continue; + const rawName = m[1].replace(/\s*<subcommand>\s*/, "").trim(); + const [base, ...rest] = rawName.split(/\s+/); + commands.push({ + path: rawName, + base, + sub: rest.length ? rest.join(" ") : undefined, + summary: m[2].trim(), + flags: [], + examples: [], + }); + } + + // Global options. + const globalFlags = parseFlagBlock(sections.Options ?? []); + + // Per-command flag sections: "Init Flags", "Plan Flags", "DB Flags", … + for (const [name, body] of Object.entries(sections)) { + const fm = name.match(/^(.*) Flags$/); + if (!fm) continue; + const label = fm[1].toLowerCase(); // "init", "plan", "db" + const flags = parseFlagBlock(body); + if (label === "db") { + // DB flags carry applicability annotations; resolve onto each subcommand. + for (const cmd of commands.filter((c) => c.base === "db")) { + cmd.flags = flags.filter( + (f) => + !f.appliesTo || + f.appliesTo.includes("all") || + (cmd.sub ? f.appliesTo.includes(cmd.sub) : false), + ); + } + } else { + const cmd = commands.find((c) => c.path === label); + if (cmd) cmd.flags = flags; + } + } + + // Examples: " npx stash db install" → attach to the longest matching command. + const byLength = [...commands].sort((a, b) => b.path.length - a.path.length); + for (const line of sections.Examples ?? []) { + const inv = line.trim(); + const m = inv.match(/^(?:npx|bunx|pnpm dlx|stash)\s+(?:stash\s+)?(.+)$/); + const argPart = m ? m[1] : inv; + const cmd = byLength.find( + (c) => argPart === c.path || argPart.startsWith(`${c.path} `), + ); + if (cmd) cmd.examples.push(`${RUNNER} ${CLI_NAME} ${argPart}`); + } + + return { + name: CLI_NAME, + version, + usage: `${RUNNER} ${CLI_NAME} <command> [options]`, + globalFlags, + commands, + }; +} + +// Parse an indented flag block, folding continuation lines into descriptions. +function parseFlagBlock(body: string[]): Flag[] { + const flags: Flag[] = []; + for (const line of body) { + if (!line.trim()) continue; + const m = line.match(/^ {2}(--[\w-]+)(?:,\s*-\w)?(?: +(<[^>]+>))? {2,}(.+)$/); + if (m) { + let description = m[3].trim(); + let appliesTo: string[] | undefined; + // Leading "(install, push, …)" on DB flags = applicability (+ conditions). + const paren = description.match(/^\(([^)]+)\)\s*(.*)$/); + if (paren) { + const inner = paren[1].trim(); + if (/^all\b/.test(inner)) { + // "(all db / schema commands)" — applies everywhere; drop the note. + appliesTo = ["all"]; + description = paren[2]; + } else { + const tokens = inner.split(/[,/]/).map((t) => t.trim()).filter(Boolean); + const applic = tokens.filter((t) => DB_SUBCOMMANDS.has(t)); + const conditions = tokens.filter((t) => !DB_SUBCOMMANDS.has(t)); + if (applic.length) appliesTo = applic; + description = + (conditions.length ? `(${conditions.join(", ")}) ` : "") + paren[2]; + } + } + flags.push({ name: m[1], value: m[2], description: description.trim(), appliesTo }); + } else { + const cont = line.trim(); + if (flags.length && cont) flags[flags.length - 1].description += ` ${cont}`; + } + } + return flags; +} + +// ── Render ─────────────────────────────────────────────────────────────────── +const GENERATED = `{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from \`${CLI_NAME} --help\` (v${CLI_VERSION}). Bump CLI_VERSION and re-run \`bun run generate-docs:cli\`. */}`; + +function banner(): string { + return `<Callout type="info"> +Generated from **\`${CLI_NAME}\` v${CLI_VERSION}**. Run \`${RUNNER} ${CLI_NAME}@${CLI_VERSION} --help\` to see the live command surface. +</Callout>`; +} + +function flagsTable(flags: Flag[]): string { + if (!flags.length) return ""; + const rows = flags + .map((f) => { + const opt = `\`${f.name}${f.value ? ` ${f.value}` : ""}\``; + return `| ${opt} | ${f.description.replace(/\|/g, "\\|")} |`; + }) + .join("\n"); + return `\n### Flags\n\n| Flag | Description |\n| --- | --- |\n${rows}\n`; +} + +function commandSection(cmd: Command, level: "##" | "###"): string { + const synopsis = `${RUNNER} ${CLI_NAME} ${cmd.path}${cmd.flags.length ? " [flags]" : ""}`; + const parts = [ + `${level} \`${cmd.path}\``, + "", + cmd.summary, + "", + "```bash", + synopsis, + "```", + ]; + if (cmd.flags.length) + parts.push(flagsTable(cmd.flags).replace("### Flags", `${level}# Flags`)); + if (cmd.examples.length) { + parts.push(`\n${level}# Examples\n`, "```bash", cmd.examples.join("\n"), "```"); + } + return parts.join("\n"); +} + +function renderPage(base: string, cmds: Command[]): { slug: string; body: string } { + const isGroup = cmds.some((c) => c.sub) || cmds.length > 1; + const title = base; + const components = componentsFor(base); + const description = isGroup + ? `Reference for the \`${CLI_NAME} ${base}\` commands.` + : cmds[0].summary; + + const frontmatter = [ + "---", + `title: ${CLI_NAME} ${title}`, + `description: ${JSON.stringify(description)}`, + "type: reference", + `components: [${components.join(", ")}]`, + "verifiedAgainst:", + ` cli: "${CLI_VERSION}"`, + "---", + ].join("\n"); + + const parts = [frontmatter, "", GENERATED, "", banner(), ""]; + + if (isGroup) { + parts.push( + `The \`${CLI_NAME} ${base}\` command group.`, + "", + cmds.map((c) => commandSection(c, "###")).join("\n\n"), + ); + } else { + const c = cmds[0]; + parts.push(c.summary, "", "```bash", `${RUNNER} ${CLI_NAME} ${c.path}${c.flags.length ? " [flags]" : ""}`, "```"); + if (c.flags.length) parts.push(flagsTable(c.flags)); + if (c.examples.length) parts.push("\n## Examples\n", "```bash", c.examples.join("\n"), "```"); + } + + return { slug: base, body: `${parts.join("\n").trimEnd()}\n` }; +} + +function renderIndex(manifest: Manifest, groups: Map<string, string[]>): string { + const frontmatter = [ + "---", + "title: CLI", + `description: "Command reference for the ${CLI_NAME} CLI, generated from v${CLI_VERSION}."`, + "type: reference", + "components: [cli]", + "verifiedAgainst:", + ` cli: "${CLI_VERSION}"`, + "---", + ].join("\n"); + + const sections = GROUP_ORDER.filter((g) => groups.has(g)) + .map((g) => { + const rows = groups + .get(g)! + .flatMap((base) => + manifest.commands + .filter((c) => c.base === base) + .map((c) => { + const anchor = c.sub ? `#${c.path.replace(/\s+/g, "-")}` : ""; + return `| [\`${c.path}\`](/reference/cli/${base}${anchor}) | ${c.summary} |`; + }), + ) + .join("\n"); + return `### ${g}\n\n| Command | Description |\n| --- | --- |\n${rows}`; + }) + .join("\n\n"); + + return `${frontmatter} + +${GENERATED} + +${banner()} + +The \`${CLI_NAME}\` CLI. Install with \`${RUNNER} ${CLI_NAME}@${CLI_VERSION}\`. Every command accepts \`--help\` and \`--version\`. + +${sections} +`; +} + +function renderMeta(groups: Map<string, string[]>): string { + const pages: string[] = []; + for (const g of GROUP_ORDER) { + if (!groups.has(g)) continue; + pages.push(`---${g}---`); + pages.push(...groups.get(g)!); + } + return `${JSON.stringify({ title: "CLI", pages }, null, 2)}\n`; +} + +// ── Main ───────────────────────────────────────────────────────────────────── +function loadManifest(): Manifest { + // Swap point: return JSON.parse(execSync(`npx ${CLI_NAME}@${CLI_VERSION} manifest --json`)). + return parseHelp(loadHelp()); +} + +function main() { + const manifest = loadManifest(); + + // Group top-level commands by base, preserving discovery order. + const bases: string[] = []; + for (const c of manifest.commands) if (!bases.includes(c.base)) bases.push(c.base); + + const groups = new Map<string, string[]>(); + for (const base of bases) { + const g = GROUPS[base] ?? "Other"; + if (!groups.has(g)) groups.set(g, []); + groups.get(g)!.push(base); + } + + // Clean previously generated pages, then write fresh. + fs.mkdirSync(OUT_DIR, { recursive: true }); + for (const f of fs.readdirSync(OUT_DIR)) { + if (f.endsWith(".mdx") || f === "meta.json") fs.rmSync(path.join(OUT_DIR, f)); + } + + let count = 0; + for (const base of bases) { + const cmds = manifest.commands.filter((c) => c.base === base); + const { slug, body } = renderPage(base, cmds); + fs.writeFileSync(path.join(OUT_DIR, `${slug}.mdx`), body); + count++; + } + fs.writeFileSync(path.join(OUT_DIR, "index.mdx"), renderIndex(manifest, groups)); + fs.writeFileSync(path.join(OUT_DIR, "meta.json"), renderMeta(groups)); + + console.log( + `✓ Generated ${count} CLI reference page(s) for ${CLI_NAME} v${manifest.version} → ${path.relative(process.cwd(), OUT_DIR)}`, + ); +} + +main(); From 73712570c838ec306b527434b0a1ad673cb4c1ae Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Sun, 5 Jul 2026 23:23:02 +1000 Subject: [PATCH 021/151] docs(v2): CLI generator tracks latest published stash + wire into prebuild - Resolve the latest published version via `npm view stash version` and run that exact version live, so a new `stash` release refreshes the docs the next time the script runs (offline: falls back to the cached fixture). Removes the pinned CLI_VERSION constant. - Wire `generate-docs:cli` into `prebuild`, next to the EQL/TypeDoc generators, so every production build regenerates the CLI reference from the latest CLI. - Rename the fixture to a version-agnostic cache (scripts/fixtures/stash-help.txt). Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/cli/auth.mdx | 2 +- content/docs/reference/cli/db.mdx | 2 +- content/docs/reference/cli/encrypt.mdx | 2 +- content/docs/reference/cli/env.mdx | 2 +- content/docs/reference/cli/impl.mdx | 2 +- content/docs/reference/cli/index.mdx | 2 +- content/docs/reference/cli/init.mdx | 2 +- content/docs/reference/cli/plan.mdx | 2 +- content/docs/reference/cli/schema.mdx | 2 +- content/docs/reference/cli/status.mdx | 2 +- content/docs/reference/cli/wizard.mdx | 2 +- package.json | 2 +- .../{stash-help-0.16.0.txt => stash-help.txt} | 8 +- scripts/generate-cli-docs.ts | 73 +++++++++++++------ 14 files changed, 65 insertions(+), 40 deletions(-) rename scripts/fixtures/{stash-help-0.16.0.txt => stash-help.txt} (93%) diff --git a/content/docs/reference/cli/auth.mdx b/content/docs/reference/cli/auth.mdx index 338e854..5e1ec0a 100644 --- a/content/docs/reference/cli/auth.mdx +++ b/content/docs/reference/cli/auth.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/db.mdx b/content/docs/reference/cli/db.mdx index 82ffcd7..d5924d0 100644 --- a/content/docs/reference/cli/db.mdx +++ b/content/docs/reference/cli/db.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/encrypt.mdx b/content/docs/reference/cli/encrypt.mdx index 887983e..421feb5 100644 --- a/content/docs/reference/cli/encrypt.mdx +++ b/content/docs/reference/cli/encrypt.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/env.mdx b/content/docs/reference/cli/env.mdx index f30dc09..bcf8961 100644 --- a/content/docs/reference/cli/env.mdx +++ b/content/docs/reference/cli/env.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/impl.mdx b/content/docs/reference/cli/impl.mdx index 5604c50..9190888 100644 --- a/content/docs/reference/cli/impl.mdx +++ b/content/docs/reference/cli/impl.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/index.mdx b/content/docs/reference/cli/index.mdx index 8b4ab15..8ee4efa 100644 --- a/content/docs/reference/cli/index.mdx +++ b/content/docs/reference/cli/index.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/init.mdx b/content/docs/reference/cli/init.mdx index 0e843c3..57f4171 100644 --- a/content/docs/reference/cli/init.mdx +++ b/content/docs/reference/cli/init.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/plan.mdx b/content/docs/reference/cli/plan.mdx index 0c536df..70cbc0a 100644 --- a/content/docs/reference/cli/plan.mdx +++ b/content/docs/reference/cli/plan.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/schema.mdx b/content/docs/reference/cli/schema.mdx index bd8400c..11ae03c 100644 --- a/content/docs/reference/cli/schema.mdx +++ b/content/docs/reference/cli/schema.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/status.mdx b/content/docs/reference/cli/status.mdx index 8fc84b6..74e2834 100644 --- a/content/docs/reference/cli/status.mdx +++ b/content/docs/reference/cli/status.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/content/docs/reference/cli/wizard.mdx b/content/docs/reference/cli/wizard.mdx index e79f82d..081dc9e 100644 --- a/content/docs/reference/cli/wizard.mdx +++ b/content/docs/reference/cli/wizard.mdx @@ -7,7 +7,7 @@ verifiedAgainst: cli: "0.16.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Bump CLI_VERSION and re-run `bun run generate-docs:cli`. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. diff --git a/package.json b/package.json index 210cfd6..d3d8965 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run validate-links && bun run validate-redirects", + "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run generate-docs:cli && bun run validate-links && bun run validate-redirects", "build": "next build", "dev": "next dev -p 3001", "start": "next start", diff --git a/scripts/fixtures/stash-help-0.16.0.txt b/scripts/fixtures/stash-help.txt similarity index 93% rename from scripts/fixtures/stash-help-0.16.0.txt rename to scripts/fixtures/stash-help.txt index ad4f17f..fa27406 100644 --- a/scripts/fixtures/stash-help-0.16.0.txt +++ b/scripts/fixtures/stash-help.txt @@ -1,7 +1,7 @@ -◇ injected env (0) from .env.local // tip: ⌘ multiple files { path: ['.env.local', '.env'] } -◇ injected env (0) from .env.development.local // tip: ⌘ override existing { override: true } -◇ injected env (0) from .env.development // tip: ⌘ enable debugging { debug: true } -◇ injected env (0) from .env // tip: ⌘ enable debugging { debug: true } +◇ injected env (0) from .env.local // tip: ⌁ auth for agents [www.vestauth.com] +◇ injected env (0) from .env.development.local // tip: ◈ secrets for agents [www.dotenvx.com] +◇ injected env (0) from .env.development // tip: ◈ encrypted .env [www.dotenvx.com] +◇ injected env (0) from .env // tip: ◈ encrypted .env [www.dotenvx.com] CipherStash CLI v0.16.0 Usage: bunx stash <command> [options] diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index 73e21bd..215cb45 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -22,23 +22,22 @@ * that is the point of this prototype. * * ── Versioning ──────────────────────────────────────────────────────────── - * CLI_VERSION is pinned. Bump it (Renovate can watch the `stash` npm dep), - * re-run `bun run generate-docs:cli`, commit the regenerated pages. Every page - * carries `verifiedAgainst.cli` and a visible banner, so readers and agents - * always know which version the docs describe. + * Always generated from the LATEST published `stash` on npm (resolved via + * `npm view stash version`), so a new release plus a run of this script — it + * runs in `prebuild` — refreshes the docs automatically. Every page carries + * `verifiedAgainst.cli` and a visible banner, so readers and agents always + * know which version the docs describe. Offline, it falls back to the cached + * `scripts/fixtures/stash-help.txt`. */ import { execSync } from "node:child_process"; import fs from "node:fs"; +import os from "node:os"; import path from "node:path"; const CLI_NAME = "stash"; -const CLI_VERSION = "0.16.0"; // pinned; bump + regenerate on each release +let CLI_VERSION = ""; // resolved to the latest published npm version at run time const RUNNER = "npx"; // normalized invocation shown in docs -const FIXTURE = path.join( - process.cwd(), - "scripts/fixtures", - `stash-help-${CLI_VERSION}.txt`, -); +const FIXTURE = path.join(process.cwd(), "scripts/fixtures", "stash-help.txt"); const OUT_DIR = path.join(process.cwd(), "content/docs/reference/cli"); // ── Types (this shape is the spec for `stash manifest --json`) ────────────── @@ -103,16 +102,40 @@ const componentsFor = (base: string): string[] => ["db", "schema", "encrypt"].includes(base) ? ["cli", "eql"] : ["cli"]; // ── Source ────────────────────────────────────────────────────────────────── -function loadHelp(): string { - if (fs.existsSync(FIXTURE)) return fs.readFileSync(FIXTURE, "utf8"); - // Bootstrap: fetch and cache. (Target: `stash manifest --json`.) - const out = execSync(`npx --yes ${CLI_NAME}@${CLI_VERSION} --help`, { - encoding: "utf8", - cwd: require("node:os").tmpdir(), - }); - fs.mkdirSync(path.dirname(FIXTURE), { recursive: true }); - fs.writeFileSync(FIXTURE, out); - return out; +// Resolve the latest published version so the docs track releases automatically. +function latestVersion(): string { + try { + return execSync(`npm view ${CLI_NAME} version`, { encoding: "utf8" }).trim(); + } catch { + const cached = fs.existsSync(FIXTURE) + ? fs.readFileSync(FIXTURE, "utf8").match(/CipherStash CLI v([0-9.]+)/)?.[1] + : undefined; + if (cached) { + console.warn(`⚠ npm unreachable; using cached stash v${cached}.`); + return cached; + } + throw new Error("Cannot resolve latest stash version (offline, no fixture)."); + } +} + +// Run the resolved CLI version and cache its help. (Target: `stash manifest --json`.) +function loadHelp(version: string): string { + try { + const out = execSync(`npx --yes ${CLI_NAME}@${version} --help`, { + encoding: "utf8", + cwd: os.tmpdir(), + stdio: ["ignore", "pipe", "ignore"], + }); + fs.mkdirSync(path.dirname(FIXTURE), { recursive: true }); + fs.writeFileSync(FIXTURE, out); + return out; + } catch { + if (fs.existsSync(FIXTURE)) { + console.warn(`⚠ Could not run stash@${version}; using cached fixture.`); + return fs.readFileSync(FIXTURE, "utf8"); + } + throw new Error(`Could not run stash@${version} and no cached fixture exists.`); + } } // Drop dotenvx's env-injection tips and blank leading noise. @@ -240,7 +263,8 @@ function parseFlagBlock(body: string[]): Flag[] { } // ── Render ─────────────────────────────────────────────────────────────────── -const GENERATED = `{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from \`${CLI_NAME} --help\` (v${CLI_VERSION}). Bump CLI_VERSION and re-run \`bun run generate-docs:cli\`. */}`; +const generatedMarker = (): string => + `{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from \`${CLI_NAME} --help\` (v${CLI_VERSION}). Re-run \`bun run generate-docs:cli\` to refresh from the latest published CLI. */}`; function banner(): string { return `<Callout type="info"> @@ -297,7 +321,7 @@ function renderPage(base: string, cmds: Command[]): { slug: string; body: string "---", ].join("\n"); - const parts = [frontmatter, "", GENERATED, "", banner(), ""]; + const parts = [frontmatter, "", generatedMarker(), "", banner(), ""]; if (isGroup) { parts.push( @@ -346,7 +370,7 @@ function renderIndex(manifest: Manifest, groups: Map<string, string[]>): string return `${frontmatter} -${GENERATED} +${generatedMarker()} ${banner()} @@ -369,10 +393,11 @@ function renderMeta(groups: Map<string, string[]>): string { // ── Main ───────────────────────────────────────────────────────────────────── function loadManifest(): Manifest { // Swap point: return JSON.parse(execSync(`npx ${CLI_NAME}@${CLI_VERSION} manifest --json`)). - return parseHelp(loadHelp()); + return parseHelp(loadHelp(CLI_VERSION)); } function main() { + CLI_VERSION = latestVersion(); const manifest = loadManifest(); // Group top-level commands by base, preserving discovery order. From 22dd036f218aff65d1157f40502d69dd13f7ae37 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Sun, 5 Jul 2026 23:30:08 +1000 Subject: [PATCH 022/151] =?UTF-8?q?docs(v2):=20hybrid=20CLI=20reference=20?= =?UTF-8?q?=E2=80=94=20merge=20hand-authored=20supplements=20+=20examples?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a supplement hook to the CLI generator: an optional scripts/cli-supplements/<command>.md is merged after the generated reference (synopsis + flags), so the rich per-command narrative and curated examples the thin `stash --help` can't provide can be authored now, without waiting on the CLI. Supplements live outside content/ so they're never treated as pages or wiped by the clean step. Demonstrated on `auth` (device-code flow + keyset binding, grounded in the CLI source). Content-model direction: per-command reference detail (examples, flag help) should migrate into the CLI itself (long-help + examples, GitHub-CLI/cobra style) and be generated from there; cross-command conceptual narrative (the profile / workspace model) belongs in a linked CLI concept page. The supplement hook is the interim bridge and the seam for both. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/cli/auth.mdx | 24 ++++++++++++++++++++++++ scripts/cli-supplements/auth.md | 23 +++++++++++++++++++++++ scripts/generate-cli-docs.ts | 17 ++++++++++++++++- 3 files changed, 63 insertions(+), 1 deletion(-) create mode 100644 scripts/cli-supplements/auth.md diff --git a/content/docs/reference/cli/auth.mdx b/content/docs/reference/cli/auth.mdx index 5e1ec0a..4ae27d0 100644 --- a/content/docs/reference/cli/auth.mdx +++ b/content/docs/reference/cli/auth.mdx @@ -24,3 +24,27 @@ npx stash auth ```bash npx stash auth login ``` + +## How authentication works + +`stash auth login` runs the OAuth 2.0 **device authorization flow**: + +1. You pick a **region** for your CipherStash workspace. +2. The CLI opens your browser to a verification URL — and prints it, so it also + works over SSH or in a headless/agent environment — where you approve the + request. +3. Meanwhile the CLI polls CipherStash until you approve, then receives a + short-lived access token (it reports the token's expiry). +4. Your device is **bound to the workspace's default keyset**, so later commands + (`stash eql install`, `stash db push`, …) authenticate without a fresh login. + +The `--supabase` / `--drizzle` flags only tag the referrer for onboarding +analytics; they don't change the flow. + +> **Good to know**: login is device- and workspace-scoped. Authenticating from a +> new machine — or for a different workspace — re-runs the device flow. + +{/* TODO(verify with product): profiles, multiple workspaces, and switching +between them — where they're stored and how they're selected — belong here (or +in a linked CLI concept page). The CLI currently exposes only `auth login`; +confirm the profile / workspace-switching surface before documenting it. */} diff --git a/scripts/cli-supplements/auth.md b/scripts/cli-supplements/auth.md new file mode 100644 index 0000000..4d13348 --- /dev/null +++ b/scripts/cli-supplements/auth.md @@ -0,0 +1,23 @@ +## How authentication works + +`stash auth login` runs the OAuth 2.0 **device authorization flow**: + +1. You pick a **region** for your CipherStash workspace. +2. The CLI opens your browser to a verification URL — and prints it, so it also + works over SSH or in a headless/agent environment — where you approve the + request. +3. Meanwhile the CLI polls CipherStash until you approve, then receives a + short-lived access token (it reports the token's expiry). +4. Your device is **bound to the workspace's default keyset**, so later commands + (`stash eql install`, `stash db push`, …) authenticate without a fresh login. + +The `--supabase` / `--drizzle` flags only tag the referrer for onboarding +analytics; they don't change the flow. + +> **Good to know**: login is device- and workspace-scoped. Authenticating from a +> new machine — or for a different workspace — re-runs the device flow. + +{/* TODO(verify with product): profiles, multiple workspaces, and switching +between them — where they're stored and how they're selected — belong here (or +in a linked CLI concept page). The CLI currently exposes only `auth login`; +confirm the profile / workspace-switching surface before documenting it. */} diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index 215cb45..30a0427 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -39,6 +39,12 @@ let CLI_VERSION = ""; // resolved to the latest published npm version at run tim const RUNNER = "npx"; // normalized invocation shown in docs const FIXTURE = path.join(process.cwd(), "scripts/fixtures", "stash-help.txt"); const OUT_DIR = path.join(process.cwd(), "content/docs/reference/cli"); +// Hand-authored per-command prose merged into the generated page (hybrid model): +// the generated skeleton (synopsis + flags) stays drift-free; a supplement adds +// rich narrative + curated examples the thin `--help` can't provide. Lives +// outside content/ so it's never treated as a page or wiped by the clean step. +// Long-term, migrate these into the CLI's own long-help/examples (see the PR). +const SUPPLEMENTS_DIR = path.join(process.cwd(), "scripts/cli-supplements"); // ── Types (this shape is the spec for `stash manifest --json`) ────────────── interface Flag { @@ -336,7 +342,16 @@ function renderPage(base: string, cmds: Command[]): { slug: string; body: string if (c.examples.length) parts.push("\n## Examples\n", "```bash", c.examples.join("\n"), "```"); } - return { slug: base, body: `${parts.join("\n").trimEnd()}\n` }; + const supplement = readSupplement(base); + const body = `${parts.join("\n").trimEnd()}${supplement ? `\n\n${supplement}` : ""}\n`; + return { slug: base, body }; +} + +// Optional hand-authored prose for a command, merged after its generated +// reference. Returns "" when no supplement exists. +function readSupplement(slug: string): string { + const file = path.join(SUPPLEMENTS_DIR, `${slug}.md`); + return fs.existsSync(file) ? fs.readFileSync(file, "utf8").trim() : ""; } function renderIndex(manifest: Manifest, groups: Map<string, string[]>): string { From 6a7ac7b817fc561a3ed3753d25028de1ca718da8 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 16:33:39 +1000 Subject: [PATCH 023/151] docs(cli): generate the CLI reference from `stash manifest --json` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit stash CLI 0.17 ships the `manifest` command (structured, versioned command surface), so swap the generator off `--help` scraping onto `stash manifest --json` and delete the text parser — the realization of this PR's stated target. - loadManifest() now runs `npx stash@<version> manifest --json` and projects it onto the renderer's model; nav groups + order come straight from the CLI. - Per-command flags carry their `default` and `env` (folded into the flag description); examples come from the manifest. Pipes in flag values (`--eql-version <2|3>`) are escaped so the GFM table renders. - Fixture swapped from stash-help.txt to stash-manifest.json. - Regenerated against 0.17.0: new `eql` group (eql install/upgrade/status), new `doctor` + `manifest` pages, `db` no longer lists install/upgrade. types:check passes; generator lints clean (bar pre-existing noNonNullAssertion style warnings shared with the original). --- content/docs/reference/cli/auth.mdx | 52 ++- content/docs/reference/cli/db.mdx | 101 +---- content/docs/reference/cli/doctor.mdx | 20 + content/docs/reference/cli/encrypt.mdx | 44 +- content/docs/reference/cli/env.mdx | 14 +- content/docs/reference/cli/eql.mdx | 77 ++++ content/docs/reference/cli/impl.mdx | 10 +- content/docs/reference/cli/index.mdx | 30 +- content/docs/reference/cli/init.mdx | 18 +- content/docs/reference/cli/manifest.mdx | 34 ++ content/docs/reference/cli/meta.json | 6 +- content/docs/reference/cli/plan.mdx | 11 +- content/docs/reference/cli/schema.mdx | 17 +- content/docs/reference/cli/status.mdx | 15 +- content/docs/reference/cli/wizard.mdx | 12 +- scripts/fixtures/stash-help.txt | 98 ----- scripts/fixtures/stash-manifest.json | 511 ++++++++++++++++++++++++ scripts/generate-cli-docs.ts | 370 ++++++++--------- 18 files changed, 967 insertions(+), 473 deletions(-) create mode 100644 content/docs/reference/cli/doctor.mdx create mode 100644 content/docs/reference/cli/eql.mdx create mode 100644 content/docs/reference/cli/manifest.mdx delete mode 100644 scripts/fixtures/stash-help.txt create mode 100644 scripts/fixtures/stash-manifest.json diff --git a/content/docs/reference/cli/auth.mdx b/content/docs/reference/cli/auth.mdx index 4ae27d0..09f0a18 100644 --- a/content/docs/reference/cli/auth.mdx +++ b/content/docs/reference/cli/auth.mdx @@ -1,28 +1,68 @@ --- title: stash auth -description: "Authenticate with CipherStash" +description: "Reference for the `stash auth` commands." type: reference components: [cli] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> +The `stash auth` command group. + +### `auth login` + Authenticate with CipherStash ```bash -npx stash auth +npx stash auth login [flags] ``` -## Examples +#### Flags + +| Flag | Description | +| --- | --- | +| `--region <slug>` | Region to authenticate against (e.g. us-east-1). Skips the interactive region picker. (env: `STASH_REGION`) | +| `--json` | Emit newline-delimited JSON events instead of prose. The first event (authorization_required) carries the device verification URL for a human to open. Implies no prompt and no browser auto-open. | +| `--no-open` | Don't auto-open the verification URL in a browser (already implied by --json). | +| `--supabase` | Track Supabase as the referrer. | +| `--drizzle` | Track Drizzle as the referrer. | + + +#### Examples ```bash npx stash auth login +npx stash auth login --region us-east-1 +npx stash auth login --supabase +npx stash auth login --region us-east-1 --json +``` + +### `auth regions` + +List the regions you can authenticate against + +```bash +npx stash auth regions [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--json` | Emit machine-readable [{ slug, label }] instead of a text list. | + + +#### Examples + +```bash +npx stash auth regions +npx stash auth regions --json ``` ## How authentication works diff --git a/content/docs/reference/cli/db.mdx b/content/docs/reference/cli/db.mdx index d5924d0..e0c26b2 100644 --- a/content/docs/reference/cli/db.mdx +++ b/content/docs/reference/cli/db.mdx @@ -4,66 +4,17 @@ description: "Reference for the `stash db` commands." type: reference components: [cli, eql] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> The `stash db` command group. -### `db install` - -Scaffold stash.config.ts (if missing) and install EQL extensions - -```bash -npx stash db install [flags] -``` - -#### Flags - -| Flag | Description | -| --- | --- | -| `--force` | Reinstall / overwrite even if already installed | -| `--dry-run` | Show what would happen without making changes | -| `--supabase` | Use Supabase-compatible mode (auto-detected from DATABASE_URL) | -| `--drizzle` | Generate a Drizzle migration instead of direct install (auto-detected from project) | -| `--migration` | (requires --supabase) Write a Supabase migration file instead of running SQL directly | -| `--direct` | (requires --supabase) Run the SQL directly against the database (mutually exclusive with --migration) | -| `--migrations-dir <path>` | (requires --supabase) Override the Supabase migrations directory (default: supabase/migrations) | -| `--exclude-operator-family` | Skip operator family creation | -| `--latest` | Fetch the latest EQL from GitHub | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | - - -#### Examples - -```bash -npx stash db install -``` - -### `db upgrade` - -Upgrade EQL extensions to the latest version - -```bash -npx stash db upgrade [flags] -``` - -#### Flags - -| Flag | Description | -| --- | --- | -| `--dry-run` | Show what would happen without making changes | -| `--supabase` | Use Supabase-compatible mode (auto-detected from DATABASE_URL) | -| `--exclude-operator-family` | Skip operator family creation | -| `--latest` | Fetch the latest EQL from GitHub | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | - - ### `db push` Push encryption schema (writes pending if active config already exists) @@ -76,15 +27,9 @@ npx stash db push [flags] | Flag | Description | | --- | --- | -| `--dry-run` | Show what would happen without making changes | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | - +| `--dry-run` | Show what would happen without making changes. | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | -#### Examples - -```bash -npx stash db push -``` ### `db activate` @@ -98,7 +43,7 @@ npx stash db activate [flags] | Flag | Description | | --- | --- | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | ### `db validate` @@ -113,41 +58,19 @@ npx stash db validate [flags] | Flag | Description | | --- | --- | -| `--supabase` | Use Supabase-compatible mode (auto-detected from DATABASE_URL) | -| `--exclude-operator-family` | Skip operator family creation | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | +| `--supabase` | Use Supabase-compatible mode. | +| `--exclude-operator-family` | Skip operator family creation. | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | ### `db migrate` -Run pending encrypt config migrations +Run pending encrypt config migrations (not yet implemented) ```bash -npx stash db migrate [flags] +npx stash db migrate ``` -#### Flags - -| Flag | Description | -| --- | --- | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | - - -### `db status` - -Show EQL installation status - -```bash -npx stash db status [flags] -``` - -#### Flags - -| Flag | Description | -| --- | --- | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | - - ### `db test-connection` Test database connectivity @@ -160,4 +83,4 @@ npx stash db test-connection [flags] | Flag | Description | | --- | --- | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | diff --git a/content/docs/reference/cli/doctor.mdx b/content/docs/reference/cli/doctor.mdx new file mode 100644 index 0000000..1c6efb8 --- /dev/null +++ b/content/docs/reference/cli/doctor.mdx @@ -0,0 +1,20 @@ +--- +title: stash doctor +description: "Diagnose install problems (native binaries, runtime)" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.17.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} + +<Callout type="info"> +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +</Callout> + +Diagnose install problems (native binaries, runtime) + +```bash +npx stash doctor +``` diff --git a/content/docs/reference/cli/encrypt.mdx b/content/docs/reference/cli/encrypt.mdx index 421feb5..9c03ae8 100644 --- a/content/docs/reference/cli/encrypt.mdx +++ b/content/docs/reference/cli/encrypt.mdx @@ -4,13 +4,13 @@ description: "Reference for the `stash encrypt` commands." type: reference components: [cli, eql] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> The `stash encrypt` command group. @@ -36,21 +36,53 @@ npx stash encrypt plan Resumably encrypt plaintext into the encrypted column ```bash -npx stash encrypt backfill +npx stash encrypt backfill [flags] ``` +#### Flags + +| Flag | Description | +| --- | --- | +| `--table <name>` | Target table. | +| `--column <name>` | Target column. | +| `--pk-column <name>` | Primary-key column used to page through rows. | +| `--chunk-size <n>` | Rows encrypted per batch. | +| `--encrypted-column <name>` | Destination encrypted column. | +| `--schema-column-key <key>` | Schema key identifying the column config. | +| `--confirm-dual-writes-deployed` | Assert the app is dual-writing before backfilling (safety gate). | +| `--force` | Proceed past non-fatal safety checks. | + + ### `encrypt cutover` Rename swap encrypted → primary column ```bash -npx stash encrypt cutover +npx stash encrypt cutover [flags] ``` +#### Flags + +| Flag | Description | +| --- | --- | +| `--table <name>` | Target table. | +| `--column <name>` | Target column. | +| `--proxy-url <url>` | Proxy URL to verify against. | +| `--migrations-dir <path>` | Directory to write the rename migration into. | + + ### `encrypt drop` Generate a migration to drop the plaintext column ```bash -npx stash encrypt drop +npx stash encrypt drop [flags] ``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--table <name>` | Target table. | +| `--column <name>` | Target column. | +| `--migrations-dir <path>` | Directory to write the drop migration into. | diff --git a/content/docs/reference/cli/env.mdx b/content/docs/reference/cli/env.mdx index bcf8961..fe277a9 100644 --- a/content/docs/reference/cli/env.mdx +++ b/content/docs/reference/cli/env.mdx @@ -4,17 +4,23 @@ description: "(experimental) Print production env vars for deployment" type: reference components: [cli] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> (experimental) Print production env vars for deployment ```bash -npx stash env +npx stash env [flags] ``` + +### Flags + +| Flag | Description | +| --- | --- | +| `--write` | Write the vars to a file instead of printing them. | diff --git a/content/docs/reference/cli/eql.mdx b/content/docs/reference/cli/eql.mdx new file mode 100644 index 0000000..63bf8be --- /dev/null +++ b/content/docs/reference/cli/eql.mdx @@ -0,0 +1,77 @@ +--- +title: stash eql +description: "Reference for the `stash eql` commands." +type: reference +components: [cli, eql] +verifiedAgainst: + cli: "0.17.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} + +<Callout type="info"> +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +</Callout> + +The `stash eql` command group. + +### `eql install` + +Scaffold stash.config.ts (if missing) and install EQL extensions + +```bash +npx stash eql install [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--force` | Reinstall / overwrite even if already installed. | +| `--dry-run` | Show what would happen without making changes. | +| `--supabase` | Use Supabase-compatible mode (auto-detected from DATABASE_URL). | +| `--drizzle` | Generate a Drizzle migration instead of direct install (auto-detected from project). | +| `--migration` | Write a Supabase migration file instead of running SQL directly (requires --supabase). | +| `--direct` | Run the SQL directly against the database (requires --supabase; mutually exclusive with --migration). | +| `--migrations-dir <path>` | Override the Supabase migrations directory (requires --supabase). (default: `supabase/migrations`) | +| `--exclude-operator-family` | Skip operator family creation. | +| `--eql-version <2\|3>` | EQL generation to target. v3 is the native eql_v3.* domain schema (direct install only for now). (default: `2`) | +| `--latest` | Fetch the latest EQL from GitHub (v2 only). | +| `--name <name>` | With --drizzle: name for the generated migration (defaults to a scaffold name). | +| `--out <path>` | With --drizzle: directory to write the generated migration into. | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | + + +### `eql upgrade` + +Upgrade EQL extensions to the latest version + +```bash +npx stash eql upgrade [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--dry-run` | Show what would happen without making changes. | +| `--supabase` | Use Supabase-compatible mode. | +| `--exclude-operator-family` | Skip operator family creation. | +| `--eql-version <2\|3>` | EQL generation to target. (default: `2`) | +| `--latest` | Fetch the latest EQL from GitHub (v2 only). | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | + + +### `eql status` + +Show EQL installation status + +```bash +npx stash eql status [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | diff --git a/content/docs/reference/cli/impl.mdx b/content/docs/reference/cli/impl.mdx index 9190888..b3ce114 100644 --- a/content/docs/reference/cli/impl.mdx +++ b/content/docs/reference/cli/impl.mdx @@ -4,13 +4,13 @@ description: "Execute the plan with a local agent" type: reference components: [cli] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> Execute the plan with a local agent @@ -23,8 +23,8 @@ npx stash impl [flags] | Flag | Description | | --- | --- | -| `--continue-without-plan` | Skip planning and go straight to implementation (interactively confirms before proceeding) | -| `--target <name>` | Skip the agent-target picker and hand off directly to one of claude-code \| codex \| agents-md \| wizard. Safe to call from non-TTY contexts (CI, pipes). Without --target in non-TTY, the command prints a hint and exits cleanly instead of hanging. | +| `--continue-without-plan` | Skip planning and go straight to implementation (interactively confirms before proceeding). | +| `--target <name>` | Skip the agent-target picker and hand off directly to one of claude-code \| codex \| agents-md \| wizard. Safe in non-TTY contexts. | ## Examples diff --git a/content/docs/reference/cli/index.mdx b/content/docs/reference/cli/index.mdx index 8ee4efa..88764db 100644 --- a/content/docs/reference/cli/index.mdx +++ b/content/docs/reference/cli/index.mdx @@ -1,19 +1,19 @@ --- title: CLI -description: "Command reference for the stash CLI, generated from v0.16.0." +description: "Command reference for the stash CLI, generated from v0.17.0." type: reference components: [cli] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> -The `stash` CLI. Install with `npx stash@0.16.0`. Every command accepts `--help` and `--version`. +The `stash` CLI. Install with `npx stash@0.17.0`. Every command accepts `--help` and `--version`. ### Setup & workflow @@ -24,24 +24,32 @@ The `stash` CLI. Install with `npx stash@0.16.0`. Every command accepts `--help` | [`impl`](/reference/cli/impl) | Execute the plan with a local agent | | [`status`](/reference/cli/status) | Displays implementation status | | [`wizard`](/reference/cli/wizard) | AI-guided encryption setup (reads your codebase) | +| [`doctor`](/reference/cli/doctor) | Diagnose install problems (native binaries, runtime) | +| [`manifest`](/reference/cli/manifest) | Print the structured, versioned command surface | ### Auth | Command | Description | | --- | --- | -| [`auth`](/reference/cli/auth) | Authenticate with CipherStash | +| [`auth login`](/reference/cli/auth#auth-login) | Authenticate with CipherStash | +| [`auth regions`](/reference/cli/auth#auth-regions) | List the regions you can authenticate against | + +### EQL + +| Command | Description | +| --- | --- | +| [`eql install`](/reference/cli/eql#eql-install) | Scaffold stash.config.ts (if missing) and install EQL extensions | +| [`eql upgrade`](/reference/cli/eql#eql-upgrade) | Upgrade EQL extensions to the latest version | +| [`eql status`](/reference/cli/eql#eql-status) | Show EQL installation status | ### Database | Command | Description | | --- | --- | -| [`db install`](/reference/cli/db#db-install) | Scaffold stash.config.ts (if missing) and install EQL extensions | -| [`db upgrade`](/reference/cli/db#db-upgrade) | Upgrade EQL extensions to the latest version | | [`db push`](/reference/cli/db#db-push) | Push encryption schema (writes pending if active config already exists) | | [`db activate`](/reference/cli/db#db-activate) | Promote pending → active without renames (use after additive db push) | | [`db validate`](/reference/cli/db#db-validate) | Validate encryption schema | -| [`db migrate`](/reference/cli/db#db-migrate) | Run pending encrypt config migrations | -| [`db status`](/reference/cli/db#db-status) | Show EQL installation status | +| [`db migrate`](/reference/cli/db#db-migrate) | Run pending encrypt config migrations (not yet implemented) | | [`db test-connection`](/reference/cli/db#db-test-connection) | Test database connectivity | ### Schema @@ -60,7 +68,7 @@ The `stash` CLI. Install with `npx stash@0.16.0`. Every command accepts `--help` | [`encrypt cutover`](/reference/cli/encrypt#encrypt-cutover) | Rename swap encrypted → primary column | | [`encrypt drop`](/reference/cli/encrypt#encrypt-drop) | Generate a migration to drop the plaintext column | -### Deployment +### Experimental | Command | Description | | --- | --- | diff --git a/content/docs/reference/cli/init.mdx b/content/docs/reference/cli/init.mdx index 57f4171..518544b 100644 --- a/content/docs/reference/cli/init.mdx +++ b/content/docs/reference/cli/init.mdx @@ -4,13 +4,13 @@ description: "Initialize CipherStash for your project" type: reference components: [cli] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> Initialize CipherStash for your project @@ -23,11 +23,12 @@ npx stash init [flags] | Flag | Description | | --- | --- | -| `--supabase` | Use Supabase-specific setup flow | -| `--drizzle` | Use Drizzle-specific setup flow | -| `--prisma-next` | Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migration apply) | -| `--proxy` | Query encrypted data via CipherStash Proxy | -| `--no-proxy` | Query encrypted data directly via the SDK (default) | +| `--supabase` | Use Supabase-specific setup flow. | +| `--drizzle` | Use Drizzle-specific setup flow. | +| `--prisma-next` | Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migration apply). | +| `--proxy` | Query encrypted data via CipherStash Proxy. | +| `--no-proxy` | Query encrypted data directly via the SDK. (default: `true`) | +| `--region <slug>` | Region to authenticate against (e.g. us-east-1). Skips the interactive region picker. Required for non-interactive init when not already logged in. (env: `STASH_REGION`) | ## Examples @@ -36,4 +37,5 @@ npx stash init [flags] npx stash init npx stash init --supabase npx stash init --prisma-next +npx stash init --region us-east-1 ``` diff --git a/content/docs/reference/cli/manifest.mdx b/content/docs/reference/cli/manifest.mdx new file mode 100644 index 0000000..4c7578d --- /dev/null +++ b/content/docs/reference/cli/manifest.mdx @@ -0,0 +1,34 @@ +--- +title: stash manifest +description: "Print the structured, versioned command surface" +type: reference +components: [cli] +verifiedAgainst: + cli: "0.17.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} + +<Callout type="info"> +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +</Callout> + +Print the structured, versioned command surface + +```bash +npx stash manifest [flags] +``` + +### Flags + +| Flag | Description | +| --- | --- | +| `--json` | Emit the structured JSON manifest instead of a text list. | + + +## Examples + +```bash +npx stash manifest --json +npx stash manifest +``` diff --git a/content/docs/reference/cli/meta.json b/content/docs/reference/cli/meta.json index 5e139d7..6b90890 100644 --- a/content/docs/reference/cli/meta.json +++ b/content/docs/reference/cli/meta.json @@ -7,15 +7,19 @@ "impl", "status", "wizard", + "doctor", + "manifest", "---Auth---", "auth", + "---EQL---", + "eql", "---Database---", "db", "---Schema---", "schema", "---Encrypt---", "encrypt", - "---Deployment---", + "---Experimental---", "env" ] } diff --git a/content/docs/reference/cli/plan.mdx b/content/docs/reference/cli/plan.mdx index 70cbc0a..4904f7a 100644 --- a/content/docs/reference/cli/plan.mdx +++ b/content/docs/reference/cli/plan.mdx @@ -4,13 +4,13 @@ description: "Draft a reviewable encryption plan at .cipherstash/plan.md" type: reference components: [cli] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> Draft a reviewable encryption plan at .cipherstash/plan.md @@ -23,12 +23,13 @@ npx stash plan [flags] | Flag | Description | | --- | --- | -| `--complete-rollout` | Plan the entire encryption lifecycle (schema-add through drop) in one document. Skips the production-deploy gate that normally separates rollout from cutover. Only safe when this database is not backing a deployed application (local dev, sandbox, freshly seeded test environment). | -| `--target <name>` | Skip the agent-target picker and hand off directly to one of claude-code \| codex \| agents-md \| wizard. Safe to call from non-TTY contexts (CI, pipes). Without --target in non-TTY, the command prints a hint and exits cleanly instead of hanging. | +| `--complete-rollout` | Plan the entire encryption lifecycle (schema-add through drop) in one document. Skips the production-deploy gate; only safe when this database is not backing a deployed application. | +| `--target <name>` | Skip the agent-target picker and hand off directly to one of claude-code \| codex \| agents-md \| wizard. Safe in non-TTY contexts. | ## Examples ```bash npx stash plan +npx stash plan --target claude-code ``` diff --git a/content/docs/reference/cli/schema.mdx b/content/docs/reference/cli/schema.mdx index 11ae03c..9b5e360 100644 --- a/content/docs/reference/cli/schema.mdx +++ b/content/docs/reference/cli/schema.mdx @@ -4,13 +4,13 @@ description: "Reference for the `stash schema` commands." type: reference components: [cli, eql] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> The `stash schema` command group. @@ -20,11 +20,12 @@ The `stash schema` command group. Build an encryption schema from your database ```bash -npx stash schema build +npx stash schema build [flags] ``` -#### Examples +#### Flags -```bash -npx stash schema build -``` +| Flag | Description | +| --- | --- | +| `--supabase` | Use Supabase-compatible mode. | +| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | diff --git a/content/docs/reference/cli/status.mdx b/content/docs/reference/cli/status.mdx index 74e2834..ba033d7 100644 --- a/content/docs/reference/cli/status.mdx +++ b/content/docs/reference/cli/status.mdx @@ -4,13 +4,13 @@ description: "Displays implementation status" type: reference components: [cli] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> Displays implementation status @@ -23,13 +23,6 @@ npx stash status [flags] | Flag | Description | | --- | --- | -| `--quest` | Force the quest-log output (emoji + progress bars) even in non-TTY contexts. Default is auto: fancy in a terminal, plain in CI / pipes / agents. | +| `--quest` | Force the quest-log output (emoji + progress bars) even in non-TTY contexts. | | `--plain` | Force the plain-text output even in TTY contexts. | | `--json` | Emit a structured JSON document instead. | - - -## Examples - -```bash -npx stash status -``` diff --git a/content/docs/reference/cli/wizard.mdx b/content/docs/reference/cli/wizard.mdx index 081dc9e..05678ed 100644 --- a/content/docs/reference/cli/wizard.mdx +++ b/content/docs/reference/cli/wizard.mdx @@ -4,13 +4,13 @@ description: "AI-guided encryption setup (reads your codebase)" type: reference components: [cli] verifiedAgainst: - cli: "0.16.0" + cli: "0.17.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash --help` (v0.16.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.16.0**. Run `npx stash@0.16.0 --help` to see the live command surface. +Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. </Callout> AI-guided encryption setup (reads your codebase) @@ -18,9 +18,3 @@ AI-guided encryption setup (reads your codebase) ```bash npx stash wizard ``` - -## Examples - -```bash -npx stash wizard -``` diff --git a/scripts/fixtures/stash-help.txt b/scripts/fixtures/stash-help.txt deleted file mode 100644 index fa27406..0000000 --- a/scripts/fixtures/stash-help.txt +++ /dev/null @@ -1,98 +0,0 @@ -◇ injected env (0) from .env.local // tip: ⌁ auth for agents [www.vestauth.com] -◇ injected env (0) from .env.development.local // tip: ◈ secrets for agents [www.dotenvx.com] -◇ injected env (0) from .env.development // tip: ◈ encrypted .env [www.dotenvx.com] -◇ injected env (0) from .env // tip: ◈ encrypted .env [www.dotenvx.com] -CipherStash CLI v0.16.0 - -Usage: bunx stash <command> [options] - -Commands: - init Initialize CipherStash for your project - plan Draft a reviewable encryption plan at .cipherstash/plan.md - impl Execute the plan with a local agent - status Displays implementation status - auth <subcommand> Authenticate with CipherStash - wizard AI-guided encryption setup (reads your codebase) - - db install Scaffold stash.config.ts (if missing) and install EQL extensions - db upgrade Upgrade EQL extensions to the latest version - db push Push encryption schema (writes pending if active config already exists) - db activate Promote pending → active without renames (use after additive db push) - db validate Validate encryption schema - db migrate Run pending encrypt config migrations - db status Show EQL installation status - db test-connection Test database connectivity - - schema build Build an encryption schema from your database - - encrypt status Show per-column migration status (phase, progress, drift) - encrypt plan Diff intent (.cipherstash/migrations.json) vs observed state - encrypt backfill Resumably encrypt plaintext into the encrypted column - encrypt cutover Rename swap encrypted → primary column - encrypt drop Generate a migration to drop the plaintext column - - env (experimental) Print production env vars for deployment - -Options: - --help, -h Show help - --version, -v Show version - -Init Flags: - --supabase Use Supabase-specific setup flow - --drizzle Use Drizzle-specific setup flow - --prisma-next Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migration apply) - --proxy Query encrypted data via CipherStash Proxy - --no-proxy Query encrypted data directly via the SDK (default) - -Plan Flags: - --complete-rollout Plan the entire encryption lifecycle (schema-add through drop) - in one document. Skips the production-deploy gate that - normally separates rollout from cutover. Only safe when this - database is not backing a deployed application (local dev, - sandbox, freshly seeded test environment). - --target <name> Skip the agent-target picker and hand off directly to one of - claude-code | codex | agents-md | wizard. Safe to call from - non-TTY contexts (CI, pipes). Without --target in non-TTY, - the command prints a hint and exits cleanly instead of hanging. - -Status Flags: - --quest Force the quest-log output (emoji + progress bars) - even in non-TTY contexts. Default is auto: fancy - in a terminal, plain in CI / pipes / agents. - --plain Force the plain-text output even in TTY contexts. - --json Emit a structured JSON document instead. - -Impl Flags: - --continue-without-plan Skip planning and go straight to implementation - (interactively confirms before proceeding) - --target <name> Skip the agent-target picker and hand off directly to one of - claude-code | codex | agents-md | wizard. Safe to call from - non-TTY contexts (CI, pipes). Without --target in non-TTY, - the command prints a hint and exits cleanly instead of hanging. - -DB Flags: - --force (install) Reinstall / overwrite even if already installed - --dry-run (install, push, upgrade) Show what would happen without making changes - --supabase (install, upgrade, validate) Use Supabase-compatible mode (auto-detected from DATABASE_URL) - --drizzle (install) Generate a Drizzle migration instead of direct install (auto-detected from project) - --migration (install, requires --supabase) Write a Supabase migration file instead of running SQL directly - --direct (install, requires --supabase) Run the SQL directly against the database (mutually exclusive with --migration) - --migrations-dir <path> (install, requires --supabase) Override the Supabase migrations directory (default: supabase/migrations) - --exclude-operator-family (install, upgrade, validate) Skip operator family creation - --latest (install, upgrade) Fetch the latest EQL from GitHub - --database-url <url> (all db / schema commands) Override DATABASE_URL for this run only — never written to disk - -Examples: - bunx stash init - bunx stash init --supabase - bunx stash init --prisma-next - bunx stash plan - bunx stash impl - bunx stash impl --continue-without-plan - bunx stash impl --target claude-code - bunx stash status - bunx stash auth login - bunx stash wizard - bunx stash db install - bunx stash db push - bunx stash schema build diff --git a/scripts/fixtures/stash-manifest.json b/scripts/fixtures/stash-manifest.json new file mode 100644 index 0000000..0de5ec4 --- /dev/null +++ b/scripts/fixtures/stash-manifest.json @@ -0,0 +1,511 @@ +{ + "name": "stash", + "version": "0.17.0", + "groups": [ + { + "title": "Setup & workflow", + "commands": [ + { + "name": "init", + "summary": "Initialize CipherStash for your project", + "long": "Set up CipherStash end-to-end: authenticate, introspect your database,\ninstall dependencies, install EQL, and hand off the rest to your local\ncoding agent. Every prompt has a non-interactive escape hatch, so init\nnever blocks waiting on a TTY (CI, agents, pipes).", + "examples": [ + "init", + "init --supabase", + "init --prisma-next", + "init --region us-east-1" + ], + "flags": [ + { + "name": "--supabase", + "description": "Use Supabase-specific setup flow." + }, + { + "name": "--drizzle", + "description": "Use Drizzle-specific setup flow." + }, + { + "name": "--prisma-next", + "description": "Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migration apply)." + }, + { + "name": "--proxy", + "description": "Query encrypted data via CipherStash Proxy." + }, + { + "name": "--no-proxy", + "description": "Query encrypted data directly via the SDK.", + "default": "true" + }, + { + "name": "--region", + "value": "<slug>", + "description": "Region to authenticate against (e.g. us-east-1). Skips the interactive region picker. Required for non-interactive init when not already logged in.", + "env": "STASH_REGION" + } + ] + }, + { + "name": "plan", + "summary": "Draft a reviewable encryption plan at .cipherstash/plan.md", + "examples": [ + "plan", + "plan --target claude-code" + ], + "flags": [ + { + "name": "--complete-rollout", + "description": "Plan the entire encryption lifecycle (schema-add through drop) in one document. Skips the production-deploy gate; only safe when this database is not backing a deployed application." + }, + { + "name": "--target", + "value": "<name>", + "description": "Skip the agent-target picker and hand off directly to one of claude-code | codex | agents-md | wizard. Safe in non-TTY contexts." + } + ] + }, + { + "name": "impl", + "summary": "Execute the plan with a local agent", + "examples": [ + "impl", + "impl --continue-without-plan", + "impl --target claude-code" + ], + "flags": [ + { + "name": "--continue-without-plan", + "description": "Skip planning and go straight to implementation (interactively confirms before proceeding)." + }, + { + "name": "--target", + "value": "<name>", + "description": "Skip the agent-target picker and hand off directly to one of claude-code | codex | agents-md | wizard. Safe in non-TTY contexts." + } + ] + }, + { + "name": "status", + "summary": "Displays implementation status", + "flags": [ + { + "name": "--quest", + "description": "Force the quest-log output (emoji + progress bars) even in non-TTY contexts." + }, + { + "name": "--plain", + "description": "Force the plain-text output even in TTY contexts." + }, + { + "name": "--json", + "description": "Emit a structured JSON document instead." + } + ] + }, + { + "name": "wizard", + "summary": "AI-guided encryption setup (reads your codebase)" + }, + { + "name": "doctor", + "summary": "Diagnose install problems (native binaries, runtime)" + }, + { + "name": "manifest", + "summary": "Print the structured, versioned command surface", + "long": "Emit the CLI command surface as data. `--json` produces the machine-\nreadable manifest the docs generator and agents consume; without it a\ngrouped command list is printed. The manifest is stamped with the CLI\nversion, so a page generated from it always names the version it describes.", + "examples": [ + "manifest --json", + "manifest" + ], + "flags": [ + { + "name": "--json", + "description": "Emit the structured JSON manifest instead of a text list." + } + ] + } + ] + }, + { + "title": "Auth", + "commands": [ + { + "name": "auth login", + "summary": "Authenticate with CipherStash", + "long": "Runs the OAuth 2.0 device authorization flow:\n1. Pick a region for your workspace.\n2. Approve in the browser — the URL is printed, so it works over SSH/headless.\n3. The CLI polls until you approve, then stores a short-lived token.\n4. Your device is bound to the workspace's default keyset, so later\n commands authenticate without a fresh login.", + "examples": [ + "auth login", + "auth login --region us-east-1", + "auth login --supabase", + "auth login --region us-east-1 --json" + ], + "flags": [ + { + "name": "--region", + "value": "<slug>", + "description": "Region to authenticate against (e.g. us-east-1). Skips the interactive region picker.", + "env": "STASH_REGION" + }, + { + "name": "--json", + "description": "Emit newline-delimited JSON events instead of prose. The first event (authorization_required) carries the device verification URL for a human to open. Implies no prompt and no browser auto-open." + }, + { + "name": "--no-open", + "description": "Don't auto-open the verification URL in a browser (already implied by --json)." + }, + { + "name": "--supabase", + "description": "Track Supabase as the referrer." + }, + { + "name": "--drizzle", + "description": "Track Drizzle as the referrer." + } + ] + }, + { + "name": "auth regions", + "summary": "List the regions you can authenticate against", + "examples": [ + "auth regions", + "auth regions --json" + ], + "flags": [ + { + "name": "--json", + "description": "Emit machine-readable [{ slug, label }] instead of a text list." + } + ] + } + ] + }, + { + "title": "EQL", + "commands": [ + { + "name": "eql install", + "summary": "Scaffold stash.config.ts (if missing) and install EQL extensions", + "flags": [ + { + "name": "--force", + "description": "Reinstall / overwrite even if already installed." + }, + { + "name": "--dry-run", + "description": "Show what would happen without making changes." + }, + { + "name": "--supabase", + "description": "Use Supabase-compatible mode (auto-detected from DATABASE_URL)." + }, + { + "name": "--drizzle", + "description": "Generate a Drizzle migration instead of direct install (auto-detected from project)." + }, + { + "name": "--migration", + "description": "Write a Supabase migration file instead of running SQL directly (requires --supabase)." + }, + { + "name": "--direct", + "description": "Run the SQL directly against the database (requires --supabase; mutually exclusive with --migration)." + }, + { + "name": "--migrations-dir", + "value": "<path>", + "description": "Override the Supabase migrations directory (requires --supabase).", + "default": "supabase/migrations" + }, + { + "name": "--exclude-operator-family", + "description": "Skip operator family creation." + }, + { + "name": "--eql-version", + "value": "<2|3>", + "description": "EQL generation to target. v3 is the native eql_v3.* domain schema (direct install only for now).", + "default": "2" + }, + { + "name": "--latest", + "description": "Fetch the latest EQL from GitHub (v2 only)." + }, + { + "name": "--name", + "value": "<name>", + "description": "With --drizzle: name for the generated migration (defaults to a scaffold name)." + }, + { + "name": "--out", + "value": "<path>", + "description": "With --drizzle: directory to write the generated migration into." + }, + { + "name": "--database-url", + "value": "<url>", + "description": "Override DATABASE_URL for this run only — never written to disk.", + "env": "DATABASE_URL" + } + ] + }, + { + "name": "eql upgrade", + "summary": "Upgrade EQL extensions to the latest version", + "flags": [ + { + "name": "--dry-run", + "description": "Show what would happen without making changes." + }, + { + "name": "--supabase", + "description": "Use Supabase-compatible mode." + }, + { + "name": "--exclude-operator-family", + "description": "Skip operator family creation." + }, + { + "name": "--eql-version", + "value": "<2|3>", + "description": "EQL generation to target.", + "default": "2" + }, + { + "name": "--latest", + "description": "Fetch the latest EQL from GitHub (v2 only)." + }, + { + "name": "--database-url", + "value": "<url>", + "description": "Override DATABASE_URL for this run only — never written to disk.", + "env": "DATABASE_URL" + } + ] + }, + { + "name": "eql status", + "summary": "Show EQL installation status", + "flags": [ + { + "name": "--database-url", + "value": "<url>", + "description": "Override DATABASE_URL for this run only — never written to disk.", + "env": "DATABASE_URL" + } + ] + } + ] + }, + { + "title": "Database", + "commands": [ + { + "name": "db push", + "summary": "Push encryption schema (writes pending if active config already exists)", + "flags": [ + { + "name": "--dry-run", + "description": "Show what would happen without making changes." + }, + { + "name": "--database-url", + "value": "<url>", + "description": "Override DATABASE_URL for this run only — never written to disk.", + "env": "DATABASE_URL" + } + ] + }, + { + "name": "db activate", + "summary": "Promote pending → active without renames (use after additive db push)", + "flags": [ + { + "name": "--database-url", + "value": "<url>", + "description": "Override DATABASE_URL for this run only — never written to disk.", + "env": "DATABASE_URL" + } + ] + }, + { + "name": "db validate", + "summary": "Validate encryption schema", + "flags": [ + { + "name": "--supabase", + "description": "Use Supabase-compatible mode." + }, + { + "name": "--exclude-operator-family", + "description": "Skip operator family creation." + }, + { + "name": "--database-url", + "value": "<url>", + "description": "Override DATABASE_URL for this run only — never written to disk.", + "env": "DATABASE_URL" + } + ] + }, + { + "name": "db migrate", + "summary": "Run pending encrypt config migrations (not yet implemented)" + }, + { + "name": "db test-connection", + "summary": "Test database connectivity", + "flags": [ + { + "name": "--database-url", + "value": "<url>", + "description": "Override DATABASE_URL for this run only — never written to disk.", + "env": "DATABASE_URL" + } + ] + } + ] + }, + { + "title": "Schema", + "commands": [ + { + "name": "schema build", + "summary": "Build an encryption schema from your database", + "flags": [ + { + "name": "--supabase", + "description": "Use Supabase-compatible mode." + }, + { + "name": "--database-url", + "value": "<url>", + "description": "Override DATABASE_URL for this run only — never written to disk.", + "env": "DATABASE_URL" + } + ] + } + ] + }, + { + "title": "Encrypt", + "commands": [ + { + "name": "encrypt status", + "summary": "Show per-column migration status (phase, progress, drift)" + }, + { + "name": "encrypt plan", + "summary": "Diff intent (.cipherstash/migrations.json) vs observed state" + }, + { + "name": "encrypt backfill", + "summary": "Resumably encrypt plaintext into the encrypted column", + "flags": [ + { + "name": "--table", + "value": "<name>", + "description": "Target table." + }, + { + "name": "--column", + "value": "<name>", + "description": "Target column." + }, + { + "name": "--pk-column", + "value": "<name>", + "description": "Primary-key column used to page through rows." + }, + { + "name": "--chunk-size", + "value": "<n>", + "description": "Rows encrypted per batch." + }, + { + "name": "--encrypted-column", + "value": "<name>", + "description": "Destination encrypted column." + }, + { + "name": "--schema-column-key", + "value": "<key>", + "description": "Schema key identifying the column config." + }, + { + "name": "--confirm-dual-writes-deployed", + "description": "Assert the app is dual-writing before backfilling (safety gate)." + }, + { + "name": "--force", + "description": "Proceed past non-fatal safety checks." + } + ] + }, + { + "name": "encrypt cutover", + "summary": "Rename swap encrypted → primary column", + "flags": [ + { + "name": "--table", + "value": "<name>", + "description": "Target table." + }, + { + "name": "--column", + "value": "<name>", + "description": "Target column." + }, + { + "name": "--proxy-url", + "value": "<url>", + "description": "Proxy URL to verify against." + }, + { + "name": "--migrations-dir", + "value": "<path>", + "description": "Directory to write the rename migration into." + } + ] + }, + { + "name": "encrypt drop", + "summary": "Generate a migration to drop the plaintext column", + "flags": [ + { + "name": "--table", + "value": "<name>", + "description": "Target table." + }, + { + "name": "--column", + "value": "<name>", + "description": "Target column." + }, + { + "name": "--migrations-dir", + "value": "<path>", + "description": "Directory to write the drop migration into." + } + ] + } + ] + }, + { + "title": "Experimental", + "commands": [ + { + "name": "env", + "summary": "(experimental) Print production env vars for deployment", + "flags": [ + { + "name": "--write", + "description": "Write the vars to a file instead of printing them." + } + ] + } + ] + } + ] +} diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index 30a0427..dd0d88b 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -1,25 +1,17 @@ #!/usr/bin/env tsx /** - * CLI reference generator — PROTOTYPE (CIP-33xx). + * CLI reference generator (CIP-33xx). * * Generates the `/reference/cli` pages from the `stash` CLI itself, so the * reference can never drift from the shipped command surface. Every page is * stamped with the CLI version it was generated from. * * ── Data source ─────────────────────────────────────────────────────────── - * TODAY (bootstrap): we parse `stash --help`, captured to a fixture. `stash` - * is a hand-rolled TS CLI with no machine-readable output yet, and no - * per-command `--help` (every command prints the top-level help), so the - * single top-level help is the whole surface. It is thin — no args, no - * per-command examples, `auth`/`encrypt` subcommands undetailed. - * - * TARGET: add `stash manifest --json` to the CLI (it already has the command - * registry it prints `--help` from). Then replace `loadManifest()` with: - * - * JSON.parse(execSync(`npx stash@${CLI_VERSION} manifest --json`)) - * - * and delete the parser below. The renderer and page format stay identical — - * that is the point of this prototype. + * We consume `stash manifest --json` (shipped in stash CLI 0.17) — the + * structured, versioned command surface the CLI builds from its own command + * registry. Groups, summaries, per-command flags (with defaults + env vars), + * and curated examples all come straight from the CLI, so the docs are a + * projection of the real command set rather than a scrape of `--help`. * * ── Versioning ──────────────────────────────────────────────────────────── * Always generated from the LATEST published `stash` on npm (resolved via @@ -27,7 +19,7 @@ * runs in `prebuild` — refreshes the docs automatically. Every page carries * `verifiedAgainst.cli` and a visible banner, so readers and agents always * know which version the docs describe. Offline, it falls back to the cached - * `scripts/fixtures/stash-help.txt`. + * `scripts/fixtures/stash-manifest.json`. */ import { execSync } from "node:child_process"; import fs from "node:fs"; @@ -37,26 +29,58 @@ import path from "node:path"; const CLI_NAME = "stash"; let CLI_VERSION = ""; // resolved to the latest published npm version at run time const RUNNER = "npx"; // normalized invocation shown in docs -const FIXTURE = path.join(process.cwd(), "scripts/fixtures", "stash-help.txt"); +const FIXTURE = path.join( + process.cwd(), + "scripts/fixtures", + "stash-manifest.json", +); const OUT_DIR = path.join(process.cwd(), "content/docs/reference/cli"); // Hand-authored per-command prose merged into the generated page (hybrid model): -// the generated skeleton (synopsis + flags) stays drift-free; a supplement adds -// rich narrative + curated examples the thin `--help` can't provide. Lives -// outside content/ so it's never treated as a page or wiped by the clean step. -// Long-term, migrate these into the CLI's own long-help/examples (see the PR). +// the generated skeleton (synopsis + flags + examples) stays drift-free; a +// supplement adds rich narrative the manifest doesn't carry. Lives outside +// content/ so it's never treated as a page or wiped by the clean step. Where +// the CLI grows per-command long-help, that prose can migrate into the CLI and +// this hook retires. const SUPPLEMENTS_DIR = path.join(process.cwd(), "scripts/cli-supplements"); -// ── Types (this shape is the spec for `stash manifest --json`) ────────────── -interface Flag { +// ── The `stash manifest --json` contract ──────────────────────────────────── +// Mirrors packages/cli/src/cli/manifest.ts in the stack repo. Command `name` +// is the full path ("eql install"); flags are already resolved per-command. +interface CliFlag { name: string; // "--supabase" - value?: string; // "<path>" + value?: string; // "<slug>" + description: string; + default?: string; // surfaced default, when worth showing + env?: string; // env var that also sets this, e.g. DATABASE_URL +} +interface CliCommand { + name: string; + summary: string; + long?: string; + examples?: string[]; + flags?: CliFlag[]; +} +interface CliGroup { + title: string; + commands: CliCommand[]; +} +interface CliManifest { + name: string; + version: string; + groups: CliGroup[]; +} + +// ── Internal model (what the renderer consumes) ───────────────────────────── +interface Flag { + name: string; + value?: string; description: string; - appliesTo?: string[]; // db-flag applicability: ["install", "upgrade"] or ["all"] } interface Command { - path: string; // "db install" - base: string; // "db" + path: string; // "eql install" + base: string; // "eql" sub?: string; // "install" + group: string; // nav group title, from the manifest summary: string; flags: Flag[]; examples: string[]; @@ -64,217 +88,104 @@ interface Command { interface Manifest { name: string; version: string; - usage: string; - globalFlags: Flag[]; commands: Command[]; + groupOrder: string[]; // nav group order, as the CLI declares it } -// Which nav group each top-level command belongs to, and the group order. -const GROUPS: Record<string, string> = { - init: "Setup & workflow", - plan: "Setup & workflow", - impl: "Setup & workflow", - status: "Setup & workflow", - wizard: "Setup & workflow", - auth: "Auth", - db: "Database", - schema: "Schema", - encrypt: "Encrypt", - env: "Deployment", -}; -const GROUP_ORDER = [ - "Setup & workflow", - "Auth", - "Database", - "Schema", - "Encrypt", - "Deployment", -]; -// Known db/schema subcommand names, used to resolve db-flag applicability. -const DB_SUBCOMMANDS = new Set([ - "install", - "upgrade", - "push", - "activate", - "validate", - "migrate", - "status", - "test-connection", -]); - -// EQL/Postgres commands get the `eql` component facet too (content-model rule: -// tag `eql` only for queryable-in-Postgres ciphertext). +// EQL/Postgres command groups get the `eql` component facet too (content-model +// rule: tag `eql` for queryable-in-Postgres ciphertext). const componentsFor = (base: string): string[] => - ["db", "schema", "encrypt"].includes(base) ? ["cli", "eql"] : ["cli"]; + ["eql", "db", "schema", "encrypt"].includes(base) ? ["cli", "eql"] : ["cli"]; // ── Source ────────────────────────────────────────────────────────────────── // Resolve the latest published version so the docs track releases automatically. function latestVersion(): string { try { - return execSync(`npm view ${CLI_NAME} version`, { encoding: "utf8" }).trim(); + return execSync(`npm view ${CLI_NAME} version`, { + encoding: "utf8", + }).trim(); } catch { const cached = fs.existsSync(FIXTURE) - ? fs.readFileSync(FIXTURE, "utf8").match(/CipherStash CLI v([0-9.]+)/)?.[1] + ? (JSON.parse(fs.readFileSync(FIXTURE, "utf8")) as CliManifest).version : undefined; if (cached) { console.warn(`⚠ npm unreachable; using cached stash v${cached}.`); return cached; } - throw new Error("Cannot resolve latest stash version (offline, no fixture)."); + throw new Error( + "Cannot resolve latest stash version (offline, no fixture).", + ); } } -// Run the resolved CLI version and cache its help. (Target: `stash manifest --json`.) -function loadHelp(version: string): string { +// Run the resolved CLI and read its `manifest --json`, caching to a fixture for +// offline builds. dotenvx (the CLI's launcher) may print tips before the JSON, +// so slice from the first `{` to the last `}` defensively. +function loadRawManifest(version: string): CliManifest { try { - const out = execSync(`npx --yes ${CLI_NAME}@${version} --help`, { + const out = execSync(`npx --yes ${CLI_NAME}@${version} manifest --json`, { encoding: "utf8", cwd: os.tmpdir(), stdio: ["ignore", "pipe", "ignore"], }); + const json = out.slice(out.indexOf("{"), out.lastIndexOf("}") + 1); + const manifest = JSON.parse(json) as CliManifest; fs.mkdirSync(path.dirname(FIXTURE), { recursive: true }); - fs.writeFileSync(FIXTURE, out); - return out; + fs.writeFileSync(FIXTURE, `${JSON.stringify(manifest, null, 2)}\n`); + return manifest; } catch { if (fs.existsSync(FIXTURE)) { console.warn(`⚠ Could not run stash@${version}; using cached fixture.`); - return fs.readFileSync(FIXTURE, "utf8"); - } - throw new Error(`Could not run stash@${version} and no cached fixture exists.`); - } -} - -// Drop dotenvx's env-injection tips and blank leading noise. -const stripNoise = (text: string): string[] => - text - .split("\n") - .filter((l) => !/^\s*◇|injected env|dotenvx|www\.(dotenvx|vestauth)/.test(l)); - -// ── Parser (delete once `stash manifest --json` exists) ───────────────────── -function parseHelp(text: string): Manifest { - const lines = stripNoise(text); - const joined = lines.join("\n"); - - const version = joined.match(/CipherStash CLI v([0-9]+\.[0-9]+\.[0-9]+)/)?.[1] ?? CLI_VERSION; - - // Section boundaries: a line like "Commands:", "Options:", "DB Flags:", "Examples:". - const sections: Record<string, string[]> = {}; - let current = ""; - for (const line of lines) { - const header = line.match(/^([A-Za-z][A-Za-z ]*):\s*$/); - if (header && !line.startsWith(" ")) { - current = header[1].trim(); - sections[current] = []; - } else if (current) { - sections[current].push(line); - } - } - - // Commands: " db install Scaffold ..." (name is non-greedy up to 2+ spaces) - const commands: Command[] = []; - for (const line of sections.Commands ?? []) { - const m = line.match(/^ {2}(\S.*?) {2,}(.+)$/); - if (!m) continue; - const rawName = m[1].replace(/\s*<subcommand>\s*/, "").trim(); - const [base, ...rest] = rawName.split(/\s+/); - commands.push({ - path: rawName, - base, - sub: rest.length ? rest.join(" ") : undefined, - summary: m[2].trim(), - flags: [], - examples: [], - }); - } - - // Global options. - const globalFlags = parseFlagBlock(sections.Options ?? []); - - // Per-command flag sections: "Init Flags", "Plan Flags", "DB Flags", … - for (const [name, body] of Object.entries(sections)) { - const fm = name.match(/^(.*) Flags$/); - if (!fm) continue; - const label = fm[1].toLowerCase(); // "init", "plan", "db" - const flags = parseFlagBlock(body); - if (label === "db") { - // DB flags carry applicability annotations; resolve onto each subcommand. - for (const cmd of commands.filter((c) => c.base === "db")) { - cmd.flags = flags.filter( - (f) => - !f.appliesTo || - f.appliesTo.includes("all") || - (cmd.sub ? f.appliesTo.includes(cmd.sub) : false), - ); - } - } else { - const cmd = commands.find((c) => c.path === label); - if (cmd) cmd.flags = flags; + return JSON.parse(fs.readFileSync(FIXTURE, "utf8")) as CliManifest; } - } - - // Examples: " npx stash db install" → attach to the longest matching command. - const byLength = [...commands].sort((a, b) => b.path.length - a.path.length); - for (const line of sections.Examples ?? []) { - const inv = line.trim(); - const m = inv.match(/^(?:npx|bunx|pnpm dlx|stash)\s+(?:stash\s+)?(.+)$/); - const argPart = m ? m[1] : inv; - const cmd = byLength.find( - (c) => argPart === c.path || argPart.startsWith(`${c.path} `), + throw new Error( + `Could not run stash@${version} manifest --json and no cached fixture exists.`, ); - if (cmd) cmd.examples.push(`${RUNNER} ${CLI_NAME} ${argPart}`); } +} - return { - name: CLI_NAME, - version, - usage: `${RUNNER} ${CLI_NAME} <command> [options]`, - globalFlags, - commands, - }; +// Fold the manifest's richer flag metadata (default + env) into the description +// column so the page format (Flag | Description) stays a single table. +function mapFlag(f: CliFlag): Flag { + const notes: string[] = []; + if (f.default !== undefined) notes.push(`default: \`${f.default}\``); + if (f.env) notes.push(`env: \`${f.env}\``); + const description = notes.length + ? `${f.description} (${notes.join("; ")})` + : f.description; + return { name: f.name, value: f.value, description }; } -// Parse an indented flag block, folding continuation lines into descriptions. -function parseFlagBlock(body: string[]): Flag[] { - const flags: Flag[] = []; - for (const line of body) { - if (!line.trim()) continue; - const m = line.match(/^ {2}(--[\w-]+)(?:,\s*-\w)?(?: +(<[^>]+>))? {2,}(.+)$/); - if (m) { - let description = m[3].trim(); - let appliesTo: string[] | undefined; - // Leading "(install, push, …)" on DB flags = applicability (+ conditions). - const paren = description.match(/^\(([^)]+)\)\s*(.*)$/); - if (paren) { - const inner = paren[1].trim(); - if (/^all\b/.test(inner)) { - // "(all db / schema commands)" — applies everywhere; drop the note. - appliesTo = ["all"]; - description = paren[2]; - } else { - const tokens = inner.split(/[,/]/).map((t) => t.trim()).filter(Boolean); - const applic = tokens.filter((t) => DB_SUBCOMMANDS.has(t)); - const conditions = tokens.filter((t) => !DB_SUBCOMMANDS.has(t)); - if (applic.length) appliesTo = applic; - description = - (conditions.length ? `(${conditions.join(", ")}) ` : "") + paren[2]; - } - } - flags.push({ name: m[1], value: m[2], description: description.trim(), appliesTo }); - } else { - const cont = line.trim(); - if (flags.length && cont) flags[flags.length - 1].description += ` ${cont}`; +// Project the CLI manifest onto the internal model the renderer consumes. +function toManifest(m: CliManifest): Manifest { + const commands: Command[] = []; + const groupOrder: string[] = []; + for (const group of m.groups) { + if (!group.commands.length) continue; + if (!groupOrder.includes(group.title)) groupOrder.push(group.title); + for (const c of group.commands) { + const [base, ...rest] = c.name.split(/\s+/); + commands.push({ + path: c.name, + base, + sub: rest.length ? rest.join(" ") : undefined, + group: group.title, + summary: c.summary, + flags: (c.flags ?? []).map(mapFlag), + examples: (c.examples ?? []).map((e) => `${RUNNER} ${CLI_NAME} ${e}`), + }); } } - return flags; + return { name: m.name, version: m.version, commands, groupOrder }; } // ── Render ─────────────────────────────────────────────────────────────────── const generatedMarker = (): string => - `{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from \`${CLI_NAME} --help\` (v${CLI_VERSION}). Re-run \`bun run generate-docs:cli\` to refresh from the latest published CLI. */}`; + `{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from \`${CLI_NAME} manifest --json\` (v${CLI_VERSION}). Re-run \`bun run generate-docs:cli\` to refresh from the latest published CLI. */}`; function banner(): string { return `<Callout type="info"> -Generated from **\`${CLI_NAME}\` v${CLI_VERSION}**. Run \`${RUNNER} ${CLI_NAME}@${CLI_VERSION} --help\` to see the live command surface. +Generated from **\`${CLI_NAME}\` v${CLI_VERSION}** via \`${RUNNER} ${CLI_NAME}@${CLI_VERSION} manifest --json\`. Run \`${RUNNER} ${CLI_NAME}@${CLI_VERSION} --help\` to see the live command surface. </Callout>`; } @@ -282,7 +193,12 @@ function flagsTable(flags: Flag[]): string { if (!flags.length) return ""; const rows = flags .map((f) => { - const opt = `\`${f.name}${f.value ? ` ${f.value}` : ""}\``; + // Escape pipes (e.g. the `<2|3>` in `--eql-version`) so they don't read + // as table-column separators, even inside the code span. + const opt = `\`${f.name}${f.value ? ` ${f.value}` : ""}\``.replace( + /\|/g, + "\\|", + ); return `| ${opt} | ${f.description.replace(/\|/g, "\\|")} |`; }) .join("\n"); @@ -303,12 +219,20 @@ function commandSection(cmd: Command, level: "##" | "###"): string { if (cmd.flags.length) parts.push(flagsTable(cmd.flags).replace("### Flags", `${level}# Flags`)); if (cmd.examples.length) { - parts.push(`\n${level}# Examples\n`, "```bash", cmd.examples.join("\n"), "```"); + parts.push( + `\n${level}# Examples\n`, + "```bash", + cmd.examples.join("\n"), + "```", + ); } return parts.join("\n"); } -function renderPage(base: string, cmds: Command[]): { slug: string; body: string } { +function renderPage( + base: string, + cmds: Command[], +): { slug: string; body: string } { const isGroup = cmds.some((c) => c.sub) || cmds.length > 1; const title = base; const components = componentsFor(base); @@ -337,9 +261,16 @@ function renderPage(base: string, cmds: Command[]): { slug: string; body: string ); } else { const c = cmds[0]; - parts.push(c.summary, "", "```bash", `${RUNNER} ${CLI_NAME} ${c.path}${c.flags.length ? " [flags]" : ""}`, "```"); + parts.push( + c.summary, + "", + "```bash", + `${RUNNER} ${CLI_NAME} ${c.path}${c.flags.length ? " [flags]" : ""}`, + "```", + ); if (c.flags.length) parts.push(flagsTable(c.flags)); - if (c.examples.length) parts.push("\n## Examples\n", "```bash", c.examples.join("\n"), "```"); + if (c.examples.length) + parts.push("\n## Examples\n", "```bash", c.examples.join("\n"), "```"); } const supplement = readSupplement(base); @@ -354,7 +285,10 @@ function readSupplement(slug: string): string { return fs.existsSync(file) ? fs.readFileSync(file, "utf8").trim() : ""; } -function renderIndex(manifest: Manifest, groups: Map<string, string[]>): string { +function renderIndex( + manifest: Manifest, + groups: Map<string, string[]>, +): string { const frontmatter = [ "---", "title: CLI", @@ -366,7 +300,8 @@ function renderIndex(manifest: Manifest, groups: Map<string, string[]>): string "---", ].join("\n"); - const sections = GROUP_ORDER.filter((g) => groups.has(g)) + const sections = manifest.groupOrder + .filter((g) => groups.has(g)) .map((g) => { const rows = groups .get(g)! @@ -375,7 +310,8 @@ function renderIndex(manifest: Manifest, groups: Map<string, string[]>): string .filter((c) => c.base === base) .map((c) => { const anchor = c.sub ? `#${c.path.replace(/\s+/g, "-")}` : ""; - return `| [\`${c.path}\`](/reference/cli/${base}${anchor}) | ${c.summary} |`; + const summary = c.summary.replace(/\|/g, "\\|"); + return `| [\`${c.path}\`](/reference/cli/${base}${anchor}) | ${summary} |`; }), ) .join("\n"); @@ -395,9 +331,9 @@ ${sections} `; } -function renderMeta(groups: Map<string, string[]>): string { +function renderMeta(manifest: Manifest, groups: Map<string, string[]>): string { const pages: string[] = []; - for (const g of GROUP_ORDER) { + for (const g of manifest.groupOrder) { if (!groups.has(g)) continue; pages.push(`---${g}---`); pages.push(...groups.get(g)!); @@ -407,8 +343,7 @@ function renderMeta(groups: Map<string, string[]>): string { // ── Main ───────────────────────────────────────────────────────────────────── function loadManifest(): Manifest { - // Swap point: return JSON.parse(execSync(`npx ${CLI_NAME}@${CLI_VERSION} manifest --json`)). - return parseHelp(loadHelp(CLI_VERSION)); + return toManifest(loadRawManifest(CLI_VERSION)); } function main() { @@ -417,19 +352,24 @@ function main() { // Group top-level commands by base, preserving discovery order. const bases: string[] = []; - for (const c of manifest.commands) if (!bases.includes(c.base)) bases.push(c.base); + for (const c of manifest.commands) + if (!bases.includes(c.base)) bases.push(c.base); + // Nav groups, in the order the CLI declares them; a base inherits the group + // of its commands. const groups = new Map<string, string[]>(); + for (const g of manifest.groupOrder) groups.set(g, []); for (const base of bases) { - const g = GROUPS[base] ?? "Other"; - if (!groups.has(g)) groups.set(g, []); + const g = manifest.commands.find((c) => c.base === base)!.group; groups.get(g)!.push(base); } + for (const [g, list] of groups) if (!list.length) groups.delete(g); // Clean previously generated pages, then write fresh. fs.mkdirSync(OUT_DIR, { recursive: true }); for (const f of fs.readdirSync(OUT_DIR)) { - if (f.endsWith(".mdx") || f === "meta.json") fs.rmSync(path.join(OUT_DIR, f)); + if (f.endsWith(".mdx") || f === "meta.json") + fs.rmSync(path.join(OUT_DIR, f)); } let count = 0; @@ -439,8 +379,14 @@ function main() { fs.writeFileSync(path.join(OUT_DIR, `${slug}.mdx`), body); count++; } - fs.writeFileSync(path.join(OUT_DIR, "index.mdx"), renderIndex(manifest, groups)); - fs.writeFileSync(path.join(OUT_DIR, "meta.json"), renderMeta(groups)); + fs.writeFileSync( + path.join(OUT_DIR, "index.mdx"), + renderIndex(manifest, groups), + ); + fs.writeFileSync( + path.join(OUT_DIR, "meta.json"), + renderMeta(manifest, groups), + ); console.log( `✓ Generated ${count} CLI reference page(s) for ${CLI_NAME} v${manifest.version} → ${path.relative(process.cwd(), OUT_DIR)}`, From 118259b8f9979b450c071d497be280f1c8f98bdf Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Sun, 5 Jul 2026 15:03:26 +1000 Subject: [PATCH 024/151] docs(v2): port KMS/HSM/Vault comparisons into the /compare IA section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Ports the comparison content from PR #31 (AWS KMS merge + ZeroKMS vs HSM) and PR #34 (HashiCorp Vault) out of the legacy content/stack tree and into the new IA `/compare` section: - content/docs/compare/aws-kms.mdx (from #31) - content/docs/compare/zerokms-vs-hsm.mdx (from #31; retains its WIP TODOs) - content/docs/compare/hashicorp-vault.mdx (from #34) - public/images/hsm.png (from #31) Each page gains v2 facets (type: concept, components, audience, reviewBy — the claims-page review date rather than verifiedAgainst). Intra-comparison links are rewritten to `/compare/*`; all other cross-links keep pointing at the still-served legacy `/stack/...` pages (which hold the real content until their sections migrate). The dead `/stack/cipherstash/secrets` link on the Vault page (no secrets page exists in this repo) is delinked. The comparisons overview and nav (index.mdx, meta.json) list the three ported pages. The FHE comparison stays in the legacy tree for now — it is written against EQL v2 (eql_v2_encrypted, BLAKE3) and needs a v3 content refresh before porting, tracked separately in IA.md (/compare/fhe port). Supersedes #31 and #34 for the v2 branch. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/concepts/compare/aws-kms.mdx | 211 ++++++++++++++++ .../docs/concepts/compare/hashicorp-vault.mdx | 118 +++++++++ content/docs/concepts/compare/index.mdx | 17 +- content/docs/concepts/compare/meta.json | 2 +- .../docs/concepts/compare/zerokms-vs-hsm.mdx | 229 ++++++++++++++++++ public/images/hsm.png | Bin 0 -> 1406758 bytes 6 files changed, 573 insertions(+), 4 deletions(-) create mode 100644 content/docs/concepts/compare/aws-kms.mdx create mode 100644 content/docs/concepts/compare/hashicorp-vault.mdx create mode 100644 content/docs/concepts/compare/zerokms-vs-hsm.mdx create mode 100644 public/images/hsm.png diff --git a/content/docs/concepts/compare/aws-kms.mdx b/content/docs/concepts/compare/aws-kms.mdx new file mode 100644 index 0000000..f487f96 --- /dev/null +++ b/content/docs/concepts/compare/aws-kms.mdx @@ -0,0 +1,211 @@ +--- +title: CipherStash vs AWS KMS +description: How CipherStash compares to AWS KMS for application-level encryption — the distributed-trust ZeroKMS key-management architecture, plus a developer-experience comparison covering searchable encryption, identity-aware keys, bulk operations, and type safety. +type: concept +components: [zerokms] +audience: [developer, cto, ciso] +reviewBy: "2027-01-05" +--- + +CipherStash and AWS KMS solve overlapping problems differently. AWS KMS is a centralized key-management service: keys live in AWS-controlled HSMs, and it returns binary ciphertext that you encode and store yourself. CipherStash encrypts application data through a developer SDK backed by **ZeroKMS**, a key-management service that issues a unique key per record and never holds the keys needed to decrypt your data. + +This page compares them on two axes: the **architecture and trust model**, and the **developer experience** of encrypting application data. + +## What's being compared + +| Term | What it is | +|---|---| +| **AWS KMS** | AWS's managed key-management service. Keys live in AWS-controlled HSMs; you call `Encrypt`/`Decrypt` and manage ciphertext storage yourself. | +| **ZeroKMS** | CipherStash's key-management service. Derives a unique key per record on demand from client- and server-side components; no party — including CipherStash — holds a complete data key. | +| **CipherStash Encryption SDK** (`@cipherstash/stack`) | The TypeScript library that encrypts/decrypts application data and runs searchable queries, backed by ZeroKMS. | +| **CipherStash Proxy** | A drop-in SQL proxy that applies the same primitives server-side with no application code changes. | + +The SDK and Proxy are two deployment shapes of the same primitives; the examples below use the SDK. + +## Architecture & trust model + +AWS KMS provides managed key management with high availability and deep AWS integration, but key custody and the underlying hardware remain with AWS. Two properties matter for a security evaluation: + +- **Shared keys, larger blast radius.** A KMS key (or a derived data key) typically protects many records, so a single key compromise exposes everything it covers. +- **Provider custody.** AWS controls the HSMs and the IAM boundary around them, so your trust model includes AWS. + +ZeroKMS takes a different approach: + +- **Unique key per record.** Every value gets its own key, so a compromised key exposes a single record rather than a dataset. +- **Distributed trust.** Keys are derived on demand by combining client- and server-side components and are never stored. No single party — including CipherStash — can decrypt data unilaterally (CipherStash calls this *zero-knowledge* key management). +- **Identity-bound access.** Decryption is gated by OIDC identity, with per-record access control, instant revocation, and a real-time audit log of every access. +- **Performance.** Sub-5ms overhead for most operations ([latency benchmarks](https://app.artillery.io/share/sh_75edb9d22a060633bfdce04777ffd60d1bcfc88989393dc38d3a4924b83fc6cd)). Because ZeroKMS processes a whole batch in one round-trip while AWS KMS has no bulk API, the gap widens with batch size: at a realistic 100-record batch an in-region benchmark measured **~16× lower p95 latency** and, under sustained load, **roughly two orders of magnitude (~85×) higher throughput** before AWS KMS hits its rate limit. +{/* TODO: ~16× latency / ~85× throughput are from the in-region two-host benchmark in cipherstash/benches (kms-app/REPORT.md). The throughput multiple is at default per-region KMS quotas. Replace with a public-facing citation before relying on the exact figures externally, as the FHE page does for its ORE numbers. */} +- **Deployment.** Managed service across regions, or self-hosted as a container for jurisdictional control. + +The same architecture comparison applies to Google Cloud KMS and Azure Key Vault, which share the provider-custody, shared-key model. + +### What about data-key caching? + +The standard way to make AWS KMS fast enough for per-record encryption is **data-key caching (reuse)**: generate one data key, encrypt many records with it locally, and call KMS once per *key* instead of once per *value*. It's worth understanding why this doesn't solve the database case. + +- **It speeds writes and sequential reads.** Records inserted together share a data key, so an insert and a read of that same contiguous block need only one KMS call between them. This is the best case, and reuse handles it well. +- **It collapses on real reads.** Production queries don't retrieve rows in insert order — they look up by user, time range, or a secondary index, scattered across the table. A scattered result references roughly *one distinct data key per record*, so decrypting it costs roughly *one KMS `Decrypt` per record* — exactly the per-value cost reuse was meant to avoid. The amortization you buy at write time disappears the moment the read pattern diverges from the write pattern, which is the normal case. +- **It weakens the security model.** Sharing one key across many records is the shared-key blast radius above, by another name: you lose per-record revocation (revoking one record's key revokes it for every record that shares it) and per-record audit (the log shows one `Decrypt` of a key that unlocks many records, not which record was read). + +ZeroKMS reaches the same one-round-trip amortization through its [bulk API](#capabilities-aws-kms-doesnt-provide-without-custom-work) — independent of access pattern, sequential or scattered — while keeping a unique, individually auditable and revocable key per record. You don't trade the security model for the performance. + +### Cost + +The two services meter cost in fundamentally different ways, and the difference compounds exactly where database encryption spends its time — reads. + +- **AWS KMS** is pure usage metering: **$1 per key per month, plus $0.03 per 10,000 requests** ([standard symmetric pricing](https://aws.amazon.com/kms/pricing/)). Critically, it bills **both directions** — every `Encrypt`/`GenerateDataKey` *and* every `Decrypt` is a billable request. Under the per-value security model, that's one billable request per encrypted value, each way. +- **ZeroKMS** is a [flat subscription](/stack/reference/billing) by encryption operations per month (Free 10k, Pro 50k, Business 500k, Enterprise unlimited), and **decryption is always free** — you're charged for encrypting data, never for reading it back. + +Field-level database encryption is read-heavy: a record is encrypted once and decrypted on every read for the rest of its life. So the read path dominates the bill — and it's precisely where the models diverge. Taking the benchmark's read scenario (a query returning 50 records × 3 encrypted fields = 150 `Decrypt` calls under per-value security): + +| Read volume (50 records × 3 fields/query) | `Decrypt` calls / month | AWS KMS | ZeroKMS | +|---|---:|---:|---:| +| 1 query | 150 | $0.00045 | **$0** | +| 1M queries / month | 150M | **$450** | **$0** | +| 10M queries / month | 1.5B | **$4,500** | **$0** | + +ZeroKMS reads are free regardless of volume; the encryption side sits under a fixed monthly plan. AWS KMS read cost, by contrast, is **linear and unbounded** in access volume — a hot dataset pays again on every read, forever. (And you hit per-second request quotas, throttling reads, long before the bill becomes the binding constraint.) + +The only lever to cut that AWS read cost is **data-key caching** — the same lever from [above](#what-about-data-key-caching), with the same failure mode: it cuts `Decrypt` calls on sequential reads but collapses back to one call per record on scattered (real) reads, and it costs you per-record audit and revocation. On AWS KMS, **cost and performance fail together, for the same architectural reason.** ZeroKMS needs no such lever — decrypts are free *and* bulk-amortized. + +## Developer experience + +Beyond the trust model, the SDK removes the boilerplate AWS KMS requires. Examples are TypeScript. + +### Encrypting and decrypting a value + +AWS KMS returns binary ciphertext you must encode, store, and decode yourself: + +```typescript +import { KMSClient, EncryptCommand, DecryptCommand } from "@aws-sdk/client-kms"; + +const client = new KMSClient({ region: "us-west-2" }); +const keyId = "arn:aws:kms:us-west-2:123456789012:key/abcd1234-..."; + +const enc = await client.send( + new EncryptCommand({ KeyId: keyId, Plaintext: Buffer.from("secret@squirrel.example") }), +); +const ciphertext = Buffer.from(enc.CiphertextBlob).toString("base64"); // you store this + +const dec = await client.send( + new DecryptCommand({ CiphertextBlob: Buffer.from(ciphertext, "base64") }), +); +const plaintext = Buffer.from(dec.Plaintext).toString("utf-8"); +``` + +You manage: key ARNs, buffer/base64 conversions, error handling, AWS credentials, and regions. + +The CipherStash SDK returns a JSON payload ready for `JSONB` storage, with key management handled by ZeroKMS and a type-safe `Result` rather than thrown errors: + +```typescript +import { Encryption } from "@cipherstash/stack"; +import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema"; + +const users = encryptedTable("users", { email: encryptedColumn("email") }); +const client = await Encryption({ schemas: [users] }); + +const result = await client.encrypt("secret@squirrel.example", { column: users.email, table: users }); +if (result.failure) throw new Error(result.failure.message); + +const plaintext = (await client.decrypt(result.data)).data; // type: string +``` + +### Capabilities AWS KMS doesn't provide without custom work + +**Searchable encryption** — query encrypted data directly in PostgreSQL. AWS KMS requires decrypting in memory or building a custom searchable index. + +```typescript +const users = encryptedTable("users", { + email: encryptedColumn("email").freeTextSearch().equality().orderAndRange(), +}); + +const terms = await client.encryptQuery("secret", { column: users.email, table: users }); +``` + +**Identity-aware encryption** — bind encryption to an OIDC identity via `LockContext`. AWS KMS has no built-in equivalent; encryption context is a manual workaround. + +```typescript +import { LockContext } from "@cipherstash/stack/identity"; + +const lockContext = await new LockContext().identify(userJwt); + +await client + .encrypt("secret@squirrel.example", { column: users.email, table: users }) + .withLockContext(lockContext); +``` + +**Bulk operations** — native batch API. AWS KMS has no bulk endpoint; you batch and handle rate limits manually. + +```typescript +const result = await client.bulkEncrypt( + [{ id: "1", plaintext: "Alice" }, { id: "2", plaintext: "Bob" }], + { column: users.name, table: users }, +); +``` + +## Comparison + +### Architecture + +| Property | AWS KMS | CipherStash (ZeroKMS) | +|---------|---------|------------------------| +| Key storage | Centralized in provider HSMs | Distributed, derived on demand, never stored | +| Control model | Provider-managed custody | Distributed trust, no single point of decryption | +| Key granularity | Shared keys | Per-record keys | +| Breach impact | All records under the key | Single record | +| Access control | IAM-based | Identity-based (OIDC), per-record | +| Audit | CloudTrail (API calls) | Real-time log of every decryption | +| Performance | Network-dependent, rate-limited | Sub-5ms overhead; ~16× lower latency, up to ~85× throughput | +| Cost model | Per-request, billed both ways (linear in access volume) | Flat subscription; decryption free | +| Deployment | AWS regions | Managed service or self-hosted container | + +### Developer experience + +| Feature | AWS KMS | CipherStash Encryption | +|---------|---------|------------------------| +| Basic encryption | Manual buffer/base64 handling | One call, JSON payload | +| Key management | You manage key ARNs | Automatic, via ZeroKMS | +| Searchable encryption | Not supported | Built-in for PostgreSQL | +| Identity-aware encryption | Manual workaround | Built-in `LockContext` | +| Bulk operations | Manual batching | Native bulk API | +| Error handling | Try/catch, manual types | Type-safe `Result` | +| Storage format | Binary (needs encoding) | JSON (`JSONB`-ready) | +| ORM integration | Manual | Built-in Drizzle support | + +## When to use each + +**AWS KMS fits when:** + +- You're encrypting AWS infrastructure resources (S3, EBS, RDS storage) rather than application records +- You need envelope encryption at rest with simple key management and no querying over ciphertext +- A shared-key model and AWS key custody are acceptable for your threat model + +**CipherStash fits when:** + +- You're encrypting application data in PostgreSQL and need to query it while it stays encrypted +- You want per-record keys, distributed trust, and instant, identity-based (OIDC) revocation +- You need real-time audit trails for compliance (SOC 2, HIPAA, GDPR) +- You're on multi-cloud or hybrid infrastructure and want to avoid provider key custody + +**Limits to know:** searchable encryption targets PostgreSQL; identity-aware encryption requires an OIDC provider; and CipherStash encrypts at the application layer, so it complements — rather than replaces — disk- or infrastructure-level encryption (where AWS KMS fits). + +## Migration path + +Migration from AWS KMS (or any cloud KMS) can be incremental: + +1. **Assess** — identify high-value data that benefits from per-record encryption and searchable queries +2. **Pilot** — start with a new application or a non-critical workload +3. **Integrate** — connect your existing OIDC identity provider +4. **Migrate** — move sensitive workloads to ZeroKMS in stages +5. **Coexist** — keep AWS KMS for infrastructure-level encryption + +## Learn more + +- [CipherStash Encryption getting started](/stack/quickstart) +- [ZeroKMS](/stack/cipherstash/kms) +- [Schema reference](/stack/cipherstash/encryption/schema) +- [Searchable encryption concepts](/stack/cipherstash/encryption/searchable-encryption) +- [Security architecture](/stack/reference/security-architecture) — leakage profiles and primitives +- [ZeroKMS vs Hardware Security Modules](/compare/zerokms-vs-hsm) +- [AWS KMS documentation](https://docs.aws.amazon.com/kms/) diff --git a/content/docs/concepts/compare/hashicorp-vault.mdx b/content/docs/concepts/compare/hashicorp-vault.mdx new file mode 100644 index 0000000..0c672e6 --- /dev/null +++ b/content/docs/concepts/compare/hashicorp-vault.mdx @@ -0,0 +1,118 @@ +--- +title: CipherStash vs HashiCorp Vault +description: How CipherStash ZeroKMS compares to HashiCorp Vault's Transit secrets engine for application-level encryption — trust model, per-record keys, plaintext exposure, and the trade-offs of Vault's direct and envelope modes. +type: concept +components: [zerokms] +audience: [developer, cto, ciso] +reviewBy: "2027-01-05" +--- + +HashiCorp Vault and CipherStash both encrypt application data, but they sit in different places in your architecture. The closest comparison is Vault's **Transit secrets engine** — "encryption as a service," where Vault holds the keys and the application calls it to encrypt and decrypt. CipherStash encrypts application data through a developer SDK backed by **ZeroKMS**, which issues a unique key per record and never holds the keys needed to decrypt your data. + +This page compares Transit with ZeroKMS. Vault's other engines (KV secrets storage, PKI, SSH) are out of scope. + +## What's being compared + +| Term | What it is | +|---|---| +| **Vault Transit** | Vault's encryption-as-a-service engine. The app sends data to Vault; Vault encrypts/decrypts with keys it holds and returns the result. Supports a batch API and key derivation. | +| **Vault Transit `datakey`** | Transit's envelope mode: Vault generates a data key (returns plaintext + a Vault-wrapped copy), analogous to AWS KMS `GenerateDataKey`. You encrypt locally and store the wrapped key. | +| **ZeroKMS** | CipherStash's key-management service. Derives a unique key per record on demand from client- and server-side components; no party — including CipherStash — holds a complete data key. | +| **CipherStash Encryption SDK** (`@cipherstash/stack`) | The library that encrypts/decrypts application data and runs searchable queries, backed by ZeroKMS. | + +## Two ways to use Vault Transit + +Transit can be used in two modes, and the distinction drives the whole comparison. + +**Direct encryption** (`/transit/encrypt`, `/transit/decrypt`) — the app sends **plaintext to Vault**, Vault returns ciphertext. It supports a batch API (`batch_input`, many values per call) and can derive a key per *context* (`derived: true`). Fast, but your plaintext transits the Vault server. + +**Envelope encryption** (`/transit/datakey`) — Vault generates a data key; the app encrypts locally so **plaintext never leaves the client**. But `datakey` issues one key per call with no batch API, so a unique key per record means one Vault round-trip per record. To go fast you reuse one data key across many records — which puts you straight into data-key-reuse territory (covered below). + +## The trilemma + +For database field encryption you want three things at once: plaintext that never leaves the client, a unique key per record (so a compromised key exposes one record and access is auditable and revocable per record), and enough throughput to encrypt and decrypt in bulk. **No single Vault Transit configuration delivers all three** — each gives you two: + +| Configuration | Plaintext stays client-side | Per-record keys | Bulk-amortized | +|---|:---:|:---:|:---:| +| Transit direct, shared key | ✗ | ✗ | ✓ | +| Transit direct, derived per-record (`context`) | ✗ | ✓ | ✓ | +| Transit `datakey`, one key per record | ✓ | ✓ | ✗ | +| Transit `datakey`, key reused across records | ✓ | ✗ | ✓ | +| **ZeroKMS** | **✓** | **✓** | **✓** | + +ZeroKMS occupies the corner none of Vault's modes reach: the SDK encrypts locally (plaintext never sent), every record gets its own key, and a batch of up to 10,000 keys is a single round-trip. + +### Reading the table + +The trade-off lands in a different place than it does for a cloud KMS, because of one asymmetry in Vault's API: `encrypt` and `decrypt` are batched (`batch_input`), but `datakey` — which mints a data key for envelope mode — is **one key per call, with no batch**. + +- **Direct modes are fast both ways, but expose plaintext.** A whole batch encrypts or decrypts in one round-trip — but the plaintext is sent to Vault to be encrypted. Per-record keys are possible via a derived `context`; the exposure remains. +- **Envelope keeps plaintext client-side, but per-record keys cost you on writes.** A unique key per record means one `datakey` round-trip *per record* on the write path (there is no batched key generation). That's the `✗` in the bulk column — it's a *write*-throughput cost. +- **Reuse buys back write throughput by sharing a key** across many records. That's a security trade-off, not a free lunch: you lose per-record revocation (revoking one record's key revokes it for every record sharing it) and per-record audit (the log shows one unwrap of a key that opens many records, not which record was read). + +Note what does **not** happen: a scattered read does not collapse. Vault unwraps all the distinct data keys in a result with a single batched `transit/decrypt` call, so reads are one round-trip regardless of access pattern. This is where Vault differs from AWS KMS — whose `Decrypt` has no batch API, so a scattered read of N records costs N calls (see [CipherStash vs AWS KMS](/compare/aws-kms)). For Vault, the cost of per-record keys lands on **writes**, and the cost of reuse is the **security model** — not reads. + +## Architecture & trust model + +- **Plaintext exposure.** In Transit direct mode, plaintext is sent to Vault to be encrypted — Vault (and whoever operates it) sees it in the clear at the moment of encryption. ZeroKMS never receives plaintext: the SDK encrypts locally and ZeroKMS only performs key derivation. Vault's envelope mode also keeps plaintext client-side, but per-record keys then cost a `datakey` round-trip per record on write — or you reuse a key and take the security trade-off above. +- **Key custody and trust.** Transit keys live in Vault; whoever controls the Vault cluster (your operators, or HashiCorp for HCP Vault) controls the keys. ZeroKMS derives keys on demand by combining client- and server-side components and never stores them — no single party, including CipherStash, can decrypt unilaterally. +- **Key granularity.** A Transit key is typically shared across many records (shared-key blast radius), or derived per `context` if you build that in. ZeroKMS issues a unique key per record natively. +- **Access control & audit.** Vault gates Transit operations with its policy system and logs to the audit device, at key/path granularity. ZeroKMS binds decryption to OIDC identity with per-record access control, instant revocation, and a real-time per-record audit log. +- **Searchable encryption.** Transit's convergent mode makes encryption deterministic (equal plaintexts produce equal ciphertexts), which supports equality matching but not range or ordering. CipherStash provides searchable encryption — equality, range/order, and free-text — over PostgreSQL via EQL. + +<Callout title="The core difference" type="info"> +Vault Transit is a service you send data *to*. ZeroKMS is a key service the SDK derives keys *from*, so your plaintext stays in your application and every record gets its own key — without choosing between speed and per-record security. +</Callout> + +## Performance + +Unlike AWS KMS, Vault Transit **has a batch API**, so this is not a throughput blowout — batched Transit in-region is fast, and raw speed is not the differentiator. A few things shape a fair comparison: + +- Transit caches keys in memory and does not touch storage on the encrypt/decrypt hot path, so a single well-provisioned Vault node fairly represents per-node throughput. Scaling means adding nodes (an operational and cost consideration), where ZeroKMS is a managed service. +- A fair benchmark must use batch on both sides (Transit `batch_input` vs ZeroKMS bulk), run in-region with a separate load generator, and report Vault's envelope/`datakey` mode separately — its serial write path (per-record keys = one `datakey` round-trip per record, vs a reused key) is where the difference shows, not the batched read path. + +{/* TODO: link the in-region benchmark numbers once the `vault-transit` backend run lands (cipherstash/benches kms-app). Until then this section stays qualitative — no unsourced figures. */} + +The takeaway isn't that one is dramatically faster; it's that ZeroKMS reaches bulk throughput *without* sending plaintext to a server and *without* giving up per-record keys — the trade-off Vault forces. + +## Comparison + +| Property | Vault Transit | CipherStash (ZeroKMS) | +|---|---|---| +| Encryption location | On the Vault server (direct mode) | In the client (SDK) | +| Plaintext exposure | Sent to Vault (direct mode) | Never leaves the client | +| Key custody | In the Vault cluster you (or HCP) run | Derived on demand, never stored | +| Trust model | Whoever operates Vault holds the keys | Distributed; no single point of decryption | +| Key granularity | Shared key, or derived per `context` | Per record, native | +| Per-record revocation & audit | Per key / key version | Per record, identity-bound (OIDC) | +| Searchable encryption | Equality only (convergent mode) | Equality, range/order, free-text (EQL) | +| Bulk API | Yes (`batch_input`); `datakey` is one key per call | Yes (up to 10,000 keys per round-trip) | +| Deployment & ops | Self-host HA (unseal, storage, scaling) or HCP | Managed service, or self-host container | + +## When to use each + +**Vault Transit fits when:** + +- You already run Vault and want encryption-as-a-service alongside your other Vault workloads +- Sending plaintext to a service you operate is acceptable for your threat model +- A shared-key model (or context-derived keys you manage) meets your audit and revocation needs +- You need fully self-hosted, air-gappable infrastructure under your own operation + +**CipherStash fits when:** + +- Plaintext should never leave your application, even to your key service +- You want per-record keys, distributed trust, and instant identity-based (OIDC) revocation by default +- You need to query encrypted data in PostgreSQL while it stays encrypted +- You want managed key management without operating an HA key cluster +- You need real-time, per-record audit trails for compliance (SOC 2, HIPAA, GDPR) + +Vault and CipherStash can also coexist: Vault for infrastructure secrets and its other engines, CipherStash for application-layer, per-record data encryption and searchable queries. + +## Learn more + +- [CipherStash Encryption getting started](/stack/quickstart) +- [ZeroKMS](/stack/cipherstash/kms) +- [Searchable encryption concepts](/stack/cipherstash/encryption/searchable-encryption) +- [CipherStash vs AWS KMS](/compare/aws-kms) — the same data-key trade-off in a cloud KMS +- [All comparisons](/compare) +- [HashiCorp Vault Transit documentation](https://developer.hashicorp.com/vault/docs/secrets/transit) diff --git a/content/docs/concepts/compare/index.mdx b/content/docs/concepts/compare/index.mdx index 5c34ec1..bcc99d3 100644 --- a/content/docs/concepts/compare/index.mdx +++ b/content/docs/concepts/compare/index.mdx @@ -1,9 +1,20 @@ --- title: Comparisons -description: "How CipherStash compares to other approaches to protecting data." +seoTitle: How CipherStash compares +description: How CipherStash compares to alternative approaches — homomorphic encryption, cloud KMS, hardware security modules, and HashiCorp Vault. type: concept --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +Side-by-side breakdowns of CipherStash against the approaches teams most commonly weigh it against. Each page focuses on the same questions: what does each tool actually do, what are the per-operation trade-offs, and where is each one the right fit. -Until it lands, current documentation lives in the [existing docs](/stack). +<Cards> + <Card title="CipherStash vs AWS KMS" href="/compare/aws-kms" description="The zero-trust ZeroKMS architecture plus a developer-experience comparison — searchable queries, identity-aware keys, and bulk operations versus key ARNs and binary buffers." /> + <Card title="CipherStash vs HashiCorp Vault" href="/compare/hashicorp-vault" description="Per-record keys with plaintext that never leaves the client — versus the trade-off Vault Transit's direct and envelope modes force." /> + <Card title="ZeroKMS vs Hardware Security Modules" href="/compare/zerokms-vs-hsm" description="Cryptographic custody versus physical custody — how ZeroKMS reduces the cost, complexity, and operational burden of self-managed HSMs." /> + <Card title="CipherStash vs Homomorphic Encryption" href="/stack/reference/comparisons/fhe" description="Why searchable encryption is 5–6 orders of magnitude faster than FHE for real database workloads — with benchmark numbers." /> +</Cards> + +## Related + +- [Use cases](/stack/reference/use-cases) — including a comparison against data vaults like Skyflow and VGS. +- [Security architecture](/stack/reference/security-architecture) — the cryptographic primitives behind every comparison on this page. diff --git a/content/docs/concepts/compare/meta.json b/content/docs/concepts/compare/meta.json index 76e9696..5cbdb61 100644 --- a/content/docs/concepts/compare/meta.json +++ b/content/docs/concepts/compare/meta.json @@ -1,5 +1,5 @@ { "title": "Comparisons", "icon": "Scale", - "pages": ["..."] + "pages": ["aws-kms", "hashicorp-vault", "zerokms-vs-hsm"] } diff --git a/content/docs/concepts/compare/zerokms-vs-hsm.mdx b/content/docs/concepts/compare/zerokms-vs-hsm.mdx new file mode 100644 index 0000000..1a225e9 --- /dev/null +++ b/content/docs/concepts/compare/zerokms-vs-hsm.mdx @@ -0,0 +1,229 @@ +--- +title: ZeroKMS vs Hardware Security Modules (HSM) +description: Compare CipherStash ZeroKMS's zero-trust key management with traditional hardware security modules +type: concept +components: [zerokms] +audience: [cto, ciso] +reviewBy: "2026-10-05" +--- + +Hardware Security Modules (HSMs) provide cryptographic key management through tamper-evident hardware. They're often chosen when organizations need complete control over key custody, regulatory compliance with specific hardware standards, and jurisdictional certainty. + +Cloud based Key Management Services like ZeroKMS and AWS KMS use HSM internally. However, managing your own HSM can be a complex and costly undertaking. Careful consideration must be given to physical access management, key governance and disaster recovery plans. + +<Callout type="info"> +**ZeroKMS simplifies or eliminates self-managed HSM:** + +* as a viable alternative to HSM for many use-cases +* by reducing operational complexity and improving performance when customer managed HSM is mandated +</Callout> + +## Benefits of HSM + +TODO + +## HSM Challenges + +Virtually all key management solutions will use an HSM as part of a key heirarchy. + +<Callout type="warn"> +The question isn't whether an HSM is required but rather if self-managed HSM is necessary to meet compliance and security goals. +</Callout> + +Below are some of the challenges associated with self-managed HSM that should be considered before deciding on a key management strategy. + +### Physical access + +HSMs require secure physical installation — often in locked racks or safes within a data center with strict access controls, surveillance, and environmental protections. + +![A generated image of an HSM in a server-rack](/images/hsm.png) + +Standards like FIPS and PCI require dual control and split-knowledge policies, meaning no single person can access keys alone. This can complicate physical security which not only introduces risk but adds significant cost. + +<Callout title="ZeroKMS Advantage" type="info"> +ZeroKMS replaces physical custody with cryptographic custody — the root key still lives in hardware, but access, rotation, and audit are handled programmatically and verifiably, eliminating the physical-access bottlenecks that plague traditional HSM operations. + +TODO: this could be worded better +The ZeroKMS distributed trust model means that even HSM controlled root keys are unable to perform cryptographic operations on their own. +</Callout> + +Learn more (link): +TODO: Cryptographic custody and distributed trust (maybe this is an article called Trust Model) + +### Integration effort + +Integrating software applications with an HSM requires the use of low-level interfaces like PKCS#11, JCE or CNG. Additionally, integration with network-based HSMs such as AWS CloudHSM or Thales Luna require secure channel setup, VPNs, or private VPC endpoints. + +Using PKCS#11, JCE, or CNG directly is notoriously difficult for developers — even seasoned security engineers — because these APIs were designed primarily for hardware abstraction and compliance, not for developer ergonomics. + +<Callout title="ZeroKMS Advantage" type="info"> +ZeroKMS integrates via Protect SDK or CipherStash Proxy which eliminate the complexity of PKCS#11-, JCE-, and CNG-style APIs. + +These provide simple, developer-friendly interfaces that integrate directly into application code and databases without requiring HSM drivers, provider configuration, or handle management. +</Callout> + +### Operational complexity + +Traditional HSMs are difficult to scale because every device manages its own key state — meaning key generation, rotation, and backup must be coordinated manually across identical hardware. Achieving high availability or disaster recovery requires securely replicating keys between HSMs, which is slow, error-prone, and often breaks FIPS compliance if not done through vendor-specific procedures. + +When an HSM loses power, it wipes all active secrets and reboots into a locked, verified state. +Recovery requires re-authenticating operators and reloading encrypted key partitions — a safe but slow process that depends on physical credentials, making automated or cloud-scale recovery difficult. + +TODO: key ceremonies, replication, uptime (eg. power), reliability etc + +### Compliance + +TODO: Talk about PCI/DSS etc + +### Expertise + +Managing an HSM demands cryptographic fluency, vendor-specific training, and precise procedural control — a combination that is hard to hire for. Failing to recruit sufficiently qualified personel can leave organizations vulnerable. + +<Callout title="ZeroKMS Advantage" type="info"> +ZeroKMS was designed to be simple to use without the need for specialized skills or expertise. Each system component is built on a high-assurance framework, is misuse resistant and forgiving even for engineers with limited cryptographic knowledge. +</Callout> + +### Cost model + +HSMs deliver strong assurance but come with high upfront and ongoing costs. Hardware units typically cost tens to hundreds of thousands of dollars each, plus annual support, licensing, and maintenance contracts. Scaling requires buying more physical devices, not just compute, and disaster recovery often means duplicating hardware across regions. Operating them also demands specialist staff, secure facilities, and compliance audits — making total cost of ownership (TCO) high and predictable only at small scale. + +<Callout title="ZeroKMS Advantage" type="info"> +ZeroKMS can be purchased via a monthly or annual subscription. There are no upfront or hidden costs. +</Callout> + +## Hybrid solutions + +{/* TODO: add a diagram here. The original Markdoc source used a D2 diagram (this repo has no D2 renderer yet). Original source: +direction: down + +Client: { + label: 'Client Application' + App: { + label: 'App Logic' + } + SDK: { + label: 'Crypto SDK / PKCS#11' + } + App -> SDK: 'Crypto requests' +} + +HSM: { + label: 'HSM' + Key: {label: 'Secret Key'} +} + +Client.SDK -> HSM: 'Generate Data Key' +*/} + +## Why Organizations Choose HSMs + +### Full Control and Ownership + +HSMs offer complete end-to-end ownership over cryptographic keys, including their generation, rotation, archival, and destruction. No external party has access to keys under any circumstances. + +### Physical Security and Isolation + +Keys are protected by tamper-evident hardware in a physically isolated environment. Sensitive material never leaves the secure boundary of the device. + +### Compliance with Regulations + +Many organizations require FIPS 140-2 Level 3 or Level 4, PCI DSS, or region-specific data residency laws. HSMs provide auditable hardware-based security with proof of key custody. + +### Assured Key Destruction + +Organizations can trigger and verify cryptographic erase or physically destroy HSM modules locally, meeting policy requirements for witnessed destruction and compliance audits. + +### Jurisdictional Certainty + +On-premises HSMs ensure all key management and backups remain under the organization's legal jurisdiction, preventing cross-border replication and reducing sovereignty risks. + +### Performance and Latency + +Local HSMs provide predictable, ultra-low-latency cryptographic operations for real-time applications and highly sensitive transactional workloads. + +### Customization and Legacy Integration + +HSMs integrate with legacy infrastructure, support custom backup and cluster topologies, and enable cryptographic ceremonies without being restricted by provider APIs or cloud-specific tooling. + +## How ZeroKMS Addresses HSM Requirements + +### Per-Record and Zero-Knowledge Key Management + +ZeroKMS derives a unique key per record on demand; keys are never stored, and no single party — including CipherStash — can decrypt data unilaterally (CipherStash calls this *zero-knowledge* key management). A compromised key exposes a single record rather than a dataset, addressing the shared-key blast radius of centralized KMS while keeping key custody distributed rather than tied to physical hardware. + +### No Shared Secrets and No Single Point of Decryption + +Keys are derived on-demand by combining client- and server-side components. No centralized key store exists, and no party (client, server, or CipherStash) holds all components needed to decrypt data unilaterally. + +### Instant Key Revocation and Fine-Grained Access + +Organizations maintain fine-grained, identity-based access control via OIDC integration. Only authorized identities can decrypt specific records. Instant revocation and real-time audit logs provide continuous, provable compliance that often exceeds traditional HSM audit capabilities. + +### Performance Without Bottlenecks + +ZeroKMS adds [sub-5ms overhead](https://app.artillery.io/share/sh_75edb9d22a060633bfdce04777ffd60d1bcfc88989393dc38d3a4924b83fc6cd) for most operations, removing the latency and throughput bottlenecks associated with hardware HSMs. + +### Continuous Audit and Compliance + +Instead of point-in-time compliance checks, ZeroKMS logs every access in real time with cryptographically verifiable audit trails. This exceeds standard attestation methods used with HSMs. + +### Flexible Deployment and Jurisdiction Control + +ZeroKMS runs as a managed cloud service across multiple regions. It's also available as a Docker container for deployment under your own jurisdiction when needed. + +## Comparison Table + +| Feature | HSMs | ZeroKMS | +|---------|------|----------| +| Key Storage | Centralized in hardware | Distributed, generated locally | +| Deployment | Physical/Virtual appliance | Managed service or container | +| Control Model | Full hardware custody | Zero-knowledge, client-side | +| Compliance | FIPS 140-2 L3/L4 | Continuous audit, cryptographic proofs | +| Performance | Hardware-limited | Sub-5ms overhead at scale | +| Scaling | Hardware-dependent | Software-defined, unlimited | +| Cost Model | CapEx + maintenance | Usage-based | +| Jurisdictional Control | Full on-prem control | Flexible deployment | +| Key Granularity | Shared keys | Per-record keys | + +## Benefits for Regulated Environments + +ZeroKMS enables organizations to maintain HSM-like control, auditability, and compliance while delivering lower operational overhead and greater scalability for modern applications: + +- Prove continuous control for compliance-sensitive workloads in financial services, healthcare, and regulated markets +- Support real-time use cases without sacrificing speed or security +- Eliminate vendor lock-in by never holding centralized secrets or requiring shared credentials +- Reduce breach impact through per-record encryption and instant access revocation + +## Use Cases + +### When HSMs Make Sense + +- Regulatory requirements explicitly mandate FIPS 140-2 Level 3+ hardware certification +- Legacy systems require direct HSM integration +- On-premises-only deployments with no cloud connectivity +- Root key protection for certificate authorities + +### When ZeroKMS Makes Sense + +- Cloud-native or hybrid architectures +- High-throughput encryption requirements with modern applications +- Fine-grained, per-record encryption and access control +- Zero-trust security requirements without delegating trust to providers +- Global, multi-region deployments +- Rapid development and deployment cycles +- Continuous compliance and real-time auditability + +## Complementary Deployment + +Organizations can use HSMs and ZeroKMS in complementary roles: + +- **HSMs**: Protect root keys and certificate authorities +- **ZeroKMS**: Handle application-layer data encryption and key management + +This layered approach provides defense in depth while maintaining performance and flexibility for application development. + +## Learn More + +- [Read about ZeroKMS](/stack/cipherstash/kms) +- [View all comparisons](/compare) +- [Book a discovery session](/stack/reference/discovery-session) diff --git a/public/images/hsm.png b/public/images/hsm.png new file mode 100644 index 0000000000000000000000000000000000000000..ccb6edadd521f3766c1065755d03d7897d96cb4b GIT binary patch literal 1406758 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�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 <ug|# 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≫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%0DJ)7dUlBsF7rWkg*ZEc0 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%0A|BI`BYqXk$-L%h0016 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 }H{0Ut_6u6cew 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 literal 0 HcmV?d00001 From b5bc0f557804941304030d4e12e4f455bfb51933 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Sun, 5 Jul 2026 17:02:23 +1000 Subject: [PATCH 025/151] docs(v2): port the FHE comparison to /compare, rewritten for EQL v3 Completes the /compare section: content/docs/compare/fhe.mdx, updated from EQL v2 to EQL v3 and wired into the overview cards and nav. - Types/operators: eql_v2_encrypted -> the eql_v3 domain-variant model (text_eq / int8_ord / text_match / text_search), typed-operand casts, and encrypted text match via bloom-filter `@>` (LIKE is blocked on ciphertext, now stated explicitly). - Scheme portfolio + leakage rewritten around the v3 terms (hm / ob / bf) and the new order-preserving encryption (OPE) fast path; dropped the unverified BLAKE3 primitive claim. - New "Real-world performance on EQL v3" section with v3 database-level numbers (0.12 ms exact equality ~1.3x plaintext; OPE range 0.12 ms ~1.2x plaintext; ORE range 4x faster than v2; bloom match 100-400x vs no index -- 1M rows, M1 Max, PG 17), from cipherstash/benches PR #23. Kept the primitive-level TFHE-vs-ORE table (tfhe-ore-bench). A public citation for the v3 DB figures is flagged with a TODO pending publication. - Links repointed to the v3 EQL reference (/reference/eql, core-concepts); cross-links to un-ported pages keep pointing at the served legacy /stack tree. Based on the v3 EQL reference; source of truth for terminology and terms is content/docs/reference/eql/core-concepts. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/concepts/compare/fhe.mdx | 228 ++++++++++++++++++++++++ content/docs/concepts/compare/index.mdx | 2 +- content/docs/concepts/compare/meta.json | 2 +- 3 files changed, 230 insertions(+), 2 deletions(-) create mode 100644 content/docs/concepts/compare/fhe.mdx diff --git a/content/docs/concepts/compare/fhe.mdx b/content/docs/concepts/compare/fhe.mdx new file mode 100644 index 0000000..a4905bb --- /dev/null +++ b/content/docs/concepts/compare/fhe.mdx @@ -0,0 +1,228 @@ +--- +title: CipherStash vs Homomorphic Encryption +description: Searchable encryption is not FHE. See how CipherStash queries encrypted data with EQL v3 and why it's far faster than fully homomorphic encryption for real workloads. +type: concept +components: [encryption, eql] +audience: [developer, cto, ciso] +reviewBy: "2027-01-05" +--- + +CipherStash is often described — incorrectly — as "homomorphic encryption for databases." It isn't. CipherStash uses a **portfolio of specialised searchable-encryption schemes**, exposed through PostgreSQL via [EQL](/reference/eql), that are 5–6 orders of magnitude faster than today's best Fully Homomorphic Encryption (FHE) at the operations a real database actually runs. + +This page explains the difference, with numbers. + +## TL;DR + +| | Fully Homomorphic Encryption (FHE) | CipherStash searchable encryption | +| --- | --- | --- | +| **Goal** | Run *arbitrary* computation on ciphertext | Make the database operations a real workload runs (equality, match, range) practical on ciphertext | +| **Approach** | One general-purpose primitive | A portfolio of specialised primitives, one per query type | +| **Per-operation cost (Apple M2)** | ~150 ms equality, ~165 ms compare, ~11 ms encrypt | ~755 ns equality, ~755 ns compare, ~375 µs encrypt | +| **Speed-up vs TFHE** | 1× | ~200,000× equality, ~215,000× greater-than, ~29× encrypt | +| **Where it runs** | Specialised libraries, custom hardware proposals | Standard PostgreSQL with [EQL v3](/reference/eql) | +| **Production-ready today** | No — orders of magnitude too slow for OLTP | Yes — ~0.12 ms exact match and order-preserving range on million-row tables (EQL v3) | + +Benchmarks: primitive-level FHE-vs-ORE from [`github.com/cipherstash/tfhe-ore-bench`](https://github.com/cipherstash/tfhe-ore-bench) (Apple M2, single-threaded; TFHE vs CipherStash ORE); database-level EQL v3 numbers from CipherStash's EQL v3 benchmark suite (1M rows, Apple M1 Max, PostgreSQL 17). + +## Why the conflation happens + +Both FHE and searchable encryption answer the question *"Can I do something useful with encrypted data without decrypting it first?"* That question, framed at a whiteboard, sounds like a single problem. So when people first see CipherStash they reach for the most well-known answer — homomorphic encryption — and the comparison sticks. + +It's the wrong frame. FHE and searchable encryption sit on opposite ends of a generality / performance trade-off: + +- **FHE** keeps a single ciphertext format and lets you run *any* circuit over it. The price is that even simple operations cost tens to hundreds of milliseconds per ciphertext, and the ciphertext blows up in size as you compose operations. It is a remarkable theoretical achievement and an active area of research; it is not yet practical for production databases. + +- **Searchable encryption** is a family of primitives, each *purpose-built* for one class of operation. Equality has its own scheme. Substring containment has its own scheme. Range and ordering have their own scheme. Each is dramatically cheaper than FHE because each does much less. + +CipherStash is squarely in the second camp. The reason it can deliver microsecond-class encrypted predicates while TFHE takes 150 ms is not that we found a faster FHE — it's that we don't need FHE at all. + +## Two cryptographic philosophies + +**FHE** stakes everything on a single universal cipher and the ability to run any circuit over it. The cost is tens to hundreds of milliseconds per operation. + +**CipherStash** keeps a portfolio of specialised ciphers and picks the right one per query type. The cost is sub-microsecond per operation. + +For workloads that are essentially "find rows where X, sort by Y" — i.e. the workload of every line-of-business application on the planet — the second philosophy is dramatically more efficient and equally rigorous, *provided* each scheme has a published, formally-bounded leakage profile. CipherStash's schemes do (see [Core concepts](/reference/eql/core-concepts) for what each index term reveals, and [Security architecture](/stack/reference/security-architecture) for the formal profiles). + +## Performance — measured per-operation cost + +Numbers below are from the open-source benchmark harness at [`github.com/cipherstash/tfhe-ore-bench`](https://github.com/cipherstash/tfhe-ore-bench). Single-threaded, Apple M2, comparing TFHE — a leading FHE library — against CipherStash's Order-Revealing Encryption (ORE) on the primitive operations a database executes per row. + +| Operation | TFHE (FHE) | CipherStash ORE | Speed-up | +| --- | --- | --- | --- | +| Encrypt one value | ~11 ms | ~375 µs | ~29× | +| Equality (`a == b`) | ~150 ms | ~755 ns | **~200,000×** | +| Greater-than (`a > b`) | ~162 ms | ~755 ns | **~215,000×** | +| Less-than (`a < b`) | ~166 ms | ~755 ns | **~220,000×** | +| Greater-or-equal (`a >= b`) | ~25 ms | ~131 ns | **~190,000×** | +| Less-or-equal (`a <= b`) | ~30 ms | ~131 ns | **~225,000×** | + +The implication is straightforward: a single equality check at ~150 ms is already untenable per row. Multiplied across a million-row `WHERE` clause, FHE is impossible; the same predicate in CipherStash runs in microseconds end-to-end and rides standard PostgreSQL B-tree, hash and GIN indexes. + +### Real-world performance on EQL v3 + +The per-operation numbers above measure the ORE primitive in isolation. In a live database the more useful question is how an encrypted query compares to the *same query on plaintext PostgreSQL*. CipherStash's EQL v3 benchmark suite measured this on a 1M-row table (Apple M1 Max, PostgreSQL 17): + +| Query | EQL v3 | vs plaintext PostgreSQL | +| --- | --- | --- | +| Exact equality (`=`) | ~0.12 ms | ~1.3× | +| Range + ordered, order-preserving (OPE) | ~0.12 ms | ~1.2× | +| Range `LIMIT 100` (ORE) | — | 4× faster than EQL v2 | +| Token match (bloom filter) | — | 100–400× vs no index | + +{/* TODO: EQL v3 database benchmark figures are from the EQL v3 suite in cipherstash/benches (report/V3_COMPARISON.md, 1M rows / M1 Max / PG 17). Replace with a public-facing citation once the v3 benchmarks are published, as the tfhe-ore-bench link does for the primitive numbers. */} + +Encrypted equality and order-preserving range queries run within ~20–30% of plaintext PostgreSQL on a million rows — the functional index on the encrypted term engages exactly as it would on a plaintext column. EQL v3 adds an **order-preserving encryption (OPE)** option alongside ORE for orderable columns; where the security model allows it, OPE brings range and `ORDER BY` to near-plaintext latency (its index also builds ~40× faster than ORE at 1M rows). This is the concrete meaning of "production-ready": not "faster than FHE in theory," but low-single-digit-millisecond encrypted predicates on realistic table sizes. + +> **Good to know**: FHE's selling point is that it can compute *anything*. CipherStash deliberately doesn't try to. We bet — correctly, for database workloads — that the long tail of "interesting" computation a database performs collapses to a small set of well-defined operations, and that specialised schemes for those operations beat a universal one by five or six orders of magnitude. + +## The CipherStash scheme portfolio + +In EQL v3, a column's capability is declared by its **domain type** in the `eql_v3` schema — `eql_v3.text_eq` (equality), `eql_v3.int8_ord` (range/order), `eql_v3.text_match` (token match), `eql_v3.text_search` (all three). The type fixes which searchable terms travel in the encrypted payload. In practice, only the 3–5 sensitive columns per table use these schemes; foreign keys, timestamps, status flags and most other columns remain plaintext and behave exactly as they always have. That is what makes the portfolio approach tractable in real deployments. + +| Scheme | Used for | Mechanism | Leakage profile | +| --- | --- | --- | --- | +| **HMAC-SHA-256** (`hm` term) | Exact equality (`=`, `IN`, joins, `GROUP BY`, `DISTINCT`) on `_eq` / `text_search` variants | Keyed hash — equal plaintexts produce equal tags; distinct plaintexts are indistinguishable. | Value repetition only (which rows share a value). Encrypt high-cardinality columns to limit frequency exposure. | +| **Block ORE** (`ob` term, `eql_v3.ore_block_256`) | Range and ordering (`<`, `>`, `BETWEEN`, `ORDER BY`, `MIN`/`MAX`) on `_ord` variants | Order-revealing encryption over block terms; comparison performed via the Postgres operator class. | Relative order of two values — nothing about magnitude. | +| **Order-preserving encryption (OPE)** (`_ord_ope` specifier) | The EQL v3 fast path for the same range / order operations | Order-preserving term giving near-plaintext index performance; pinned via the `_ord_ope` domain specifier. | Relative order of two values — same class as ORE, faster to query. | +| **Encrypted Bloom filter** (`bf` term, `eql_v3.bloom_filter`) | Token / substring match (`@>`; there is no `LIKE` on ciphertext) on `_match` / `text_search` variants | Trigram tokens hashed into a fixed-size bit vector; queried via GIN containment with client-side false-positive filtering. | Probabilistic token overlap. False-positive rate doubles as a security knob — higher FPR obscures token frequency. | + +Underlying every encrypted value, AES-based authenticated encryption provides the ciphertext (`c`) used for retrieval. The schemes above are *searchable index terms* stored alongside it, not replacements for it. The database stores `ciphertext + terms`; the application receives plaintext only after key-bound decryption. See [Core concepts](/reference/eql/core-concepts) for the full payload anatomy. + +## What gets encrypted, and what doesn't + +A common misconception is that "encrypted database" means every column is opaque. In reality: + +- **Sensitive columns are encrypted.** Names, emails, phone numbers, financial values, health attributes, free-text notes — typically 3–5 columns per sensitive table. +- **Everything else stays plaintext.** Surrogate primary keys, foreign keys, timestamps, enums, status flags, soft-delete markers, audit columns. They behave normally — indexed normally, joined normally, replicated normally. +- **Joins usually happen on plaintext.** Foreign keys are not normally sensitive; the join keys are plaintext, and join performance is unchanged. Where a join *does* need to happen on a sensitive value, an equality (`_eq`) term makes it efficient. + +This single fact reframes most operational concerns about encrypted databases. The encrypted columns are an addition to your schema, not a replacement for it. + +## Where plaintext actually lives + +With the [Encryption SDK](/stack/cipherstash/encryption), plaintext exists only inside your client application, edge worker, or browser. The PostgreSQL database, the network between you and it, any logical-replication consumer, and any Postgres-aware tooling (pgAdmin, query logs, backups, debug snapshots) see only ciphertext and searchable terms. + +This matters because most production data exposure happens *outside* the database — in proxies, replicas, BI tools, debug logs, error-reporting systems. With the SDK pattern, those surfaces never see plaintext to begin with. + +> **Good to know**: CipherStash also offers a server-side [Proxy](/stack/cipherstash/proxy) for drop-in adoption with no code changes. Proxy and SDK are different deployment shapes of the same primitives; the SDK pattern gives you the strongest end-to-end guarantee. + +## EQL — open source, pluggable, extensible + +All of this is implemented as **EQL — Encrypt Query Language**, an open-source set of PostgreSQL types, operators, and functions ([github.com/cipherstash/encrypt-query-language](https://github.com/cipherstash/encrypt-query-language)). EQL v3 exposes the encrypted operators as standard SQL over a family of domain types in the `eql_v3` schema: + +- HMAC-backed equality for `=`, `IN`, joins, `GROUP BY`, and unique constraints +- Bloom-filter–backed token containment for `@>` (encrypted free-text match — `LIKE`/`ILIKE` are blocked on ciphertext) +- ORE- and OPE-backed comparisons for `<`, `>`, `BETWEEN`, and `ORDER BY` + +Because every encrypted predicate is just standard SQL on an `eql_v3` domain column, your application SQL stays standard SQL. Your ORM, your query builder, your DBA's `EXPLAIN ANALYZE` workflow, your migration tooling — all of it keeps working. The one rule: operands must be **typed** (`$1::eql_v3.text_eq`, not a bare literal) so the encrypted operator resolves rather than falling back to native `jsonb` semantics — the SDK and Proxy do this automatically. See [Core concepts](/reference/eql/core-concepts#the-typed-operand-rule). + +Two architectural consequences are worth calling out: + +**Schemes are swappable.** A column's mechanism is declared by its domain variant, so it can be migrated — for example ORE to OPE for faster ordering — without changing application SQL. As stronger primitives mature — lattice-based searchable schemes, structured encryption variants, eventually practical FHE for specific operations — they slot in behind the same EQL surface. + +**Quantum-resistant by construction.** The primitives (AES-based authenticated encryption, HMAC-SHA-256, and the ORE / bloom-filter constructions) avoid the cryptographic assumptions known to fall to a sufficiently large quantum computer. No RSA, no elliptic curves. A column encrypted today is still secure on the day post-quantum migration becomes urgent. + +## What this looks like in SQL + +Encrypted columns participate in standard SQL — the `eql_v3` domain types and their operators do the heavy lifting. Operands are typed with the column's domain variant: + +```sql title="encrypted-queries.sql" +-- Exact equality (HMAC term) +SELECT id, name +FROM users +WHERE email = $1::eql_v3.text_eq; + +-- Token / substring match (bloom filter — there is no LIKE on ciphertext) +SELECT id, name +FROM users +WHERE name @> $1::eql_v3.text_match +LIMIT 10; + +-- Range query (ORE / OPE term) +SELECT id, amount +FROM transactions +WHERE amount > $1::eql_v3.int8_ord +ORDER BY amount +LIMIT 100; + +-- Join on a plaintext foreign key (unchanged) +SELECT u.id, t.amount +FROM users u +JOIN transactions t ON t.user_id = u.id +WHERE u.email = $1::eql_v3.text_eq; +``` + +In each case, the bound parameter is an encrypted payload produced by the SDK — the application encrypts the search value with the same key as the stored data, and PostgreSQL compares the searchable terms without ever seeing plaintext. See the [EQL reference](/reference/eql) for the full type, operator, and function surface. + +## Operational FAQ + +The questions a senior engineer typically asks before approving an encrypted-database rollout — answered directly. + +### Joins across encrypted columns? + +Supported, and effectively the same performance as plaintext. In practice the join key itself is rarely sensitive — joins happen on surrogate IDs or foreign keys, which stay plaintext. When a join *does* need to happen on a sensitive value (e.g. email), an equality (`_eq`) term makes equijoins efficient — subject to both columns sharing the same encryption keyset. + +### `MIN`, `MAX`, `COUNT`? + +`COUNT` works without modification on encrypted columns. `MIN` and `MAX` work over `_ord` (ORE/OPE) columns. `SUM` and `AVG` of encrypted numerics are not supported by the current scheme portfolio — decrypt application-side or aggregate over a plaintext bucket column. + +### `GROUP BY`? + +Supported on `_eq` (equality-indexed) columns. By definition, grouping by an encrypted column reveals the histogram of distinct values to the query — that is the result the application asked for. If the histogram itself is sensitive, group on a coarser plaintext bucket column instead, or restrict who can run the query at the application layer. + +### Foreign keys, cascading deletes? + +Unchanged. Foreign keys are not normally encrypted; cascading deletes, referential integrity, and `ON DELETE` semantics work as they always have. + +### NULL, empty strings, collation? + +Preserved. A SQL `NULL` is never encrypted, so `IS NULL` / `IS NOT NULL` work on every variant. Encrypted strings carry the metadata needed to keep ordering and equality consistent under encryption. NULL handling matches standard PostgreSQL semantics. + +### Logical replication, `pg_dump` / restore, read replicas? + +All supported. Encrypted values and terms are stored as standard PostgreSQL `jsonb` — they replicate, dump, restore and stream to read replicas like any other column. + +### Backups and key recovery? + +Key references are stored alongside the ciphertext. On restore, the SDK derives the same per-record keys via [ZeroKMS](/stack/cipherstash/kms) using those references. There is no separate "key restore" step that has to be choreographed with the data restore — the references travel with the data. + +### Supabase RLS and PostgREST? + +Both work. RLS policies execute against plaintext columns (typically authentication-related: `user_id`, `tenant_id`) just as they do today. PostgREST exposes encrypted columns as opaque values to clients, and the SDK handles encryption/decryption at the application boundary. + +### Schema migrations and re-keying? + +A column's mechanism is declared by its domain variant and can be migrated without changing application SQL. Online re-keying is supported via dual-write during the migration window. + +## Security & threat model + +Each scheme has a published, formally-bounded leakage profile (see [Core concepts](/reference/eql/core-concepts#what-the-terms-reveal)): + +- **HMAC-SHA-256** (`hm`): equality only. Reveals value repetition; eliminated for unique columns or by encrypting only high-cardinality values. +- **Encrypted Bloom filter** (`bf`): false-positive rate is a deliberate parameter; raising it obscures token-frequency patterns at the cost of additional client-side filtering. Repeated query analysis is bounded by the FPR. +- **Block ORE / OPE** (`ob`): reveals the relative order of values, and nothing about magnitude. OPE trades a faster, index-friendlier term for the same order-only leakage class. + +The trust boundary in the recommended SDK deployment is your client application, edge worker, or browser. The PostgreSQL instance, the network, ZeroKMS, the operator running your Postgres, and any Postgres-aware tooling are all *outside* that boundary and never see plaintext. + +For deeper analysis — formal definitions of each scheme's leakage function, parameter-selection guidance, and attack-model walk-throughs — see [Security architecture](/stack/reference/security-architecture). Full analysis is available on request under NDA. + +## When CipherStash isn't the right fit + +In the spirit of an honest comparison page: + +- **You need general-purpose computation on ciphertext.** If your workload is "run arbitrary user-defined functions over encrypted data" — for example, evaluating an opaque ML model on encrypted inputs — searchable encryption is not the right tool. That is genuinely the FHE problem, and you should track the FHE literature. +- **The query patterns you care about aren't equality, match or range.** Searchable encryption schemes exist for many other operations (graph traversal, geometric proximity, regex), but CipherStash's portfolio today is targeted at the operations a typical OLTP / line-of-business workload runs. If your central workload is something else, [talk to us](https://cipherstash.com/contact) about what's possible. +- **You want every column encrypted with no plaintext metadata at all.** That is achievable but expensive, and almost always unnecessary. The right design encrypts the sensitive columns and leaves the rest of the schema in plaintext. + +## Get started + +- **Primitive benchmarks (FHE vs ORE)**: [`github.com/cipherstash/tfhe-ore-bench`](https://github.com/cipherstash/tfhe-ore-bench) +- **EQL reference**: [`/reference/eql`](/reference/eql) +- **EQL on GitHub**: [`github.com/cipherstash/encrypt-query-language`](https://github.com/cipherstash/encrypt-query-language) +- **Encryption SDK quickstart**: [`/stack/quickstart`](/stack/quickstart) +- **Talk to us** about a specific workload: [cipherstash.com/contact](https://cipherstash.com/contact) + +--- + +> **Bottom line**: CipherStash is *not* FHE and does not need to be. It is a portfolio of specialised, well-understood searchable-encryption schemes — HMAC for equality, encrypted Bloom filters for token match, Block ORE and OPE for range — exposed through [EQL v3](/reference/eql) on standard PostgreSQL. That is what makes it 5–6 orders of magnitude faster than TFHE at the operations a real workload runs, while keeping data encrypted end-to-end. diff --git a/content/docs/concepts/compare/index.mdx b/content/docs/concepts/compare/index.mdx index bcc99d3..a534c97 100644 --- a/content/docs/concepts/compare/index.mdx +++ b/content/docs/concepts/compare/index.mdx @@ -11,7 +11,7 @@ Side-by-side breakdowns of CipherStash against the approaches teams most commonl <Card title="CipherStash vs AWS KMS" href="/compare/aws-kms" description="The zero-trust ZeroKMS architecture plus a developer-experience comparison — searchable queries, identity-aware keys, and bulk operations versus key ARNs and binary buffers." /> <Card title="CipherStash vs HashiCorp Vault" href="/compare/hashicorp-vault" description="Per-record keys with plaintext that never leaves the client — versus the trade-off Vault Transit's direct and envelope modes force." /> <Card title="ZeroKMS vs Hardware Security Modules" href="/compare/zerokms-vs-hsm" description="Cryptographic custody versus physical custody — how ZeroKMS reduces the cost, complexity, and operational burden of self-managed HSMs." /> - <Card title="CipherStash vs Homomorphic Encryption" href="/stack/reference/comparisons/fhe" description="Why searchable encryption is 5–6 orders of magnitude faster than FHE for real database workloads — with benchmark numbers." /> + <Card title="CipherStash vs Homomorphic Encryption" href="/compare/fhe" description="Why searchable encryption is 5–6 orders of magnitude faster than FHE for real database workloads — with EQL v3 benchmark numbers." /> </Cards> ## Related diff --git a/content/docs/concepts/compare/meta.json b/content/docs/concepts/compare/meta.json index 5cbdb61..956597a 100644 --- a/content/docs/concepts/compare/meta.json +++ b/content/docs/concepts/compare/meta.json @@ -1,5 +1,5 @@ { "title": "Comparisons", "icon": "Scale", - "pages": ["aws-kms", "hashicorp-vault", "zerokms-vs-hsm"] + "pages": ["fhe", "aws-kms", "hashicorp-vault", "zerokms-vs-hsm"] } From a10e6b7d4097e91f955ff89eeaa743738156500e Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Sun, 5 Jul 2026 15:14:10 +1000 Subject: [PATCH 026/151] docs(v2): add nested EQL v2 reference for existing v2.2 deployments MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Some customers still run EQL v2.2 (v2.3 is being withdrawn). The new /reference/eql section documents EQL v3 only, so this adds a durable, nested EQL v2 reference sourced from the v2.2 docs, surviving the CIP-3335 deletion of the legacy /stack tree: content/docs/reference/eql/v2/ index.mdx — EQL v2 overview (from reference/eql-guide.mdx) indexes.mdx — index recipes, incl. the Supabase query forms queries.mdx — equality / match / range query patterns payload.mdx — the CipherCell v2.2 payload (b3, ocf/ocv) Content is the v2.2 legacy docs, NOT the EQL 2.3 rewrites from #21/#22 (which no longer ship). Two grounded doc-bug fixes are carried in: the eql-guide's fabricated index-extraction function names are corrected to the real eql_v2.hmac_256 / bloom_filter / ore_block_u64_8_256 (verified against the index recipes), and a stale cs_ste_vec_v2 name is aligned to eql_v2.ste_vec. Each page carries v2 facets (type: reference, components: [eql], verifiedAgainst eql 2.2) and a version banner routing new projects to the v3 reference. Wired into the EQL nav under a "Previous versions" separator. Supersedes #21 and #22 for the v2 branch. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/eql/meta.json | 4 +- content/docs/reference/eql/v2/index.mdx | 122 +++++++++ content/docs/reference/eql/v2/indexes.mdx | 154 +++++++++++ content/docs/reference/eql/v2/meta.json | 4 + content/docs/reference/eql/v2/payload.mdx | 309 ++++++++++++++++++++++ content/docs/reference/eql/v2/queries.mdx | 277 +++++++++++++++++++ 6 files changed, 869 insertions(+), 1 deletion(-) create mode 100644 content/docs/reference/eql/v2/index.mdx create mode 100644 content/docs/reference/eql/v2/indexes.mdx create mode 100644 content/docs/reference/eql/v2/meta.json create mode 100644 content/docs/reference/eql/v2/payload.mdx create mode 100644 content/docs/reference/eql/v2/queries.mdx diff --git a/content/docs/reference/eql/meta.json b/content/docs/reference/eql/meta.json index f4268ce..76a855b 100644 --- a/content/docs/reference/eql/meta.json +++ b/content/docs/reference/eql/meta.json @@ -14,6 +14,8 @@ "filtering", "sorting", "grouping-and-aggregates", - "joins" + "joins", + "---Previous versions---", + "v2" ] } diff --git a/content/docs/reference/eql/v2/index.mdx b/content/docs/reference/eql/v2/index.mdx new file mode 100644 index 0000000..d25131a --- /dev/null +++ b/content/docs/reference/eql/v2/index.mdx @@ -0,0 +1,122 @@ +--- +title: EQL v2 +description: PostgreSQL types, operators, and functions for querying encrypted data with EQL v2 (v2.2) — the eql_v2_encrypted type and searchable index types. +type: reference +components: [eql] +verifiedAgainst: + eql: "2.2" +--- + +<Callout type="info" title="EQL v2 reference"> +This section documents **EQL v2** (v2.2), the release existing CipherStash deployments run. Starting a new project? Use **EQL v3** — see the [EQL reference](/reference/eql). +</Callout> + +**Encrypt Query Language (EQL)** is a set of PostgreSQL types, operators, and functions that enable queries on encrypted data without decryption. EQL works seamlessly with the [CipherCell](/reference/eql/v2/payload) format to provide searchable encryption capabilities directly in PostgreSQL. + +## What is EQL? + +EQL provides the database-side components needed to query encrypted data. Unlike traditional PostgreSQL extensions, EQL is implemented as a collection of types, operators, and functions, making it compatible with managed database providers like AWS RDS that restrict extension installation. + +When combined with the [Encryption SDK](/stack/cipherstash/encryption) or [CipherStash Proxy](/stack/cipherstash/proxy), EQL enables: + +- **Exact match queries** using encrypted equality operators +- **Range queries** with order-preserving encryption +- **Pattern matching** using encrypted Bloom filters +- **Unique constraints** on encrypted columns +- **JSON/JSONB operations** on encrypted structured data + +## Core components + +### The `eql_v2_encrypted` type + +The foundation of EQL is the `eql_v2_encrypted` data type, which stores [CipherCells](/reference/eql/v2/payload) containing encrypted data and searchable encrypted metadata. + +```sql +CREATE TABLE users ( + id SERIAL PRIMARY KEY, + email eql_v2_encrypted, + name eql_v2_encrypted +); +``` + +<Callout type="warn"> +The `eql_v2_encrypted` type is required for searchable encryption in PostgreSQL. Regular `JSON` or `JSONB` types can store CipherCells but do not support encrypted queries. +</Callout> + +### Operators + +EQL provides PostgreSQL operators that work directly with encrypted data: + +```sql +-- Exact match +SELECT * FROM users WHERE email = 'encrypted_search_value'::eql_v2_encrypted; + +-- Range queries +SELECT * FROM products WHERE price > 'encrypted_value'::eql_v2_encrypted; + +-- Pattern matching +SELECT * FROM documents WHERE content LIKE '%encrypted_pattern%'; +``` + +### Functions + +EQL ships in the `eql_v2` schema, with functions in three groups: + +- **Configuration** — register tables, columns, and searchable indexes in the EQL configuration. +- **Index-term extraction** — `eql_v2.hmac_256()` (exact match), `eql_v2.bloom_filter()` (pattern matching), and `eql_v2.ore_block_u64_8_256()` (range) extract a searchable term from an encrypted value. These back the functional indexes — see [Setting up indexes](/reference/eql/v2/indexes). +- **Comparison** — operators (`=`, `<`, `LIKE`, `@>`, …) are the query surface over encrypted columns. + +For the complete, per-version function reference — every signature, parameter, and return type — see the [EQL API reference](/stack/reference/eql/), generated from each EQL release. + +## Index types + +EQL supports multiple searchable encryption index types. Each index type enables different query patterns: + +### `unique`: Exact match + +Enables exact equality queries and unique constraints using HMAC-SHA256. + +[Learn more about exact indexes](/stack/cipherstash/encryption/searchable-encryption#exact-match) + +### `ore`: Range queries + +Enables range comparisons (`<`, `>`, `BETWEEN`) and ordering (`ORDER BY`) using Order Revealing Encryption. + +[Learn more about range indexes](/stack/cipherstash/encryption/searchable-encryption#range--order) + +### `match`: Pattern matching + +Enables substring and full-text search (`LIKE`, `ILIKE`) using encrypted Bloom filters with trigrams. + +[Learn more about match indexes](/stack/cipherstash/encryption/searchable-encryption#match-pattern) + +### `ste_vec`: Structured data + +Enables containment queries and JSON-style operations on encrypted arrays and JSONB data. + +## How it works + +EQL leverages PostgreSQL's native indexing capabilities to enable efficient queries on encrypted data. The searchable encrypted metadata within [CipherCells](/reference/eql/v2/payload) is indexed using standard PostgreSQL index types (B-tree for exact/range, GIN for pattern matching). + +When a query is executed: + +1. **Client-side**: The application encrypts the search value using the same encryption scheme, producing a CipherCell with the appropriate searchable encrypted metadata +2. **Database-side**: EQL operators extract and compare the searchable encrypted metadata from both the stored CipherCells and the search CipherCell +3. **Result**: Matching rows are returned without ever decrypting the data in the database + +## Compatibility + +EQL is designed to work with: + +- **PostgreSQL 14+**: Full support for all EQL features +- **Managed databases**: Works with AWS RDS, Azure Database, Google Cloud SQL, and other managed PostgreSQL providers +- **CipherStash SDKs**: Integrates with all CipherStash SDKs as well as CipherStash Proxy + +<Callout type="info"> +Unlike PostgreSQL extensions that require `CREATE EXTENSION`, EQL types and functions are installed directly into your database schema, making it compatible with managed database environments that restrict extension installation. +</Callout> + +## Related documentation + +- [CipherCell format](/reference/eql/v2/payload): The data structure used by EQL +- [Supported queries](/stack/cipherstash/encryption/searchable-encryption): Available searchable encryption schemes diff --git a/content/docs/reference/eql/v2/indexes.mdx b/content/docs/reference/eql/v2/indexes.mdx new file mode 100644 index 0000000..6a84ca4 --- /dev/null +++ b/content/docs/reference/eql/v2/indexes.mdx @@ -0,0 +1,154 @@ +--- +title: Setting up indexes +description: Create PostgreSQL indexes for encrypted columns. Index syntax differs between self-hosted PostgreSQL and managed databases like Supabase. +type: reference +components: [eql] +verifiedAgainst: + eql: "2.2" +--- + +<Callout type="info"> +EQL v2 reference, for existing v2.2 deployments. New projects use [EQL v3](/reference/eql). +</Callout> + +Encrypted columns need PostgreSQL indexes for fast queries. Without an index, the database performs a sequential scan: correct but slow at scale. + +Index syntax differs between deployment types. Self-hosted PostgreSQL with full EQL installed supports custom operator classes and can use B-tree indexes directly on `eql_v2_encrypted` columns. Managed databases like Supabase cannot install operator families (they require superuser), so indexes must use extraction functions instead. + +## Deployment matrix + +| Query type | Self-hosted (full EQL) | Supabase | +|---|---|---| +| Equality | `USING btree (col)` with opclass, or `USING hash (eql_v2.hmac_256(col))` | `USING hash (eql_v2.hmac_256(col))` only | +| Range / ORDER BY | `USING btree (col)` with opclass | None (OPE-index work in progress) | +| Pattern match | `USING gin (eql_v2.bloom_filter(col))` | Same | +| JSONB containment | `USING gin (eql_v2.ste_vec(col))` | Same | + +<Callout type="info"> + Range filters (`>`, `>=`, `<`, `<=`) work on Supabase without a range index (they use a sequential scan). `ORDER BY` on encrypted columns is not supported on Supabase at all. Sort application-side after decrypting results. Operator family support for Supabase is in development. +</Callout> + +--- + +## Equality + +Equality indexes speed up `WHERE col = $1` queries and `IN` lists. + +**Self-hosted (B-tree with operator class):** + +```sql +CREATE INDEX ON users USING btree (email); +``` + +This works because the full EQL install registers a B-tree operator class for `eql_v2_encrypted` that compares HMAC terms. + +**Self-hosted or Supabase (hash on extraction function):** + +```sql +CREATE INDEX ON users USING hash (eql_v2.hmac_256(email)); +``` + +This form works on both deployment types. Use it when you want one index that works everywhere, or when you are on Supabase. + +See queries: [Equality queries](/reference/eql/v2/queries#equality) + +--- + +## Match + +Match indexes speed up `WHERE col LIKE $1` and `ILIKE` queries. They use a GIN index on the Bloom filter extracted from each encrypted value. + +```sql +CREATE INDEX ON users USING gin (eql_v2.bloom_filter(name)); +``` + +This form is identical for self-hosted and Supabase. + +See queries: [Match queries](/reference/eql/v2/queries#match-free-text) + +--- + +## Range and order + +Range indexes support `>`, `>=`, `<`, `<=`, `BETWEEN`, and `ORDER BY` on encrypted columns. + +**Self-hosted (B-tree with operator class):** + +```sql +CREATE INDEX ON users USING btree (age); +``` + +Requires the EQL operator family (`CREATE OPERATOR FAMILY`) to be installed. The full EQL install includes this. The `--exclude-operator-family` install flag omits it. + +**Supabase:** + +Functional range indexes for Supabase are not yet available. Range _filters_ work without an index (sequential scan). `ORDER BY` on encrypted columns is not supported on Supabase. + +See queries: [Range queries](/reference/eql/v2/queries#range-and-ordering) + +--- + +## JSONB + +JSONB indexes support path existence and containment queries on encrypted JSON columns. + +```sql +CREATE INDEX ON documents USING gin (eql_v2.ste_vec(metadata)); +``` + +This form is identical for self-hosted and Supabase. + +See queries: [JSONB queries](/reference/eql/v2/queries#jsonb-queries) + +--- + +## Supabase query forms + +This is the most common source of silent performance problems with encrypted columns on Supabase. + +A functional index on `eql_v2.hmac_256(email)` is only engaged when the query uses the same extraction function. A bare `WHERE email = $1` query does not use the index, even if the index exists. The database falls back to a sequential scan: your query returns correct results, but it scans every row. + +**Wrong (does not use functional index):** + +```sql +SELECT * FROM users WHERE email = $1::eql_v2_encrypted; +``` + +**Right (engages the functional index):** + +```sql +SELECT * FROM users WHERE eql_v2.hmac_256(email) = eql_v2.hmac_256($1::eql_v2_encrypted); +``` + +<Callout type="warn"> + SDK wrappers (Drizzle adapter, Supabase wrapper) generate the correct query form automatically. This only matters when you write raw SQL queries against Supabase encrypted columns. If you are using the Drizzle adapter or Supabase wrapper, no action is needed. +</Callout> + +The same principle applies to `eql_v2.bloom_filter` and `eql_v2.ste_vec` indexes: the extraction function must appear in both the index definition and the query predicate. + +--- + +## Complete example + +```sql filename="migrations/add_encrypted_indexes.sql" +-- Equality index (Supabase-compatible form) +CREATE INDEX users_email_eq_idx ON users USING hash (eql_v2.hmac_256(email)); + +-- Match index +CREATE INDEX users_name_match_idx ON users USING gin (eql_v2.bloom_filter(name)); + +-- JSONB index +CREATE INDEX documents_metadata_ste_idx ON documents USING gin (eql_v2.ste_vec(metadata)); + +-- Range index (self-hosted only — requires operator family) +CREATE INDEX users_age_range_idx ON users USING btree (age); +``` + +--- + +## Related + +- [Searchable encryption queries](/reference/eql/v2/queries): Query patterns for each index type +- [Searchable encryption overview](/stack/cipherstash/encryption/searchable-encryption): How searchable indexes work +- [Supabase integration](/stack/cipherstash/supabase): Supabase-specific setup and limitations +- [EQL guide](/reference/eql/v2): Full reference for EQL types and functions diff --git a/content/docs/reference/eql/v2/meta.json b/content/docs/reference/eql/v2/meta.json new file mode 100644 index 0000000..68333fd --- /dev/null +++ b/content/docs/reference/eql/v2/meta.json @@ -0,0 +1,4 @@ +{ + "title": "EQL v2", + "pages": ["indexes", "queries", "payload"] +} diff --git a/content/docs/reference/eql/v2/payload.mdx b/content/docs/reference/eql/v2/payload.mdx new file mode 100644 index 0000000..953264d --- /dev/null +++ b/content/docs/reference/eql/v2/payload.mdx @@ -0,0 +1,309 @@ +--- +title: The CipherCell +description: Understand the CipherCell, the CipherStash JSON format that stores ciphertext, searchable encrypted metadata, and fields for querying encrypted data via EQL. +type: reference +components: [eql] +verifiedAgainst: + eql: "2.2" +--- + +<Callout type="info"> +EQL v2 reference, for existing v2.2 deployments. New projects use [EQL v3](/reference/eql). +</Callout> + +The **CipherCell** is CipherStash's standard format for storing encrypted data in a database. It is a JSON-based structure that combines **encrypted values**, **searchable encrypted metadata**, and **non-sensitive metadata** into a single, self-contained record. +CipherCells are designed to make encrypted data practical to work with in real applications. They can be stored in existing databases (such as PostgreSQL jsonb columns), indexed, queried, and audited without exposing plaintext. + +## What a CipherCell contains + +A CipherCell typically includes: + +- **Encrypted data** + - The ciphertext for one or more sensitive values. + - Each value is encrypted independently using strong authenticated encryption and unique per-value keys. +- **Searchable Encrypted Metadata (SEM)** + - Additional cryptographic material derived from the plaintext that enables secure querying using searchable encryption. + - This metadata allows operations such as equality checks, range queries, or text search to be performed **without decrypting the data**. + - The database can evaluate queries over this metadata, but cannot recover the original values. +- **Non-sensitive metadata** + - Plaintext fields that are safe to expose, such as schema identifiers, versioning information, timestamps, or application-level IDs. + - Keeping this metadata unencrypted allows efficient filtering, indexing, and integration with existing tooling. + +## How CipherCells are used + +CipherCells are stored directly in the database, usually in a JSON-compatible column. +[Encrypt Query Language (EQL)](/reference/eql/v2) understands this structure and provides database functions and operators that work over CipherCells, enabling encrypted search and filtering while preserving strong security guarantees. + +From an application's perspective, a CipherCell behaves like a regular database value: + +- Applications write encrypted data as JSON +- Databases store and index it +- Queries operate on Searchable Encrypted Metadata (SEM) +- Decryption happens only in trusted application code with the right keys and claims + +## Why CipherCells exist + +The CipherCell format solves a common problem with encryption at rest: traditional encryption makes data opaque and hard to query. CipherCells retain the benefits of encryption while enabling: + +- Fine-grained, **per-value** protection +- Searchable encryption over structured data +- Compatibility with existing databases and ORMs +- Clear separation between sensitive and non-sensitive information + +A CipherCell is the **unit of encrypted storage** in CipherStash: a portable, self-describing JSON record that makes encrypted data usable, searchable, and auditable by default. + +## Structure + +<Callout type="warn"> +**Required fields**: Only `i` (identifier) and `v` (version) are required. + +**Payload requirement**: Either `c` (ciphertext) or `sv` (structured encryption vector) must be present, but never both. + +**Optional fields**: All searchable encrypted metadata (SEM) fields are optional and only included when the corresponding index types are configured. +</Callout> + +A CipherCell is stored as a JSON object with the following top-level structure: + +```json +{ + "i": { + "t": "table_name", + "c": "column_name" + }, + "v": 2, + "c": "encrypted_data_in_messagepack_base85", + "hm": "2e182f0c444d1d51f5f70f32d778b2eaa854f5921a4a2acaa4446c44055cb777", + "ob": ["ore_block_1", "ore_block_2"], + "bf": [1234, 5678, 9012] +} +``` + +## Top-level fields + +### `i` - Identifier + +The table and column identifier for this encrypted data. + +**Type**: Object with `t` (table) and `c` (column) properties + +**Required**: Yes + +```json +{ + "i": { + "t": "users", + "c": "email" + } +} +``` + +This field identifies which table and column the encrypted data belongs to, enabling proper decryption and index usage. + +### `v` - Version + +The encryption version used for this CipherCell. + +**Type**: Integer + +**Required**: Yes + +```json +{ + "v": 2 +} +``` + +The version field allows for cryptographic algorithm upgrades over time while maintaining backward compatibility. + +### `c` - Ciphertext (required unless `sv` is present) + +The encrypted record containing the actual plaintext data. + +**Type**: String (MessagePack encoded and Base85 encoded) + +**Required**: Yes (unless `sv` field is present) + +```json +{ + "c": "Xk}0>Z*pVbW@%*8a%F0@" +} +``` + +<Callout type="warn"> +Either `c` or `sv` must be present in every CipherCell, but never both. Use `c` for standard encrypted values and `sv` for structured encryption vectors (arrays or JSON structures). +</Callout> + +### `a` - Array item flag + +Indicates whether this CipherCell represents an item within an array. + +**Type**: Boolean + +**Required**: No + +```json +{ + "a": true +} +``` + +## Searchable Encrypted Metadata (SEM) + +The CipherCell can contain various types of searchable encrypted metadata, each enabling different query capabilities. All SEM fields are optional and only included when the corresponding index type is configured. + +### `hm` - HMAC-SHA256 + +Enables exact match queries using HMAC-SHA256. + +**Type**: Hex-encoded string (64 characters) + +**Index Type**: [Exact](/stack/cipherstash/encryption/searchable-encryption#exact-match) + +```json +{ + "hm": "2e182f0c444d1d51f5f70f32d778b2eaa854f5921a4a2acaa4446c44055cb777" +} +``` + +### `ob` - ORE Block + +Enables range queries and ordering using Order Revealing Encryption. + +**Type**: Array of strings + +**Index Type**: [Order / Range](/stack/cipherstash/encryption/searchable-encryption#range--order) + +```json +{ + "ob": [ + "01a2b3c4d5e6f7g8h9i0", + "j1k2l3m4n5o6p7q8r9s0" + ] +} +``` + +### `bf` - Bloom Filter + +Enables substring and pattern matching queries using encrypted Bloom filters with trigrams. + +**Type**: Array of integers + +**Index Type**: [Match](/stack/cipherstash/encryption/searchable-encryption#match-pattern) + +```json +{ + "bf": [1234, 5678, 9012, 3456, 7890] +} +``` + +### `b3` - Blake3 + +Blake3 hash for exact matches in structured encryption vectors. + +**Type**: Hex-encoded string + +**Used in**: SteVec (Structured Encryption Vector) subfield + +### `s` - Selector + +Selector value for field selection in structured encryption vectors. + +**Type**: String + +**Used in**: SteVec (Structured Encryption Vector) subfield + +### `ocf` - ORE CLWW Fixed-Width + +ORE CLWW (Chenette-Lewi-Weis-Wu) fixed-width scheme for 64-bit integer values in structured encryption vectors. + +**Type**: String + +**Used in**: SteVec (Structured Encryption Vector) subfield + +### `ocv` - ORE CLWW Variable-Width + +ORE CLWW variable-width scheme for string comparison in structured encryption vectors. + +**Type**: String + +**Used in**: SteVec (Structured Encryption Vector) subfield + +### `sv` - Structured Encryption Vector (SteVec) (required unless `c` is present) + +Nested array of CipherCells for supporting containment queries and JSON-style operations. + +**Type**: Array of CipherCell objects + +**Required**: Yes (unless `c` attribute is present) + +```json +{ + "sv": [ + { + "c": "Xk}0>Z*pVbW@%*8a%F0@", + "hm": "hash1...", + "s": "selector1" + }, + { + "c": "Yl~1?A+qWcX#&+9b&G1#", + "hm": "hash2...", + "s": "selector2" + } + ] +} +``` + +SteVec enables queries on array elements and JSON document structures while maintaining encryption. Each element in the `sv` array is itself a CipherCell that can contain SEM fields like `b3`, `s`, `ocf`, and `ocv`. + +## Complete example + +Here's a complete CipherCell with multiple index types enabled: + +```json +{ + "i": { + "t": "products", + "c": "price" + }, + "v": 2, + "c": "Xk}0>Z*pVbW@%*8a%F0@Yl~1?A+qWcX#&+9b&G1#", + "hm": "2e182f0c444d1d51f5f70f32d778b2eaa854f5921a4a2acaa4446c44055cb777", + "ob": [ + "01a2b3c4d5e6f7g8h9i0", + "j1k2l3m4n5o6p7q8r9s0", + "t1u2v3w4x5y6z7a8b9c0" + ], + "bf": [1234, 5678, 9012, 3456, 7890, 2345, 6789] +} +``` + +This CipherCell: +- Belongs to the `price` column of the `products` table +- Uses encryption version 2 +- Contains the encrypted plaintext value +- Supports exact match queries via `hm` +- Supports range queries and ordering via `ob` +- Supports pattern matching via `bf` + +## Design principles + +### Minimal storage + +Only the index types configured for a column are included in the CipherCell. This minimizes storage overhead and ensures optimal performance. + +### Composable indexes + +Multiple index types can be combined on a single column, enabling both exact matches and range queries, or exact matches and pattern matching, depending on application needs. + +### Forward compatibility + +The version field (`v`) enables cryptographic algorithm upgrades without requiring full database re-encryption. Older versions can coexist with newer versions during migration. + +### Standardized format + +The CipherCell format is consistent across all CipherStash SDKs and tools, ensuring interoperability and portability of encrypted data. + +## Database storage + +CipherCells can be stored as JSON in any database that supports JSON data types. +However, for search to be supported using the [Encryption SDK](/stack/cipherstash/encryption) or [CipherStash Proxy](/stack/cipherstash/proxy), the `eql_v2.encrypted` database type must be used which is available when the Encrypt Query Language (EQL) helpers have been installed. diff --git a/content/docs/reference/eql/v2/queries.mdx b/content/docs/reference/eql/v2/queries.mdx new file mode 100644 index 0000000..cbf0f81 --- /dev/null +++ b/content/docs/reference/eql/v2/queries.mdx @@ -0,0 +1,277 @@ +--- +title: Searchable encryption queries +description: Equality, match, and range query patterns for encrypted PostgreSQL columns, with SDK predicates and raw SQL forms. +type: reference +components: [eql] +verifiedAgainst: + eql: "2.2" +--- + +<Callout type="info"> +EQL v2 reference, for existing v2.2 deployments. New projects use [EQL v3](/reference/eql). +</Callout> + +This page covers the three query families available for encrypted columns: equality, match (free-text), and range/order. Each section shows the SDK predicate, the raw SQL form, the underlying EQL index, and links to the corresponding index setup. + +For index creation (the `CREATE INDEX` statements your database needs), see [Setting up indexes](/reference/eql/v2/indexes). + +For a conceptual overview of how searchable encryption works, see [Searchable encryption](/stack/cipherstash/encryption/searchable-encryption). + +## Equality + +Exact match on an encrypted column. Uses the `unique` (HMAC-SHA256) index. + +**Schema:** + +```typescript filename="src/schema.ts" +import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" + +const users = encryptedTable("users", { + email: encryptedColumn("email").equality(), +}) +``` + +**SDK (single value):** + +```typescript filename="src/queries.ts" +const term = await client.encryptQuery("alice@example.com", { + column: users.email, + table: users, + queryType: "equality", +}) + +const result = await pgClient.query( + "SELECT * FROM users WHERE email = $1", + [term.data], +) +``` + +**SDK (IN list):** + +```typescript filename="src/queries.ts" +const terms = await client.encryptQuery([ + { value: "alice@example.com", column: users.email, table: users, queryType: "equality" as const }, + { value: "bob@example.com", column: users.email, table: users, queryType: "equality" as const }, +]) + +// Use each term.data as a separate parameter, or build an ANY($1) query. +``` + +**Drizzle:** + +```typescript filename="src/queries.ts" +const results = await db + .select() + .from(usersTable) + .where(await encryptionOps.eq(usersTable.email, "alice@example.com")) +``` + +**Supabase wrapper:** + +```typescript filename="src/queries.ts" +const { data } = await eSupabase + .from("users", users) + .select("id, email") + .eq("email", "alice@example.com") +``` + +**Raw SQL (self-hosted with EQL operator classes):** + +```sql +SELECT * FROM users WHERE email = $1::eql_v2_encrypted; +``` + +**Raw SQL (Supabase / functional index form):** + +```sql +SELECT * FROM users WHERE eql_v2.hmac_256(email) = eql_v2.hmac_256($1::eql_v2_encrypted); +``` + +<Callout type="warn"> + On Supabase, bare `WHERE email = $1` does not use the functional index. Wrap both sides with `eql_v2.hmac_256()` to engage the hash index. The SDK wrappers (Drizzle, Supabase wrapper) handle this automatically. See [Index setup: Supabase callout](/reference/eql/v2/indexes#supabase-query-forms). +</Callout> + +**Underlying index:** [Equality index setup](/reference/eql/v2/indexes#equality) + +--- + +## Match (free-text) + +Substring and full-text search on an encrypted column. Uses the `match` (Bloom filter) index. Corresponds to `LIKE` / `ILIKE` semantics. + +**Schema:** + +```typescript filename="src/schema.ts" +const users = encryptedTable("users", { + name: encryptedColumn("name").freeTextSearch(), +}) +``` + +**SDK:** + +```typescript filename="src/queries.ts" +const term = await client.encryptQuery("alice", { + column: users.name, + table: users, + queryType: "freeTextSearch", +}) + +const result = await pgClient.query( + "SELECT * FROM users WHERE name LIKE $1", + [term.data], +) +``` + +**Drizzle:** + +```typescript filename="src/queries.ts" +const results = await db + .select() + .from(usersTable) + .where(await encryptionOps.ilike(usersTable.name, "%alice%")) +``` + +**Supabase wrapper:** + +```typescript filename="src/queries.ts" +const { data } = await eSupabase + .from("users", users) + .select("id, name") + .ilike("name", "%alice%") +``` + +**Raw SQL:** + +```sql +SELECT * FROM users WHERE name LIKE $1; +``` + +The Bloom filter index uses a GIN index on the extracted filter term. See [Match index setup](/reference/eql/v2/indexes#match). + +**Underlying index:** [Match index setup](/reference/eql/v2/indexes#match) + +--- + +## Range and ordering + +Comparison (`>`, `>=`, `<`, `<=`, `BETWEEN`) and `ORDER BY` on an encrypted column. Uses the `ore` (Order Revealing Encryption) index. + +**Schema:** + +```typescript filename="src/schema.ts" +const users = encryptedTable("users", { + age: encryptedColumn("age").dataType("number").orderAndRange(), +}) +``` + +**SDK (range filter):** + +```typescript filename="src/queries.ts" +const term = await client.encryptQuery(21, { + column: users.age, + table: users, + queryType: "orderAndRange", +}) + +const result = await pgClient.query( + "SELECT * FROM users WHERE age > $1", + [term.data], +) +``` + +**SDK, ORDER BY (self-hosted only):** + +```typescript filename="src/queries.ts" +// Self-hosted PostgreSQL with EQL operator families installed: +const result = await pgClient.query( + "SELECT * FROM users ORDER BY age ASC", +) + +// Without operator family support (Supabase, or --exclude-operator-family): +const result = await pgClient.query( + "SELECT * FROM users ORDER BY eql_v2.ore_block_u64_8_256(age) ASC", +) +``` + +**Drizzle:** + +```typescript filename="src/queries.ts" +// Range +const results = await db + .select() + .from(usersTable) + .where(await encryptionOps.gte(usersTable.age, 18)) + +// Sort (requires operator family support; not available on Supabase) +const results = await db + .select() + .from(usersTable) + .orderBy(encryptionOps.asc(usersTable.age)) +``` + +**Supabase wrapper:** + +```typescript filename="src/queries.ts" +// Range filter works +const { data } = await eSupabase + .from("users", users) + .select("id, age") + .gte("age", 18) + +// ORDER BY on encrypted columns is not supported on Supabase. +// Sort application-side after decrypting. +``` + +<Callout type="warn"> + `ORDER BY` on encrypted columns requires EQL operator families, which need superuser access to install. Supabase does not grant superuser. Range _filters_ (`>`, `>=`, `<`, `<=`) work on both self-hosted and Supabase. Sorting on encrypted columns is not currently supported on Supabase. Sort application-side after decrypting results. Operator family support for Supabase is being developed in collaboration with the Supabase and CipherStash teams. +</Callout> + +**Underlying index:** [Range index setup](/reference/eql/v2/indexes#range-and-order) + +--- + +## JSONB queries + +Query encrypted JSON columns using path existence or containment. Uses the `ste_vec` index. + +**Schema:** + +```typescript filename="src/schema.ts" +const documents = encryptedTable("documents", { + metadata: encryptedColumn("metadata").searchableJson(), +}) +``` + +**SDK (path existence):** + +```typescript filename="src/queries.ts" +const term = await client.encryptQuery("$.user.role", { + column: documents.metadata, + table: documents, +}) + +const result = await pgClient.query( + "SELECT * FROM documents WHERE eql_v2.ste_vec(metadata) @> $1", + [term.data], +) +``` + +**SDK (containment):** + +```typescript filename="src/queries.ts" +const term = await client.encryptQuery({ role: "admin" }, { + column: documents.metadata, + table: documents, +}) +``` + +**Drizzle:** + +```typescript filename="src/queries.ts" +const results = await db + .select() + .from(documentsTable) + .where(await encryptionOps.jsonbPathExists(documentsTable.metadata, "$.user.role")) +``` + +**Underlying index:** [JSONB index setup](/reference/eql/v2/indexes#jsonb) From 6db235272d113d79a151ecfd625bfd8c81c97048 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 6 Jul 2026 23:46:52 +1000 Subject: [PATCH 027/151] docs(v2): relocate comparisons under /concepts/compare per revised IA The revised IA folds Comparisons into Concepts (no top-level /compare tab). The rebase already moved these pages into content/docs/concepts/compare/; this adjusts their in-file content to match: - repoint /compare/* cross-links and index Cards to /concepts/compare/* - components facet [zerokms] -> [platform] (zerokms collapsed into platform in the components enum) fhe.mdx keeps [encryption, eql]. The zerokms-vs-hsm page is retained. --- content/docs/concepts/compare/aws-kms.mdx | 4 ++-- content/docs/concepts/compare/hashicorp-vault.mdx | 8 ++++---- content/docs/concepts/compare/index.mdx | 8 ++++---- content/docs/concepts/compare/zerokms-vs-hsm.mdx | 4 ++-- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/content/docs/concepts/compare/aws-kms.mdx b/content/docs/concepts/compare/aws-kms.mdx index f487f96..9b3a568 100644 --- a/content/docs/concepts/compare/aws-kms.mdx +++ b/content/docs/concepts/compare/aws-kms.mdx @@ -2,7 +2,7 @@ title: CipherStash vs AWS KMS description: How CipherStash compares to AWS KMS for application-level encryption — the distributed-trust ZeroKMS key-management architecture, plus a developer-experience comparison covering searchable encryption, identity-aware keys, bulk operations, and type safety. type: concept -components: [zerokms] +components: [platform] audience: [developer, cto, ciso] reviewBy: "2027-01-05" --- @@ -207,5 +207,5 @@ Migration from AWS KMS (or any cloud KMS) can be incremental: - [Schema reference](/stack/cipherstash/encryption/schema) - [Searchable encryption concepts](/stack/cipherstash/encryption/searchable-encryption) - [Security architecture](/stack/reference/security-architecture) — leakage profiles and primitives -- [ZeroKMS vs Hardware Security Modules](/compare/zerokms-vs-hsm) +- [ZeroKMS vs Hardware Security Modules](/concepts/compare/zerokms-vs-hsm) - [AWS KMS documentation](https://docs.aws.amazon.com/kms/) diff --git a/content/docs/concepts/compare/hashicorp-vault.mdx b/content/docs/concepts/compare/hashicorp-vault.mdx index 0c672e6..cc9beab 100644 --- a/content/docs/concepts/compare/hashicorp-vault.mdx +++ b/content/docs/concepts/compare/hashicorp-vault.mdx @@ -2,7 +2,7 @@ title: CipherStash vs HashiCorp Vault description: How CipherStash ZeroKMS compares to HashiCorp Vault's Transit secrets engine for application-level encryption — trust model, per-record keys, plaintext exposure, and the trade-offs of Vault's direct and envelope modes. type: concept -components: [zerokms] +components: [platform] audience: [developer, cto, ciso] reviewBy: "2027-01-05" --- @@ -50,7 +50,7 @@ The trade-off lands in a different place than it does for a cloud KMS, because o - **Envelope keeps plaintext client-side, but per-record keys cost you on writes.** A unique key per record means one `datakey` round-trip *per record* on the write path (there is no batched key generation). That's the `✗` in the bulk column — it's a *write*-throughput cost. - **Reuse buys back write throughput by sharing a key** across many records. That's a security trade-off, not a free lunch: you lose per-record revocation (revoking one record's key revokes it for every record sharing it) and per-record audit (the log shows one unwrap of a key that opens many records, not which record was read). -Note what does **not** happen: a scattered read does not collapse. Vault unwraps all the distinct data keys in a result with a single batched `transit/decrypt` call, so reads are one round-trip regardless of access pattern. This is where Vault differs from AWS KMS — whose `Decrypt` has no batch API, so a scattered read of N records costs N calls (see [CipherStash vs AWS KMS](/compare/aws-kms)). For Vault, the cost of per-record keys lands on **writes**, and the cost of reuse is the **security model** — not reads. +Note what does **not** happen: a scattered read does not collapse. Vault unwraps all the distinct data keys in a result with a single batched `transit/decrypt` call, so reads are one round-trip regardless of access pattern. This is where Vault differs from AWS KMS — whose `Decrypt` has no batch API, so a scattered read of N records costs N calls (see [CipherStash vs AWS KMS](/concepts/compare/aws-kms)). For Vault, the cost of per-record keys lands on **writes**, and the cost of reuse is the **security model** — not reads. ## Architecture & trust model @@ -113,6 +113,6 @@ Vault and CipherStash can also coexist: Vault for infrastructure secrets and its - [CipherStash Encryption getting started](/stack/quickstart) - [ZeroKMS](/stack/cipherstash/kms) - [Searchable encryption concepts](/stack/cipherstash/encryption/searchable-encryption) -- [CipherStash vs AWS KMS](/compare/aws-kms) — the same data-key trade-off in a cloud KMS -- [All comparisons](/compare) +- [CipherStash vs AWS KMS](/concepts/compare/aws-kms) — the same data-key trade-off in a cloud KMS +- [All comparisons](/concepts/compare) - [HashiCorp Vault Transit documentation](https://developer.hashicorp.com/vault/docs/secrets/transit) diff --git a/content/docs/concepts/compare/index.mdx b/content/docs/concepts/compare/index.mdx index a534c97..3ec1952 100644 --- a/content/docs/concepts/compare/index.mdx +++ b/content/docs/concepts/compare/index.mdx @@ -8,10 +8,10 @@ type: concept Side-by-side breakdowns of CipherStash against the approaches teams most commonly weigh it against. Each page focuses on the same questions: what does each tool actually do, what are the per-operation trade-offs, and where is each one the right fit. <Cards> - <Card title="CipherStash vs AWS KMS" href="/compare/aws-kms" description="The zero-trust ZeroKMS architecture plus a developer-experience comparison — searchable queries, identity-aware keys, and bulk operations versus key ARNs and binary buffers." /> - <Card title="CipherStash vs HashiCorp Vault" href="/compare/hashicorp-vault" description="Per-record keys with plaintext that never leaves the client — versus the trade-off Vault Transit's direct and envelope modes force." /> - <Card title="ZeroKMS vs Hardware Security Modules" href="/compare/zerokms-vs-hsm" description="Cryptographic custody versus physical custody — how ZeroKMS reduces the cost, complexity, and operational burden of self-managed HSMs." /> - <Card title="CipherStash vs Homomorphic Encryption" href="/compare/fhe" description="Why searchable encryption is 5–6 orders of magnitude faster than FHE for real database workloads — with EQL v3 benchmark numbers." /> + <Card title="CipherStash vs AWS KMS" href="/concepts/compare/aws-kms" description="The zero-trust ZeroKMS architecture plus a developer-experience comparison — searchable queries, identity-aware keys, and bulk operations versus key ARNs and binary buffers." /> + <Card title="CipherStash vs HashiCorp Vault" href="/concepts/compare/hashicorp-vault" description="Per-record keys with plaintext that never leaves the client — versus the trade-off Vault Transit's direct and envelope modes force." /> + <Card title="ZeroKMS vs Hardware Security Modules" href="/concepts/compare/zerokms-vs-hsm" description="Cryptographic custody versus physical custody — how ZeroKMS reduces the cost, complexity, and operational burden of self-managed HSMs." /> + <Card title="CipherStash vs Homomorphic Encryption" href="/concepts/compare/fhe" description="Why searchable encryption is 5–6 orders of magnitude faster than FHE for real database workloads — with EQL v3 benchmark numbers." /> </Cards> ## Related diff --git a/content/docs/concepts/compare/zerokms-vs-hsm.mdx b/content/docs/concepts/compare/zerokms-vs-hsm.mdx index 1a225e9..f0759da 100644 --- a/content/docs/concepts/compare/zerokms-vs-hsm.mdx +++ b/content/docs/concepts/compare/zerokms-vs-hsm.mdx @@ -2,7 +2,7 @@ title: ZeroKMS vs Hardware Security Modules (HSM) description: Compare CipherStash ZeroKMS's zero-trust key management with traditional hardware security modules type: concept -components: [zerokms] +components: [platform] audience: [cto, ciso] reviewBy: "2026-10-05" --- @@ -225,5 +225,5 @@ This layered approach provides defense in depth while maintaining performance an ## Learn More - [Read about ZeroKMS](/stack/cipherstash/kms) -- [View all comparisons](/compare) +- [View all comparisons](/concepts/compare) - [Book a discovery session](/stack/reference/discovery-session) From 40ee2216ae3430c364b72d532df9e76e6a87797a Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 17:30:54 +1000 Subject: [PATCH 028/151] fix(cli-docs): escape MDX braces in manifest-derived prose MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The `auth regions --json` flag description is "Emit machine-readable [{ slug, label }] ...". MDX parsed `{ slug, label }` as a JS expression, so prerendering /reference/cli/auth threw `ReferenceError: slug is not defined` and failed the build. (The earlier `<tt>` failure masked this; it surfaced once #52 landed via rebase.) Escape `{`/`}` (and stray `<`) in manifest-derived prose — flag descriptions and summaries. Flag names/values stay in code spans, which are literal, so they're untouched. Verified: `next build` prerenders all 355 pages, including /reference/cli/auth. --- content/docs/reference/cli/auth.mdx | 2 +- scripts/generate-cli-docs.ts | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 5 deletions(-) diff --git a/content/docs/reference/cli/auth.mdx b/content/docs/reference/cli/auth.mdx index 09f0a18..482ae39 100644 --- a/content/docs/reference/cli/auth.mdx +++ b/content/docs/reference/cli/auth.mdx @@ -55,7 +55,7 @@ npx stash auth regions [flags] | Flag | Description | | --- | --- | -| `--json` | Emit machine-readable [{ slug, label }] instead of a text list. | +| `--json` | Emit machine-readable [\{ slug, label \}] instead of a text list. | #### Examples diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index dd0d88b..e80ca6d 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -189,6 +189,13 @@ Generated from **\`${CLI_NAME}\` v${CLI_VERSION}** via \`${RUNNER} ${CLI_NAME}@$ </Callout>`; } +// Escape characters MDX parses as JSX inside prose: `{`/`}` (expression braces — +// e.g. the `auth regions` flag description "[{ slug, label }]" would otherwise +// evaluate `slug` and crash the prerender) and stray `<` (tags). Flag names and +// values render inside code spans, which are literal, so this only applies to +// manifest-derived prose (descriptions, summaries). +const escapeMdxText = (s: string): string => s.replace(/([{}<])/g, "\\$1"); + function flagsTable(flags: Flag[]): string { if (!flags.length) return ""; const rows = flags @@ -199,7 +206,8 @@ function flagsTable(flags: Flag[]): string { /\|/g, "\\|", ); - return `| ${opt} | ${f.description.replace(/\|/g, "\\|")} |`; + const description = escapeMdxText(f.description).replace(/\|/g, "\\|"); + return `| ${opt} | ${description} |`; }) .join("\n"); return `\n### Flags\n\n| Flag | Description |\n| --- | --- |\n${rows}\n`; @@ -210,7 +218,7 @@ function commandSection(cmd: Command, level: "##" | "###"): string { const parts = [ `${level} \`${cmd.path}\``, "", - cmd.summary, + escapeMdxText(cmd.summary), "", "```bash", synopsis, @@ -262,7 +270,7 @@ function renderPage( } else { const c = cmds[0]; parts.push( - c.summary, + escapeMdxText(c.summary), "", "```bash", `${RUNNER} ${CLI_NAME} ${c.path}${c.flags.length ? " [flags]" : ""}`, @@ -310,7 +318,7 @@ function renderIndex( .filter((c) => c.base === base) .map((c) => { const anchor = c.sub ? `#${c.path.replace(/\s+/g, "-")}` : ""; - const summary = c.summary.replace(/\|/g, "\\|"); + const summary = escapeMdxText(c.summary).replace(/\|/g, "\\|"); return `| [\`${c.path}\`](/reference/cli/${base}${anchor}) | ${summary} |`; }), ) From 261b69ca1b221fce85a7d9d8a99c9a348c03ec47 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 18:03:22 +1000 Subject: [PATCH 029/151] docs(cli): address auth-page review feedback Vercel preview feedback on /reference/cli/auth: - Remove the "--supabase / --drizzle flags only tag the referrer" paragraph. - Convert the "Good to know" blockquote into a proper <Callout title=...>. Edited the auth supplement (the page is generated from it) and recast the em-dashes in the touched prose. Verified: next build prerenders all 355 pages. --- content/docs/reference/cli/auth.mdx | 16 +++++++--------- scripts/cli-supplements/auth.md | 16 +++++++--------- 2 files changed, 14 insertions(+), 18 deletions(-) diff --git a/content/docs/reference/cli/auth.mdx b/content/docs/reference/cli/auth.mdx index 482ae39..2ba2a00 100644 --- a/content/docs/reference/cli/auth.mdx +++ b/content/docs/reference/cli/auth.mdx @@ -70,21 +70,19 @@ npx stash auth regions --json `stash auth login` runs the OAuth 2.0 **device authorization flow**: 1. You pick a **region** for your CipherStash workspace. -2. The CLI opens your browser to a verification URL — and prints it, so it also - works over SSH or in a headless/agent environment — where you approve the +2. The CLI opens your browser to a verification URL (and prints it, so it also + works over SSH or in a headless/agent environment) where you approve the request. 3. Meanwhile the CLI polls CipherStash until you approve, then receives a short-lived access token (it reports the token's expiry). 4. Your device is **bound to the workspace's default keyset**, so later commands (`stash eql install`, `stash db push`, …) authenticate without a fresh login. -The `--supabase` / `--drizzle` flags only tag the referrer for onboarding -analytics; they don't change the flow. - -> **Good to know**: login is device- and workspace-scoped. Authenticating from a -> new machine — or for a different workspace — re-runs the device flow. +<Callout title="Good to know"> +Login is device- and workspace-scoped. Authenticating from a new machine, or for a different workspace, re-runs the device flow. +</Callout> {/* TODO(verify with product): profiles, multiple workspaces, and switching -between them — where they're stored and how they're selected — belong here (or -in a linked CLI concept page). The CLI currently exposes only `auth login`; +between them (where they're stored and how they're selected) belong here, or +in a linked CLI concept page. The CLI currently exposes only `auth login`; confirm the profile / workspace-switching surface before documenting it. */} diff --git a/scripts/cli-supplements/auth.md b/scripts/cli-supplements/auth.md index 4d13348..b17fc57 100644 --- a/scripts/cli-supplements/auth.md +++ b/scripts/cli-supplements/auth.md @@ -3,21 +3,19 @@ `stash auth login` runs the OAuth 2.0 **device authorization flow**: 1. You pick a **region** for your CipherStash workspace. -2. The CLI opens your browser to a verification URL — and prints it, so it also - works over SSH or in a headless/agent environment — where you approve the +2. The CLI opens your browser to a verification URL (and prints it, so it also + works over SSH or in a headless/agent environment) where you approve the request. 3. Meanwhile the CLI polls CipherStash until you approve, then receives a short-lived access token (it reports the token's expiry). 4. Your device is **bound to the workspace's default keyset**, so later commands (`stash eql install`, `stash db push`, …) authenticate without a fresh login. -The `--supabase` / `--drizzle` flags only tag the referrer for onboarding -analytics; they don't change the flow. - -> **Good to know**: login is device- and workspace-scoped. Authenticating from a -> new machine — or for a different workspace — re-runs the device flow. +<Callout title="Good to know"> +Login is device- and workspace-scoped. Authenticating from a new machine, or for a different workspace, re-runs the device flow. +</Callout> {/* TODO(verify with product): profiles, multiple workspaces, and switching -between them — where they're stored and how they're selected — belong here (or -in a linked CLI concept page). The CLI currently exposes only `auth login`; +between them (where they're stored and how they're selected) belong here, or +in a linked CLI concept page. The CLI currently exposes only `auth login`; confirm the profile / workspace-switching surface before documenting it. */} From 7d1dcffa2f3ff8900bc79af4252bfeaed4e1a2e8 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 18:08:41 +1000 Subject: [PATCH 030/151] fix(cli-docs): harden manifest loading (Copilot review) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - loadRawManifest: validate the JSON delimiters before slicing, throwing a clear error (which falls back to the fixture) instead of feeding garbage to JSON.parse. - Reconcile CLI_VERSION to the loaded manifest's version after loading, so pages are stamped with the version of the data actually used — including the fixture-fallback path, where npm-latest and the cached manifest can differ. --- scripts/generate-cli-docs.ts | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index e80ca6d..07effd9 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -128,8 +128,14 @@ function loadRawManifest(version: string): CliManifest { cwd: os.tmpdir(), stdio: ["ignore", "pipe", "ignore"], }); - const json = out.slice(out.indexOf("{"), out.lastIndexOf("}") + 1); - const manifest = JSON.parse(json) as CliManifest; + const start = out.indexOf("{"); + const end = out.lastIndexOf("}"); + if (start === -1 || end < start) { + throw new Error( + `\`${CLI_NAME}@${version} manifest --json\` did not emit a JSON object (got: ${out.trim().slice(0, 120)}…)`, + ); + } + const manifest = JSON.parse(out.slice(start, end + 1)) as CliManifest; fs.mkdirSync(path.dirname(FIXTURE), { recursive: true }); fs.writeFileSync(FIXTURE, `${JSON.stringify(manifest, null, 2)}\n`); return manifest; @@ -355,8 +361,13 @@ function loadManifest(): Manifest { } function main() { + // latestVersion() picks which published CLI to invoke; the manifest we get + // back is authoritative for what to stamp. Reconcile CLI_VERSION to it so + // pages never claim a version different from the data they were built from + // (e.g. when the live run fails and we fall back to an older cached fixture). CLI_VERSION = latestVersion(); const manifest = loadManifest(); + CLI_VERSION = manifest.version; // Group top-level commands by base, preserving discovery order. const bases: string[] = []; From 089645d9394b62cbda61cb4d7c914248b403bbbd Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 18:15:47 +1000 Subject: [PATCH 031/151] chore(cli-docs): drop the internal tracker ref from the generator header The header comment carried an internal issue id; remove it so no private tracker reference lives in this public repo. Comment-only. --- scripts/generate-cli-docs.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index 07effd9..89a59ce 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -1,6 +1,6 @@ #!/usr/bin/env tsx /** - * CLI reference generator (CIP-33xx). + * CLI reference generator. * * Generates the `/reference/cli` pages from the `stash` CLI itself, so the * reference can never drift from the shipped command surface. Every page is From 1dd4b98e1fcd25b60e1a2776d07d63a1f7c8891d Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 6 Jul 2026 00:34:53 +1000 Subject: [PATCH 032/151] docs(v2): generate the EQL function catalog from the manifest + drift-lint MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Consumes the eql-manifest.json the EQL repo emits from its Doxygen'd SQL (cipherstash/encrypt-query-language#364) to: - generate content/docs/reference/eql/functions.mdx — a version-stamped, drift-proof catalog of the eql_v3 function surface that the hand-written pedagogical pages link to (added to the EQL nav under "Reference"); - drift-lint the hand-written pages: every `eql_v3.<fn>(...)` they reference should exist in the manifest for the shipped EQL version. This is what would have caught the fabricated function names / stale payload that slipped into the v2 docs. Wired into prebuild. Reads an illustrative sample fixture today (so the format and lint are reviewable now); swaps to the real json/eql-manifest.json from the eql-docs release asset once #364 ships — generate-eql-docs.ts already downloads that tarball. The lint is report-only against the sample and becomes a failing gate once wired to the real manifest (STRICT). Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/eql/functions.mdx | 55 +++++++ content/docs/reference/eql/meta.json | 2 + package.json | 3 +- scripts/fixtures/eql-manifest.sample.json | 43 ++++++ scripts/generate-eql-api-docs.ts | 177 ++++++++++++++++++++++ 5 files changed, 279 insertions(+), 1 deletion(-) create mode 100644 content/docs/reference/eql/functions.mdx create mode 100644 scripts/fixtures/eql-manifest.sample.json create mode 100644 scripts/generate-eql-api-docs.ts diff --git a/content/docs/reference/eql/functions.mdx b/content/docs/reference/eql/functions.mdx new file mode 100644 index 0000000..5f1eca2 --- /dev/null +++ b/content/docs/reference/eql/functions.mdx @@ -0,0 +1,55 @@ +--- +title: Functions +description: "Generated catalog of EQL SQL functions and operators (EQL 3.0.0-sample)." +type: reference +components: [eql] +verifiedAgainst: + eql: "3.0.0-sample" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest (v3.0.0-sample). */} + +<Callout type="info"> +Generated from the **EQL 3.0.0-sample** manifest (the Doxygen'd SQL is the source of truth). For the model behind these — variants, terms, typed operands — see [Core concepts](/reference/eql/core-concepts). +</Callout> + +The complete function surface of the `eql_v3` schema. The type and query pages explain *when* to use these; this page is the exhaustive signature reference they link to. + +## Functions + +### `hmac_256(jsonb)` + +Extract the HMAC-SHA-256 equality term from an encrypted value. + +Backs equality (`=`, `IN`, joins) on `_eq` and `text_search` columns. + +| Parameter | Type | Description | +| --- | --- | --- | +| `val` | `jsonb` | the encrypted value | + + +**Returns:** `text` — the HMAC term +### `bloom_filter(jsonb)` + +Extract the bloom-filter match term from an encrypted value. + +Backs token containment (`@>`) on `text_match` / `text_search` columns. + +| Parameter | Type | Description | +| --- | --- | --- | +| `val` | `jsonb` | the encrypted value | + + +**Returns:** `smallint[]` — the set bit positions +### `ore_block_256(jsonb)` + +Extract the ORE ordering term from an encrypted value. + +Backs range and ordering (`<`, `>`, `ORDER BY`) on `_ord` columns. + +| Parameter | Type | Description | +| --- | --- | --- | +| `val` | `jsonb` | the encrypted value | + + +**Returns:** `eql_v3.ore_block_256` — the ORE term diff --git a/content/docs/reference/eql/meta.json b/content/docs/reference/eql/meta.json index 76a855b..6d448c7 100644 --- a/content/docs/reference/eql/meta.json +++ b/content/docs/reference/eql/meta.json @@ -15,6 +15,8 @@ "sorting", "grouping-and-aggregates", "joins", + "---Reference---", + "functions", "---Previous versions---", "v2" ] diff --git a/package.json b/package.json index d3d8965..215bc8b 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run generate-docs:cli && bun run validate-links && bun run validate-redirects", + "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-links && bun run validate-redirects", "build": "next build", "dev": "next dev -p 3001", "start": "next start", @@ -13,6 +13,7 @@ "format": "biome format --write", "generate-docs": "tsx scripts/generate-docs.ts", "generate-docs:eql": "tsx scripts/generate-eql-docs.ts", + "generate-docs:eql-api": "tsx scripts/generate-eql-api-docs.ts", "generate-docs:cli": "tsx scripts/generate-cli-docs.ts", "validate-links": "tsx scripts/validate-links.ts", "validate-redirects": "tsx scripts/validate-v2-redirects.ts" diff --git a/scripts/fixtures/eql-manifest.sample.json b/scripts/fixtures/eql-manifest.sample.json new file mode 100644 index 0000000..99ce5d5 --- /dev/null +++ b/scripts/fixtures/eql-manifest.sample.json @@ -0,0 +1,43 @@ +{ + "_note": "ILLUSTRATIVE SAMPLE — shape only. Replaced at build time by the real eql-manifest.json from the eql-docs release asset once cipherstash/encrypt-query-language#364 ships. Do not treat these signatures as authoritative.", + "$schema": "https://schemas.cipherstash.com/eql/manifest/v1.json", + "name": "eql", + "version": "3.0.0-sample", + "generatedFrom": "doxygen-xml", + "counts": { "functions": 3, "public": 3, "private": 0 }, + "functions": [ + { + "name": "hmac_256", + "signature": "hmac_256(jsonb)", + "visibility": "public", + "brief": "Extract the HMAC-SHA-256 equality term from an encrypted value.", + "description": "Backs equality (`=`, `IN`, joins) on `_eq` and `text_search` columns.", + "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], + "returns": { "type": "text", "description": "the HMAC term" }, + "throws": [], "notes": "", "warnings": "", "seeAlso": "", + "source": { "file": "src/hmac_256/functions.sql", "line": 12 } + }, + { + "name": "bloom_filter", + "signature": "bloom_filter(jsonb)", + "visibility": "public", + "brief": "Extract the bloom-filter match term from an encrypted value.", + "description": "Backs token containment (`@>`) on `text_match` / `text_search` columns.", + "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], + "returns": { "type": "smallint[]", "description": "the set bit positions" }, + "throws": [], "notes": "", "warnings": "", "seeAlso": "", + "source": { "file": "src/bloom_filter/functions.sql", "line": 20 } + }, + { + "name": "ore_block_256", + "signature": "ore_block_256(jsonb)", + "visibility": "public", + "brief": "Extract the ORE ordering term from an encrypted value.", + "description": "Backs range and ordering (`<`, `>`, `ORDER BY`) on `_ord` columns.", + "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], + "returns": { "type": "eql_v3.ore_block_256", "description": "the ORE term" }, + "throws": [], "notes": "", "warnings": "", "seeAlso": "", + "source": { "file": "src/ore_block_u64_8_256/functions.sql", "line": 8 } + } + ] +} diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts new file mode 100644 index 0000000..d442a07 --- /dev/null +++ b/scripts/generate-eql-api-docs.ts @@ -0,0 +1,177 @@ +#!/usr/bin/env tsx +/** + * EQL API reference generator + drift guard (docs V2). + * + * Consumes the structured `eql-manifest.json` that the EQL repo emits from its + * Doxygen'd SQL (cipherstash/encrypt-query-language#364) and: + * + * 1. Generates a version-stamped function catalog at + * content/docs/reference/eql/functions.mdx — the exhaustive, drift-proof + * low-level reference the hand-written pedagogical pages link to. + * 2. Drift-lints the hand-written pages: every `eql_v3.<fn>(...)` referenced + * in them should exist in the manifest for the shipped EQL version. This + * is what would have caught the fabricated function names / stale payload + * that slipped into the v2 docs. + * + * ── Manifest source ──────────────────────────────────────────────────────── + * TODAY: reads a committed illustrative sample (shape only), so the generated + * format and the lint are reviewable before the EQL side ships. + * TARGET: once #364 releases, `generate-eql-docs.ts` already downloads the + * `eql-docs-<tag>` asset — extend it to also extract `json/eql-manifest.json` + * and point MANIFEST_PATH at it. The renderer and lint stay identical. + * + * The drift-lint is REPORT-ONLY against the sample (which is tiny, so most real + * symbols read as "unknown"); it becomes a failing gate once wired to the real + * manifest. See STRICT below. + */ +import fs from "node:fs"; +import path from "node:path"; + +const MANIFEST_PATH = path.join( + process.cwd(), + "scripts/fixtures/eql-manifest.sample.json", +); +const EQL_DIR = path.join(process.cwd(), "content/docs/reference/eql"); +const OUT_FILE = path.join(EQL_DIR, "functions.mdx"); +// Flip to true once MANIFEST_PATH points at the real release manifest. +const STRICT = false; + +interface Param { + name: string; + type?: string; + description?: string; +} +interface Fn { + name: string; + signature: string; + visibility: "public" | "private"; + brief: string; + description?: string; + params: Param[]; + returns?: { type?: string; description?: string }; + source?: { file?: string; line?: number }; +} +interface Manifest { + version: string; + functions: Fn[]; +} + +function loadManifest(): Manifest { + return JSON.parse(fs.readFileSync(MANIFEST_PATH, "utf8")); +} + +// ── Render the generated catalog ───────────────────────────────────────────── +function paramsTable(params: Param[]): string { + if (!params.length) return ""; + const rows = params + .map( + (p) => + `| \`${p.name}\` | ${p.type ? `\`${p.type}\`` : ""} | ${(p.description ?? "").replace(/\|/g, "\\|")} |`, + ) + .join("\n"); + return `\n| Parameter | Type | Description |\n| --- | --- | --- |\n${rows}\n`; +} + +function renderFn(fn: Fn): string { + const parts = [`### \`${fn.signature}\``, "", fn.brief]; + if (fn.description && fn.description !== fn.brief) parts.push("", fn.description); + if (fn.params.length) parts.push(paramsTable(fn.params)); + if (fn.returns?.type || fn.returns?.description) { + const t = fn.returns.type ? `\`${fn.returns.type}\`` : ""; + parts.push("", `**Returns:** ${t}${fn.returns.description ? ` — ${fn.returns.description}` : ""}`); + } + return parts.join("\n"); +} + +function render(manifest: Manifest): string { + const version = manifest.version; + const publicFns = manifest.functions.filter((f) => f.visibility === "public"); + const privateFns = manifest.functions.filter((f) => f.visibility === "private"); + + const frontmatter = [ + "---", + "title: Functions", + `description: "Generated catalog of EQL SQL functions and operators (EQL ${version})."`, + "type: reference", + "components: [eql]", + "verifiedAgainst:", + ` eql: "${version}"`, + "---", + ].join("\n"); + + const body = [ + frontmatter, + "", + `{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest (v${version}). */}`, + "", + `<Callout type="info">`, + `Generated from the **EQL ${version}** manifest (the Doxygen'd SQL is the source of truth). For the model behind these — variants, terms, typed operands — see [Core concepts](/reference/eql/core-concepts).`, + `</Callout>`, + "", + "The complete function surface of the `eql_v3` schema. The type and query pages explain *when* to use these; this page is the exhaustive signature reference they link to.", + "", + "## Functions", + "", + ...publicFns.map(renderFn), + ]; + + if (privateFns.length) { + body.push("", "## Internal functions", "", ...privateFns.map(renderFn)); + } + + return `${body.join("\n").trimEnd()}\n`; +} + +// ── Drift guard ────────────────────────────────────────────────────────────── +function driftCheck(manifest: Manifest): string[] { + const known = new Set(manifest.functions.map((f) => f.name)); + const referenced = new Map<string, Set<string>>(); // symbol -> pages + + for (const file of fs.readdirSync(EQL_DIR)) { + if (!file.endsWith(".mdx") || file === "functions.mdx") continue; + const text = fs.readFileSync(path.join(EQL_DIR, file), "utf8"); + for (const m of text.matchAll(/eql_v3\.([a-z0-9_]+)\s*\(/g)) { + const sym = m[1]; + if (!referenced.has(sym)) referenced.set(sym, new Set()); + referenced.get(sym)!.add(file); + } + } + + const unknown: string[] = []; + for (const [sym, pages] of referenced) { + if (!known.has(sym)) unknown.push(`${sym} (in ${[...pages].join(", ")})`); + } + return unknown.sort(); +} + +// ── Main ───────────────────────────────────────────────────────────────────── +function main() { + const manifest = loadManifest(); + + fs.mkdirSync(EQL_DIR, { recursive: true }); + fs.writeFileSync(OUT_FILE, render(manifest)); + console.log( + `✓ Generated ${path.relative(process.cwd(), OUT_FILE)} from EQL ${manifest.version} (${manifest.functions.length} functions)`, + ); + + const unknown = driftCheck(manifest); + if (unknown.length) { + const header = `⚠ ${unknown.length} eql_v3.* function(s) referenced in hand-written pages are not in the manifest:`; + console.warn(`\n${header}`); + for (const u of unknown) console.warn(` - ${u}`); + if (STRICT) { + console.error( + "\nDrift check failed (STRICT). Fix the reference or update the pinned EQL version.", + ); + process.exit(1); + } else { + console.warn( + "\n(Report-only: using the illustrative sample manifest. Becomes a failing gate once wired to the real release manifest — set STRICT = true.)", + ); + } + } else { + console.log("✓ Drift check: all referenced eql_v3.* functions are in the manifest."); + } +} + +main(); From 1f08e4fea42c648a18bfc32fee145a2a6f5ee6d7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 6 Jul 2026 09:59:26 +1000 Subject: [PATCH 033/151] docs(v2): render the EQL domain/variant matrix + extend the drift-lint to domains MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The generated functions.mdx now leads with the encrypted-domain variant matrix (domain × type × variant → capabilities → index terms), consumed from the manifest's new `domains` array (cipherstash/encrypt-query-language#364). The drift-lint now covers domain-type references too, not just function calls. Running it surfaced a real mismatch worth fixing: the hand-written v3 pages reference eql_v3.int4_*/int8_*/float4_*/float8_* domains, but the shipped SQL defines eql_v3.integer_*/bigint_*/real_*/double_* — so casts like $1::eql_v3.int8_ord would fail. Docs-vs-codegen naming needs reconciling; this is exactly the drift the lint exists to catch. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/eql/functions.mdx | 15 +++++++- scripts/fixtures/eql-manifest.sample.json | 34 ++++++++++++++--- scripts/generate-eql-api-docs.ts | 45 +++++++++++++++++++++-- 3 files changed, 83 insertions(+), 11 deletions(-) diff --git a/content/docs/reference/eql/functions.mdx b/content/docs/reference/eql/functions.mdx index 5f1eca2..20b83e3 100644 --- a/content/docs/reference/eql/functions.mdx +++ b/content/docs/reference/eql/functions.mdx @@ -13,7 +13,20 @@ verifiedAgainst: Generated from the **EQL 3.0.0-sample** manifest (the Doxygen'd SQL is the source of truth). For the model behind these — variants, terms, typed operands — see [Core concepts](/reference/eql/core-concepts). </Callout> -The complete function surface of the `eql_v3` schema. The type and query pages explain *when* to use these; this page is the exhaustive signature reference they link to. +The `eql_v3` schema surface — encrypted domains and the functions behind them. The type and query pages explain *when* to use these; this page is the exhaustive reference they link to. + +## Encrypted domains + +A column's capability is declared by its **domain variant**, enforced by a `CHECK` on the required index terms (`hm` equality · `ob`/`op` order · `bf` match · `sv` JSON). See [Core concepts](/reference/eql/core-concepts) for the model. + +| Domain | Type | Variant | Capabilities | Index terms | +| --- | --- | --- | --- | --- | +| `eql_v3.integer` | integer | _(storage only)_ | storage | — | +| `eql_v3.integer_eq` | integer | `_eq` | equality | `hm` | +| `eql_v3.integer_ord` | integer | `_ord` | order | `ob` | +| `eql_v3.integer_ord_ope` | integer | `_ord_ope` | order | `op` | +| `eql_v3.text_match` | text | `_match` | match | `bf` | +| `eql_v3.text_search` | text | `_search` | equality, order, match | `hm` `ob` `bf` | ## Functions diff --git a/scripts/fixtures/eql-manifest.sample.json b/scripts/fixtures/eql-manifest.sample.json index 99ce5d5..68ded54 100644 --- a/scripts/fixtures/eql-manifest.sample.json +++ b/scripts/fixtures/eql-manifest.sample.json @@ -1,10 +1,10 @@ { - "_note": "ILLUSTRATIVE SAMPLE — shape only. Replaced at build time by the real eql-manifest.json from the eql-docs release asset once cipherstash/encrypt-query-language#364 ships. Do not treat these signatures as authoritative.", + "_note": "ILLUSTRATIVE SAMPLE — shape only. Replaced at build time by the real eql-manifest.json from the eql-docs release asset once cipherstash/encrypt-query-language#364 ships. Do not treat these signatures/domains as authoritative.", "$schema": "https://schemas.cipherstash.com/eql/manifest/v1.json", "name": "eql", "version": "3.0.0-sample", - "generatedFrom": "doxygen-xml", - "counts": { "functions": 3, "public": 3, "private": 0 }, + "generatedFrom": "doxygen-xml + sql-domains", + "counts": { "functions": 3, "public": 3, "private": 0, "domains": 6 }, "functions": [ { "name": "hmac_256", @@ -15,7 +15,7 @@ "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], "returns": { "type": "text", "description": "the HMAC term" }, "throws": [], "notes": "", "warnings": "", "seeAlso": "", - "source": { "file": "src/hmac_256/functions.sql", "line": 12 } + "source": { "file": "src/v3/sem/hmac_256/functions.sql", "line": 12 } }, { "name": "bloom_filter", @@ -26,7 +26,7 @@ "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], "returns": { "type": "smallint[]", "description": "the set bit positions" }, "throws": [], "notes": "", "warnings": "", "seeAlso": "", - "source": { "file": "src/bloom_filter/functions.sql", "line": 20 } + "source": { "file": "src/v3/sem/bloom_filter/functions.sql", "line": 20 } }, { "name": "ore_block_256", @@ -37,7 +37,29 @@ "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], "returns": { "type": "eql_v3.ore_block_256", "description": "the ORE term" }, "throws": [], "notes": "", "warnings": "", "seeAlso": "", - "source": { "file": "src/ore_block_u64_8_256/functions.sql", "line": 8 } + "source": { "file": "src/v3/sem/ore_block_256/functions.sql", "line": 8 } } + ], + "domains": [ + { "name": "eql_v3.integer", "type": "integer", "variant": "", "base": "jsonb", + "brief": "Encrypted domain eql_v3.integer.", "terms": [], "capabilities": ["storage"], + "termFunctions": [], "source": { "file": "src/v3/scalars/integer/integer_types.sql", "line": 14 } }, + { "name": "eql_v3.integer_eq", "type": "integer", "variant": "eq", "base": "jsonb", + "brief": "Encrypted domain eql_v3.integer_eq.", "terms": ["hm"], "capabilities": ["equality"], + "termFunctions": ["eql_v3.hmac_256"], "source": { "file": "src/v3/scalars/integer/integer_types.sql", "line": 29 } }, + { "name": "eql_v3.integer_ord", "type": "integer", "variant": "ord", "base": "jsonb", + "brief": "Encrypted domain eql_v3.integer_ord.", "terms": ["ob"], "capabilities": ["order"], + "termFunctions": ["eql_v3.ore_block_256"], "source": { "file": "src/v3/scalars/integer/integer_types.sql", "line": 63 } }, + { "name": "eql_v3.integer_ord_ope", "type": "integer", "variant": "ord_ope", "base": "jsonb", + "brief": "Encrypted domain eql_v3.integer_ord_ope.", "terms": ["op"], "capabilities": ["order"], + "termFunctions": [], "source": { "file": "src/v3/scalars/integer/integer_types.sql", "line": 81 } }, + { "name": "eql_v3.text_match", "type": "text", "variant": "match", "base": "jsonb", + "brief": "Encrypted domain eql_v3.text_match.", "terms": ["bf"], "capabilities": ["match"], + "termFunctions": ["eql_v3.bloom_filter"], "source": { "file": "src/v3/scalars/text/text_types.sql", "line": 44 } }, + { "name": "eql_v3.text_search", "type": "text", "variant": "search", "base": "jsonb", + "brief": "Encrypted domain eql_v3.text_search.", "terms": ["hm", "ob", "bf"], + "capabilities": ["equality", "order", "match"], + "termFunctions": ["eql_v3.hmac_256", "eql_v3.ore_block_256", "eql_v3.bloom_filter"], + "source": { "file": "src/v3/scalars/text/text_types.sql", "line": 60 } } ] } diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index d442a07..e5054dc 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -51,9 +51,19 @@ interface Fn { returns?: { type?: string; description?: string }; source?: { file?: string; line?: number }; } +interface Domain { + name: string; + type: string; + variant: string; + base?: string; + terms: string[]; + capabilities: string[]; + termFunctions?: string[]; +} interface Manifest { version: string; functions: Fn[]; + domains?: Domain[]; } function loadManifest(): Manifest { @@ -83,6 +93,27 @@ function renderFn(fn: Fn): string { return parts.join("\n"); } +function renderDomains(domains: Domain[]): string { + if (!domains.length) return ""; + const rows = domains + .map((d) => { + const variant = d.variant ? `\`_${d.variant}\`` : "_(storage only)_"; + const terms = d.terms.length ? d.terms.map((t) => `\`${t}\``).join(" ") : "—"; + return `| \`${d.name}\` | ${d.type} | ${variant} | ${d.capabilities.join(", ")} | ${terms} |`; + }) + .join("\n"); + return [ + "## Encrypted domains", + "", + "A column's capability is declared by its **domain variant**, enforced by a `CHECK` on the required index terms (`hm` equality · `ob`/`op` order · `bf` match · `sv` JSON). See [Core concepts](/reference/eql/core-concepts) for the model.", + "", + "| Domain | Type | Variant | Capabilities | Index terms |", + "| --- | --- | --- | --- | --- |", + rows, + "", + ].join("\n"); +} + function render(manifest: Manifest): string { const version = manifest.version; const publicFns = manifest.functions.filter((f) => f.visibility === "public"); @@ -108,8 +139,9 @@ function render(manifest: Manifest): string { `Generated from the **EQL ${version}** manifest (the Doxygen'd SQL is the source of truth). For the model behind these — variants, terms, typed operands — see [Core concepts](/reference/eql/core-concepts).`, `</Callout>`, "", - "The complete function surface of the `eql_v3` schema. The type and query pages explain *when* to use these; this page is the exhaustive signature reference they link to.", + "The `eql_v3` schema surface — encrypted domains and the functions behind them. The type and query pages explain *when* to use these; this page is the exhaustive reference they link to.", "", + renderDomains(manifest.domains ?? []), "## Functions", "", ...publicFns.map(renderFn), @@ -124,13 +156,18 @@ function render(manifest: Manifest): string { // ── Drift guard ────────────────────────────────────────────────────────────── function driftCheck(manifest: Manifest): string[] { - const known = new Set(manifest.functions.map((f) => f.name)); + // Known = every function AND every domain (short) name. + const known = new Set<string>([ + ...manifest.functions.map((f) => f.name), + ...(manifest.domains ?? []).map((d) => d.name.replace(/^eql_v3\./, "")), + ]); const referenced = new Map<string, Set<string>>(); // symbol -> pages for (const file of fs.readdirSync(EQL_DIR)) { if (!file.endsWith(".mdx") || file === "functions.mdx") continue; const text = fs.readFileSync(path.join(EQL_DIR, file), "utf8"); - for (const m of text.matchAll(/eql_v3\.([a-z0-9_]+)\s*\(/g)) { + // Any eql_v3.<symbol> — function call, domain cast, or type reference. + for (const m of text.matchAll(/eql_v3\.([a-z0-9_]+)/g)) { const sym = m[1]; if (!referenced.has(sym)) referenced.set(sym, new Set()); referenced.get(sym)!.add(file); @@ -156,7 +193,7 @@ function main() { const unknown = driftCheck(manifest); if (unknown.length) { - const header = `⚠ ${unknown.length} eql_v3.* function(s) referenced in hand-written pages are not in the manifest:`; + const header = `⚠ ${unknown.length} eql_v3.* symbol(s) referenced in hand-written pages are not in the manifest (functions or domains):`; console.warn(`\n${header}`); for (const u of unknown) console.warn(` - ${u}`); if (STRICT) { From 200ee2e6ad4d998173f1ea2abc41ea3da70b022f Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 6 Jul 2026 10:45:22 +1000 Subject: [PATCH 034/151] docs(v2): switch the domain matrix to the catalog-driven shape Matches the manifest change in encrypt-query-language#364: domains now come from the Rust catalog (`eql-codegen dump-catalog`), carrying authoritative type names and the exact `supportedOperators` per domain (replacing the CHECK-key-derived `terms`/`termFunctions`). The generated variant matrix renders an Operators column; the sample fixture is updated to match. Note `_ord` correctly shows equality + order now (ORE collapses to equality). Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/eql/functions.mdx | 14 +++++++------- scripts/fixtures/eql-manifest.sample.json | 21 +++++++-------------- scripts/generate-eql-api-docs.ts | 13 +++++++------ 3 files changed, 21 insertions(+), 27 deletions(-) diff --git a/content/docs/reference/eql/functions.mdx b/content/docs/reference/eql/functions.mdx index 20b83e3..dce19cd 100644 --- a/content/docs/reference/eql/functions.mdx +++ b/content/docs/reference/eql/functions.mdx @@ -17,16 +17,16 @@ The `eql_v3` schema surface — encrypted domains and the functions behind them. ## Encrypted domains -A column's capability is declared by its **domain variant**, enforced by a `CHECK` on the required index terms (`hm` equality · `ob`/`op` order · `bf` match · `sv` JSON). See [Core concepts](/reference/eql/core-concepts) for the model. +A column's capability is declared by its **domain variant**. This matrix comes straight from the Rust catalog (`eql-codegen dump-catalog`) — the source of truth the SQL is generated from. See [Core concepts](/reference/eql/core-concepts) for the model. -| Domain | Type | Variant | Capabilities | Index terms | +| Domain | Type | Variant | Capabilities | Operators | | --- | --- | --- | --- | --- | | `eql_v3.integer` | integer | _(storage only)_ | storage | — | -| `eql_v3.integer_eq` | integer | `_eq` | equality | `hm` | -| `eql_v3.integer_ord` | integer | `_ord` | order | `ob` | -| `eql_v3.integer_ord_ope` | integer | `_ord_ope` | order | `op` | -| `eql_v3.text_match` | text | `_match` | match | `bf` | -| `eql_v3.text_search` | text | `_search` | equality, order, match | `hm` `ob` `bf` | +| `eql_v3.integer_eq` | integer | `_eq` | equality | `=` `<>` | +| `eql_v3.integer_ord` | integer | `_ord` | equality, order | `=` `<>` `<` `<=` `>` `>=` | +| `eql_v3.integer_ord_ope` | integer | `_ord_ope` | equality, order | `=` `<>` `<` `<=` `>` `>=` | +| `eql_v3.text_match` | text | `_match` | match | `@>` `<@` | +| `eql_v3.text_search` | text | `_search` | equality, order, match | `=` `<>` `<` `<=` `>` `>=` `@>` `<@` | ## Functions diff --git a/scripts/fixtures/eql-manifest.sample.json b/scripts/fixtures/eql-manifest.sample.json index 68ded54..dba9248 100644 --- a/scripts/fixtures/eql-manifest.sample.json +++ b/scripts/fixtures/eql-manifest.sample.json @@ -3,7 +3,7 @@ "$schema": "https://schemas.cipherstash.com/eql/manifest/v1.json", "name": "eql", "version": "3.0.0-sample", - "generatedFrom": "doxygen-xml + sql-domains", + "generatedFrom": "doxygen-xml + catalog", "counts": { "functions": 3, "public": 3, "private": 0, "domains": 6 }, "functions": [ { @@ -42,24 +42,17 @@ ], "domains": [ { "name": "eql_v3.integer", "type": "integer", "variant": "", "base": "jsonb", - "brief": "Encrypted domain eql_v3.integer.", "terms": [], "capabilities": ["storage"], - "termFunctions": [], "source": { "file": "src/v3/scalars/integer/integer_types.sql", "line": 14 } }, + "capabilities": ["storage"], "supportedOperators": [] }, { "name": "eql_v3.integer_eq", "type": "integer", "variant": "eq", "base": "jsonb", - "brief": "Encrypted domain eql_v3.integer_eq.", "terms": ["hm"], "capabilities": ["equality"], - "termFunctions": ["eql_v3.hmac_256"], "source": { "file": "src/v3/scalars/integer/integer_types.sql", "line": 29 } }, + "capabilities": ["equality"], "supportedOperators": ["=", "<>"] }, { "name": "eql_v3.integer_ord", "type": "integer", "variant": "ord", "base": "jsonb", - "brief": "Encrypted domain eql_v3.integer_ord.", "terms": ["ob"], "capabilities": ["order"], - "termFunctions": ["eql_v3.ore_block_256"], "source": { "file": "src/v3/scalars/integer/integer_types.sql", "line": 63 } }, + "capabilities": ["equality", "order"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">="] }, { "name": "eql_v3.integer_ord_ope", "type": "integer", "variant": "ord_ope", "base": "jsonb", - "brief": "Encrypted domain eql_v3.integer_ord_ope.", "terms": ["op"], "capabilities": ["order"], - "termFunctions": [], "source": { "file": "src/v3/scalars/integer/integer_types.sql", "line": 81 } }, + "capabilities": ["equality", "order"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">="] }, { "name": "eql_v3.text_match", "type": "text", "variant": "match", "base": "jsonb", - "brief": "Encrypted domain eql_v3.text_match.", "terms": ["bf"], "capabilities": ["match"], - "termFunctions": ["eql_v3.bloom_filter"], "source": { "file": "src/v3/scalars/text/text_types.sql", "line": 44 } }, + "capabilities": ["match"], "supportedOperators": ["@>", "<@"] }, { "name": "eql_v3.text_search", "type": "text", "variant": "search", "base": "jsonb", - "brief": "Encrypted domain eql_v3.text_search.", "terms": ["hm", "ob", "bf"], "capabilities": ["equality", "order", "match"], - "termFunctions": ["eql_v3.hmac_256", "eql_v3.ore_block_256", "eql_v3.bloom_filter"], - "source": { "file": "src/v3/scalars/text/text_types.sql", "line": 60 } } + "supportedOperators": ["=", "<>", "<", "<=", ">", ">=", "@>", "<@"] } ] } diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index e5054dc..cd5f72d 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -56,9 +56,8 @@ interface Domain { type: string; variant: string; base?: string; - terms: string[]; capabilities: string[]; - termFunctions?: string[]; + supportedOperators?: string[]; } interface Manifest { version: string; @@ -98,16 +97,18 @@ function renderDomains(domains: Domain[]): string { const rows = domains .map((d) => { const variant = d.variant ? `\`_${d.variant}\`` : "_(storage only)_"; - const terms = d.terms.length ? d.terms.map((t) => `\`${t}\``).join(" ") : "—"; - return `| \`${d.name}\` | ${d.type} | ${variant} | ${d.capabilities.join(", ")} | ${terms} |`; + const ops = d.supportedOperators?.length + ? d.supportedOperators.map((o) => `\`${o}\``).join(" ") + : "—"; + return `| \`${d.name}\` | ${d.type} | ${variant} | ${d.capabilities.join(", ")} | ${ops} |`; }) .join("\n"); return [ "## Encrypted domains", "", - "A column's capability is declared by its **domain variant**, enforced by a `CHECK` on the required index terms (`hm` equality · `ob`/`op` order · `bf` match · `sv` JSON). See [Core concepts](/reference/eql/core-concepts) for the model.", + "A column's capability is declared by its **domain variant**. This matrix comes straight from the Rust catalog (`eql-codegen dump-catalog`) — the source of truth the SQL is generated from. See [Core concepts](/reference/eql/core-concepts) for the model.", "", - "| Domain | Type | Variant | Capabilities | Index terms |", + "| Domain | Type | Variant | Capabilities | Operators |", "| --- | --- | --- | --- | --- |", rows, "", From 1e9f6f8eafee9bb1f19295146220272f430d4eab Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 6 Jul 2026 12:08:17 +1000 Subject: [PATCH 035/151] docs(v2): consume jsonb domains + extractor functions from the manifest MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Matches encrypt-query-language#368 (stacked on #364): the manifest now carries the 3 jsonb (SteVec) domains and per-domain `termFunctions`. The variant matrix renders the jsonb domains (json capability), and the drift-lint adds each domain's extractor functions (eq_term / ord_term / match_term / ord_ope_term) to its known set — resolving those false-positives (61 → 57 unknowns on the sample). Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/eql/functions.mdx | 3 +++ scripts/fixtures/eql-manifest.sample.json | 25 ++++++++++++++++------- scripts/generate-eql-api-docs.ts | 8 +++++++- 3 files changed, 28 insertions(+), 8 deletions(-) diff --git a/content/docs/reference/eql/functions.mdx b/content/docs/reference/eql/functions.mdx index dce19cd..a3b3dc9 100644 --- a/content/docs/reference/eql/functions.mdx +++ b/content/docs/reference/eql/functions.mdx @@ -27,6 +27,9 @@ A column's capability is declared by its **domain variant**. This matrix comes s | `eql_v3.integer_ord_ope` | integer | `_ord_ope` | equality, order | `=` `<>` `<` `<=` `>` `>=` | | `eql_v3.text_match` | text | `_match` | match | `@>` `<@` | | `eql_v3.text_search` | text | `_search` | equality, order, match | `=` `<>` `<` `<=` `>` `>=` `@>` `<@` | +| `eql_v3.json` | jsonb | _(storage only)_ | json | — | +| `eql_v3.jsonb_entry` | jsonb | _(storage only)_ | json | — | +| `eql_v3.jsonb_query` | jsonb | _(storage only)_ | json | — | ## Functions diff --git a/scripts/fixtures/eql-manifest.sample.json b/scripts/fixtures/eql-manifest.sample.json index dba9248..e08d50d 100644 --- a/scripts/fixtures/eql-manifest.sample.json +++ b/scripts/fixtures/eql-manifest.sample.json @@ -4,7 +4,7 @@ "name": "eql", "version": "3.0.0-sample", "generatedFrom": "doxygen-xml + catalog", - "counts": { "functions": 3, "public": 3, "private": 0, "domains": 6 }, + "counts": { "functions": 3, "public": 3, "private": 0, "domains": 9 }, "functions": [ { "name": "hmac_256", @@ -42,17 +42,28 @@ ], "domains": [ { "name": "eql_v3.integer", "type": "integer", "variant": "", "base": "jsonb", - "capabilities": ["storage"], "supportedOperators": [] }, + "capabilities": ["storage"], "supportedOperators": [], "termFunctions": [] }, { "name": "eql_v3.integer_eq", "type": "integer", "variant": "eq", "base": "jsonb", - "capabilities": ["equality"], "supportedOperators": ["=", "<>"] }, + "capabilities": ["equality"], "supportedOperators": ["=", "<>"], + "termFunctions": ["eql_v3.eq_term"] }, { "name": "eql_v3.integer_ord", "type": "integer", "variant": "ord", "base": "jsonb", - "capabilities": ["equality", "order"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">="] }, + "capabilities": ["equality", "order"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">="], + "termFunctions": ["eql_v3.ord_term"] }, { "name": "eql_v3.integer_ord_ope", "type": "integer", "variant": "ord_ope", "base": "jsonb", - "capabilities": ["equality", "order"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">="] }, + "capabilities": ["equality", "order"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">="], + "termFunctions": ["eql_v3.ord_ope_term"] }, { "name": "eql_v3.text_match", "type": "text", "variant": "match", "base": "jsonb", - "capabilities": ["match"], "supportedOperators": ["@>", "<@"] }, + "capabilities": ["match"], "supportedOperators": ["@>", "<@"], + "termFunctions": ["eql_v3.match_term"] }, { "name": "eql_v3.text_search", "type": "text", "variant": "search", "base": "jsonb", "capabilities": ["equality", "order", "match"], - "supportedOperators": ["=", "<>", "<", "<=", ">", ">=", "@>", "<@"] } + "supportedOperators": ["=", "<>", "<", "<=", ">", ">=", "@>", "<@"], + "termFunctions": ["eql_v3.eq_term", "eql_v3.ord_term", "eql_v3.match_term"] }, + { "name": "eql_v3.json", "type": "jsonb", "variant": "", "base": "jsonb", "shape": "stevec", + "capabilities": ["json"], "supportedOperators": [], "termFunctions": [] }, + { "name": "eql_v3.jsonb_entry", "type": "jsonb", "variant": "", "base": "jsonb", "shape": "stevec", + "capabilities": ["json"], "supportedOperators": [], "termFunctions": [] }, + { "name": "eql_v3.jsonb_query", "type": "jsonb", "variant": "", "base": "jsonb", "shape": "stevec", + "capabilities": ["json"], "supportedOperators": [], "termFunctions": [] } ] } diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index cd5f72d..665682d 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -58,6 +58,8 @@ interface Domain { base?: string; capabilities: string[]; supportedOperators?: string[]; + termFunctions?: string[]; + shape?: string; } interface Manifest { version: string; @@ -157,10 +159,14 @@ function render(manifest: Manifest): string { // ── Drift guard ────────────────────────────────────────────────────────────── function driftCheck(manifest: Manifest): string[] { - // Known = every function AND every domain (short) name. + // Known = every function, every domain (short) name, and every domain's + // extractor functions (eq_term / ord_term / …, authoritative from the catalog). const known = new Set<string>([ ...manifest.functions.map((f) => f.name), ...(manifest.domains ?? []).map((d) => d.name.replace(/^eql_v3\./, "")), + ...(manifest.domains ?? []).flatMap((d) => + (d.termFunctions ?? []).map((fn) => fn.replace(/^eql_v3\./, "")), + ), ]); const referenced = new Map<string, Set<string>>(); // symbol -> pages From 7e5f3019be3f9ee1e2b5f0215fd71e61b0e4c609 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 6 Jul 2026 17:48:36 +1000 Subject: [PATCH 036/151] docs(eql): schema-aware drift-lint + sweep pages to the shipped surface MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Wires the v2 EQL reference to the corrected manifest (public. domains, eql_v3./eql_v3_internal. functions — cipherstash/encrypt-query-language#369) and turns the drift-lint into a real gate. - generate-eql-api-docs.ts: schema-aware drift-lint — matches public.<domain>, eql_v3.<fn>, eql_v3_internal.<fn> by schema AND name, so right-name/wrong-schema refs are caught, not just fabricated ones. Group public overloads by name (the raw 1680-function surface -> 39 functions); omit internal functions from the page (kept in the lint's known set). Manifest source: EQL_MANIFEST_PATH -> release cache -> sample, auto-strict against any real manifest. - generate-eql-docs.ts: extract json/eql-manifest.json from the release tarball to a gitignored cache the reference generator reads (best-effort; falls back to the sample until a release ships the manifest). - Swept content/docs/reference/eql/*.mdx (165 refs): domains -> public., internal ctors -> eql_v3_internal., PG aliases -> canonical catalog names (int4->integer, float8->double, bool->boolean, ste_vec_*->jsonb_*). - Updated the illustrative sample fixture to the corrected schema. Drift-lint verified green against a locally-generated corrected manifest; report-only against the committed sample until a release ships the manifest. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- .gitignore | 2 + content/docs/reference/eql/booleans.mdx | 22 +- content/docs/reference/eql/core-concepts.mdx | 32 +-- .../docs/reference/eql/dates-and-times.mdx | 22 +- content/docs/reference/eql/filtering.mdx | 38 ++-- content/docs/reference/eql/functions.mdx | 61 +++--- .../reference/eql/grouping-and-aggregates.mdx | 4 +- content/docs/reference/eql/indexes.mdx | 16 +- content/docs/reference/eql/joins.mdx | 10 +- content/docs/reference/eql/json.mdx | 38 ++-- content/docs/reference/eql/numbers.mdx | 28 +-- content/docs/reference/eql/sorting.mdx | 4 +- content/docs/reference/eql/text.mdx | 38 ++-- scripts/fixtures/eql-manifest.sample.json | 193 ++++++++++++++---- scripts/generate-eql-api-docs.ts | 172 +++++++++++----- scripts/generate-eql-docs.ts | 19 ++ 16 files changed, 456 insertions(+), 243 deletions(-) diff --git a/.gitignore b/.gitignore index 7d245b9..856a089 100644 --- a/.gitignore +++ b/.gitignore @@ -42,3 +42,5 @@ content/stack/reference/drizzle/v*/ # serena (local MCP tooling state) .serena/ +# EQL release manifest extracted by generate-eql-docs.ts (see generate-eql-api-docs.ts) +.eql-manifest.release.json diff --git a/content/docs/reference/eql/booleans.mdx b/content/docs/reference/eql/booleans.mdx index 5403fc9..6aad0f9 100644 --- a/content/docs/reference/eql/booleans.mdx +++ b/content/docs/reference/eql/booleans.mdx @@ -1,13 +1,13 @@ --- title: Booleans -description: "Encrypted booleans are storage-only by design: eql_v3.bool stores and decrypts, carries no index terms, and blocks every comparison." +description: "Encrypted booleans are storage-only by design: public.boolean stores and decrypts, carries no index terms, and blocks every comparison." type: reference components: [eql] verifiedAgainst: eql: "3.0.0" --- -Every scalar type has a storage-only variant — for `bool` it's the only one. EQL ships `eql_v3.bool` and nothing else: there is no `bool_eq` and no `bool_ord`. An encrypted boolean column can be stored, decrypted, and null-checked; it cannot be filtered, sorted, grouped, or joined on. +Every scalar type has a storage-only variant — for `bool` it's the only one. EQL ships `public.boolean` and nothing else: there is no `bool_eq` and no `bool_ord`. An encrypted boolean column can be stored, decrypted, and null-checked; it cannot be filtered, sorted, grouped, or joined on. ## Why there are no query variants @@ -15,11 +15,11 @@ A two-value column has too little cardinality for any searchable index to be saf ## What works, what raises -`eql_v3.bool` follows the bare-variant contract described in [Core concepts](/reference/eql/core-concepts#variants-declare-capability): it carries no index terms, so `IS NULL` / `IS NOT NULL` are the only predicates that work. Every comparison operator routes to a blocker and raises — the [fail-loud behavior](/reference/eql/core-concepts#unsupported-operations-fail-loudly) shared by all encrypted variants: +`public.boolean` follows the bare-variant contract described in [Core concepts](/reference/eql/core-concepts#variants-declare-capability): it carries no index terms, so `IS NULL` / `IS NOT NULL` are the only predicates that work. Every comparison operator routes to a blocker and raises — the [fail-loud behavior](/reference/eql/core-concepts#unsupported-operations-fail-loudly) shared by all encrypted variants: ```sql --- ❌ Raises: operator = is not supported for eql_v3.bool -SELECT * FROM users WHERE is_active = $1::eql_v3.bool; +-- ❌ Raises: operator = is not supported for public.boolean +SELECT * FROM users WHERE is_active = $1::public.boolean; -- ✅ Works: NULL columns are not encrypted SELECT * FROM users WHERE is_active IS NOT NULL; @@ -32,16 +32,16 @@ Query on other columns, decrypt the boolean in your application, and filter ther ```sql CREATE TABLE users ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email eql_v3.text_eq, -- exact lookup - created_at eql_v3.timestamp_ord, -- range queries, ORDER BY - is_active eql_v3.bool -- storage only (by design) + email public.text_eq, -- exact lookup + created_at public.timestamp_ord, -- range queries, ORDER BY + is_active public.boolean -- storage only (by design) ); ``` ```sql -- Narrow the result set with the columns that do carry index terms… SELECT id, email, is_active FROM users -WHERE created_at >= $1::eql_v3.timestamp_ord; +WHERE created_at >= $1::public.timestamp_ord; -- …then decrypt is_active in the client and filter on the plaintext. ``` @@ -51,12 +51,12 @@ If a boolean genuinely needs to be a server-side predicate, that is a data-model ## Storing without querying -`bool` is the forced case of a pattern available to every scalar type: the bare variant `eql_v3.<T>` (for example `eql_v3.int4`, `eql_v3.text`, `eql_v3.timestamp`) is storage-and-decryption only. It carries no index terms, and every comparison operator raises — use it for columns you only ever store and decrypt, so the database holds no searchable material for them at all. +`bool` is the forced case of a pattern available to every scalar type: the bare variant `eql_v3.<T>` (for example `public.integer`, `public.text`, `public.timestamp`) is storage-and-decryption only. It carries no index terms, and every comparison operator raises — use it for columns you only ever store and decrypt, so the database holds no searchable material for them at all. For every type other than `bool`, storage-only is a choice you can walk back. If you later need to query, retype the column as a query variant — or, if the payloads already carry the needed term (the client decides which terms travel in the payload), cast at the call site: ```sql -SELECT * FROM readings WHERE value::eql_v3.int4_ord > $1::eql_v3.int4_ord; +SELECT * FROM readings WHERE value::public.integer_ord > $1::public.integer_ord; ``` The variant families and what each one enables are covered in [Core concepts](/reference/eql/core-concepts); the per-type specifics live in [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), and [Text](/reference/eql/text). diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index 427bc7b..63ce2f1 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -23,8 +23,8 @@ For any scalar type `<T>`, the family looks like this: | `eql_v3.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | | `eql_v3.<T>_ord` | Comparisons (`<` … `>=`), `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | | `eql_v3.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | -| `eql_v3.text_match` (text only) | Free-text token containment: `@>` / `<@`. | -| `eql_v3.text_search` (text only) | Equality + ordering + token containment. | +| `public.text_match` (text only) | Free-text token containment: `@>` / `<@`. | +| `public.text_search` (text only) | Equality + ordering + token containment. | Two things worth calling out: @@ -45,13 +45,13 @@ Declaring a table is just typing each column as the variant it needs: ```sql CREATE TABLE users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email eql_v3.text_eq, -- equality only - salary eql_v3.int4_ord, -- equality + range + ORDER BY - created_at eql_v3.timestamp_ord + email public.text_eq, -- equality only + salary public.integer_ord, -- equality + range + ORDER BY + created_at public.timestamp_ord ); ``` -Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `eql_v3.json`, with its own operator surface — see [JSON](/reference/eql/json). +Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `public.json`, with its own operator surface — see [JSON](/reference/eql/json). ## Anatomy of an encrypted value @@ -81,13 +81,13 @@ Alongside the envelope, a payload carries the index terms for its column's capab | Key | SEM type | Wire shape | Enables | Reveals | | --- | --- | --- | --- | --- | -| `hm` | `eql_v3.hmac_256` (domain over `text`) | Hex string (HMAC-SHA-256) | `=`, `<>` on `_eq` and `text_search` domains | Whether two values are equal — nothing else | -| `ob` | `eql_v3.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks (block count varies by scalar width) | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | -| `bf` | `eql_v3.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit — large filters emit negative positions) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | +| `hm` | `eql_v3_internal.hmac_256` (domain over `text`) | Hex string (HMAC-SHA-256) | `=`, `<>` on `_eq` and `text_search` domains | Whether two values are equal — nothing else | +| `ob` | `eql_v3_internal.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks (block count varies by scalar width) | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | +| `bf` | `eql_v3_internal.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit — large filters emit negative positions) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | -The capability is encoded as **required keys**: the payload for an `eql_v3.text_eq` column must carry `hm`; an `eql_v3.int4_ord` payload must carry `ob` (and only `ob`); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. +The capability is encoded as **required keys**: the payload for an `public.text_eq` column must carry `hm`; an `public.integer_ord` payload must carry `ob` (and only `ob`); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. -A scalar payload for an `eql_v3.text_search` column (lookup + ordering + free-text match, so all three terms are required): +A scalar payload for an `public.text_search` column (lookup + ordering + free-text match, so all three terms are required): ```json { @@ -124,10 +124,10 @@ The `eql_v3` domains are backed by `jsonb`. When an operand has no known type SELECT * FROM users WHERE email = $1; -- ✅ Right: typed operand — the encrypted `=` resolves. -SELECT * FROM users WHERE email = $1::eql_v3.text_eq; +SELECT * FROM users WHERE email = $1::public.text_eq; ``` -Always type the operand: a typed parameter (`$1::eql_v3.text_eq`) or an explicit cast (`'…'::eql_v3.int4_ord`). The [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) type bound parameters automatically — raw SQL must do it by hand. +Always type the operand: a typed parameter (`$1::public.text_eq`) or an explicit cast (`'…'::public.integer_ord`). The [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) type bound parameters automatically — raw SQL must do it by hand. This is the one place where a mistake is *silent*. Everything else fails loudly: @@ -136,9 +136,9 @@ This is the one place where a mistake is *silent*. Everything else fails loudly: Unsupported operators are not silent no-ops. Every operator that a variant doesn't support is still *defined* — it routes to a blocker function that raises an `operator … is not supported` exception. A mis-typed query fails loudly instead of silently returning wrong results: ```sql --- salary is eql_v3.int8_eq (equality only) -SELECT * FROM users WHERE salary > $1::eql_v3.int8_eq; --- ERROR: operator > is not supported for eql_v3.int8_eq +-- salary is public.bigint_eq (equality only) +SELECT * FROM users WHERE salary > $1::public.bigint_eq; +-- ERROR: operator > is not supported for public.bigint_eq ``` A `NULL` operand still raises — the blockers are deliberately not `STRICT`, so PostgreSQL can't skip the check. (A SQL `NULL` column value is not encrypted, so `IS NULL` / `IS NOT NULL` themselves always work, on every variant.) diff --git a/content/docs/reference/eql/dates-and-times.mdx b/content/docs/reference/eql/dates-and-times.mdx index 3af2b9c..0fa3d25 100644 --- a/content/docs/reference/eql/dates-and-times.mdx +++ b/content/docs/reference/eql/dates-and-times.mdx @@ -24,8 +24,8 @@ And every concrete domain this page covers: | Type | Variants | | --- | --- | -| `date` | `eql_v3.date` · `eql_v3.date_eq` · `eql_v3.date_ord` · `eql_v3.date_ord_ore` | -| `timestamp` | `eql_v3.timestamp` · `eql_v3.timestamp_eq` · `eql_v3.timestamp_ord` · `eql_v3.timestamp_ord_ore` | +| `date` | `public.date` · `public.date_eq` · `public.date_ord` · `public.date_ord_ore` | +| `timestamp` | `public.timestamp` · `public.timestamp_eq` · `public.timestamp_ord` · `public.timestamp_ord_ore` | Time columns are nearly always ranged and sorted, so `_ord` is the usual choice. Declare only the capability you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts). @@ -36,9 +36,9 @@ An audit-events table where the timestamps drive time-window queries and sorting ```sql CREATE TABLE audit_events ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - occurred_at eql_v3.timestamp_ord, -- time windows, newest-first, MIN/MAX - review_due eql_v3.date_ord, -- range filters - sealed_on eql_v3.date -- store and decrypt only + occurred_at public.timestamp_ord, -- time windows, newest-first, MIN/MAX + review_due public.date_ord, -- range filters + sealed_on public.date -- store and decrypt only ); ``` @@ -55,7 +55,7 @@ The EQL v3 release adds an OPE specifier for every orderable type; unspecified ` ## Payload -A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `eql_v3.timestamp_ord` `occurred_at` column: +A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `public.timestamp_ord` `occurred_at` column: ```json { @@ -85,7 +85,7 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — | `ORDER BY` | ❌ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | -Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::eql_v3.timestamp_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.timestamp_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions @@ -103,17 +103,17 @@ Every operator has a function form, for managed platforms that disallow custom o ```sql SELECT * FROM audit_events -WHERE occurred_at BETWEEN $1::eql_v3.timestamp_ord AND $2::eql_v3.timestamp_ord; +WHERE occurred_at BETWEEN $1::public.timestamp_ord AND $2::public.timestamp_ord; SELECT * FROM audit_events -WHERE review_due BETWEEN $1::eql_v3.date_ord AND $2::eql_v3.date_ord; +WHERE review_due BETWEEN $1::public.date_ord AND $2::public.date_ord; ``` ### Retention cutoff ```sql SELECT id FROM audit_events -WHERE occurred_at < $1::eql_v3.timestamp_ord; +WHERE occurred_at < $1::public.timestamp_ord; ``` ### Newest-first listing @@ -122,7 +122,7 @@ Write the sort key in extractor form to stream rows out of the index already ord ```sql SELECT * FROM audit_events -WHERE occurred_at >= $1::eql_v3.timestamp_ord +WHERE occurred_at >= $1::public.timestamp_ord ORDER BY eql_v3.ord_term(occurred_at) DESC LIMIT 10; ``` diff --git a/content/docs/reference/eql/filtering.mdx b/content/docs/reference/eql/filtering.mdx index 9fe45a2..9dc4394 100644 --- a/content/docs/reference/eql/filtering.mdx +++ b/content/docs/reference/eql/filtering.mdx @@ -7,25 +7,25 @@ verifiedAgainst: eql: "3.0.0" --- -Every filter below is ordinary SQL — the encrypted operators resolve from the column's domain variant, and a functional index on the matching term extractor serves the predicate. One rule applies throughout: **operands must be typed** (`$1::eql_v3.text_eq`, not a bare literal), or PostgreSQL falls through to native `jsonb` semantics. See [Core concepts](/reference/eql/core-concepts) for the typed-operand rule and how unsupported operators fail loudly instead of returning wrong rows. +Every filter below is ordinary SQL — the encrypted operators resolve from the column's domain variant, and a functional index on the matching term extractor serves the predicate. One rule applies throughout: **operands must be typed** (`$1::public.text_eq`, not a bare literal), or PostgreSQL falls through to native `jsonb` semantics. See [Core concepts](/reference/eql/core-concepts) for the typed-operand rule and how unsupported operators fail loudly instead of returning wrong rows. ## Equality: `=` and `<>` Works on `_eq` and `_ord` / `_ord_ore` variants of every scalar, and on `text_search`: ```sql -SELECT * FROM users WHERE email = $1::eql_v3.text_eq; -SELECT * FROM users WHERE tax_id <> $1::eql_v3.text_eq; +SELECT * FROM users WHERE email = $1::public.text_eq; +SELECT * FROM users WHERE tax_id <> $1::public.text_eq; ``` On `_eq` and `text_search` columns equality compares the HMAC (`hm`) term. On `_ord` variants there is no `hm` — equality compares the ORE (`ob`) term, which collapses to equality, so `_ord` columns get `=` and `<>` for free. See [Core concepts](/reference/eql/core-concepts) for the mechanism. ```sql --- salary is eql_v3.int8_ord: equality works without an hm term -SELECT * FROM users WHERE salary = $1::eql_v3.int8_ord; +-- salary is public.bigint_ord: equality works without an hm term +SELECT * FROM users WHERE salary = $1::public.bigint_ord; ``` -Bare storage-only variants (`eql_v3.text`, `eql_v3.int4`, …) block every comparison — see the type pages for what each variant supports: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), [Booleans](/reference/eql/booleans). +Bare storage-only variants (`public.text`, `public.integer`, …) block every comparison — see the type pages for what each variant supports: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), [Booleans](/reference/eql/booleans). ## `IN` lists @@ -33,7 +33,7 @@ Bare storage-only variants (`eql_v3.text`, `eql_v3.int4`, …) block every compa ```sql SELECT * FROM users -WHERE email IN ($1::eql_v3.text_eq, $2::eql_v3.text_eq, $3::eql_v3.text_eq); +WHERE email IN ($1::public.text_eq, $2::public.text_eq, $3::public.text_eq); ``` There is no way to encrypt a list as one value — the client encrypts each element and binds it as its own parameter. `IN (subquery)` also works, subject to the same-keyset rule covered in [Joins](/reference/eql/joins). @@ -43,19 +43,19 @@ There is no way to encrypt a list as one value — the client encrypts each elem `<`, `<=`, `>`, `>=` work on `_ord` / `_ord_ore` variants and `text_search` — the variants carrying an ORE (`ob`) term: ```sql -SELECT * FROM users WHERE salary >= $1::eql_v3.int8_ord; +SELECT * FROM users WHERE salary >= $1::public.bigint_ord; -- BETWEEN desugars to >= and <= SELECT * FROM users -WHERE created_at BETWEEN $1::eql_v3.timestamp_ord AND $2::eql_v3.timestamp_ord; +WHERE created_at BETWEEN $1::public.timestamp_ord AND $2::public.timestamp_ord; ``` Half-open ranges compose the same way: ```sql SELECT * FROM events -WHERE occurred_at >= $1::eql_v3.timestamp_ord - AND occurred_at < $2::eql_v3.timestamp_ord; +WHERE occurred_at >= $1::public.timestamp_ord + AND occurred_at < $2::public.timestamp_ord; ``` ## Text token matching: `@>` @@ -63,25 +63,25 @@ WHERE occurred_at >= $1::eql_v3.timestamp_ord There is no `LIKE` on encrypted columns — encrypted free-text matching is bloom-filter token containment via `@>` on a `text_match` or `text_search` column: ```sql -SELECT * FROM users WHERE name @> $1::eql_v3.text_match; +SELECT * FROM users WHERE name @> $1::public.text_match; ``` The client encrypts the search term into a bloom-filter query value; matching is probabilistic (false positives possible, false negatives not). For the full no-`LIKE` story and match-term tuning, see [Text](/reference/eql/text). ## JSON containment and path filters -Encrypted JSON documents (`eql_v3.json`) filter by containment and path existence: +Encrypted JSON documents (`public.json`) filter by containment and path existence: ```sql -- Does the document contain this (encrypted) structure? -SELECT * FROM orders WHERE metadata @> $1::eql_v3.ste_vec_query; +SELECT * FROM orders WHERE metadata @> $1::public.jsonb_query; -- Does this path exist in the document? SELECT * FROM orders WHERE eql_v3.jsonb_path_exists(metadata, 'region_selector'); -- Equality on an extracted leaf SELECT * FROM orders -WHERE metadata -> 'email_selector'::text = $1::eql_v3.ste_vec_entry; +WHERE metadata -> 'email_selector'::text = $1::public.jsonb_entry; ``` Field access is by selector hash, not plaintext path. The full JSON surface — containment, field access, path queries, and range filters on extracted leaves — is in [JSON](/reference/eql/json). @@ -93,9 +93,9 @@ Encrypted predicates compose with `AND`, `OR`, `NOT`, and parentheses like any o ```sql SELECT * FROM users WHERE status = 'active' -- plaintext column, native operator - AND created_at >= $1::eql_v3.timestamp_ord -- encrypted range - AND (email = $2::eql_v3.text_eq -- encrypted equality - OR name @> $3::eql_v3.text_match); -- encrypted token match + AND created_at >= $1::public.timestamp_ord -- encrypted range + AND (email = $2::public.text_eq -- encrypted equality + OR name @> $3::public.text_match); -- encrypted token match ``` The planner treats each encrypted predicate independently, so it can combine an index on a plaintext column with a functional index on an encrypted one (bitmap-AND, or whichever plan is cheapest). @@ -118,7 +118,7 @@ Don't confuse this with a JSON `null` *inside* an encrypted document, which is a | Equality | `=` `<>` `IN` | `_eq`, `_ord` / `_ord_ore`, `text_search` | hash (or btree) on `eql_v3.eq_term` — btree on `eql_v3.ord_term` for `_ord` | | Range | `<` `<=` `>` `>=` `BETWEEN` | `_ord` / `_ord_ore`, `text_search` | btree on `eql_v3.ord_term` | | Text token match | `@>` `<@` | `text_match`, `text_search` | GIN on `eql_v3.match_term` | -| JSON containment | `@>` `<@` | `eql_v3.json` | GIN on `eql_v3.to_ste_vec_query(col)::jsonb` | +| JSON containment | `@>` `<@` | `public.json` | GIN on `eql_v3.to_ste_vec_query(col)::jsonb` | | Null check | `IS NULL` / `IS NOT NULL` | every variant | — | Every one of these has a full index recipe — which method, which extractor, and how to confirm the index engages with `EXPLAIN` — in [Indexes](/reference/eql/indexes). diff --git a/content/docs/reference/eql/functions.mdx b/content/docs/reference/eql/functions.mdx index a3b3dc9..e9f86a5 100644 --- a/content/docs/reference/eql/functions.mdx +++ b/content/docs/reference/eql/functions.mdx @@ -13,7 +13,7 @@ verifiedAgainst: Generated from the **EQL 3.0.0-sample** manifest (the Doxygen'd SQL is the source of truth). For the model behind these — variants, terms, typed operands — see [Core concepts](/reference/eql/core-concepts). </Callout> -The `eql_v3` schema surface — encrypted domains and the functions behind them. The type and query pages explain *when* to use these; this page is the exhaustive reference they link to. +The EQL SQL surface — encrypted domains (in the `public` schema) and the `eql_v3` functions behind them. The type and query pages explain *when* to use these; this page is the exhaustive reference they link to. ## Encrypted domains @@ -21,51 +21,50 @@ A column's capability is declared by its **domain variant**. This matrix comes s | Domain | Type | Variant | Capabilities | Operators | | --- | --- | --- | --- | --- | -| `eql_v3.integer` | integer | _(storage only)_ | storage | — | -| `eql_v3.integer_eq` | integer | `_eq` | equality | `=` `<>` | -| `eql_v3.integer_ord` | integer | `_ord` | equality, order | `=` `<>` `<` `<=` `>` `>=` | -| `eql_v3.integer_ord_ope` | integer | `_ord_ope` | equality, order | `=` `<>` `<` `<=` `>` `>=` | -| `eql_v3.text_match` | text | `_match` | match | `@>` `<@` | -| `eql_v3.text_search` | text | `_search` | equality, order, match | `=` `<>` `<` `<=` `>` `>=` `@>` `<@` | -| `eql_v3.json` | jsonb | _(storage only)_ | json | — | -| `eql_v3.jsonb_entry` | jsonb | _(storage only)_ | json | — | -| `eql_v3.jsonb_query` | jsonb | _(storage only)_ | json | — | +| `public.integer` | integer | _(storage only)_ | storage | — | +| `public.integer_eq` | integer | `_eq` | equality | `=` `<>` | +| `public.integer_ord` | integer | `_ord` | equality, order | `=` `<>` `<` `<=` `>` `>=` | +| `public.integer_ord_ope` | integer | `_ord_ope` | equality, order | `=` `<>` `<` `<=` `>` `>=` | +| `public.text_match` | text | `_match` | match | `@>` `<@` | +| `public.text_search` | text | `_search` | equality, order, match | `=` `<>` `<` `<=` `>` `>=` `@>` `<@` | +| `public.json` | jsonb | _(storage only)_ | json | — | +| `public.jsonb_entry` | jsonb | _(storage only)_ | json | — | +| `public.jsonb_query` | jsonb | _(storage only)_ | json | — | ## Functions -### `hmac_256(jsonb)` +The public `eql_v3` API — 2 functions (2 overloads). Internal `eql_v3_internal` functions (3) are implementation detail and omitted. -Extract the HMAC-SHA-256 equality term from an encrypted value. +### `jsonb_path_query` -Backs equality (`=`, `IN`, joins) on `_eq` and `text_search` columns. +Query encrypted JSONB for sv elements matching a selector. -| Parameter | Type | Description | -| --- | --- | --- | -| `val` | `jsonb` | the encrypted value | - - -**Returns:** `text` — the HMAC term -### `bloom_filter(jsonb)` +Returns one jsonb_entry row per matching encrypted element. -Extract the bloom-filter match term from an encrypted value. +**Signature:** -Backs token containment (`@>`) on `text_match` / `text_search` columns. +```sql +jsonb_path_query(jsonb, text) +``` | Parameter | Type | Description | | --- | --- | --- | -| `val` | `jsonb` | the encrypted value | +| `val` | `jsonb` | encrypted EQL payload with sv | +| `selector` | `text` | selector hash | -**Returns:** `smallint[]` — the set bit positions -### `ore_block_256(jsonb)` +**Returns:** `public.jsonb_entry` — matching encrypted entries -Extract the ORE ordering term from an encrypted value. +### `version` -Backs range and ordering (`<`, `>`, `ORDER BY`) on `_ord` columns. +Get the installed EQL version string. -| Parameter | Type | Description | -| --- | --- | --- | -| `val` | `jsonb` | the encrypted value | +Returns the version string for the installed EQL library. + +**Signature:** +```sql +version() +``` -**Returns:** `eql_v3.ore_block_256` — the ORE term +**Returns:** `text` — the version string diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx index 544a91c..da735e7 100644 --- a/content/docs/reference/eql/grouping-and-aggregates.mdx +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -39,7 +39,7 @@ Note the trade-off: grouping on `eq_term` returns the *term*, not the encrypted Plain `COUNT(col)` counts non-`NULL` rows — it never compares values, so it works on **any** variant, including storage-only ones: ```sql -SELECT COUNT(tax_id) FROM users; -- works even on bare eql_v3.text +SELECT COUNT(tax_id) FROM users; -- works even on bare public.text ``` `COUNT(DISTINCT col)` deduplicates, so it needs an equality-capable variant — and the same extractor advice applies: @@ -74,7 +74,7 @@ SELECT eql_v3.eq_term(department_code) AS dept, eql_v3.max(salary) If the column is generic `jsonb` rather than a domain, cast to the right variant at the call site so overload resolution can pick the aggregate: ```sql -SELECT eql_v3.min(salary_jsonb::eql_v3.int8_ord) FROM users; +SELECT eql_v3.min(salary_jsonb::public.bigint_ord) FROM users; ``` A btree on `eql_v3.ord_term(col)` serves `MIN` / `MAX` — the [Indexes](/reference/eql/indexes) page has the recipe. diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index ff4b1fe..71fd42a 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -18,7 +18,7 @@ EQL indexes are ordinary PostgreSQL functional indexes over **term-extractor fun The extractors are inlinable SQL functions, so the planner rewrites a bare-form predicate into the same expression the index was built on. You don't rewrite queries to use the index: ```sql -SELECT * FROM users WHERE email = $1::eql_v3.text_eq; +SELECT * FROM users WHERE email = $1::public.text_eq; -- planner inlines `=` to: eql_v3.eq_term(email) = eql_v3.eq_term($1) -- Index Cond on USING hash (eql_v3.eq_term(email)) ``` @@ -44,7 +44,7 @@ CREATE INDEX users_created_at_ord ON users USING btree (eql_v3.ord_term(created_at)); -- Text match: GIN index on match_term --- (columns typed eql_v3.text_match or text_search) +-- (columns typed public.text_match or text_search) CREATE INDEX users_name_match ON users USING gin (eql_v3.match_term(name)); @@ -65,7 +65,7 @@ All three must hold: ```sql -- ✓ resolves the encrypted operator → uses the index -WHERE email = $1::eql_v3.text_eq; +WHERE email = $1::public.text_eq; WHERE email = $1; -- only when the client (Stack SDK / Proxy) binds $1 typed -- ✗ falls through to native jsonb semantics @@ -77,7 +77,7 @@ WHERE email = '{"hm":"abc"}'::jsonb; ### Equality ```sql -SELECT * FROM users WHERE email = $1::eql_v3.text_eq; +SELECT * FROM users WHERE email = $1::public.text_eq; -- Index Scan using users_email_eq -- Index Cond: (eql_v3.eq_term(email) = eql_v3.eq_term($1)) ``` @@ -87,14 +87,14 @@ SELECT * FROM users WHERE email = $1::eql_v3.text_eq; The `<`, `<=`, `>`, `>=` operators inline to comparisons on `eql_v3.ord_term`, so natural-form range predicates match the btree: ```sql -SELECT * FROM users WHERE created_at < $1::eql_v3.timestamp_ord; +SELECT * FROM users WHERE created_at < $1::public.timestamp_ord; ``` `ORDER BY` needs care. The planner inlines operators in *predicates* but does not rewrite *sort keys*: `ORDER BY created_at` uses the index for the `WHERE` clause but still adds a `Sort` node, which scales linearly with the rows passing the filter. To stream rows out of the btree already ordered, write the sort key in extractor form: ```sql SELECT * FROM users - WHERE created_at < $1::eql_v3.timestamp_ord + WHERE created_at < $1::public.timestamp_ord ORDER BY eql_v3.ord_term(created_at) DESC LIMIT 10; ``` @@ -119,7 +119,7 @@ SELECT eql_v3.eq_term(email), count(*) ## Encrypted JSON -Containment (`@>` / `<@`) on `eql_v3.json` document columns uses a GIN index over `eql_v3.to_ste_vec_query(col)::jsonb`, and field-level equality and ordering have their own extractor recipes. See [JSON](/reference/eql/json). +Containment (`@>` / `<@`) on `public.json` document columns uses a GIN index over `eql_v3.to_ste_vec_query(col)::jsonb`, and field-level equality and ordering have their own extractor recipes. See [JSON](/reference/eql/json). ## Verify with EXPLAIN @@ -175,7 +175,7 @@ Everything above is a functional index over an `IMMUTABLE` SQL function — no o FROM users LIMIT 1; ``` -2. Verify the operand is typed (`$1::eql_v3.text_eq`, not `$1::jsonb`). +2. Verify the operand is typed (`$1::public.text_eq`, not `$1::jsonb`). 3. Recreate the index if the column's terms changed after it was built. 4. Run `ANALYZE`. Very small tables may still choose a sequential scan — that's correct. diff --git a/content/docs/reference/eql/joins.mdx b/content/docs/reference/eql/joins.mdx index fdcc0e4..b4e2850 100644 --- a/content/docs/reference/eql/joins.mdx +++ b/content/docs/reference/eql/joins.mdx @@ -21,7 +21,7 @@ Equijoins work on equality-capable variants (`_eq`, `_ord` / `_ord_ore`, `text_s SELECT u.*, o.total FROM users u JOIN orders o ON u.email = o.customer_email; --- both columns eql_v3.text_eq, encrypted with the same keyset +-- both columns public.text_eq, encrypted with the same keyset ``` No typed-operand cast is needed here — both operands are encrypted columns, so their domain types resolve the encrypted operator directly. All join types (`INNER`, `LEFT`, `RIGHT`, `FULL`) work; `LEFT JOIN` null-extension behaves normally because SQL `NULL`s are not encrypted. @@ -47,17 +47,17 @@ If the two columns are under different keysets, `IN (subquery)` matches nothing, ## Worked example -Two tables sharing an encrypted customer identifier, both columns typed `eql_v3.text_eq` and encrypted by the same client configuration (same keyset): +Two tables sharing an encrypted customer identifier, both columns typed `public.text_eq` and encrypted by the same client configuration (same keyset): ```sql CREATE TABLE users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email eql_v3.text_eq + email public.text_eq ); CREATE TABLE orders ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - customer_email eql_v3.text_eq, + customer_email public.text_eq, total BIGINT NOT NULL ); @@ -72,7 +72,7 @@ Orders per user, filtered by an encrypted lookup on one side: SELECT u.id, COUNT(o.id) AS order_count FROM users u LEFT JOIN orders o ON u.email = o.customer_email -WHERE u.email = $1::eql_v3.text_eq +WHERE u.email = $1::public.text_eq GROUP BY u.id; ``` diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index 93eb920..96d8cce 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -1,15 +1,15 @@ --- title: JSON -description: "The complete reference for encrypted JSON documents with eql_v3.json — the ste_vec payload shape, containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." +description: "The complete reference for encrypted JSON documents with public.json — the ste_vec payload shape, containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." type: reference components: [eql] verifiedAgainst: eql: "3.0.0" --- -`eql_v3.json` is EQL's encrypted JSON document type, built on structured encryption (**ste_vec**). The document is encrypted as a vector of encrypted entries — one entry per path inside the document — and every path is queryable without decryption: containment, field and array access, and equality or range comparisons on extracted leaves. +`public.json` is EQL's encrypted JSON document type, built on structured encryption (**ste_vec**). The document is encrypted as a vector of encrypted entries — one entry per path inside the document — and every path is queryable without decryption: containment, field and array access, and equality or range comparisons on extracted leaves. -Like every EQL type, `eql_v3.json` holds ciphertext the database can't read. Encryption, decryption, and selector generation happen in the client — the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). See [Searchable encryption](/concepts/searchable-encryption) for how querying ciphertext works at all. +Like every EQL type, `public.json` holds ciphertext the database can't read. Encryption, decryption, and selector generation happen in the client — the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). See [Searchable encryption](/concepts/searchable-encryption) for how querying ciphertext works at all. ## The types @@ -17,9 +17,9 @@ Three `jsonb`-backed domains make up the encrypted JSON surface: | Type | What it is | | --- | --- | -| `eql_v3.json` | The column type. An encrypted document envelope carrying an `sv` array — one encrypted entry per path in the document. | -| `eql_v3.ste_vec_entry` | A single entry from the vector: a selector, a ciphertext, and exactly one index term. This is what `->` returns. | -| `eql_v3.ste_vec_query` | A containment needle: entries with selectors and index terms but **no ciphertext**. This is what you cast a `@>` operand to. | +| `public.json` | The column type. An encrypted document envelope carrying an `sv` array — one encrypted entry per path in the document. | +| `public.jsonb_entry` | A single entry from the vector: a selector, a ciphertext, and exactly one index term. This is what `->` returns. | +| `public.jsonb_query` | A containment needle: entries with selectors and index terms but **no ciphertext**. This is what you cast a `@>` operand to. | ## Payload shape @@ -34,7 +34,7 @@ An encrypted JSON document uses a different payload shape from the scalar types: The decoded `oc` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier payload versions split this into two fields — `ocf` (fixed-width, numeric) and `ocv` (variable-width, string) — which consolidated into the single `oc` key; the tag byte now carries the distinction. -A document payload for an `eql_v3.json` column: +A document payload for an `public.json` column: ```json { @@ -53,7 +53,7 @@ A document payload for an `eql_v3.json` column: - Second entry: a string leaf — `oc` starting with tag `01` - Third entry: a numeric leaf — `oc` starting with tag `00` -A containment **query** payload (`eql_v3.ste_vec_query`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. This is the needle the client builds for a `@>` query: +A containment **query** payload (`public.jsonb_query`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. This is the needle the client builds for a `@>` query: ```json { @@ -65,16 +65,16 @@ A containment **query** payload (`eql_v3.ste_vec_query`) has the same `sv` shape ## Storing encrypted JSON -Type the column as `eql_v3.json`: +Type the column as `public.json`: ```sql CREATE TABLE orders ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - metadata eql_v3.json + metadata public.json ); ``` -There is no database-side configuration step. Which index terms a document carries is decided by the encryption client; typing the column as `eql_v3.json` is what makes the encrypted operators and functions resolve. The domain's `CHECK` constraint validates the payload shape on insert, so malformed values are rejected at write time. +There is no database-side configuration step. Which index terms a document carries is decided by the encryption client; typing the column as `public.json` is what makes the encrypted operators and functions resolve. The domain's `CHECK` constraint validates the payload shape on insert, so malformed values are rejected at write time. Insert and read through the Stack SDK or Proxy, which encrypt the document into the ste_vec payload on write and decrypt it on read. @@ -96,7 +96,7 @@ JSON `null` here means a `null` literal *inside* the document. A SQL `NULL` colu ## Blocked native jsonb operators -These native PostgreSQL `jsonb` operators are **blocked** on `eql_v3.json`. They raise an error rather than silently running plaintext-jsonb semantics against the encrypted payload: +These native PostgreSQL `jsonb` operators are **blocked** on `public.json`. They raise an error rather than silently running plaintext-jsonb semantics against the encrypted payload: - Key/path existence: `?`, `?|`, `?&`, `@?`, `@@` - Path extraction: `#>`, `#>>` @@ -111,11 +111,11 @@ Use containment (`@>` / `<@`), field access (`->` / `->>`), or the `eql_v3.jsonb ## Containment: `@>` and `<@` -`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle with the client and cast it to `eql_v3.ste_vec_query` (a typed `eql_v3.json` or `eql_v3.ste_vec_entry` operand also works): +`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle with the client and cast it to `public.jsonb_query` (a typed `public.json` or `public.jsonb_entry` operand also works): ```sql SELECT * FROM orders -WHERE metadata @> $1::eql_v3.ste_vec_query; +WHERE metadata @> $1::public.jsonb_query; ``` This is the encrypted equivalent of the plaintext `metadata @> '{"customer": {"tier": "premium"}}'`: containment checks that every encrypted term in the needle exists in the document's `sv` vector. `eql_v3.to_ste_vec_query(doc)` converts a stored document into the needle shape, and `eql_v3.ste_vec_contains(a, b)` is the function form backing `@>`. @@ -135,7 +135,7 @@ See [Indexes](/reference/eql/indexes) for the full recipes. Fields are addressed by **selector hash** — the deterministic identifier the client emits for a JSON path during encryption — not a plaintext path string like `$.customer.tier`. ```sql --- Field access by selector (returns eql_v3.ste_vec_entry) +-- Field access by selector (returns public.jsonb_entry) SELECT metadata -> 'selector_hash'::text FROM orders; -- The entry serialized as text (ciphertext JSON, not decrypted plaintext) @@ -145,7 +145,7 @@ SELECT metadata ->> 'selector_hash'::text FROM orders; SELECT metadata -> 0 FROM orders; ``` -The extracted `eql_v3.ste_vec_entry` is itself comparable: +The extracted `public.jsonb_entry` is itself comparable: - `=` / `<>` resolve via `eql_v3.eq_term` — works on every node type - `<` / `<=` / `>` / `>=` resolve via `eql_v3.ore_cllw` — String and Number leaves only @@ -154,7 +154,7 @@ The extracted `eql_v3.ste_vec_entry` is itself comparable: ```sql -- Equality on an extracted leaf SELECT * FROM orders -WHERE metadata -> 'email_selector'::text = $1::eql_v3.ste_vec_entry; +WHERE metadata -> 'email_selector'::text = $1::public.jsonb_entry; -- Group by an extracted leaf's equality term SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) @@ -213,7 +213,7 @@ The client encrypts this into a ste_vec payload with selectors for `$`, `$.custo ```sql CREATE TABLE orders ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - metadata eql_v3.json + metadata public.json ); INSERT INTO orders (metadata) VALUES ($1); @@ -229,7 +229,7 @@ Find premium orders. The client encrypts the needle `{"customer": {"tier": "prem ```sql SELECT id FROM orders -WHERE metadata @> $1::eql_v3.ste_vec_query; +WHERE metadata @> $1::public.jsonb_query; ``` Add the GIN index from above once the table grows. diff --git a/content/docs/reference/eql/numbers.mdx b/content/docs/reference/eql/numbers.mdx index 2d9a2a0..b30fab3 100644 --- a/content/docs/reference/eql/numbers.mdx +++ b/content/docs/reference/eql/numbers.mdx @@ -26,12 +26,12 @@ And every concrete domain this page covers: | Type | Variants | | --- | --- | -| `int2` | `eql_v3.int2` · `eql_v3.int2_eq` · `eql_v3.int2_ord` · `eql_v3.int2_ord_ore` | -| `int4` | `eql_v3.int4` · `eql_v3.int4_eq` · `eql_v3.int4_ord` · `eql_v3.int4_ord_ore` | -| `int8` | `eql_v3.int8` · `eql_v3.int8_eq` · `eql_v3.int8_ord` · `eql_v3.int8_ord_ore` | -| `float4` | `eql_v3.float4` · `eql_v3.float4_eq` · `eql_v3.float4_ord` · `eql_v3.float4_ord_ore` | -| `float8` | `eql_v3.float8` · `eql_v3.float8_eq` · `eql_v3.float8_ord` · `eql_v3.float8_ord_ore` | -| `numeric` | `eql_v3.numeric` · `eql_v3.numeric_eq` · `eql_v3.numeric_ord` · `eql_v3.numeric_ord_ore` | +| `int2` | `public.smallint` · `public.smallint_eq` · `public.smallint_ord` · `public.smallint_ord_ore` | +| `int4` | `public.integer` · `public.integer_eq` · `public.integer_ord` · `public.integer_ord_ore` | +| `int8` | `public.bigint` · `public.bigint_eq` · `public.bigint_ord` · `public.bigint_ord_ore` | +| `float4` | `public.real` · `public.real_eq` · `public.real_ord` · `public.real_ord_ore` | +| `float8` | `public.double` · `public.double_eq` · `public.double_ord` · `public.double_ord_ore` | +| `numeric` | `public.numeric` · `public.numeric_eq` · `public.numeric_ord` · `public.numeric_ord_ore` | Declare only the capability you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts). @@ -42,9 +42,9 @@ A payroll table mixing the variants by how each column is queried: ```sql CREATE TABLE employees ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - salary eql_v3.int8_ord, -- range queries, ORDER BY, MIN/MAX - tax_rate eql_v3.numeric_eq, -- exact lookup only - net_worth eql_v3.numeric -- store and decrypt only, never queried + salary public.bigint_ord, -- range queries, ORDER BY, MIN/MAX + tax_rate public.numeric_eq, -- exact lookup only + net_worth public.numeric -- store and decrypt only, never queried ); ``` @@ -61,7 +61,7 @@ The EQL v3 release adds an OPE specifier for every orderable type; unspecified ` ## Payload -A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `eql_v3.int8_ord` `salary` column: +A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `public.bigint_ord` `salary` column: ```json { @@ -90,7 +90,7 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — | `ORDER BY` | ❌ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | -Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::eql_v3.int8_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.bigint_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions @@ -110,10 +110,10 @@ Every operator has a function form, for managed platforms that disallow custom o ```sql SELECT * FROM employees -WHERE salary >= $1::eql_v3.int8_ord; +WHERE salary >= $1::public.bigint_ord; SELECT * FROM employees -WHERE salary BETWEEN $1::eql_v3.int8_ord AND $2::eql_v3.int8_ord; +WHERE salary BETWEEN $1::public.bigint_ord AND $2::public.bigint_ord; ``` ### MIN and MAX @@ -140,7 +140,7 @@ LIMIT 10; On a generic `jsonb` column whose payloads already carry the `ob` term, cast to the right domain in the query: ```sql -SELECT eql_v3.min(salary_jsonb::eql_v3.int8_ord) FROM employees; +SELECT eql_v3.min(salary_jsonb::public.bigint_ord) FROM employees; ``` ## Where to next diff --git a/content/docs/reference/eql/sorting.mdx b/content/docs/reference/eql/sorting.mdx index eb34f12..2e7ef2b 100644 --- a/content/docs/reference/eql/sorting.mdx +++ b/content/docs/reference/eql/sorting.mdx @@ -33,7 +33,7 @@ CREATE INDEX users_created_at_ord ANALYZE users; SELECT * FROM users - WHERE created_at < $1::eql_v3.timestamp_ord + WHERE created_at < $1::public.timestamp_ord ORDER BY eql_v3.ord_term(created_at) DESC LIMIT 10; -- Index Scan Backward using users_created_at_ord — no Sort node @@ -64,7 +64,7 @@ SELECT id, email, created_at FROM users -- Next page: pass the last row's created_at back, re-encrypted as the cursor SELECT id, email, created_at FROM users - WHERE created_at < $1::eql_v3.timestamp_ord + WHERE created_at < $1::public.timestamp_ord ORDER BY eql_v3.ord_term(created_at) DESC LIMIT 20; ``` diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index f08eafc..408ed97 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -15,12 +15,12 @@ All six are `jsonb`-backed domains. Which one you declare fixes the column's que | Domain variant | Capability | | --- | --- | -| `eql_v3.text` | Storage and decryption only. | -| `eql_v3.text_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | -| `eql_v3.text_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | -| `eql_v3.text_ord_ore` | As `text_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | -| `eql_v3.text_match` | Free-text token containment: `@>` / `<@`. | -| `eql_v3.text_search` | Equality + ordering + token containment. | +| `public.text` | Storage and decryption only. | +| `public.text_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `public.text_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `public.text_ord_ore` | As `text_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | +| `public.text_match` | Free-text token containment: `@>` / `<@`. | +| `public.text_search` | Equality + ordering + token containment. | Declare only the capabilities you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)). @@ -31,10 +31,10 @@ A users table mixing the variants by how each column is queried: ```sql CREATE TABLE users ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email eql_v3.text_search, -- lookup, sort, and free-text match - name eql_v3.text_match, -- free-text match only - tax_id eql_v3.text_eq, -- exact lookup only - notes eql_v3.text -- store and decrypt only + email public.text_search, -- lookup, sort, and free-text match + name public.text_match, -- free-text match only + tax_id public.text_eq, -- exact lookup only + notes public.text -- store and decrypt only ); ``` @@ -74,7 +74,7 @@ The narrower variants carry only their own term: a `text_eq` payload carries `hm ## Operators -| SQL operator | `eql_v3.text` | `text_eq` | `text_ord` / `text_ord_ore` | `text_match` | `text_search` | +| SQL operator | `public.text` | `text_eq` | `text_ord` / `text_ord_ore` | `text_match` | `text_search` | | --- | :---: | :---: | :---: | :---: | :---: | | `=` / `<>` | ❌ | ✅ | ✅ | ❌ | ✅ | | `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | ❌ | ✅ | @@ -84,7 +84,7 @@ The narrower variants carry only their own term: a `text_eq` payload carries `hm | `ORDER BY` | ❌ | ❌ | ✅ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | ✅ | ✅ | -Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::eql_v3.text_eq`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.text_eq`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions @@ -108,7 +108,7 @@ There are no `like` / `ilike` function forms — encrypted text matching is `eql SELECT * FROM users WHERE email LIKE '%alice%'; -- ✅ Encrypted free-text match -SELECT * FROM users WHERE email @> $1::eql_v3.text_match; +SELECT * FROM users WHERE email @> $1::public.text_match; ``` `@>` / `<@` here is **probabilistic ngram-bloom containment** — it tests whether the encrypted text contains the (encrypted) search terms. It is not JSONB containment and not `LIKE`. The client encrypts the search term into a bloom-filter query value; false positives are possible, false negatives are not. There are no `like` / `ilike` function forms either — text matching is `eql_v3.contains` on a `text_match` value. @@ -120,10 +120,10 @@ SELECT * FROM users WHERE email @> $1::eql_v3.text_match; Equality on a `text_eq` column compares HMAC terms. `IN` desugars to `=`: ```sql -SELECT * FROM users WHERE tax_id = $1::eql_v3.text_eq; +SELECT * FROM users WHERE tax_id = $1::public.text_eq; SELECT * FROM users -WHERE tax_id IN ($1::eql_v3.text_eq, $2::eql_v3.text_eq); +WHERE tax_id IN ($1::public.text_eq, $2::public.text_eq); ``` ### Free-text match @@ -131,10 +131,10 @@ WHERE tax_id IN ($1::eql_v3.text_eq, $2::eql_v3.text_eq); The client encrypts the search term into the bloom-filter needle: ```sql -SELECT * FROM users WHERE name @> $1::eql_v3.text_match; +SELECT * FROM users WHERE name @> $1::public.text_match; -- Function form, for platforms without custom operators -SELECT * FROM users WHERE eql_v3.contains(name, $1::eql_v3.text_match); +SELECT * FROM users WHERE eql_v3.contains(name, $1::public.text_match); ``` ### The works: `text_search` @@ -143,8 +143,8 @@ A `text_search` column answers exact lookup, free-text match, and ordering — h ```sql SELECT id, email FROM users -WHERE email @> $1::eql_v3.text_match -- token containment on bf - AND email <> $2::eql_v3.text_eq -- exclude an exact value via hm +WHERE email @> $1::public.text_match -- token containment on bf + AND email <> $2::public.text_eq -- exclude an exact value via hm ORDER BY eql_v3.ord_term(email) -- sort on ob LIMIT 20; ``` diff --git a/scripts/fixtures/eql-manifest.sample.json b/scripts/fixtures/eql-manifest.sample.json index e08d50d..25a5246 100644 --- a/scripts/fixtures/eql-manifest.sample.json +++ b/scripts/fixtures/eql-manifest.sample.json @@ -1,69 +1,192 @@ { - "_note": "ILLUSTRATIVE SAMPLE — shape only. Replaced at build time by the real eql-manifest.json from the eql-docs release asset once cipherstash/encrypt-query-language#364 ships. Do not treat these signatures/domains as authoritative.", + "_note": "ILLUSTRATIVE SAMPLE — shape only. Replaced at build time by the real eql-manifest.json from the eql-docs release asset (cipherstash/encrypt-query-language). Do not treat these signatures/domains as authoritative. Mirrors the real schema: domains live in `public.`, public functions in `eql_v3.`, internal ctors in `eql_v3_internal.` (visibility: private).", "$schema": "https://schemas.cipherstash.com/eql/manifest/v1.json", "name": "eql", "version": "3.0.0-sample", "generatedFrom": "doxygen-xml + catalog", - "counts": { "functions": 3, "public": 3, "private": 0, "domains": 9 }, + "counts": { "functions": 5, "public": 2, "private": 3, "domains": 9 }, "functions": [ + { + "name": "version", + "signature": "version()", + "visibility": "public", + "brief": "Get the installed EQL version string.", + "description": "Returns the version string for the installed EQL library.", + "params": [], + "returns": { "type": "text", "description": "the version string" }, + "throws": [], + "notes": "", + "warnings": "", + "seeAlso": "", + "source": { "file": "src/v3/version.sql", "line": 28 } + }, + { + "name": "jsonb_path_query", + "signature": "jsonb_path_query(jsonb, text)", + "visibility": "public", + "brief": "Query encrypted JSONB for sv elements matching a selector.", + "description": "Returns one jsonb_entry row per matching encrypted element.", + "params": [ + { + "name": "val", + "type": "jsonb", + "description": "encrypted EQL payload with sv" + }, + { "name": "selector", "type": "text", "description": "selector hash" } + ], + "returns": { + "type": "public.jsonb_entry", + "description": "matching encrypted entries" + }, + "throws": [], + "notes": "", + "warnings": "", + "seeAlso": "", + "source": { "file": "src/v3/jsonb/functions.sql", "line": 358 } + }, { "name": "hmac_256", "signature": "hmac_256(jsonb)", - "visibility": "public", + "visibility": "private", "brief": "Extract the HMAC-SHA-256 equality term from an encrypted value.", "description": "Backs equality (`=`, `IN`, joins) on `_eq` and `text_search` columns.", - "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], + "params": [ + { "name": "val", "type": "jsonb", "description": "the encrypted value" } + ], "returns": { "type": "text", "description": "the HMAC term" }, - "throws": [], "notes": "", "warnings": "", "seeAlso": "", + "throws": [], + "notes": "", + "warnings": "", + "seeAlso": "", "source": { "file": "src/v3/sem/hmac_256/functions.sql", "line": 12 } }, { "name": "bloom_filter", "signature": "bloom_filter(jsonb)", - "visibility": "public", + "visibility": "private", "brief": "Extract the bloom-filter match term from an encrypted value.", "description": "Backs token containment (`@>`) on `text_match` / `text_search` columns.", - "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], - "returns": { "type": "smallint[]", "description": "the set bit positions" }, - "throws": [], "notes": "", "warnings": "", "seeAlso": "", + "params": [ + { "name": "val", "type": "jsonb", "description": "the encrypted value" } + ], + "returns": { + "type": "smallint[]", + "description": "the set bit positions" + }, + "throws": [], + "notes": "", + "warnings": "", + "seeAlso": "", "source": { "file": "src/v3/sem/bloom_filter/functions.sql", "line": 20 } }, { "name": "ore_block_256", "signature": "ore_block_256(jsonb)", - "visibility": "public", + "visibility": "private", "brief": "Extract the ORE ordering term from an encrypted value.", "description": "Backs range and ordering (`<`, `>`, `ORDER BY`) on `_ord` columns.", - "params": [{ "name": "val", "type": "jsonb", "description": "the encrypted value" }], - "returns": { "type": "eql_v3.ore_block_256", "description": "the ORE term" }, - "throws": [], "notes": "", "warnings": "", "seeAlso": "", + "params": [ + { "name": "val", "type": "jsonb", "description": "the encrypted value" } + ], + "returns": { + "type": "eql_v3_internal.ore_block_256", + "description": "the ORE term" + }, + "throws": [], + "notes": "", + "warnings": "", + "seeAlso": "", "source": { "file": "src/v3/sem/ore_block_256/functions.sql", "line": 8 } } ], "domains": [ - { "name": "eql_v3.integer", "type": "integer", "variant": "", "base": "jsonb", - "capabilities": ["storage"], "supportedOperators": [], "termFunctions": [] }, - { "name": "eql_v3.integer_eq", "type": "integer", "variant": "eq", "base": "jsonb", - "capabilities": ["equality"], "supportedOperators": ["=", "<>"], - "termFunctions": ["eql_v3.eq_term"] }, - { "name": "eql_v3.integer_ord", "type": "integer", "variant": "ord", "base": "jsonb", - "capabilities": ["equality", "order"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">="], - "termFunctions": ["eql_v3.ord_term"] }, - { "name": "eql_v3.integer_ord_ope", "type": "integer", "variant": "ord_ope", "base": "jsonb", - "capabilities": ["equality", "order"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">="], - "termFunctions": ["eql_v3.ord_ope_term"] }, - { "name": "eql_v3.text_match", "type": "text", "variant": "match", "base": "jsonb", - "capabilities": ["match"], "supportedOperators": ["@>", "<@"], - "termFunctions": ["eql_v3.match_term"] }, - { "name": "eql_v3.text_search", "type": "text", "variant": "search", "base": "jsonb", + { + "name": "public.integer", + "type": "integer", + "variant": "", + "base": "jsonb", + "capabilities": ["storage"], + "supportedOperators": [], + "termFunctions": [] + }, + { + "name": "public.integer_eq", + "type": "integer", + "variant": "eq", + "base": "jsonb", + "capabilities": ["equality"], + "supportedOperators": ["=", "<>"], + "termFunctions": ["eql_v3.eq_term"] + }, + { + "name": "public.integer_ord", + "type": "integer", + "variant": "ord", + "base": "jsonb", + "capabilities": ["equality", "order"], + "supportedOperators": ["=", "<>", "<", "<=", ">", ">="], + "termFunctions": ["eql_v3.ord_term"] + }, + { + "name": "public.integer_ord_ope", + "type": "integer", + "variant": "ord_ope", + "base": "jsonb", + "capabilities": ["equality", "order"], + "supportedOperators": ["=", "<>", "<", "<=", ">", ">="], + "termFunctions": ["eql_v3.ord_ope_term"] + }, + { + "name": "public.text_match", + "type": "text", + "variant": "match", + "base": "jsonb", + "capabilities": ["match"], + "supportedOperators": ["@>", "<@"], + "termFunctions": ["eql_v3.match_term"] + }, + { + "name": "public.text_search", + "type": "text", + "variant": "search", + "base": "jsonb", "capabilities": ["equality", "order", "match"], "supportedOperators": ["=", "<>", "<", "<=", ">", ">=", "@>", "<@"], - "termFunctions": ["eql_v3.eq_term", "eql_v3.ord_term", "eql_v3.match_term"] }, - { "name": "eql_v3.json", "type": "jsonb", "variant": "", "base": "jsonb", "shape": "stevec", - "capabilities": ["json"], "supportedOperators": [], "termFunctions": [] }, - { "name": "eql_v3.jsonb_entry", "type": "jsonb", "variant": "", "base": "jsonb", "shape": "stevec", - "capabilities": ["json"], "supportedOperators": [], "termFunctions": [] }, - { "name": "eql_v3.jsonb_query", "type": "jsonb", "variant": "", "base": "jsonb", "shape": "stevec", - "capabilities": ["json"], "supportedOperators": [], "termFunctions": [] } + "termFunctions": [ + "eql_v3.eq_term", + "eql_v3.ord_term", + "eql_v3.match_term" + ] + }, + { + "name": "public.json", + "type": "jsonb", + "variant": "", + "base": "jsonb", + "shape": "stevec", + "capabilities": ["json"], + "supportedOperators": [], + "termFunctions": [] + }, + { + "name": "public.jsonb_entry", + "type": "jsonb", + "variant": "", + "base": "jsonb", + "shape": "stevec", + "capabilities": ["json"], + "supportedOperators": [], + "termFunctions": ["eql_v3.eq_term", "eql_v3.ore_cllw"] + }, + { + "name": "public.jsonb_query", + "type": "jsonb", + "variant": "", + "base": "jsonb", + "shape": "stevec", + "capabilities": ["json"], + "supportedOperators": [], + "termFunctions": [] + } ] } diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index 665682d..c6cbfa6 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -8,33 +8,44 @@ * 1. Generates a version-stamped function catalog at * content/docs/reference/eql/functions.mdx — the exhaustive, drift-proof * low-level reference the hand-written pedagogical pages link to. - * 2. Drift-lints the hand-written pages: every `eql_v3.<fn>(...)` referenced - * in them should exist in the manifest for the shipped EQL version. This - * is what would have caught the fabricated function names / stale payload - * that slipped into the v2 docs. + * 2. Drift-lints the hand-written pages: every schema-qualified reference + * (`public.<domain>`, `eql_v3.<fn>`, `eql_v3_internal.<fn>`) must match the + * manifest by schema AND name. This catches fabricated names, stale + * payloads, and right-name/wrong-schema refs (e.g. `eql_v3.text_eq` for a + * domain that lives in `public`) — the classes of drift that slipped into + * the v2 docs. * * ── Manifest source ──────────────────────────────────────────────────────── - * TODAY: reads a committed illustrative sample (shape only), so the generated - * format and the lint are reviewable before the EQL side ships. - * TARGET: once #364 releases, `generate-eql-docs.ts` already downloads the - * `eql-docs-<tag>` asset — extend it to also extract `json/eql-manifest.json` - * and point MANIFEST_PATH at it. The renderer and lint stay identical. + * Reads the committed illustrative sample by default. Set EQL_MANIFEST_PATH to + * a real manifest (the `eql-docs-<tag>` release asset extracted by + * `generate-eql-docs.ts`, or a locally-generated one) — the renderer and lint + * are identical either way. * - * The drift-lint is REPORT-ONLY against the sample (which is tiny, so most real - * symbols read as "unknown"); it becomes a failing gate once wired to the real - * manifest. See STRICT below. + * The drift-lint is REPORT-ONLY against the sample (tiny, so most real symbols + * read as "unknown"); it becomes a failing gate against a real manifest + * (auto-strict when EQL_MANIFEST_PATH is set). See STRICT below. */ import fs from "node:fs"; import path from "node:path"; -const MANIFEST_PATH = path.join( +// Manifest source, in priority order: +// 1. EQL_MANIFEST_PATH — explicit override (local testing / CI). +// 2. .eql-manifest.release.json — extracted from the eql-docs release asset +// by generate-eql-docs.ts (present once a release ships the manifest). +// 3. the committed illustrative sample — offline fallback. +const SAMPLE_MANIFEST = path.join( process.cwd(), "scripts/fixtures/eql-manifest.sample.json", ); +const RELEASE_MANIFEST = path.join(process.cwd(), ".eql-manifest.release.json"); +const MANIFEST_PATH = + process.env.EQL_MANIFEST_PATH ?? + (fs.existsSync(RELEASE_MANIFEST) ? RELEASE_MANIFEST : SAMPLE_MANIFEST); const EQL_DIR = path.join(process.cwd(), "content/docs/reference/eql"); const OUT_FILE = path.join(EQL_DIR, "functions.mdx"); -// Flip to true once MANIFEST_PATH points at the real release manifest. -const STRICT = false; +// Report-only against the illustrative sample; a failing gate against any real +// manifest (the release asset or an explicit override). +const STRICT = MANIFEST_PATH !== SAMPLE_MANIFEST; interface Param { name: string; @@ -83,15 +94,49 @@ function paramsTable(params: Param[]): string { return `\n| Parameter | Type | Description |\n| --- | --- | --- |\n${rows}\n`; } -function renderFn(fn: Fn): string { - const parts = [`### \`${fn.signature}\``, "", fn.brief]; - if (fn.description && fn.description !== fn.brief) parts.push("", fn.description); - if (fn.params.length) parts.push(paramsTable(fn.params)); - if (fn.returns?.type || fn.returns?.description) { - const t = fn.returns.type ? `\`${fn.returns.type}\`` : ""; - parts.push("", `**Returns:** ${t}${fn.returns.description ? ` — ${fn.returns.description}` : ""}`); +// Public functions are heavily overloaded — one name per operation with a +// per-encrypted-type variant, all sharing the same doc. Group by name so the +// page is one entry per function (its distinct signatures listed) instead of +// ~hundreds of near-identical overload blocks. +function renderPublicFunctions(fns: Fn[]): string { + const byName = new Map<string, Fn[]>(); + for (const f of fns) { + const g = byName.get(f.name) ?? []; + g.push(f); + byName.set(f.name, g); } - return parts.join("\n"); + const sections: string[] = []; + const entries = [...byName.entries()].sort((a, b) => + a[0].localeCompare(b[0]), + ); + for (const [name, overloads] of entries) { + const rep = + overloads.find((o) => o.params.length || o.brief) ?? overloads[0]; + const sigs = [...new Set(overloads.map((o) => o.signature))].sort(); + const parts = [`### \`${name}\``, "", rep.brief]; + if (rep.description && rep.description !== rep.brief) + parts.push("", rep.description); + parts.push( + "", + sigs.length > 1 + ? `**${sigs.length} overloads** (one per encrypted type):` + : "**Signature:**", + "", + "```sql", + ...sigs, + "```", + ); + if (rep.params.length) parts.push(paramsTable(rep.params)); + if (rep.returns?.type || rep.returns?.description) { + const t = rep.returns.type ? `\`${rep.returns.type}\`` : ""; + parts.push( + "", + `**Returns:** ${t}${rep.returns.description ? ` — ${rep.returns.description}` : ""}`, + ); + } + sections.push(parts.join("\n")); + } + return sections.join("\n\n"); } function renderDomains(domains: Domain[]): string { @@ -119,8 +164,16 @@ function renderDomains(domains: Domain[]): string { function render(manifest: Manifest): string { const version = manifest.version; - const publicFns = manifest.functions.filter((f) => f.visibility === "public"); - const privateFns = manifest.functions.filter((f) => f.visibility === "private"); + // Operators (`->`, `>`) reach the manifest as pseudo-functions via Doxygen's + // operator-name remapping; they render poorly and are already covered by the + // domain matrix's Operators column, so keep only real named functions here. + const isNamed = (f: Fn) => /^[a-z_][a-z0-9_]*$/.test(f.name); + const publicFns = manifest.functions.filter( + (f) => f.visibility === "public" && isNamed(f), + ); + const privateFns = manifest.functions.filter( + (f) => f.visibility === "private", + ); const frontmatter = [ "---", @@ -142,48 +195,63 @@ function render(manifest: Manifest): string { `Generated from the **EQL ${version}** manifest (the Doxygen'd SQL is the source of truth). For the model behind these — variants, terms, typed operands — see [Core concepts](/reference/eql/core-concepts).`, `</Callout>`, "", - "The `eql_v3` schema surface — encrypted domains and the functions behind them. The type and query pages explain *when* to use these; this page is the exhaustive reference they link to.", + "The EQL SQL surface — encrypted domains (in the `public` schema) and the `eql_v3` functions behind them. The type and query pages explain *when* to use these; this page is the exhaustive reference they link to.", "", renderDomains(manifest.domains ?? []), "## Functions", "", - ...publicFns.map(renderFn), + `The public \`eql_v3\` API — ${new Set(publicFns.map((f) => f.name)).size} functions (${publicFns.length} overloads). Internal \`eql_v3_internal\` functions (${privateFns.length}) are implementation detail and omitted.`, + "", + renderPublicFunctions(publicFns), ]; - if (privateFns.length) { - body.push("", "## Internal functions", "", ...privateFns.map(renderFn)); - } - return `${body.join("\n").trimEnd()}\n`; } // ── Drift guard ────────────────────────────────────────────────────────────── +// The known surface is fully schema-qualified: domains live in `public.`, +// functions in `eql_v3.` (public) or `eql_v3_internal.` (private), and the +// per-domain extractor term-functions come pre-qualified from the catalog. +// Matching schema-AND-name means a right-name/wrong-schema reference — e.g. +// `eql_v3.text_eq`, whose domain is actually `public.text_eq` — is flagged too, +// not just fabricated names. +function knownSymbols(manifest: Manifest): Set<string> { + const known = new Set<string>(); + for (const d of manifest.domains ?? []) { + known.add(d.name); // public.<domain> + for (const fn of d.termFunctions ?? []) known.add(fn); // eql_v3.<extractor> + } + for (const f of manifest.functions) { + const schema = f.visibility === "private" ? "eql_v3_internal" : "eql_v3"; + known.add(`${schema}.${f.name}`); + } + return known; +} + function driftCheck(manifest: Manifest): string[] { - // Known = every function, every domain (short) name, and every domain's - // extractor functions (eq_term / ord_term / …, authoritative from the catalog). - const known = new Set<string>([ - ...manifest.functions.map((f) => f.name), - ...(manifest.domains ?? []).map((d) => d.name.replace(/^eql_v3\./, "")), - ...(manifest.domains ?? []).flatMap((d) => - (d.termFunctions ?? []).map((fn) => fn.replace(/^eql_v3\./, "")), - ), - ]); - const referenced = new Map<string, Set<string>>(); // symbol -> pages + const known = knownSymbols(manifest); + const referenced = new Map<string, Set<string>>(); // fqn -> pages for (const file of fs.readdirSync(EQL_DIR)) { if (!file.endsWith(".mdx") || file === "functions.mdx") continue; const text = fs.readFileSync(path.join(EQL_DIR, file), "utf8"); - // Any eql_v3.<symbol> — function call, domain cast, or type reference. - for (const m of text.matchAll(/eql_v3\.([a-z0-9_]+)/g)) { - const sym = m[1]; - if (!referenced.has(sym)) referenced.set(sym, new Set()); - referenced.get(sym)!.add(file); + // Any schema-qualified reference — function call, domain cast, or type. + // A trailing `*` marks a prose family (e.g. `eql_v3.jsonb_path_*`), which + // names a set rather than one symbol, so it's skipped. + for (const m of text.matchAll( + /\b(public|eql_v3_internal|eql_v3)\.([a-z0-9_]+)(\*?)/g, + )) { + if (m[3] === "*") continue; + const fqn = `${m[1]}.${m[2]}`; + const pages = referenced.get(fqn) ?? new Set<string>(); + pages.add(file); + referenced.set(fqn, pages); } } const unknown: string[] = []; - for (const [sym, pages] of referenced) { - if (!known.has(sym)) unknown.push(`${sym} (in ${[...pages].join(", ")})`); + for (const [fqn, pages] of referenced) { + if (!known.has(fqn)) unknown.push(`${fqn} (in ${[...pages].join(", ")})`); } return unknown.sort(); } @@ -200,7 +268,7 @@ function main() { const unknown = driftCheck(manifest); if (unknown.length) { - const header = `⚠ ${unknown.length} eql_v3.* symbol(s) referenced in hand-written pages are not in the manifest (functions or domains):`; + const header = `⚠ ${unknown.length} schema-qualified symbol(s) referenced in hand-written pages are not in the manifest (domains or functions):`; console.warn(`\n${header}`); for (const u of unknown) console.warn(` - ${u}`); if (STRICT) { @@ -210,11 +278,13 @@ function main() { process.exit(1); } else { console.warn( - "\n(Report-only: using the illustrative sample manifest. Becomes a failing gate once wired to the real release manifest — set STRICT = true.)", + "\n(Report-only: using the illustrative sample manifest, which covers only a few symbols. A real manifest — the release asset or EQL_MANIFEST_PATH — makes this a failing gate.)", ); } } else { - console.log("✓ Drift check: all referenced eql_v3.* functions are in the manifest."); + console.log( + "✓ Drift check: all schema-qualified symbols resolve against the manifest.", + ); } } diff --git a/scripts/generate-eql-docs.ts b/scripts/generate-eql-docs.ts index 975b9c1..cd21d6f 100644 --- a/scripts/generate-eql-docs.ts +++ b/scripts/generate-eql-docs.ts @@ -15,6 +15,9 @@ const GITHUB_API_URL = "https://api.github.com/repos/cipherstash/encrypt-query-language/releases"; const TEMP_DIR = ".tmp-eql"; const OUTPUT_DIR = path.join(process.cwd(), "content/stack/reference/eql"); +// Where the machine-readable manifest is surfaced for the v2 API-reference +// generator (scripts/generate-eql-api-docs.ts). Gitignored; best-effort. +const RELEASE_MANIFEST = path.join(process.cwd(), ".eql-manifest.release.json"); /** * Check if a tarball URL exists (returns HTTP 200) @@ -261,6 +264,22 @@ async function main() { "utf8", ); + // Surface the machine-readable manifest for the v2 API-reference generator. + // Only releases packaged with the manifest carry it; older ones don't, so + // this is best-effort and the generator falls back to the committed sample. + const manifestSrc = path.join(extractPath, "json", "eql-manifest.json"); + try { + await fs.copyFile(manifestSrc, RELEASE_MANIFEST); + console.log( + `✓ Extracted eql-manifest.json → ${path.basename(RELEASE_MANIFEST)}`, + ); + } catch { + await fs.rm(RELEASE_MANIFEST, { force: true }); // clear any stale cache + console.log( + "• No eql-manifest.json in this release; API reference uses the sample.", + ); + } + // Clean up console.log("Cleaning up..."); await fs.rm(extractPath, { recursive: true, force: true }); From d5e1910fd4275e4bb1f25bbbf5e7e419616dd9d3 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 6 Jul 2026 19:41:40 +1000 Subject: [PATCH 037/151] docs(eql): fix schema placeholders + add 'The three schemas' section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Follow-ups from reviewing the rendered preview: - Variant tables used the eql_v3.<T> placeholder (booleans, core-concepts, dates-and-times, grouping-and-aggregates, indexes, numbers) — the concrete- token sweep missed it. Now public.<T>. - core-concepts: new 'The three schemas' section — public (encrypted domain types, kept in an unversioned schema so EQL upgrades don't rewrite your column types), eql_v3 (user-callable functions/operators), eql_v3_internal (implementation, don't call). Fixed prose that placed the domains and the SEM index-term types in eql_v3 (they're public / eql_v3_internal). - index: domains are public not eql_v3; corrected the uninstall Callout — DROP SCHEMA eql_v3, eql_v3_internal CASCADE removes operators/functions but leaves the public.* types + columns (data survives), where the old text claimed dropping eql_v3 drops the columns. - Grammar: 'an public.*' -> 'a public.*' left over from the schema sweep. Claude-Session: https://claude.ai/code/session_01CqDNqLSEEkCi7xAJFq7HJA --- content/docs/reference/eql/booleans.mdx | 2 +- content/docs/reference/eql/core-concepts.mdx | 38 +++++++++++++------ .../docs/reference/eql/dates-and-times.mdx | 10 ++--- .../reference/eql/grouping-and-aggregates.mdx | 8 ++-- content/docs/reference/eql/index.mdx | 6 +-- content/docs/reference/eql/indexes.mdx | 4 +- content/docs/reference/eql/json.mdx | 2 +- content/docs/reference/eql/numbers.mdx | 10 ++--- 8 files changed, 48 insertions(+), 32 deletions(-) diff --git a/content/docs/reference/eql/booleans.mdx b/content/docs/reference/eql/booleans.mdx index 6aad0f9..3cbbf73 100644 --- a/content/docs/reference/eql/booleans.mdx +++ b/content/docs/reference/eql/booleans.mdx @@ -51,7 +51,7 @@ If a boolean genuinely needs to be a server-side predicate, that is a data-model ## Storing without querying -`bool` is the forced case of a pattern available to every scalar type: the bare variant `eql_v3.<T>` (for example `public.integer`, `public.text`, `public.timestamp`) is storage-and-decryption only. It carries no index terms, and every comparison operator raises — use it for columns you only ever store and decrypt, so the database holds no searchable material for them at all. +`bool` is the forced case of a pattern available to every scalar type: the bare variant `public.<T>` (for example `public.integer`, `public.text`, `public.timestamp`) is storage-and-decryption only. It carries no index terms, and every comparison operator raises — use it for columns you only ever store and decrypt, so the database holds no searchable material for them at all. For every type other than `bool`, storage-only is a choice you can walk back. If you later need to query, retype the column as a query variant — or, if the payloads already carry the needed term (the client decides which terms travel in the payload), cast at the call site: diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index 63ce2f1..ffdd927 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -11,7 +11,7 @@ Everything in the EQL reference builds on four ideas: columns are typed as **dom ## Variants declare capability -EQL ships its searchable-encryption surface as PostgreSQL **domains in the `eql_v3` schema**, all backed by `jsonb`. Each scalar type generates a *family* of domain variants, and the variant you type a column as fixes its query capability. Each domain carries a `CHECK` constraint that validates the encrypted payload on insert, so a malformed or wrong-version value is rejected at write time rather than surfacing at query time. +EQL ships its searchable-encryption surface as PostgreSQL **domains in the `public` schema**, all backed by `jsonb` (the functions behind them live in `eql_v3` — [The three schemas](#the-three-schemas) explains the split). Each scalar type generates a *family* of domain variants, and the variant you type a column as fixes its query capability. Each domain carries a `CHECK` constraint that validates the encrypted payload on insert, so a malformed or wrong-version value is rejected at write time rather than surfacing at query time. There is no database-side configuration table. Earlier EQL versions tracked encryption config in the database (`config_add_table`, `config_add_column`, and friends) — those are gone in v3. The searchable surface of a column is fixed by the domain variant you type it as, and which index terms travel in a value's payload is decided by the encryption client (the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy)). The domain makes the matching operators resolve; the term in the payload is what makes them answer. @@ -19,24 +19,24 @@ For any scalar type `<T>`, the family looks like this: | Domain variant | Capability | | --- | --- | -| `eql_v3.<T>` | Storage and decryption only. | -| `eql_v3.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | -| `eql_v3.<T>_ord` | Comparisons (`<` … `>=`), `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | -| `eql_v3.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | +| `public.<T>` | Storage and decryption only. | +| `public.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `public.<T>_ord` | Comparisons (`<` … `>=`), `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `public.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | | `public.text_match` (text only) | Free-text token containment: `@>` / `<@`. | | `public.text_search` (text only) | Equality + ordering + token containment. | Two things worth calling out: -- **The bare variant blocks everything.** `eql_v3.<T>` carries no index term. Querying it with any comparison operator raises an "operator not supported" exception. Use it for columns you only ever store and decrypt — [Booleans](/reference/eql/booleans) covers this pattern in full. +- **The bare variant blocks everything.** `public.<T>` carries no index term. Querying it with any comparison operator raises an "operator not supported" exception. Use it for columns you only ever store and decrypt — [Booleans](/reference/eql/booleans) covers this pattern in full. - **Which index term backs each capability** is an implementation detail of the payload — covered in [Anatomy of an encrypted value](#anatomy-of-an-encrypted-value) below. ### SEM specifiers A trailing mechanism suffix — the `_ore` in `_ord_ore` — is a **SEM specifier**: it pins *which* searchable-encryption mechanism implements the capability, rather than just declaring the capability itself. -- `eql_v3.<T>_ord` declares *orderable* and leaves the mechanism to EQL's default — currently ORE (order-revealing encryption). -- `eql_v3.<T>_ord_ore` declares *orderable via ORE, explicitly*. Today the two are byte-identical surfaces backed by the same term. +- `public.<T>_ord` declares *orderable* and leaves the mechanism to EQL's default — currently ORE (order-revealing encryption). +- `public.<T>_ord_ore` declares *orderable via ORE, explicitly*. Today the two are byte-identical surfaces backed by the same term. The distinction earns its keep as mechanisms multiply: the EQL v3 release adds an **OPE** (order-preserving encryption) specifier for every orderable type — including `text` — at which point pinning a specifier documents and freezes a column's mechanism choice, while unspecified variants track the default. Each type page lists its available specifiers under an "SEM specifiers" heading. @@ -53,6 +53,22 @@ CREATE TABLE users ( Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `public.json`, with its own operator surface — see [JSON](/reference/eql/json). +## The three schemas + +EQL spreads its surface across three PostgreSQL schemas, and the split is what makes EQL **upgradable in place**: + +| Schema | Holds | Do you call it? | +| --- | --- | --- | +| `public` | The encrypted **domain types** — every `public.<T>` variant you type a column as. | Referenced in your table DDL. | +| `eql_v3` | All **user-callable functions and operators** — the searchable-encryption API (`eql_v3.eq_term`, `eql_v3.jsonb_path_query`, the encrypted `=` / `<` / `@>` operators, `eql_v3.version()`). | Yes — this is the API. | +| `eql_v3_internal` | The **implementation functions** the domains and operators are built from. | No — never call these directly. | + +**Why the types live in `public`.** Your columns are typed as `public.integer_ord`, `public.text_eq`, and so on — never `eql_v3.*`. Keeping the types in the unversioned `public` schema means an EQL upgrade never rewrites your table definitions: the logic ships in a *versioned* schema (`eql_v3` today, a future `eql_v4` alongside it tomorrow) while the type names your schema depends on stay put. `eql_v2` was removed wholesale in 3.0.0 without any `public.*` type changing. + +**Why `eql_v3` is versioned.** The schema name encodes the major API version and is itself part of the public contract — a breaking change introduces a new `eql_vN` schema *beside* the old one rather than mutating it, so you migrate on your own timeline. Everything in `eql_v3` is fair game to call. + +**Why `eql_v3_internal` is off-limits.** These are the building blocks — term comparators, unsupported-operator blockers, cast helpers — that the operators and domain `CHECK` constraints wire together. They carry no stability guarantee and can change or disappear between releases. If you're reaching for `eql_v3_internal.*`, there's a `public` type or an `eql_v3` function that does what you want. + ## Anatomy of an encrypted value Every EQL encrypted value is a `jsonb` payload with a shared envelope plus the index terms that make it queryable. Earlier CipherStash docs called this format the **CipherCell** — this section is the current definition of the same structure. @@ -77,7 +93,7 @@ A `k` discriminator (`"ct"` for a scalar ciphertext, `"sv"` for a JSON document) ### Index-term keys -Alongside the envelope, a payload carries the index terms for its column's capability. Each key is backed by a SEM (searchable encrypted metadata) type in the `eql_v3` schema: +Alongside the envelope, a payload carries the index terms for its column's capability. Each key is backed by a SEM (searchable encrypted metadata) type in the `eql_v3_internal` schema: | Key | SEM type | Wire shape | Enables | Reveals | | --- | --- | --- | --- | --- | @@ -85,9 +101,9 @@ Alongside the envelope, a payload carries the index terms for its column's capab | `ob` | `eql_v3_internal.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks (block count varies by scalar width) | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | | `bf` | `eql_v3_internal.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit — large filters emit negative positions) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | -The capability is encoded as **required keys**: the payload for an `public.text_eq` column must carry `hm`; an `public.integer_ord` payload must carry `ob` (and only `ob`); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. +The capability is encoded as **required keys**: the payload for a `public.text_eq` column must carry `hm`; a `public.integer_ord` payload must carry `ob` (and only `ob`); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. -A scalar payload for an `public.text_search` column (lookup + ordering + free-text match, so all three terms are required): +A scalar payload for a `public.text_search` column (lookup + ordering + free-text match, so all three terms are required): ```json { diff --git a/content/docs/reference/eql/dates-and-times.mdx b/content/docs/reference/eql/dates-and-times.mdx index 0fa3d25..1635a89 100644 --- a/content/docs/reference/eql/dates-and-times.mdx +++ b/content/docs/reference/eql/dates-and-times.mdx @@ -15,10 +15,10 @@ Both types generate the same `jsonb`-backed domain variants. The generic form: | Domain variant | Capability | | --- | --- | -| `eql_v3.<T>` | Storage and decryption only. | -| `eql_v3.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | -| `eql_v3.<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | -| `eql_v3.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | +| `public.<T>` | Storage and decryption only. | +| `public.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `public.<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `public.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | And every concrete domain this page covers: @@ -75,7 +75,7 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — ## Operators -| SQL operator | `eql_v3.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | +| SQL operator | `public.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | | --- | :---: | :---: | :---: | | `=` / `<>` | ❌ | ✅ | ✅ | | `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx index da735e7..f4db3f3 100644 --- a/content/docs/reference/eql/grouping-and-aggregates.mdx +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -53,10 +53,10 @@ SELECT COUNT(DISTINCT eql_v3.eq_term(email)) FROM logins; EQL ships `min` / `max` aggregates per ord-capable variant of every scalar type. The input type selects the aggregate, and the return type matches the input: ```sql -eql_v3.min(eql_v3.<T>_ord) RETURNS eql_v3.<T>_ord -eql_v3.max(eql_v3.<T>_ord) RETURNS eql_v3.<T>_ord -eql_v3.min(eql_v3.<T>_ord_ore) RETURNS eql_v3.<T>_ord_ore -eql_v3.max(eql_v3.<T>_ord_ore) RETURNS eql_v3.<T>_ord_ore +eql_v3.min(public.<T>_ord) RETURNS public.<T>_ord +eql_v3.max(public.<T>_ord) RETURNS public.<T>_ord +eql_v3.min(public.<T>_ord_ore) RETURNS public.<T>_ord_ore +eql_v3.max(public.<T>_ord_ore) RETURNS public.<T>_ord_ore ``` Comparison routes through the variant's `<` / `>` operator on the ORE term — no decryption happens in the database, and the result is an encrypted value the client decrypts. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`, matching native aggregate semantics. diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index 6b9ce9e..dc52454 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -11,7 +11,7 @@ Encrypt Query Language (EQL) is a set of types, operators, and functions for sto EQL itself never encrypts anything. Encryption and decryption happen in the client, using the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). EQL provides the database-side surface those clients query against: encrypted column types, the operators that compare them, and the term-extractor functions that make indexes work. -Every encrypted column is a `jsonb`-backed domain type in the `eql_v3` schema, and the domain variant you choose declares what the column can do — the full model is in [Core concepts](/reference/eql/core-concepts). +Every encrypted column is a `jsonb`-backed domain type in the `public` schema (the functions and operators behind them live in `eql_v3`), and the domain variant you choose declares what the column can do — the full model is in [Core concepts](/reference/eql/core-concepts). ## Install @@ -51,7 +51,7 @@ SELECT eql_v3.version(); </Steps> <Callout type="warn"> -`DROP SCHEMA eql_v3 CASCADE` drops every column typed as an `eql_v3` domain. The domain types live in the schema, and your columns depend on them. +To uninstall, drop both EQL schemas: `DROP SCHEMA eql_v3, eql_v3_internal CASCADE`. This removes the encrypted operators and functions, so queries against encrypted columns stop resolving — but your data survives: the `public.*` domain types (and the columns typed as them) live in the `public` schema and are left untouched. Remove those separately only if you intend to drop or re-type the columns. </Callout> ### dbdev @@ -81,7 +81,7 @@ GRANT CREATE ON SCHEMA public TO your_migration_user; GRANT ALTER ON ALL TABLES IN SCHEMA public TO your_migration_user; ``` -`CREATE ON DATABASE` creates the `eql_v3` schema and its types; `CREATE ON SCHEMA` and `ALTER` are needed to add encrypted columns (typed as `eql_v3` domains, with their `CHECK` constraints) to your tables. +`CREATE ON DATABASE` lets EQL create its schemas (`eql_v3`, `eql_v3_internal`) and the `public.*` domain types; `CREATE ON SCHEMA` and `ALTER` are needed to add encrypted columns (typed as `public.*` domains, with their `CHECK` constraints) to your tables. **Runtime user** — the application's day-to-day access: diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index 71fd42a..553a10b 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -33,13 +33,13 @@ Type the column as the domain variant that carries the term (see [Core concepts] ```sql -- Equality: hash index on eq_term --- (columns typed eql_v3.<T>_eq or text_search; equality on _ord columns +-- (columns typed public.<T>_eq or text_search; equality on _ord columns -- compares ORE terms, so the btree on ord_term below serves it) CREATE INDEX users_email_eq ON users USING hash (eql_v3.eq_term(email)); -- Range / ordering: btree index on ord_term --- (columns typed eql_v3.<T>_ord or _ord_ore) +-- (columns typed public.<T>_ord or _ord_ore) CREATE INDEX users_created_at_ord ON users USING btree (eql_v3.ord_term(created_at)); diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index 96d8cce..44df57e 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -34,7 +34,7 @@ An encrypted JSON document uses a different payload shape from the scalar types: The decoded `oc` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier payload versions split this into two fields — `ocf` (fixed-width, numeric) and `ocv` (variable-width, string) — which consolidated into the single `oc` key; the tag byte now carries the distinction. -A document payload for an `public.json` column: +A document payload for a `public.json` column: ```json { diff --git a/content/docs/reference/eql/numbers.mdx b/content/docs/reference/eql/numbers.mdx index b30fab3..aeb3a63 100644 --- a/content/docs/reference/eql/numbers.mdx +++ b/content/docs/reference/eql/numbers.mdx @@ -17,10 +17,10 @@ Each numeric type generates the same `jsonb`-backed domain variants. The generic | Domain variant | Capability | | --- | --- | -| `eql_v3.<T>` | Storage and decryption only. | -| `eql_v3.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | -| `eql_v3.<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | -| `eql_v3.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | +| `public.<T>` | Storage and decryption only. | +| `public.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `public.<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `public.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | And every concrete domain this page covers: @@ -80,7 +80,7 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — ## Operators -| SQL operator | `eql_v3.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | +| SQL operator | `public.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | | --- | :---: | :---: | :---: | | `=` / `<>` | ❌ | ✅ | ✅ | | `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | From a0e92041e9fa578660fc106a41241c40a0033826 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 17:39:30 +1000 Subject: [PATCH 038/151] docs(eql): rename public.jsonb_query -> eql_v3.query_jsonb EQL v3 moved the query-operand domains into the eql_v3 schema and renamed them to the query_<name> prefix, shipped in eql-3.0.0-alpha.3. The jsonb containment needle is now `eql_v3.query_jsonb`; `public.jsonb_query` no longer exists. Update the two hand-written pages (filtering.mdx, json.mdx) that cast `@>` operands to it. This clears the STRICT drift-lint, which (now that alpha.3 ships a real json/eql-manifest.json) correctly flagged public.jsonb_query as absent from the manifest. Verified: drift check passes and the build compiles all pages. functions.mdx regenerates from the manifest at build. --- content/docs/reference/eql/filtering.mdx | 2 +- content/docs/reference/eql/json.mdx | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/content/docs/reference/eql/filtering.mdx b/content/docs/reference/eql/filtering.mdx index 9dc4394..272b127 100644 --- a/content/docs/reference/eql/filtering.mdx +++ b/content/docs/reference/eql/filtering.mdx @@ -74,7 +74,7 @@ Encrypted JSON documents (`public.json`) filter by containment and path existenc ```sql -- Does the document contain this (encrypted) structure? -SELECT * FROM orders WHERE metadata @> $1::public.jsonb_query; +SELECT * FROM orders WHERE metadata @> $1::eql_v3.query_jsonb; -- Does this path exist in the document? SELECT * FROM orders WHERE eql_v3.jsonb_path_exists(metadata, 'region_selector'); diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index 44df57e..bf0156f 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -19,7 +19,7 @@ Three `jsonb`-backed domains make up the encrypted JSON surface: | --- | --- | | `public.json` | The column type. An encrypted document envelope carrying an `sv` array — one encrypted entry per path in the document. | | `public.jsonb_entry` | A single entry from the vector: a selector, a ciphertext, and exactly one index term. This is what `->` returns. | -| `public.jsonb_query` | A containment needle: entries with selectors and index terms but **no ciphertext**. This is what you cast a `@>` operand to. | +| `eql_v3.query_jsonb` | A containment needle: entries with selectors and index terms but **no ciphertext**. This is what you cast a `@>` operand to. | ## Payload shape @@ -53,7 +53,7 @@ A document payload for a `public.json` column: - Second entry: a string leaf — `oc` starting with tag `01` - Third entry: a numeric leaf — `oc` starting with tag `00` -A containment **query** payload (`public.jsonb_query`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. This is the needle the client builds for a `@>` query: +A containment **query** payload (`eql_v3.query_jsonb`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. This is the needle the client builds for a `@>` query: ```json { @@ -111,11 +111,11 @@ Use containment (`@>` / `<@`), field access (`->` / `->>`), or the `eql_v3.jsonb ## Containment: `@>` and `<@` -`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle with the client and cast it to `public.jsonb_query` (a typed `public.json` or `public.jsonb_entry` operand also works): +`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle with the client and cast it to `eql_v3.query_jsonb` (a typed `public.json` or `public.jsonb_entry` operand also works): ```sql SELECT * FROM orders -WHERE metadata @> $1::public.jsonb_query; +WHERE metadata @> $1::eql_v3.query_jsonb; ``` This is the encrypted equivalent of the plaintext `metadata @> '{"customer": {"tier": "premium"}}'`: containment checks that every encrypted term in the needle exists in the document's `sv` vector. `eql_v3.to_ste_vec_query(doc)` converts a stored document into the needle shape, and `eql_v3.ste_vec_contains(a, b)` is the function form backing `@>`. @@ -229,7 +229,7 @@ Find premium orders. The client encrypts the needle `{"customer": {"tier": "prem ```sql SELECT id FROM orders -WHERE metadata @> $1::public.jsonb_query; +WHERE metadata @> $1::eql_v3.query_jsonb; ``` Add the GIN index from above once the table grows. From 79b88330d0d274e1173c1fbb244506cb3a5f16d2 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 18:40:23 +1000 Subject: [PATCH 039/151] docs(eql): add an EQL-version banner linking to the v2 reference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Every EQL v3 reference page carries a shared <EqlVersion> callout stating the EQL release it's generated/validated against, with a link to the retained EQL v2 reference (/docs/reference/eql/v2) for readers still on the older generation. The version is single-sourced from the EQL release manifest: generate-eql-api-docs.ts writes the manifest's own `version` to src/lib/eql-version.ts, which the component reads. No hardcoded version — whatever the built release reports (e.g. a bare "DEV" today) is what shows, on every page including functions.mdx. --- content/docs/reference/eql/booleans.mdx | 2 ++ content/docs/reference/eql/core-concepts.mdx | 2 ++ .../docs/reference/eql/dates-and-times.mdx | 2 ++ content/docs/reference/eql/filtering.mdx | 2 ++ content/docs/reference/eql/functions.mdx | 2 ++ .../reference/eql/grouping-and-aggregates.mdx | 2 ++ content/docs/reference/eql/index.mdx | 2 ++ content/docs/reference/eql/indexes.mdx | 2 ++ content/docs/reference/eql/joins.mdx | 2 ++ content/docs/reference/eql/json.mdx | 2 ++ content/docs/reference/eql/numbers.mdx | 2 ++ content/docs/reference/eql/sorting.mdx | 2 ++ content/docs/reference/eql/text.mdx | 2 ++ scripts/generate-eql-api-docs.ts | 14 +++++++++++++ src/components/eql-version.tsx | 20 +++++++++++++++++++ src/lib/eql-version.ts | 4 ++++ src/mdx-components.tsx | 2 ++ 17 files changed, 66 insertions(+) create mode 100644 src/components/eql-version.tsx create mode 100644 src/lib/eql-version.ts diff --git a/content/docs/reference/eql/booleans.mdx b/content/docs/reference/eql/booleans.mdx index 3cbbf73..294a846 100644 --- a/content/docs/reference/eql/booleans.mdx +++ b/content/docs/reference/eql/booleans.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + Every scalar type has a storage-only variant — for `bool` it's the only one. EQL ships `public.boolean` and nothing else: there is no `bool_eq` and no `bool_ord`. An encrypted boolean column can be stored, decrypted, and null-checked; it cannot be filtered, sorted, grouped, or joined on. ## Why there are no query variants diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index ffdd927..ea9884b 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + Everything in the EQL reference builds on four ideas: columns are typed as **domain variants** that declare what they can do, every value is a **`jsonb` payload** carrying encrypted index terms, **operands must be typed** for the encrypted operators to resolve, and anything a column can't do **fails loudly** instead of returning wrong rows. This page is the canonical home for all four — the per-type and per-query pages link back here rather than restating them. ## Variants declare capability diff --git a/content/docs/reference/eql/dates-and-times.mdx b/content/docs/reference/eql/dates-and-times.mdx index 1635a89..ea8f0a9 100644 --- a/content/docs/reference/eql/dates-and-times.mdx +++ b/content/docs/reference/eql/dates-and-times.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + `date` and `timestamp` columns carry the same capabilities as [encrypted numbers](/reference/eql/numbers) — equality, ranges, ordering, `MIN` / `MAX` — but the queries they serve are temporal: time windows, newest-first listings, retention cutoffs, "when did this last happen". ## Variants diff --git a/content/docs/reference/eql/filtering.mdx b/content/docs/reference/eql/filtering.mdx index 272b127..6210731 100644 --- a/content/docs/reference/eql/filtering.mdx +++ b/content/docs/reference/eql/filtering.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + Every filter below is ordinary SQL — the encrypted operators resolve from the column's domain variant, and a functional index on the matching term extractor serves the predicate. One rule applies throughout: **operands must be typed** (`$1::public.text_eq`, not a bare literal), or PostgreSQL falls through to native `jsonb` semantics. See [Core concepts](/reference/eql/core-concepts) for the typed-operand rule and how unsupported operators fail loudly instead of returning wrong rows. ## Equality: `=` and `<>` diff --git a/content/docs/reference/eql/functions.mdx b/content/docs/reference/eql/functions.mdx index e9f86a5..22cf3c0 100644 --- a/content/docs/reference/eql/functions.mdx +++ b/content/docs/reference/eql/functions.mdx @@ -9,6 +9,8 @@ verifiedAgainst: {/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest (v3.0.0-sample). */} +<EqlVersion /> + <Callout type="info"> Generated from the **EQL 3.0.0-sample** manifest (the Doxygen'd SQL is the source of truth). For the model behind these — variants, terms, typed operands — see [Core concepts](/reference/eql/core-concepts). </Callout> diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx index f4db3f3..615d6b2 100644 --- a/content/docs/reference/eql/grouping-and-aggregates.mdx +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + Grouping and deduplication need an equality term, so they work on the same variants as `=`: `_eq`, `_ord` / `_ord_ore`, and `text_search`. `MIN` / `MAX` need an ordering term (`_ord` / `_ord_ore`, `text_search`). Arithmetic aggregates don't work at all — that's the last section. As everywhere, operands and call-site casts must be typed; see [Core concepts](/reference/eql/core-concepts). ## `GROUP BY` and `DISTINCT` diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index dc52454..205916c 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + Encrypt Query Language (EQL) is a set of types, operators, and functions for storing and querying encrypted data in PostgreSQL. It installs as a single plain-SQL script — no extension packaging, no superuser, no operator classes — so it runs on Supabase, RDS, Cloud SQL, and self-hosted Postgres alike. EQL itself never encrypts anything. Encryption and decryption happen in the client, using the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). EQL provides the database-side surface those clients query against: encrypted column types, the operators that compare them, and the term-extractor functions that make indexes work. diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index 553a10b..df87fb4 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + EQL indexes are ordinary PostgreSQL functional indexes over **term-extractor functions** — never an index or operator class on the column itself. Each extractor returns a small per-row index term whose return type already carries a default operator class: | Extractor | Index method | Term | Capability | diff --git a/content/docs/reference/eql/joins.mdx b/content/docs/reference/eql/joins.mdx index b4e2850..2b31347 100644 --- a/content/docs/reference/eql/joins.mdx +++ b/content/docs/reference/eql/joins.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + Equijoins work on equality-capable variants (`_eq`, `_ord` / `_ord_ore`, `text_search`) — the join condition is just encrypted equality. But there is one constraint that has no plaintext equivalent, and it is the single thing to internalize on this page: <Callout type="warn"> diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index bf0156f..273fc8c 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + `public.json` is EQL's encrypted JSON document type, built on structured encryption (**ste_vec**). The document is encrypted as a vector of encrypted entries — one entry per path inside the document — and every path is queryable without decryption: containment, field and array access, and equality or range comparisons on extracted leaves. Like every EQL type, `public.json` holds ciphertext the database can't read. Encryption, decryption, and selector generation happen in the client — the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). See [Searchable encryption](/concepts/searchable-encryption) for how querying ciphertext works at all. diff --git a/content/docs/reference/eql/numbers.mdx b/content/docs/reference/eql/numbers.mdx index aeb3a63..7c74fd2 100644 --- a/content/docs/reference/eql/numbers.mdx +++ b/content/docs/reference/eql/numbers.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + Six numeric types share one identical query surface: `int2`, `int4`, `int8`, `float4`, `float8`, and `numeric`. These are the columns you filter by range, sort, and take a `MIN` / `MAX` over — salaries, totals, rates, quantities. Date and time columns have the same capabilities but their own semantics — see [Dates & times](/reference/eql/dates-and-times). There is no free-text matching for numeric types — `_match` and `_search` are [text-only variants](/reference/eql/text). diff --git a/content/docs/reference/eql/sorting.mdx b/content/docs/reference/eql/sorting.mdx index 2e7ef2b..c847404 100644 --- a/content/docs/reference/eql/sorting.mdx +++ b/content/docs/reference/eql/sorting.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + `ORDER BY` on an encrypted column needs an ORE ordering term: it works on `_ord` / `_ord_ore` variants of every scalar and on `text_search`. ORE terms are order-preserving, so the database sorts ciphertext in exactly the order the plaintext would sort — without decrypting anything. Which variants carry the term is covered in [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), and [Text](/reference/eql/text); the variant model itself is in [Core concepts](/reference/eql/core-concepts). Sorting a variant *without* an ORE term (`_eq`, `text_match`, bare storage variants) won't raise — but the order is meaningless. Type the column as an `_ord` variant when ordering matters. diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index 408ed97..7865e8c 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -7,6 +7,8 @@ verifiedAgainst: eql: "3.0.0" --- +<EqlVersion /> + Text is the richest encrypted scalar. Beyond the four variants every scalar type gets, `text` adds two of its own: `text_match` for encrypted free-text matching, and `text_search` for columns you need to look up, sort, *and* search. Emails, names, tax IDs, addresses — this page is the full surface for all of them. ## Variants diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index c6cbfa6..0967d92 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -43,6 +43,10 @@ const MANIFEST_PATH = (fs.existsSync(RELEASE_MANIFEST) ? RELEASE_MANIFEST : SAMPLE_MANIFEST); const EQL_DIR = path.join(process.cwd(), "content/docs/reference/eql"); const OUT_FILE = path.join(EQL_DIR, "functions.mdx"); +// Single source for the EQL version the whole reference is built against: the +// release manifest's own `version`. Written here so the <EqlVersion> banner on +// every EQL page reads the same release-derived value (no hardcoded constant). +const VERSION_FILE = path.join(process.cwd(), "src/lib/eql-version.ts"); // Report-only against the illustrative sample; a failing gate against any real // manifest (the release asset or an explicit override). const STRICT = MANIFEST_PATH !== SAMPLE_MANIFEST; @@ -191,6 +195,8 @@ function render(manifest: Manifest): string { "", `{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest (v${version}). */}`, "", + "<EqlVersion />", + "", `<Callout type="info">`, `Generated from the **EQL ${version}** manifest (the Doxygen'd SQL is the source of truth). For the model behind these — variants, terms, typed operands — see [Core concepts](/reference/eql/core-concepts).`, `</Callout>`, @@ -262,6 +268,14 @@ function main() { fs.mkdirSync(EQL_DIR, { recursive: true }); fs.writeFileSync(OUT_FILE, render(manifest)); + + // Emit the release version for the <EqlVersion> banner (shared by every EQL + // reference page, hand-written and generated alike). + fs.mkdirSync(path.dirname(VERSION_FILE), { recursive: true }); + fs.writeFileSync( + VERSION_FILE, + `// GENERATED by scripts/generate-eql-api-docs.ts from the EQL release manifest.\n// Do not edit; the prebuild step overwrites it with the version of the EQL\n// release the docs are built against.\nexport const EQL_VERSION = ${JSON.stringify(manifest.version)};\n`, + ); console.log( `✓ Generated ${path.relative(process.cwd(), OUT_FILE)} from EQL ${manifest.version} (${manifest.functions.length} functions)`, ); diff --git a/src/components/eql-version.tsx b/src/components/eql-version.tsx new file mode 100644 index 0000000..d3c43e0 --- /dev/null +++ b/src/components/eql-version.tsx @@ -0,0 +1,20 @@ +import { Callout } from "fumadocs-ui/components/callout"; +import Link from "next/link"; +import { EQL_VERSION } from "@/lib/eql-version"; + +/** + * Version banner for the EQL v3 reference. Shows the EQL release the docs were + * generated/validated against — sourced from the release manifest's own version + * (written to `@/lib/eql-version` by generate-eql-api-docs.ts at build time) — + * and links to the retained EQL v2 reference for readers on the older + * generation. + */ +export function EqlVersion() { + return ( + <Callout title="EQL version" type="info"> + This reference is generated and validated against{" "} + <strong>EQL {EQL_VERSION}</strong>. Running EQL 2.x? See the{" "} + <Link href="/reference/eql/v2">EQL v2 reference</Link>. + </Callout> + ); +} diff --git a/src/lib/eql-version.ts b/src/lib/eql-version.ts new file mode 100644 index 0000000..58f5f8a --- /dev/null +++ b/src/lib/eql-version.ts @@ -0,0 +1,4 @@ +// GENERATED by scripts/generate-eql-api-docs.ts from the EQL release manifest. +// Do not edit; the prebuild step overwrites it with the version of the EQL +// release the docs are built against. +export const EQL_VERSION = "3.0.0-sample"; diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index ba31fd2..b684d9c 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -3,6 +3,7 @@ import { Step, Steps } from "fumadocs-ui/components/steps"; import defaultMdxComponents from "fumadocs-ui/mdx"; import type { MDXComponents } from "mdx/types"; import { TrackedCodeBlock } from "@/components/code-block"; +import { EqlVersion } from "@/components/eql-version"; export function getMDXComponents(components?: MDXComponents): MDXComponents { return { @@ -13,6 +14,7 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents { Callout, Steps, Step, + EqlVersion, ...components, }; } From 78a4a2257e6078039cfe1199de54aa7753c46931 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 14:53:08 +1000 Subject: [PATCH 040/151] docs(eql): install via `stash eql install` CLI Replace the curl + psql manual install with the Stash CLI (`npx stash eql install --eql-version 3`), validated against the cipherstash/stack main branch. Covers DATABASE_URL / --database-url, idempotent re-runs, `eql status`/`eql upgrade`, and the CLI's no-superuser auto-fallback on managed Postgres. --- content/docs/reference/eql/index.mdx | 39 ++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 11 deletions(-) diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index 205916c..52cb643 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -9,7 +9,7 @@ verifiedAgainst: <EqlVersion /> -Encrypt Query Language (EQL) is a set of types, operators, and functions for storing and querying encrypted data in PostgreSQL. It installs as a single plain-SQL script — no extension packaging, no superuser, no operator classes — so it runs on Supabase, RDS, Cloud SQL, and self-hosted Postgres alike. +Encrypt Query Language (EQL) is a set of types, operators, and functions for storing and querying encrypted data in PostgreSQL. The [Stash CLI](/reference/cli) installs it over an ordinary database connection — no extension packaging, no superuser, no operator classes — so it runs on Supabase, RDS, Cloud SQL, and self-hosted Postgres alike. EQL itself never encrypts anything. Encryption and decryption happen in the client, using the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). EQL provides the database-side surface those clients query against: encrypted column types, the operators that compare them, and the term-extractor functions that make indexes work. @@ -20,30 +20,45 @@ Every encrypted column is a `jsonb`-backed domain type in the `public` schema (t <Steps> <Step> -### Download the install script +### Run the installer -Each [GitHub release](https://github.com/cipherstash/encrypt-query-language/releases) publishes a versioned `cipherstash-encrypt.sql`: +Point the [Stash CLI](/reference/cli) at your database and install the `eql_v3` schema: -```sh -curl -sLo cipherstash-encrypt.sql https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql +```bash +npx stash eql install --eql-version 3 ``` +`stash eql install` scaffolds a `stash.config.ts` if your project doesn't have one, then installs the `eql_v3` schema — all domain types, operators, functions, and aggregates — along with the `cs_migrations` tracking schema that the `stash encrypt` commands depend on. It is idempotent: re-running reports that EQL is already installed and changes nothing. Pass `--force` to reinstall in place. + +<Callout> +`--eql-version 3` selects the native `eql_v3` domain schema this reference documents. Without it the CLI installs EQL v2. v3 installs directly against the database, so the `--drizzle`, `--migration`, and `--latest` flags — all v2-only — don't apply. +</Callout> + </Step> <Step> -### Run it against each database +### Point it at each database -```sh -psql -f cipherstash-encrypt.sql +The CLI reads the connection string from `DATABASE_URL` (your environment or a `.env` file) and prompts if it can't find one. Override it for a single run — handy when installing across several databases — with `--database-url`, which is used for that run only and never written to disk: + +```bash +npx stash eql install --eql-version 3 \ + --database-url postgres://user:pass@host:5432/mydb ``` -The script installs the `eql_v3` schema with all domain types, operators, functions, and aggregates. It is idempotent: re-running it upgrades the `eql_v3` surface in place and won't remove anything you've built on top of it. To upgrade, download the latest script and run it again. +Run the installer against every database that stores encrypted columns. </Step> <Step> ### Verify +```bash +npx stash eql status +``` + +Or check directly from SQL: + ```sql SELECT eql_v3.version(); -- '3.0.0' @@ -52,13 +67,15 @@ SELECT eql_v3.version(); </Step> </Steps> +To pull in a newer EQL release later, run `npx stash eql upgrade --eql-version 3`. + <Callout type="warn"> To uninstall, drop both EQL schemas: `DROP SCHEMA eql_v3, eql_v3_internal CASCADE`. This removes the encrypted operators and functions, so queries against encrypted columns stop resolving — but your data survives: the `public.*` domain types (and the columns typed as them) live in the `public` schema and are left untouched. Remove those separately only if you intend to drop or re-type the columns. </Callout> ### dbdev -EQL is also published to [dbdev](https://database.dev/cipherstash/eql). The dbdev release can lag behind GitHub releases, so prefer the install script when you need the latest version. +EQL is also published to [dbdev](https://database.dev/cipherstash/eql). The dbdev release can lag behind GitHub releases, so prefer `stash eql install` when you need the latest version. ### Docker for local development @@ -100,7 +117,7 @@ Schema changes — adding or removing encrypted columns — always go through th ## Managed Postgres and Supabase -EQL v3 is designed to install without superuser. There are no custom operator classes (which managed platforms typically block), no `postgresql.conf` changes, and no separate Supabase build — the single install script is the same artefact everywhere. Indexing works through ordinary functional indexes over EQL's term-extractor functions, which any user who can `CREATE INDEX` can build. See the [Supabase integration](/integrations/supabase) for platform-specific setup. +EQL v3 is designed to install without superuser. There are no custom operator classes (which managed platforms typically block), no `postgresql.conf` changes, and no separate Supabase build — the same schema installs everywhere. When the connected role lacks superuser, `stash eql install` detects it and automatically falls back to the no-operator-family install variant, so it works on Supabase, Neon, and RDS without extra flags. Indexing works through ordinary functional indexes over EQL's term-extractor functions, which any user who can `CREATE INDEX` can build. See the [Supabase integration](/integrations/supabase) for platform-specific setup. ## Understand From e19f7d0a6f9413bc0738f1233c52504a6ca0c560 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 15:01:08 +1000 Subject: [PATCH 041/151] docs(eql): document stash.config.ts Add a Configuration subsection covering the two defineConfig fields (databaseUrl / client), the resolveDatabaseUrl resolution chain, and the scaffolded template. Link the inline stash.config.ts mention to it. --- content/docs/reference/eql/index.mdx | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index 52cb643..693645a 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -28,7 +28,7 @@ Point the [Stash CLI](/reference/cli) at your database and install the `eql_v3` npx stash eql install --eql-version 3 ``` -`stash eql install` scaffolds a `stash.config.ts` if your project doesn't have one, then installs the `eql_v3` schema — all domain types, operators, functions, and aggregates — along with the `cs_migrations` tracking schema that the `stash encrypt` commands depend on. It is idempotent: re-running reports that EQL is already installed and changes nothing. Pass `--force` to reinstall in place. +`stash eql install` scaffolds a [`stash.config.ts`](#configuration) if your project doesn't have one, then installs the `eql_v3` schema — all domain types, operators, functions, and aggregates — along with the `cs_migrations` tracking schema that the `stash encrypt` commands depend on. It is idempotent: re-running reports that EQL is already installed and changes nothing. Pass `--force` to reinstall in place. <Callout> `--eql-version 3` selects the native `eql_v3` domain schema this reference documents. Without it the CLI installs EQL v2. v3 installs directly against the database, so the `--drizzle`, `--migration`, and `--latest` flags — all v2-only — don't apply. @@ -73,6 +73,24 @@ To pull in a newer EQL release later, run `npx stash eql upgrade --eql-version 3 To uninstall, drop both EQL schemas: `DROP SCHEMA eql_v3, eql_v3_internal CASCADE`. This removes the encrypted operators and functions, so queries against encrypted columns stop resolving — but your data survives: the `public.*` domain types (and the columns typed as them) live in the `public` schema and are left untouched. Remove those separately only if you intend to drop or re-type the columns. </Callout> +### Configuration + +`stash eql install` reads a `stash.config.ts` at your project root, scaffolding one on first run if it's missing. The same file is used by the `stash db` and `stash encrypt` commands. It exports a `defineConfig` object with two fields: + +| Field | Required | Description | +| --- | --- | --- | +| `databaseUrl` | Yes | PostgreSQL connection string. The scaffold sets it to `await resolveDatabaseUrl()`, which resolves from the `--database-url` flag, then `DATABASE_URL` (environment or `.env`), then `supabase status`, then an interactive prompt. The resolved connection string is never written to disk — only the declarative call is. | +| `client` | No | Path to your encryption client file. Defaults to `./src/encryption/index.ts`. | + +```ts filename="stash.config.ts" +import { defineConfig, resolveDatabaseUrl } from "stash"; + +export default defineConfig({ + databaseUrl: await resolveDatabaseUrl(), + client: "./src/encryption/index.ts", +}); +``` + ### dbdev EQL is also published to [dbdev](https://database.dev/cipherstash/eql). The dbdev release can lag behind GitHub releases, so prefer `stash eql install` when you need the latest version. From 212f8944bb6a37449544e75eb49830ce0a6f1319 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 13:39:49 +1000 Subject: [PATCH 042/151] docs(reference): port proxy, workspace, glossary, agent-skills Ports nine pages from the legacy tree into the v2 IA, adds facets, and repoints links at their new homes. Proxy: merges the old proxy/configuration and reference/proxy-reference into one configuration page; ports message-flow, multitenant, and errors. The EQL setup section now links to the EQL reference instead of restating it, which also removes the EQL v2 SQL those pages carried. Workspace: ports billing, members, and configuration. Cross-cutting: ports glossary and agent-skills. --- content/docs/reference/agent-skills.mdx | 111 ++++++ content/docs/reference/glossary.mdx | 156 ++++++++ content/docs/reference/meta.json | 13 +- .../docs/reference/proxy/configuration.mdx | 360 ++++++++++++++++++ content/docs/reference/proxy/errors.mdx | 217 +++++++++++ content/docs/reference/proxy/index.mdx | 20 +- content/docs/reference/proxy/message-flow.mdx | 83 ++++ content/docs/reference/proxy/meta.json | 2 +- content/docs/reference/proxy/multitenant.mdx | 77 ++++ content/docs/reference/workspace/billing.mdx | 60 +++ .../reference/workspace/configuration.mdx | 55 +++ content/docs/reference/workspace/index.mdx | 19 +- content/docs/reference/workspace/members.mdx | 32 ++ content/docs/reference/workspace/meta.json | 2 +- 14 files changed, 1198 insertions(+), 9 deletions(-) create mode 100644 content/docs/reference/agent-skills.mdx create mode 100644 content/docs/reference/glossary.mdx create mode 100644 content/docs/reference/proxy/configuration.mdx create mode 100644 content/docs/reference/proxy/errors.mdx create mode 100644 content/docs/reference/proxy/message-flow.mdx create mode 100644 content/docs/reference/proxy/multitenant.mdx create mode 100644 content/docs/reference/workspace/billing.mdx create mode 100644 content/docs/reference/workspace/configuration.mdx create mode 100644 content/docs/reference/workspace/members.mdx diff --git a/content/docs/reference/agent-skills.mdx b/content/docs/reference/agent-skills.mdx new file mode 100644 index 0000000..03ea3a3 --- /dev/null +++ b/content/docs/reference/agent-skills.mdx @@ -0,0 +1,111 @@ +--- +title: Agent skills +description: "Install CipherStash agent skills to give your AI coding assistant accurate knowledge of encryption setup, schema building, and integrations." +type: reference +components: [encryption, cli] +--- + +CipherStash publishes a set of [agent skills](https://skills.sh/) that give AI coding assistants deep knowledge of the Stack SDK, CLI, and integrations. When installed, your agent can generate encryption schemas, write integration code, and guide you through database setup without hallucinating API surfaces. + +Skills work with any AI coding tool that supports the skills protocol, including Claude Code, Cursor, GitHub Copilot, Windsurf, Cline, Gemini, AMP, Goose, Roo, and Trae. + +## Install skills + +Skills are installed per project. Run this in your project root: + +```bash cta cta-type="install" example-id="install-agent-skills" +npx skills add cipherstash/stack +``` + +This installs all six CipherStash skills. Your agent activates the relevant skill based on what you are working on. + +### Install via the wizard + +`@cipherstash/wizard` offers to copy integration-appropriate skills into `./.claude/skills/` after its post-agent steps: + +| Integration | Skills installed | +|---|---| +| Drizzle | `stash-encryption`, `stash-drizzle`, `stash-cli` | +| Supabase | `stash-encryption`, `stash-supabase`, `stash-cli` | +| Prisma or generic | `stash-encryption`, `stash-cli` | + +## Available skills + +### stash-encryption + +Core field-level encryption with `@cipherstash/stack`. The foundational skill, covering the full encryption API. + +**Covers:** schema definition with `encryptedTable` and `encryptedColumn`; single and bulk encrypt/decrypt; model operations (`encryptModel`, `decryptModel`, `bulkEncryptModels`, `bulkDecryptModels`); searchable encryption (equality, free-text search, range queries, encrypted JSONB); identity-aware encryption with `LockContext`; multi-tenant isolation with keysets; error handling with the `Result` pattern; migration from `@cipherstash/protect`. + +**Activates when:** you are defining encrypted schemas, writing encrypt/decrypt logic, or working with the `@cipherstash/stack` package. + +**Related docs:** [Stack SDK](/reference/stack) + +### stash-cli + +The CipherStash CLI (`stash`) for database setup, schema management, and project initialization. + +**Covers:** `stash.config.ts` configuration; the setup lifecycle (`init`, `plan`, `impl`, `status`); database commands (`db install`, `db upgrade`, `db push`, `db validate`, `db status`, `db test-connection`); `schema build`; `auth login`; the programmatic API (`EQLInstaller`, `loadStashConfig`, `defineConfig`, `loadBundledEqlSql`); Drizzle migration mode (`--drizzle`); Supabase-compatible installs (`--supabase`); automatic Supabase and Drizzle detection; automatic OPE fallback on managed databases. + +**Activates when:** you are working with `stash.config.ts`, running CLI commands, or setting up EQL in a database. + +**Related docs:** [CLI reference](/reference/cli) + +### stash-drizzle + +Drizzle ORM integration using `@cipherstash/stack/drizzle`. + +**Covers:** the `encryptedType<T>()` column type; `extractEncryptionSchema()`; `createEncryptionOperators()`; query operators (`eq`, `ne`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`, `between`, `inArray`, `asc`, `desc`); encrypted JSONB operators (`jsonbPathExists`, `jsonbPathQueryFirst`, `jsonbGet`); batched `and()` / `or()` conditions; EQL migration generation; non-encrypted column fallback; Express, Hono, and Next.js examples. + +**Activates when:** you are using Drizzle ORM with encrypted columns, or importing from `@cipherstash/stack/drizzle`. + +**Related docs:** [Drizzle integration](/stack/cipherstash/encryption/drizzle) + +### stash-supabase + +Supabase integration using `@cipherstash/stack/supabase`. + +**Covers:** the `encryptedSupabase()` wrapper; transparent encryption on `insert`, `update`, and `upsert`; transparent decryption on `select`, `single`, and `maybeSingle`; encrypted query filters (`eq`, `neq`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`, `in`, `match`, `or`, `not`, `filter`); identity-aware encryption with `.withLockContext()`; audit logging with `.audit()`; response types and error handling; Supabase-specific database setup. + +**Activates when:** you are using Supabase with encrypted columns, or importing from `@cipherstash/stack/supabase`. + +**Related docs:** [Supabase integration](/integrations/supabase) + +### stash-dynamodb + +Amazon DynamoDB integration using `@cipherstash/stack/dynamodb`. + +**Covers:** the `encryptedDynamoDB()` helper; attribute naming conventions (`__source` and `__hmac` suffixes); single and bulk encrypt/decrypt model operations; querying encrypted partition keys, sort keys, and GSI keys via HMAC attributes; nested object encryption with `encryptedField`; audit logging; table design patterns; examples with `PutCommand`, `GetCommand`, `QueryCommand`, and `BatchWriteCommand`. + +**Activates when:** you are using DynamoDB with encrypted attributes, or importing from `@cipherstash/stack/dynamodb`. + +**Related docs:** [DynamoDB integration](/stack/cipherstash/encryption/dynamodb) + +### stash-secrets + +Encrypted secrets management with `@cipherstash/stack`. + +**Covers:** the `Secrets` class API (`set`, `get`, `getMany`, `list`, `delete`); environment-based isolation with per-environment keysets; bulk retrieval with `getMany` (2 to 100 secrets per call); error types (`ApiError`, `NetworkError`, `ClientError`, `EncryptionError`, `DecryptionError`); configuration via `CS_*` environment variables or explicit config; patterns for loading secrets at startup. + +**Activates when:** you are storing or retrieving secrets, or working with the `Secrets` class from `@cipherstash/stack/secrets`. + +**Related docs:** [Secrets](https://cipherstash.com/stack/secrets) + +## How skills work + +When you ask your agent to help with a CipherStash task, it checks which skills are installed and activates the relevant one. The skill supplies the agent with the complete API surface (method signatures, types, return values), code examples matching the current SDK version, integration-specific patterns, and known limitations. + +This means your agent writes accurate CipherStash code on the first try, rather than guessing at API shapes or generating outdated patterns. + +## Typical workflow + +1. **Initialize your project.** Ask your agent to set up CipherStash and it runs `stash init`, which authenticates you, installs EQL, scaffolds the encryption client, and writes `.cipherstash/context.json`. +2. **Draft a plan.** `stash plan` produces `.cipherstash/plan.md`, listing the tables and columns to encrypt. Review it before proceeding. +3. **Execute the plan.** `stash impl` reads the plan and wires up `encryptModel` and `decryptModel` in your codebase. +4. **Handle edge cases.** The agent knows about searchable encryption constraints, operator family limitations, identity-aware encryption, and multi-tenant keysets. + +## Requirements + +- An AI coding tool that supports the [skills protocol](https://skills.sh/) +- Node.js 18 or later +- A CipherStash account ([sign up](https://dashboard.cipherstash.com/sign-up)) diff --git a/content/docs/reference/glossary.mdx b/content/docs/reference/glossary.mdx new file mode 100644 index 0000000..3a75a94 --- /dev/null +++ b/content/docs/reference/glossary.mdx @@ -0,0 +1,156 @@ +--- +title: Glossary +description: "Definitions of key CipherStash concepts and terms, from ZeroKMS, keysets, and client keys to EQL, HMAC, and searchable encryption." +type: reference +--- + +## A + +### ABAC (Attribute Based Access Control) + +A dynamic security model that makes access decisions based on a variety of attributes, including user characteristics, resource details, and environmental factors. Unlike [RBAC](#rbac-role-based-access-control), which relies solely on a user's assigned role, ABAC offers more granular and context-aware policies that adapt to changing conditions. + +### Access key + +A persistent authentication credential used for communication with [ZeroKMS](#zerokms) or [CTS](#cts-cipherstash-token-service). See [access keys](/stack/cipherstash/kms/access-keys). + +### Account management + +Activities to administer your CipherStash account, such as billing and adding or removing users. See [billing](/reference/workspace/billing) and [members](/reference/workspace/members). + +## C + +### Ciphertext + +An encrypted version of plaintext, produced by applying an encryption algorithm (a cipher). It is unreadable without a cipher to decrypt it. + +See also: [plaintext](#plaintext). + +### CipherStash CLI + +The command line tool (`stash`) for interacting with CipherStash services. See the [CLI reference](/reference/cli). + +### CipherStash Proxy + +A database proxy that sits between an application and a database, adding encryption in use. Proxy works alongside your existing infrastructure and is fully contained within your environment. See the [Proxy reference](/reference/proxy). + +### Client key + +The cryptographic credential assigned to a programmatic access point for a [keyset](#keyset). A client key can have access to many keysets, and a keyset can be shared by multiple client keys. + +There are two types: + +- **Device-backed client keys** are created automatically by `stash init` and tied to a developer's [device](#device). Used for local development. +- **Application client keys** are created in the Dashboard for production and CI/CD. Identified by a [client ID](#client-id) and client key value, set via environment variables. + +See [client keys](/stack/cipherstash/kms/clients). + +### Client ID + +A unique identifier for a [client key](#client-key). Each client key and client ID is unique to your app. + +### Client key value + +The secret credential set via `CS_CLIENT_KEY`. Together with the [client ID](#client-id), it forms the credential pair for a [client key](#client-key). The client key value is sensitive and must be kept secret. + +### CTS (CipherStash Token Service) + +CTS manages the trust relationships between a workspace and third-party or customer identity providers. It brokers secure access to CipherStash services such as ZeroKMS, ensuring that only authenticated and authorized users gain entry. See [CTS](/stack/cipherstash/kms/cts). + +## D + +### Dashboard + +The web interface for managing CipherStash Cloud primitives: workspaces, client keys, keysets, access keys, devices, and members. Available at [dashboard.cipherstash.com](https://dashboard.cipherstash.com/). + +The Dashboard manages cloud infrastructure. Product-specific configuration (encryption schemas, secrets, proxy rules) is handled by the SDKs and CLI. + +### Data access event + +An event triggered by execution of SQL statements by CipherStash Proxy. Includes metadata of statements executed and records accessed. + +### Device + +A unique identity tied to a developer's device and user account, created by `stash init`. Each device has an associated [client key](#client-key) that is automatically granted access to the default [keyset](#keyset). + +Devices are used for local development authentication, with no environment variables required. Production environments use application [client keys](#client-key) instead. See the [quickstart](/stack/quickstart). + +## E + +### EQL (Encrypt Query Language) + +Our [open-source library](https://github.com/cipherstash/encrypt-query-language) for PostgreSQL users. EQL provides the database-side surface for querying encrypted data: encrypted column types, the operators that compare them, and the term-extractor functions that make indexes work. EQL itself never encrypts anything. See the [EQL reference](/reference/eql). + +## H + +### HMAC (Hash-based Message Authentication Code) + +A cryptographic technique that combines a hash function with a secret key to verify both the integrity and authenticity of a message. Unlike raw hash functions such as SHA-256, HMAC requires a secret key, so only parties with the key can generate valid HMACs. This prevents attackers from pre-computing hash tables (rainbow tables) or guessing values. + +In searchable encryption, HMACs create encrypted search tokens. The key stays on the application side, so the server can match encrypted search tokens without ever learning the plaintext or being able to generate new tokens. See [searchable encryption](/concepts/searchable-encryption) for what an HMAC term does and does not reveal. + +## I + +### IdP (Identity Provider) + +A third-party identity provider, such as Auth0, Okta, or Clerk. + +## J + +### JWT (JSON Web Token) + +A compact, URL-safe means of representing claims between two parties as a JSON object, typically used for authentication and authorization. JWTs are digitally signed to ensure the integrity and authenticity of the information, allowing systems to verify user identity without maintaining server-side sessions. + +## K + +### Keyset + +A core CipherStash Cloud primitive for cryptographic isolation, managed by [ZeroKMS](#zerokms). Each keyset maintains its own set of data encryption keys, and data encrypted under one keyset cannot be decrypted with another. + +Use keysets for tenant isolation, environment separation, regional compliance, or any cryptographic boundary your architecture requires. A [client key](#client-key) can access many keysets, and a keyset can be shared by multiple client keys. In the Secrets SDK, environments map directly to keysets. + +See [keysets](/stack/cipherstash/kms/keysets). + +## O + +### OIDC (OpenID Connect) + +An identity layer built on top of the OAuth 2.0 protocol that enables applications to verify user identity through an [identity provider](#idp-identity-provider). It facilitates secure single sign-on and standardizes how the identity provider shares identity information, using RESTful APIs and [JSON Web Tokens](#jwt-json-web-token). + +### ORE (Order Revealing Encryption) + +A searchable encryption technique allowing comparison and sorting of encrypted data without decryption. ORE terms reveal the relative order of the values they encode. See [sorting](/reference/eql/sorting) and [searchable encryption](/concepts/searchable-encryption). + +## P + +### Plaintext + +Unencrypted information, readable by humans and computers. + +## R + +### RBAC (Role Based Access Control) + +A security model that assigns access permissions based on a user's role within an organization, streamlining the management of access rights by grouping permissions into predefined roles. Unlike [ABAC](#abac-attribute-based-access-control), which evaluates policies based on a range of attributes, RBAC relies solely on roles. + +## S + +### Searchable encrypted metadata + +An encrypted data structure for finding records in encrypted columns, carried in the value's payload alongside the ciphertext. It replaces the need for full table scans, and supports range, exact, and match queries. + +See [core concepts](/reference/eql/core-concepts) for payload anatomy, and [searchable encryption](/concepts/searchable-encryption) for what each index term reveals. + +## W + +### Workspace + +A workspace contains [keysets](#keyset), client keys, and configuration. A workspace can separate environments (such as dev and prod), be shared with other users, and be associated with a custom identity provider. + +See [workspace and account](/reference/workspace). + +## Z + +### ZeroKMS + +CipherStash's key management service. ZeroKMS provides high-performance batch encryption and decryption, enabling a unique encryption key per field. See [ZeroKMS](/stack/cipherstash/kms). diff --git a/content/docs/reference/meta.json b/content/docs/reference/meta.json index b74408a..83f32fd 100644 --- a/content/docs/reference/meta.json +++ b/content/docs/reference/meta.json @@ -1,5 +1,16 @@ { "title": "Reference", "icon": "Library", - "pages": ["..."] + "pages": [ + "index", + "eql", + "stack", + "auth", + "cli", + "proxy", + "workspace", + "...", + "agent-skills", + "glossary" + ] } diff --git a/content/docs/reference/proxy/configuration.mdx b/content/docs/reference/proxy/configuration.mdx new file mode 100644 index 0000000..4316a2f --- /dev/null +++ b/content/docs/reference/proxy/configuration.mdx @@ -0,0 +1,360 @@ +--- +title: Configuration +description: "Install and configure CipherStash Proxy: Docker, TOML and environment variables, logging, Prometheus metrics, and the CLI." +type: reference +components: [proxy, eql] +--- + +CipherStash Proxy is available as a [container image](https://hub.docker.com/r/cipherstash/proxy) on Docker Hub. Deploy it locally, as a cloud sidecar, or as a standalone binary. It speaks the PostgreSQL protocol, so your application connects to Proxy exactly the same way it connects to PostgreSQL. + +## Installing Proxy + +The quickest way to run Proxy alongside your application is to add a container to your `docker-compose.yml`: + +```yaml filename="docker-compose.yml" +services: + app: + # Your app container config + db: + # Your Postgres container config + proxy: + image: cipherstash/proxy:latest + container_name: proxy + ports: + - 6432:6432 + - 9930:9930 + environment: + - CS_DATABASE__HOST=${CS_DATABASE__HOST} + - CS_DATABASE__PORT=${CS_DATABASE__PORT} + - CS_DATABASE__USERNAME=${CS_DATABASE__USERNAME} + - CS_DATABASE__PASSWORD=${CS_DATABASE__PASSWORD} + - CS_DATABASE__NAME=${CS_DATABASE__NAME} + - CS_WORKSPACE_CRN=${CS_WORKSPACE_CRN} + - CS_CLIENT_ACCESS_KEY=${CS_CLIENT_ACCESS_KEY} + - CS_DEFAULT_KEYSET_ID=${CS_DEFAULT_KEYSET_ID} + - CS_CLIENT_ID=${CS_CLIENT_ID} + - CS_CLIENT_KEY=${CS_CLIENT_KEY} + - CS_PROMETHEUS__ENABLED=${CS_PROMETHEUS__ENABLED:-true} +``` + +For a fully working example, see the [docker-compose.yml](https://github.com/cipherstash/proxy/blob/main/docker-compose.yml) in the Proxy repository. + +Start the container, then connect your PostgreSQL client to Proxy on TCP 6432: + +```bash cta cta-type="install" example-id="proxy-docker-compose-up" +docker compose up +``` + +<Callout type="info"> +Unlike the Stack SDK, Proxy **always requires credentials to be supplied explicitly**, because it runs as a separate process or container and cannot use the host's device-based authentication. + +For local development, create a client key and access key in the [Dashboard](https://dashboard.cipherstash.com). For production, see [Going to production](/stack/deploy/going-to-production). +</Callout> + +## Setting up the database schema + +Proxy queries encrypted data through [EQL](/reference/eql), which must be installed in the target database. Encrypted columns are typed with an EQL domain such as `public.text_eq`, and that type is what fixes the column's searchable capability. There is no database-side configuration table. + +- [Install EQL](/reference/eql) covers the install itself, including the permissions split and Supabase. +- [Core concepts](/reference/eql/core-concepts) covers the variant model and which domain type to choose. +- [Indexes](/reference/eql/indexes) covers adding functional indexes over the term extractors. + +In development, the Proxy container can install EQL for you on startup: + +```bash +CS_DATABASE__INSTALL_EQL=true +``` + +Check the installed version: + +```sql +SELECT eql_v3.version(); +``` + +<Callout type="warn"> +`CS_DATABASE__INSTALL_EQL` is for development only. In production, install EQL as a database migration. +</Callout> + +## Configuration loading order + +Proxy accepts configuration from a TOML file, environment variables, or both. + +1. If `cipherstash-proxy.toml` exists in the current working directory, Proxy reads it first. +2. Proxy then reads any environment variables that are set. +3. When both are present, environment variables override values from the TOML file. + +## Config options + +### `[server]` + +| Option | Env variable | Default | Description | +|---|---|---|---| +| `host` | `CS_SERVER__HOST` | `0.0.0.0` | Proxy listen address | +| `port` | `CS_SERVER__PORT` | `6432` | Proxy listen port | +| `require_tls` | `CS_SERVER__REQUIRE_TLS` | `false` | Enforce TLS for client-to-proxy connections | +| `shutdown_timeout` | `CS_SERVER__SHUTDOWN_TIMEOUT` | `2000` | Milliseconds to wait for connections to drain on shutdown | +| `worker_threads` | `CS_SERVER__WORKER_THREADS` | `NUMBER_OF_CORES/2` or `4` | Number of server worker threads | +| `thread_stack_size` | `CS_SERVER__THREAD_STACK_SIZE` | `2097152` (2 MiB) | Thread stack size in bytes. Automatically set to 4 MiB when log level is `debug` or `trace` | +| `cipher_cache_size` | `CS_SERVER__CIPHER_CACHE_SIZE` | `64` | Maximum number of encryption/decryption operations to cache | +| `cipher_cache_ttl_seconds` | `CS_SERVER__CIPHER_CACHE_TTL_SECONDS` | `3600` | Seconds before cached cipher operations expire | + +### `[database]` + +| Option | Env variable | Default | Description | +|---|---|---|---| +| `host` | `CS_DATABASE__HOST` | `0.0.0.0` | Database host address | +| `port` | `CS_DATABASE__PORT` | `5432` | Database port | +| `name` | `CS_DATABASE__NAME` | (required) | Database name | +| `username` | `CS_DATABASE__USERNAME` | (required) | Database username | +| `password` | `CS_DATABASE__PASSWORD` | (required) | Database password | +| `connection_timeout` | `CS_DATABASE__CONNECTION_TIMEOUT` | none | Milliseconds to hold an idle connection open. In production, set this higher than your application's connection pool idle timeout | +| `with_tls_verification` | `CS_DATABASE__WITH_TLS_VERIFICATION` | `false` | Enable TLS verification between Proxy and the database | +| `config_reload_interval` | `CS_DATABASE__CONFIG_RELOAD_INTERVAL` | `60` | Seconds between encrypted index configuration reloads | +| `schema_reload_interval` | `CS_DATABASE__SCHEMA_RELOAD_INTERVAL` | `60` | Seconds between database schema reloads | + +### `[tls]` + +Configure TLS for client-to-proxy connections. Provide either file paths or inline PEM strings. + +| Option | Env variable | Description | +|---|---|---| +| `certificate_path` | `CS_TLS__CERTIFICATE_PATH` | Path to the public certificate `.crt` file | +| `private_key_path` | `CS_TLS__PRIVATE_KEY_PATH` | Path to the private key file | +| `certificate_pem` | `CS_TLS__CERTIFICATE_PEM` | Public certificate as a PEM string | +| `private_key_pem` | `CS_TLS__PRIVATE_KEY_PEM` | Private key as a PEM string | + +### `[auth]` + +| Option | Env variable | Description | +|---|---|---| +| `workspace_crn` | `CS_WORKSPACE_CRN` | CipherStash workspace CRN | +| `client_access_key` | `CS_CLIENT_ACCESS_KEY` | CipherStash client access key | + +### `[encrypt]` + +| Option | Env variable | Description | +|---|---|---| +| `default_keyset_id` | `CS_DEFAULT_KEYSET_ID` | Default keyset. Omit to enable [multitenant operation](/reference/proxy/multitenant) | +| `client_id` | `CS_CLIENT_ID` | CipherStash client ID | +| `client_key` | `CS_CLIENT_KEY` | CipherStash client key | + +### `[log]` + +| Option | Env variable | Default | Description | +|---|---|---|---| +| `level` | `CS_LOG__LEVEL` | `info` | Global log level. Valid values: `error`, `warn`, `info`, `debug`, `trace` | +| `format` | `CS_LOG__FORMAT` | `pretty` (terminal), `structured` (non-terminal) | Log format. Valid values: `pretty`, `text`, `structured` (JSON) | +| `output` | `CS_LOG__OUTPUT` | `stdout` | Log output destination. Valid values: `stdout`, `stderr` | +| `ansi_enabled` | `CS_LOG__ANSI_ENABLED` | `true` (terminal), `false` (non-terminal) | Enable colored output | +| `slow_statements` | `CS_LOG__SLOW_STATEMENTS` | `false` | Enable slow statement logging | +| `slow_statement_min_duration_ms` | `CS_LOG__SLOW_STATEMENT_MIN_DURATION_MS` | `2000` | Minimum duration in milliseconds for a statement to be considered slow | +| `slow_db_response_min_duration_ms` | `CS_LOG__SLOW_DB_RESPONSE_MIN_DURATION_MS` | `100` | Minimum duration in milliseconds for a database response to be considered slow | + +### `[prometheus]` + +| Option | Env variable | Default | Description | +|---|---|---|---| +| `enabled` | `CS_PROMETHEUS__ENABLED` | `false` | Enable the Prometheus metrics exporter | +| `port` | `CS_PROMETHEUS__PORT` | `9930` | Port for the Prometheus exporter | + +## Full TOML example + +```toml filename="cipherstash-proxy.toml" +[server] +host = "0.0.0.0" +port = "6432" +require_tls = "false" +shutdown_timeout = "2000" +worker_threads = "4" +thread_stack_size = "2097152" +cipher_cache_size = "64" +cipher_cache_ttl_seconds = "3600" + +[database] +host = "0.0.0.0" +port = "5432" +name = "database" +username = "username" +password = "password" +connection_timeout = "300000" +with_tls_verification = "false" +config_reload_interval = "60" +schema_reload_interval = "60" + +[tls] +certificate_path = "./server.crt" +private_key_path = "./server.key" + +[auth] +workspace_crn = "cipherstash-workspace-crn" +client_access_key = "cipherstash-client-access-key" + +[encrypt] +default_keyset_id = "cipherstash-keyset-id" +client_id = "cipherstash-client-id" +client_key = "cipherstash-client-key" + +[log] +level = "info" +format = "pretty" +output = "stdout" +ansi_enabled = "true" +slow_statements = "false" +slow_statement_min_duration_ms = "2000" +slow_db_response_min_duration_ms = "100" + +[prometheus] +enabled = "false" +port = "9930" +``` + +## Development settings + +Defaults are tuned for production. When running Proxy locally, override these for a better development experience. None of these settings are appropriate for production. + +Enable colored, human-readable logs: + +```bash +CS_LOG__FORMAT="pretty" +CS_LOG__ANSI_ENABLED="true" +``` + +Reduce reload intervals when iterating on your schema: + +```bash +CS_DATABASE__CONFIG_RELOAD_INTERVAL="10" +CS_DATABASE__SCHEMA_RELOAD_INTERVAL="10" +``` + +### Slow query logging + +Slow query logging identifies statements that take longer than expected: + +```bash +CS_LOG__SLOW_STATEMENTS="true" +``` + +By default, any statement taking longer than 2000 ms is flagged. Tune the thresholds to match your latency expectations: + +```bash +CS_LOG__SLOW_STATEMENT_MIN_DURATION_MS="500" # statement total time +CS_LOG__SLOW_DB_RESPONSE_MIN_DURATION_MS="200" # database round-trip only +``` + +When a slow statement is detected, Proxy emits a structured log line at the `SLOW_STATEMENTS` target. With `format = "pretty"`, it looks like: + +``` +WARN slow_statement duration_ms=620 query="SELECT * FROM users WHERE ..." +``` + +Use these lines to find queries that need indexes. A query that is unexpectedly slow is usually missing a functional index over the term extractor, or is passing an untyped operand. See [query performance](/reference/eql/indexes). + +To isolate slow-statement output in production, set `CS_LOG__SLOW_STATEMENTS_LEVEL=warn` while keeping the global level at `error`. + +## Docker-specific options + +These environment variables are only available in the Docker container image, not in the binary. + +| Env variable | Description | +|---|---| +| `CS_DATABASE__INSTALL_EQL` | Install EQL on container startup | +| `CS_DATABASE__INSTALL_EXAMPLE_SCHEMA` | Load the example schema on container startup | +| `CS_DATABASE__INSTALL_AWS_RDS_CERT_BUNDLE` | Add the AWS RDS certificate bundle for TLS verification | + +<Callout type="warn"> +`CS_DATABASE__INSTALL_EQL` and `CS_DATABASE__INSTALL_EXAMPLE_SCHEMA` are for development use only. Install EQL as a database migration in production. +</Callout> + +## Per-target log levels + +Override the log level for specific internal components using the pattern `CS_LOG__{TARGET}_LEVEL`. These accept the same values as `CS_LOG__LEVEL`. + +| Env variable | Target | Description | +|---|---|---| +| `CS_LOG__DEVELOPMENT_LEVEL` | `DEVELOPMENT` | General development logging | +| `CS_LOG__AUTHENTICATION_LEVEL` | `AUTHENTICATION` | Client authentication and SASL | +| `CS_LOG__CONFIG_LEVEL` | `CONFIG` | Configuration loading | +| `CS_LOG__CONTEXT_LEVEL` | `CONTEXT` | Connection context | +| `CS_LOG__ENCODING_LEVEL` | `ENCODING` | Data encoding and decoding | +| `CS_LOG__ENCRYPT_LEVEL` | `ENCRYPT` | Encryption operations | +| `CS_LOG__DECRYPT_LEVEL` | `DECRYPT` | Decryption operations | +| `CS_LOG__ENCRYPT_CONFIG_LEVEL` | `ENCRYPT_CONFIG` | Encryption configuration loading | +| `CS_LOG__ZEROKMS_LEVEL` | `ZEROKMS` | ZeroKMS cipher initialization, cache, and connectivity | +| `CS_LOG__MIGRATE_LEVEL` | `MIGRATE` | Schema migration | +| `CS_LOG__PROTOCOL_LEVEL` | `PROTOCOL` | PostgreSQL wire protocol | +| `CS_LOG__MAPPER_LEVEL` | `MAPPER` | SQL statement mapping and transformation | +| `CS_LOG__SCHEMA_LEVEL` | `SCHEMA` | Database schema analysis | +| `CS_LOG__SLOW_STATEMENTS_LEVEL` | `SLOW_STATEMENTS` | Slow statement detection | + +## CLI reference + +```bash +cipherstash-proxy [OPTIONS] [DBNAME] [COMMAND] +``` + +### Commands + +| Command | Description | +|---|---| +| `encrypt` | Encrypt existing plaintext data in the database | +| `help` | Print help information | + +The `encrypt` command encrypts existing plaintext data in place. See [the encrypt tool](/stack/cipherstash/proxy/encrypt-tool). + +### Arguments and options + +| Flag | Default | Description | +|---|---|---| +| `DBNAME` | | Database name (positional, optional) | +| `-H, --db-host <DB_HOST>` | `127.0.0.1` | Database host | +| `-u, --db-user <DB_USER>` | `postgres` | Database user | +| `-p, --config-file-path <CONFIG_FILE_PATH>` | `cipherstash-proxy.toml` | Path to the TOML config file | +| `-l, --log-level <LOG_LEVEL>` | `info` | Log level | +| `-f, --log-format <LOG_FORMAT>` | `pretty` (terminal), `structured` (non-terminal) | Log format | + +## Prometheus metrics + +Enable the exporter with `CS_PROMETHEUS__ENABLED=true`. Metrics are exposed on port `9930` by default. + +| Metric | Type | Description | +|---|---|---| +| `cipherstash_proxy_keyset_cipher_cache_hits_total` | Counter | Keyset-scoped cipher cache hits | +| `cipherstash_proxy_keyset_cipher_cache_miss_total` | Counter | Cipher cache misses requiring initialization | +| `cipherstash_proxy_keyset_cipher_init_total` | Counter | New keyset-scoped cipher initializations | +| `cipherstash_proxy_keyset_cipher_init_duration_seconds` | Histogram | Duration of cipher initialization, including ZeroKMS network call | +| `cipherstash_proxy_clients_active_connections` | Gauge | Current active client connections | +| `cipherstash_proxy_clients_bytes_received_total` | Counter | Bytes received from clients | +| `cipherstash_proxy_clients_bytes_sent_total` | Counter | Bytes sent to clients | +| `cipherstash_proxy_decrypted_values_total` | Counter | Individual values decrypted | +| `cipherstash_proxy_decryption_duration_seconds` | Histogram | Time spent performing decryption | +| `cipherstash_proxy_decryption_duration_seconds_count` | Counter | Number of decryption timing observations | +| `cipherstash_proxy_decryption_duration_seconds_sum` | Counter | Total cumulative decryption time | +| `cipherstash_proxy_decryption_error_total` | Counter | Unsuccessful decryption operations | +| `cipherstash_proxy_decryption_requests_total` | Counter | ZeroKMS decrypt requests | +| `cipherstash_proxy_encrypted_values_total` | Counter | Individual values encrypted | +| `cipherstash_proxy_encryption_duration_seconds` | Histogram | Time spent performing encryption | +| `cipherstash_proxy_encryption_duration_seconds_count` | Counter | Number of encryption timing observations | +| `cipherstash_proxy_encryption_duration_seconds_sum` | Counter | Total cumulative encryption time | +| `cipherstash_proxy_encryption_error_total` | Counter | Unsuccessful encryption operations | +| `cipherstash_proxy_encryption_requests_total` | Counter | ZeroKMS encrypt requests | +| `cipherstash_proxy_rows_encrypted_total` | Counter | Encrypted rows returned to clients | +| `cipherstash_proxy_rows_passthrough_total` | Counter | Non-encrypted rows returned to clients | +| `cipherstash_proxy_rows_total` | Counter | Total rows returned to clients | +| `cipherstash_proxy_server_bytes_received_total` | Counter | Bytes received from the PostgreSQL server | +| `cipherstash_proxy_server_bytes_sent_total` | Counter | Bytes sent to the PostgreSQL server | +| `cipherstash_proxy_statements_execution_duration_seconds` | Histogram | Database SQL execution time | +| `cipherstash_proxy_statements_session_duration_seconds` | Histogram | Total statement processing time (encrypt, execute, decrypt) | +| `cipherstash_proxy_statements_encrypted_total` | Counter | Statements requiring encryption | +| `cipherstash_proxy_statements_passthrough_total` | Counter | Statements not requiring encryption | +| `cipherstash_proxy_statements_total` | Counter | Total statements processed | +| `cipherstash_proxy_statements_unmappable_total` | Counter | Statements that could not be mapped | + +## Reloading configuration + +When Proxy receives a `SIGHUP`, it reloads application-level configuration (`database`, `auth`, `encrypt`, `log`, `prometheus`, `development`) without disrupting active connections. + +Network settings require a full restart: `server.host`, `server.port`, `server.require_tls`, `server.worker_threads`, and any `tls` configuration. + +## Supported architectures + +CipherStash Proxy is available as a Docker container image for `linux/arm64`. diff --git a/content/docs/reference/proxy/errors.mdx b/content/docs/reference/proxy/errors.mdx new file mode 100644 index 0000000..76c1e0d --- /dev/null +++ b/content/docs/reference/proxy/errors.mdx @@ -0,0 +1,217 @@ +--- +title: Errors +description: "Errors returned by CipherStash Proxy, grouped by category, with likely causes and steps to diagnose and resolve each one." +type: reference +components: [proxy] +--- + +Errors CipherStash Proxy can return, grouped by category, with steps to diagnose and resolve each one. + +## Authentication errors + +### Database authentication failed + +**Error:** `Database authentication failed. Check username and password` + +Proxy could not authenticate with the upstream PostgreSQL database. + +1. Check that the configured username and password are correct and can connect to the database. +2. Check that the database uses a supported authentication method: `password`, `md5`, or `scram-sha-256`. See [PostgreSQL password authentication](https://www.postgresql.org/docs/17/auth-password.html). + +### Client authentication failed + +**Error:** `Client authentication failed. Check username and password.` + +Proxy rejected the client connection because the credentials were incorrect. Check that the username and password your application sends match the values configured in Proxy. + +### ZeroKMS authentication failed + +**Error:** `ZeroKMS authentication failed. Check the configured credentials.` + +Proxy could not authenticate with ZeroKMS. + +1. Check that the configured `client` credentials are correct. +2. Check that the active `keyset_name` or `keyset_id` is associated with a keyset in the configured workspace. + +## Mapping errors + +### Invalid parameter + +**Error:** `Invalid parameter for column 'column_name' of type 'cast' in table 'table_name'. (OID 'oid')` + +Each encrypted column has a target type. When encrypting a parameter or literal, Proxy decodes and casts the data into that type. This error means the data cannot be decoded and cast to the expected type. + +Some parameter types are converted automatically. For example, PostgreSQL `INT2`, `INT4`, and `INT8` are converted to the corresponding encrypted integer types. + +Check that the parameter or literal matches the type of the encrypted column. See [core concepts](/reference/eql/core-concepts) for the variant model. + +### Invalid SQL statement + +**Error:** `sql parser error: Expected: SELECT, VALUES, or a subquery in the query body` (varies) + +Proxy could not parse the SQL statement. Check that the statement is valid PostgreSQL. If the statement is correct and the parser is wrong, contact [CipherStash support](https://cipherstash.com/support). + +### Unsupported parameter type + +**Error:** `Encryption of PostgreSQL {name} (OID {oid}) types is not currently supported.` + +The parameter's data type is not supported for encryption. See the [EQL type reference](/reference/eql/core-concepts) for the supported types. + +### Statement could not be type checked + +**Error:** `Statement could not be type checked: '{type-check-error-message}'` + +Proxy checks SQL statements against the database schema in order to transparently encrypt and decrypt data. The behaviour when a type check fails depends on the `mapping_errors_enabled` configuration: + +- When `mapping_errors_enabled` is `false` (default), the error is logged and the statement passes through to the database. +- When `mapping_errors_enabled` is `true`, the error is raised and statement execution halts. + +The default passes statements through because most production systems have a small number of encrypted columns, and blocking on false negatives causes more harm. A statement that passes through unmapped cannot silently write plaintext: the encrypted column's domain `CHECK` rejects any payload missing its required index terms, so the write fails with a PostgreSQL type error instead. See [core concepts](/reference/eql/core-concepts). + +Check that you are running the latest version of Proxy, and contact [CipherStash support](https://cipherstash.com/support) if the error persists. + +### Internal mapper error + +**Error:** `Statement encountered an internal error. This may be a bug in the statement mapping module of CipherStash Proxy.` + +An unexpected error occurred in the statement mapping module. Update to the latest version, and contact [CipherStash support](https://cipherstash.com/support) if the error persists. + +## Encrypt errors + +### Column could not be encrypted + +**Error:** `Column 'column_name' in table 'table_name' could not be encrypted.` + +Proxy uses ZeroKMS for encryption operations. The most likely cause is a network issue reaching the service. + +1. Check that ZeroKMS is available on the [status page](https://status.cipherstash.com/). +2. Check that Proxy has network access to ZeroKMS in the appropriate region. +3. Check that the column's encrypted type matches the data being written. + +### KeysetId could not be parsed + +**Error:** `KeysetId '{id}' could not be parsed using 'SET CIPHERSTASH.KEYSET_ID'. KeysetId should be a valid UUID.` + +The value passed to `SET CIPHERSTASH.KEYSET_ID` is not a valid UUID. The correct syntax is: + +```sql +SET [SESSION] CIPHERSTASH.KEYSET_ID { TO | = } '{KeysetId}' +``` + +### KeysetId could not be set + +**Error:** `Keyset Id could not be set using 'SET CIPHERSTASH.KEYSET_ID'` + +1. Check the syntax: the `keyset_id` value must be in single quotes. +2. Check that the `keyset_id` is a valid UUID. +3. Check that the value is a literal. PostgreSQL `SET` does not support parameterised queries. + +### KeysetName could not be set + +**Error:** `Keyset Name could not be set using 'SET CIPHERSTASH.KEYSET_NAME'` + +1. Check the syntax: the `keyset_name` value must be in single quotes. +2. Check that the value is a literal. PostgreSQL `SET` does not support parameterised queries. + +### Unknown keyset identifier + +**Error:** `Unknown keyset name or id '{keyset}'` + +Proxy could not find a keyset matching the name or ID. + +1. Check that the active `keyset_name` or `keyset_id` is associated with a keyset in the configured workspace. +2. Check that the configured `client` has been granted access to the keyset in the Dashboard. +3. Keyset names are case-sensitive. Check for an exact match. +4. Check that the configured `client` credentials are correct. + +### Could not decrypt data for keyset + +**Error:** `Could not decrypt data for keyset '{keyset_id}'` + +The active `keyset_id` does not match the `keyset_id` of the data being decrypted. Each encrypted record belongs to a keyset with a unique identifier, and Proxy encrypts data using the currently active keyset. If the record's keyset does not match the active one, the data cannot be decrypted. + +1. Check that the `keyset_id` in the configuration matches the `keyset_id` of the encrypted records. +2. If using `SET CIPHERSTASH.KEYSET_ID`, check that the value matches the encrypted records. +3. Check that the configured `client` has been granted access to the `keyset_id`. + +See [multitenant operation](/reference/proxy/multitenant) for per-connection keyset scoping. + +### Plaintext could not be encoded + +**Error:** `Decrypted column could not be encoded as the expected type.` + +When Proxy decrypts data, it casts and encodes the result as the PostgreSQL representation of the column's type. Changing an encrypted column's type after data has been written can cause this error. + +1. Check that the column has the correct encrypted type. +2. Check that the column type has not changed since the data was written. + +### Unknown column + +**Error:** `Column 'column_name' in table 'table_name' has no Encrypt configuration` + +Proxy has no encrypted-column mapping for this column. In EQL v3 a column's searchable capability is fixed by the [domain variant](/reference/eql/core-concepts) it is typed as, so a column Proxy cannot map is usually one that was never given an EQL type: + +```sql +ALTER TABLE users ALTER COLUMN email TYPE public.text_eq; +``` + +Proxy reloads the database schema on the interval set by `CS_DATABASE__SCHEMA_RELOAD_INTERVAL` (60 seconds by default), so a newly typed column may take up to that long to become mappable. + +### Unknown table + +**Error:** `Table 'table_name' has no Encrypt configuration` + +The table has no columns Proxy recognises as encrypted. Type at least one column with an EQL domain variant, as above. + +### Unknown index term + +**Error:** `Unknown Index Term for column '{column_name}' in table '{table_name}'.` + +The encrypted column carries an index term Proxy does not recognise. EQL validates payloads against the column's domain `CHECK`, but direct database writes can bypass the encryption client and store a malformed payload. + +Check the column's type and the payload's term keys against [core concepts](/reference/eql/core-concepts). + +### Column configuration mismatch + +**Error:** `Column configuration for column '{column_name}' in table '{table_name}' does not match the encrypted column.` + +Proxy validates that encrypted columns match their expected type before decrypting. This check prevents confused deputy attacks and should not appear during normal operation. Contact [CipherStash support](https://cipherstash.com/support) if it persists. + +## Decrypt errors + +### Column could not be deserialised + +**Error:** `Column 'column_name' in table 'table_name' could not be deserialised.` + +Proxy stores encrypted data and search terms as `jsonb`. This error indicates an internal issue deserialising and extracting the ciphertext for decryption. It can occur if the encrypted data has been altered by another process. + +Check that the data in the encrypted column is a well-formed EQL payload. See [payload anatomy](/reference/eql/core-concepts). Contact [CipherStash support](https://cipherstash.com/support) if the error persists. + +## Configuration errors + +### Missing or invalid TLS configuration + +**Errors:** + +``` +Invalid Transport Layer Security (TLS) certificate. +Invalid Transport Layer Security (TLS) private key. +Missing Transport Layer Security (TLS) certificate at path: {path}. +Missing Transport Layer Security (TLS) private key at path: {path}. +``` + +For path-based configuration, check that the certificate and key exist at the specified paths and are valid. For PEM-based configuration, check that the certificate and key values are valid. See [TLS configuration](/reference/proxy/configuration). + +### Network configuration change requires restart + +**Error:** `Network configuration change requires restart` + +When Proxy receives a `SIGHUP`, it reloads application-level configuration without disrupting active connections. These network settings require a full restart: + +- `server.host` +- `server.port` +- `server.require_tls` +- `server.worker_threads` +- `tls` (any TLS configuration) + +Stop Proxy, update the configuration, then restart. diff --git a/content/docs/reference/proxy/index.mdx b/content/docs/reference/proxy/index.mdx index 8e59184..f468666 100644 --- a/content/docs/reference/proxy/index.mdx +++ b/content/docs/reference/proxy/index.mdx @@ -1,8 +1,22 @@ --- title: Proxy -description: "Proxy documentation — being built as part of the docs V2 overhaul." +description: "Configuration, message flow, multitenant operation, and error reference for CipherStash Proxy." +type: reference +components: [proxy] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash Proxy sits between your application and PostgreSQL, encrypting query parameters on the way in and decrypting results on the way out. Your application connects to Proxy exactly as it connects to PostgreSQL, so adopting encryption needs no application changes. -Until it lands, current documentation lives in the [existing docs](/stack). +Proxy speaks the PostgreSQL wire protocol (it is based on [pgcat](https://github.com/pgcat/pgcat)) and is distributed as a [container image](https://hub.docker.com/r/cipherstash/proxy) on Docker Hub. It is an [EQL](/reference/eql) client: it produces the encrypted payloads EQL stores, and types the bound parameters EQL's operators resolve against. + +## In this section + +- [Configuration](/reference/proxy/configuration) covers installation, the TOML and environment-variable options, logging, Prometheus metrics, and the CLI. +- [Message flow](/reference/proxy/message-flow) explains how Proxy intercepts the extended query protocol, for debugging unmappable statements. +- [Multitenant operation](/reference/proxy/multitenant) covers per-connection keyset scoping and encrypted mapping. +- [Errors](/reference/proxy/errors) lists the errors Proxy returns, with causes and remediation. + +## Related + +- [EQL reference](/reference/eql) for the database-side surface Proxy queries against. +- [Stack SDK](/reference/stack) for the application-level alternative to Proxy. diff --git a/content/docs/reference/proxy/message-flow.mdx b/content/docs/reference/proxy/message-flow.mdx new file mode 100644 index 0000000..896dc44 --- /dev/null +++ b/content/docs/reference/proxy/message-flow.mdx @@ -0,0 +1,83 @@ +--- +title: Message flow +description: "How CipherStash Proxy handles PostgreSQL Parse and Bind messages to transparently encrypt and decrypt query parameters." +type: reference +components: [proxy] +--- + +This page explains the internal message handling flow, for advanced users debugging unmappable statements or unexpected Proxy behaviour. CipherStash Proxy sits between your application and PostgreSQL and intercepts the PostgreSQL extended query protocol. It encrypts parameters before they reach the database and decrypts values before they reach your application. + +## Extended query protocol overview + +The PostgreSQL extended query protocol uses a sequence of messages to execute parameterised queries. The two most relevant messages for encryption are: + +- **Parse**: the client sends a SQL statement with parameter placeholders (`$1`, `$2`, and so on). Proxy inspects the statement and maps column references to their encrypted column types. +- **Bind**: the client sends parameter values to bind to a prepared statement. If Proxy recognised the statement during Parse, it encrypts the parameters here before forwarding them. + +Binding a parameter is also what types it. EQL's encrypted operators only resolve against a typed operand, so the Bind step is what makes an index-backed query possible. See [typed operands](/reference/eql/core-concepts) for why. + +## Parse flow + +When Proxy receives a Parse message, it determines whether the SQL statement references encrypted columns. + +![Parse message flow diagram](/images/proxy/parse.svg) + +1. Proxy checks whether the statement is encryptable, that is, whether it references at least one encrypted column. +2. If it is encryptable, Proxy maps the column references to their encrypted column types. +3. If the statement includes literal parameter values, Proxy rewrites them as encrypted values immediately. +4. Proxy adds the statement and its column mapping to the connection context for use during Bind. +5. Proxy forwards the (possibly rewritten) Parse message to PostgreSQL. + +If the statement is not encryptable, Proxy forwards it unchanged. + +## Bind flow + +When Proxy receives a Bind message, it looks up the corresponding statement in the connection context. + +![Bind message flow diagram](/images/proxy/bind.svg) + +1. Proxy checks whether the statement that this Bind message references is in the context, that is, whether it was processed during Parse. +2. If it is, Proxy encrypts each parameter value according to the column mapping recorded during Parse. +3. Proxy rewrites the parameter values in the Bind message with the encrypted payloads. +4. Proxy creates a portal for the bound statement and adds it to the context. +5. Proxy forwards the rewritten Bind message to PostgreSQL. + +If the statement is not in context, Proxy creates a portal without encryption and forwards it unchanged. + +## Pipelining + +PostgreSQL supports pipelining: the client can send multiple messages without waiting for responses. Proxy must track Describe and Execute messages to correlate server responses with the right statements or portals, since responses arrive in order but may interleave. + +``` + Sequential Pipelined +| Client | Server | | Client | Server | +|----------------|-----------------| |----------------|-----------------| +| send query 1 | | | send query 1 | | +| | process query 1 | | send query 2 | process query 1 | +| receive rows 1 | | | send query 3 | process query 2 | +| send query 2 | | | receive rows 1 | process query 3 | +| | process query 2 | | receive rows 2 | | +| receive rows 2 | | | receive rows 3 | | +``` + +The PostgreSQL server always processes queries in sequential order, even when pipelined. Proxy preserves this ordering when encrypting parameters and decrypting results. + +## Unmappable statements + +Some statements cannot be mapped to an encrypted column. This happens when: + +- The statement uses a function or expression that obscures the column reference, for example `CAST(email AS text)`. +- The column is referenced through a view, subquery, or CTE that Proxy cannot resolve. +- The statement uses a SQL feature Proxy does not yet parse, for example certain `COPY` forms. + +When a statement is unmappable, Proxy forwards it to PostgreSQL unmodified. No encryption or decryption occurs. The `cipherstash_proxy_statements_unmappable_total` Prometheus metric tracks how often this happens. Set `CS_LOG__MAPPER_LEVEL=debug` to see which statements are unmappable and why. + +<Callout type="warn"> +An unmappable `SELECT` returns the raw encrypted payload rather than plaintext. An unmappable `INSERT` or `UPDATE` fails the encrypted column's domain `CHECK` rather than writing plaintext, so a mapping failure never silently stores unencrypted data. +</Callout> + +## Related + +- [Proxy configuration](/reference/proxy/configuration) for `CS_LOG__MAPPER_LEVEL` and the Prometheus metrics. +- [Proxy errors](/reference/proxy/errors) for the errors raised when mapping or type checking fails. +- [EQL core concepts](/reference/eql/core-concepts) for the typed-operand rule and the domain `CHECK`. diff --git a/content/docs/reference/proxy/meta.json b/content/docs/reference/proxy/meta.json index 85de4fd..7d70335 100644 --- a/content/docs/reference/proxy/meta.json +++ b/content/docs/reference/proxy/meta.json @@ -1,4 +1,4 @@ { "title": "Proxy", - "pages": ["..."] + "pages": ["index", "configuration", "message-flow", "multitenant", "errors"] } diff --git a/content/docs/reference/proxy/multitenant.mdx b/content/docs/reference/proxy/multitenant.mdx new file mode 100644 index 0000000..9a7c2e8 --- /dev/null +++ b/content/docs/reference/proxy/multitenant.mdx @@ -0,0 +1,77 @@ +--- +title: Multitenant operation +description: "Scope CipherStash Proxy connections to tenant-specific keysets and manage encrypted mapping at runtime." +type: reference +components: [proxy, platform] +--- + +CipherStash Proxy supports multitenant applications using ZeroKMS keysets, giving strong cryptographic separation between tenants. + +Each tenant is associated with a keyset, and data is protected by separate encryption keys. Scope a Proxy connection to a specific keyset at runtime with the `SET CIPHERSTASH.KEYSET` commands. Once a keyset is set for a connection, all subsequent operations are scoped to it, and data can only be decrypted by the keyset that encrypted it. + +A keyset `name` is unique to a workspace and functions as an alias, so you can associate a keyset with an arbitrary identifier such as an internal `TenantId`. + +<Callout type="info"> +Proxy must be configured **without** a `CS_DEFAULT_KEYSET_ID` to enable multitenant operation. If a default keyset is configured, the `SET CIPHERSTASH.KEYSET` commands return an error. +</Callout> + +## Keyset commands + +### SET CIPHERSTASH.KEYSET_ID + +Sets the active keyset for the current connection using a keyset UUID. + +```sql +SET CIPHERSTASH.KEYSET_ID = '2cace9db-3a2a-4b46-a184-ba412b3e0730'; +``` + +### SET CIPHERSTASH.KEYSET_NAME + +Sets the active keyset for the current connection using a keyset name. + +```sql +SET CIPHERSTASH.KEYSET_NAME = 'tenant-1'; +``` + +### Usage notes + +- Execute `SET CIPHERSTASH.KEYSET` before performing any encryption operations. +- The keyset remains active for the duration of the connection, or until a subsequent `SET CIPHERSTASH.KEYSET` command. +- The active keyset is connection-scoped and does not affect other connections. +- Both commands take a literal value in single quotes. PostgreSQL `SET` does not support parameterised queries. + +Joining encrypted columns across two keysets does not work, because equality is only meaningful within a keyset. See [joins](/reference/eql/joins) for the same-keyset constraint. + +## Disabling encrypted mapping + +CipherStash Proxy transforms the plaintext SQL statements your application issues into statements on encrypted columns. This process is called encrypted mapping. + +In some circumstances you may need to disable encrypted mapping for one or more SQL statements, for example when performing a data transformation with complex logic directly in the database using `plpgsql`. + +Use `SET` to change the `CIPHERSTASH.UNSAFE_DISABLE_MAPPING` configuration parameter. It is always scoped to the connection session. + +```sql +SET CIPHERSTASH.UNSAFE_DISABLE_MAPPING = true; -- disable +SET CIPHERSTASH.UNSAFE_DISABLE_MAPPING = false; -- re-enable +``` + +<Callout type="warn"> +If mapping is disabled, sensitive data may not be encrypted and may appear in logs. +</Callout> + +Proxy and EQL together give some protection against reading or writing plaintext in encrypted columns. An unmapped `SELECT` returns the encrypted payload rather than plaintext. An unmapped `INSERT` or `UPDATE` fails the encrypted column's domain `CHECK` with a PostgreSQL type error, because every EQL domain variant requires its index terms to be present in the payload. See [core concepts](/reference/eql/core-concepts) for the variant model. + +## Prepared statements and mapping + +CipherStash Proxy only decrypts data from SQL statements it has explicitly checked and mapped. + +If mapping is disabled, any subsequent `PREPARE` skips the mapping process. If mapping is re-enabled later, data returned from those prepared statements is still not decrypted. + +To restore mapping, encryption, and decryption of prepared statements, either open a new connection or prepare the statement again after re-enabling mapping. + +This behaviour is expected. When a client prepares a statement, it sends the SQL in a `parse` message. Once prepared, the client refers to the statement by name and skips the `parse` step. If mapping was disabled during `parse`, Proxy never mapped the statement, so data returned from subsequent executions is never decrypted. See [message flow](/reference/proxy/message-flow). + +## Related + +- [Keysets](/stack/cipherstash/kms/keysets) for the cryptographic isolation model. +- [Proxy configuration](/reference/proxy/configuration) for `CS_DEFAULT_KEYSET_ID`. diff --git a/content/docs/reference/workspace/billing.mdx b/content/docs/reference/workspace/billing.mdx new file mode 100644 index 0000000..1a925a4 --- /dev/null +++ b/content/docs/reference/workspace/billing.mdx @@ -0,0 +1,60 @@ +--- +title: Billing +description: "CipherStash per-workspace billing: Free, Pro, Business, and Enterprise plan limits, and how upgrades, downgrades, and Stripe work." +type: reference +components: [platform] +audience: [cto] +reviewBy: "2027-01-09" +--- + +CipherStash uses a **per-workspace billing model**. Each workspace has its own plan and usage limits. Organizations and team members are always free and unlimited. + +## Plans + +| | Free | Pro ($99/mo) | Business ($870/mo) | Enterprise | +|---|---|---|---|---| +| Encryption ops/month | 10,000 | 50,000 | 500,000 | Unlimited | +| Secrets | 100 | 500 | 2,000 | Unlimited | +| Keysets | 2 | 10 | 25 | Unlimited | +| Clients | 2 | 10 | 50 | Unlimited | +| OIDC providers | 0 | 0 | 5 | Unlimited | +| Keyset isolation | No | Yes | Yes | Yes | +| Lock contexts | No | No | Yes | Yes | +| Workspace members | 1 | 5 | 25 | Unlimited | +| Workspace type | Dev only | Dev + Prod | Dev + Prod | Dev + Prod | + +### Free + +For non-commercial personal projects and experimentation. Free workspaces are limited to development environments. + +### Pro + +For teams and production applications. Includes development and production workspace support with higher limits. + +### Business + +Predictable pricing for demanding workloads, with multi-tenant encryption and [lock context](/stack/cipherstash/encryption/identity) support. + +### Enterprise + +An organization-level plan with custom pricing, unlimited limits across all workspaces, and dedicated support. Enterprise organizations bypass per-workspace billing entirely. Contact [sales@cipherstash.com](mailto:sales@cipherstash.com). + +## Managing workspace billing + +Each workspace has a billing page reachable from the workspace sidebar in the [Dashboard](https://dashboard.cipherstash.com). From there you can view your current plan and usage metrics, upgrade or downgrade, cancel your subscription, and open the Stripe billing portal for payment methods and invoices. + +## How billing works + +- **One Stripe customer per organization.** All workspaces in your organization share the same Stripe customer. +- **One subscription per workspace.** Each workspace has its own Stripe subscription tied to its plan. +- **Proration on upgrades.** Upgrading mid-cycle charges a prorated amount for the remainder of the billing period. +- **Downgrades at period end.** Downgrading takes effect at the end of the current billing period. +- **Cancellation.** Canceling keeps the plan active until the end of the billing period, then reverts to Free. + +## Enterprise and AWS Marketplace + +Organizations on Enterprise plans or subscribed through AWS Marketplace have billing managed at the organization level, and all their workspaces have unlimited access to all features. Manage enterprise billing from the Organization Profile. + +## Need help? + +Contact [support@cipherstash.com](mailto:support@cipherstash.com) for billing questions. diff --git a/content/docs/reference/workspace/configuration.mdx b/content/docs/reference/workspace/configuration.mdx new file mode 100644 index 0000000..9e4499d --- /dev/null +++ b/content/docs/reference/workspace/configuration.mdx @@ -0,0 +1,55 @@ +--- +title: Configuration +description: "Configure a CipherStash workspace for local development and production: the workspace CRN, client and access keys, and keyset selection." +type: reference +components: [platform, encryption] +--- + +A workspace is identified by its **CRN** and accessed with a **client key** and an **access key**. How those credentials reach your application differs between local development and production. + +## Local development + +For local development, credentials are handled automatically by device-based authentication. Run `stash init` to set up your device: + +```bash cta cta-type="quickstart" example-id="stash-init-workspace" +npx stash init +``` + +This creates a device-backed client key with access to the workspace's default keyset. No environment variables are needed. + +## Production credentials + +In production and CI/CD, a workspace is configured with explicit credentials: + +| Credential | Description | +|---|---| +| Workspace CRN | Identifies your workspace and its region, for example `crn:ap-southeast-2.aws:your-workspace-id` | +| Client ID | Identifies your application client key | +| Client key | Your half of the dual-party key split | +| Access key | Authenticates API calls to CipherStash | + +These are the same credentials the [Stack SDK](/reference/stack) and [Proxy](/reference/proxy/configuration) consume. For the full set of environment variables and programmatic options, see the [Stack SDK configuration reference](/reference/stack). + +See [going to production](/stack/deploy/going-to-production) for a step-by-step guide to generating them. + +## Keysets + +A workspace can hold many keysets. Data encrypted under one keyset cannot be decrypted with another, which is what makes keysets the boundary for tenant isolation, environment separation, and regional compliance. + +To use a specific keyset, pass the `keyset` option when constructing the client: + +```typescript filename="keyset-config.ts" +const client = await Encryption({ + schemas: [users], + config: { + keyset: { name: "tenant-a" }, + }, +}) +``` + +Proxy scopes keysets per connection instead. See [multitenant operation](/reference/proxy/multitenant). + +## Related + +- [Keysets](/stack/cipherstash/kms/keysets) for the isolation model. +- [Billing](/reference/workspace/billing) for per-plan keyset and client limits. diff --git a/content/docs/reference/workspace/index.mdx b/content/docs/reference/workspace/index.mdx index 177bb82..2ad9d93 100644 --- a/content/docs/reference/workspace/index.mdx +++ b/content/docs/reference/workspace/index.mdx @@ -1,8 +1,21 @@ --- title: Workspace & account -description: "Workspace & account documentation — being built as part of the docs V2 overhaul." +description: "Workspace configuration, organization and workspace members, and per-workspace billing." +type: reference +components: [platform] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +A **workspace** is the unit of isolation and billing in CipherStash. It holds your keysets, clients, access keys, and configuration. Workspaces belong to an **organization**, which owns the member list and the billing relationship. -Until it lands, current documentation lives in the [existing docs](/stack). +Use workspaces to separate environments (development from production), to scope access for a team, or to associate a custom identity provider. + +## In this section + +- [Configuration](/reference/workspace/configuration) covers workspace credentials, the workspace CRN, and keyset selection. +- [Members](/reference/workspace/members) covers organization and workspace membership, and developer device onboarding. +- [Billing](/reference/workspace/billing) covers plans, limits, and how upgrades and downgrades work. + +## Related + +- [Access keys](/stack/cipherstash/kms/access-keys) for the credentials that authenticate to ZeroKMS and CTS. +- [Glossary](/reference/glossary) for the difference between a workspace, a keyset, a client key, and a device. diff --git a/content/docs/reference/workspace/members.mdx b/content/docs/reference/workspace/members.mdx new file mode 100644 index 0000000..2e11803 --- /dev/null +++ b/content/docs/reference/workspace/members.mdx @@ -0,0 +1,32 @@ +--- +title: Members +description: "Manage CipherStash organization members and workspace memberships, and onboard developer devices for local development." +type: reference +components: [platform] +--- + +There are two types of membership in CipherStash: organization memberships and workspace memberships. Every user belongs to at least one organization, and can be invited to any number of workspaces inside that organization. + +## Organization memberships + +Organization memberships control which users have access to CipherStash in general. Once a user is added to an organization, they can be granted access to any number of workspaces inside it. + +Add a member from **Members** in the Dashboard's organization sidebar. + +## Workspace memberships + +Workspace memberships control which users have access to a specific workspace. Once a user is added to a workspace, they have full access to managing it, including creating and managing keysets, clients, and access keys. + +Add a member from the [workspace settings](https://dashboard.cipherstash.com/workspaces/_/settings) page in the Dashboard. + +## Developer device onboarding + +After a member is added to an organization and granted workspace access, they initialize their local development environment: + +```bash cta cta-type="quickstart" example-id="stash-init-member" +npx stash init +``` + +This creates a unique [device](/reference/glossary#device) and [client key](/reference/glossary#client-key) for that developer, with automatic access to the default [keyset](/reference/glossary#keyset). No environment variables are needed for local development. + +See [team onboarding](/stack/deploy/team-onboarding) for the full workflow. diff --git a/content/docs/reference/workspace/meta.json b/content/docs/reference/workspace/meta.json index 1dc0214..caec042 100644 --- a/content/docs/reference/workspace/meta.json +++ b/content/docs/reference/workspace/meta.json @@ -1,4 +1,4 @@ { "title": "Workspace & account", - "pages": ["..."] + "pages": ["index", "configuration", "members", "billing"] } From e2c33a996f6f66c81f1f447e48dfe8698c7d2bf9 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 13:57:46 +1000 Subject: [PATCH 043/151] docs(workspace): link to pricing instead of listing plan prices and limits --- content/docs/reference/workspace/billing.mdx | 16 +++------------- .../docs/reference/workspace/configuration.mdx | 2 +- 2 files changed, 4 insertions(+), 14 deletions(-) diff --git a/content/docs/reference/workspace/billing.mdx b/content/docs/reference/workspace/billing.mdx index 1a925a4..9e06586 100644 --- a/content/docs/reference/workspace/billing.mdx +++ b/content/docs/reference/workspace/billing.mdx @@ -1,6 +1,6 @@ --- title: Billing -description: "CipherStash per-workspace billing: Free, Pro, Business, and Enterprise plan limits, and how upgrades, downgrades, and Stripe work." +description: "CipherStash per-workspace billing: the Free, Pro, Business, and Enterprise plans, and how upgrades, downgrades, and Stripe work." type: reference components: [platform] audience: [cto] @@ -11,17 +11,7 @@ CipherStash uses a **per-workspace billing model**. Each workspace has its own p ## Plans -| | Free | Pro ($99/mo) | Business ($870/mo) | Enterprise | -|---|---|---|---|---| -| Encryption ops/month | 10,000 | 50,000 | 500,000 | Unlimited | -| Secrets | 100 | 500 | 2,000 | Unlimited | -| Keysets | 2 | 10 | 25 | Unlimited | -| Clients | 2 | 10 | 50 | Unlimited | -| OIDC providers | 0 | 0 | 5 | Unlimited | -| Keyset isolation | No | Yes | Yes | Yes | -| Lock contexts | No | No | Yes | Yes | -| Workspace members | 1 | 5 | 25 | Unlimited | -| Workspace type | Dev only | Dev + Prod | Dev + Prod | Dev + Prod | +CipherStash offers four plans. For current prices and the usage limits attached to each plan, see [pricing](https://cipherstash.com/pricing). ### Free @@ -33,7 +23,7 @@ For teams and production applications. Includes development and production works ### Business -Predictable pricing for demanding workloads, with multi-tenant encryption and [lock context](/stack/cipherstash/encryption/identity) support. +For demanding workloads, adding multi-tenant encryption and [lock context](/stack/cipherstash/encryption/identity) support. ### Enterprise diff --git a/content/docs/reference/workspace/configuration.mdx b/content/docs/reference/workspace/configuration.mdx index 9e4499d..87d6622 100644 --- a/content/docs/reference/workspace/configuration.mdx +++ b/content/docs/reference/workspace/configuration.mdx @@ -52,4 +52,4 @@ Proxy scopes keysets per connection instead. See [multitenant operation](/refere ## Related - [Keysets](/stack/cipherstash/kms/keysets) for the isolation model. -- [Billing](/reference/workspace/billing) for per-plan keyset and client limits. +- [Billing](/reference/workspace/billing) for the plans and how per-workspace billing works. From d9a5b6c9a85dd65308e0b20a77917ca4b8d98b5d Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 14:01:45 +1000 Subject: [PATCH 044/151] docs(workspace): drop per-plan subsections from billing --- content/docs/reference/workspace/billing.mdx | 20 +++----------------- content/docs/reference/workspace/index.mdx | 2 +- 2 files changed, 4 insertions(+), 18 deletions(-) diff --git a/content/docs/reference/workspace/billing.mdx b/content/docs/reference/workspace/billing.mdx index 9e06586..4079457 100644 --- a/content/docs/reference/workspace/billing.mdx +++ b/content/docs/reference/workspace/billing.mdx @@ -1,6 +1,6 @@ --- title: Billing -description: "CipherStash per-workspace billing: the Free, Pro, Business, and Enterprise plans, and how upgrades, downgrades, and Stripe work." +description: "How CipherStash per-workspace billing works, including plans, upgrades, downgrades, and Stripe." type: reference components: [platform] audience: [cto] @@ -11,23 +11,9 @@ CipherStash uses a **per-workspace billing model**. Each workspace has its own p ## Plans -CipherStash offers four plans. For current prices and the usage limits attached to each plan, see [pricing](https://cipherstash.com/pricing). +Each workspace is on a plan. Plans differ in their usage limits and in which features they unlock, such as keyset isolation and [lock contexts](/stack/cipherstash/encryption/identity). See [pricing](https://cipherstash.com/pricing) for the current plans, their prices, and their limits. -### Free - -For non-commercial personal projects and experimentation. Free workspaces are limited to development environments. - -### Pro - -For teams and production applications. Includes development and production workspace support with higher limits. - -### Business - -For demanding workloads, adding multi-tenant encryption and [lock context](/stack/cipherstash/encryption/identity) support. - -### Enterprise - -An organization-level plan with custom pricing, unlimited limits across all workspaces, and dedicated support. Enterprise organizations bypass per-workspace billing entirely. Contact [sales@cipherstash.com](mailto:sales@cipherstash.com). +Enterprise is an organization-level plan with custom pricing and dedicated support. Enterprise organizations bypass per-workspace billing entirely. Contact [sales@cipherstash.com](mailto:sales@cipherstash.com). ## Managing workspace billing diff --git a/content/docs/reference/workspace/index.mdx b/content/docs/reference/workspace/index.mdx index 2ad9d93..d4414b5 100644 --- a/content/docs/reference/workspace/index.mdx +++ b/content/docs/reference/workspace/index.mdx @@ -13,7 +13,7 @@ Use workspaces to separate environments (development from production), to scope - [Configuration](/reference/workspace/configuration) covers workspace credentials, the workspace CRN, and keyset selection. - [Members](/reference/workspace/members) covers organization and workspace membership, and developer device onboarding. -- [Billing](/reference/workspace/billing) covers plans, limits, and how upgrades and downgrades work. +- [Billing](/reference/workspace/billing) covers the per-workspace billing model, and how upgrades and downgrades work. ## Related From f3d4554859db9ff4a39b281b96deaa5f6d4ebbc7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 14:33:32 +1000 Subject: [PATCH 045/151] docs(solutions): port ai-and-rag, data-residency, provable-access, index Ports the use-cases section into /solutions, correcting three API errors found by checking the examples against the generated TypeDoc for @cipherstash/stack v0.18.0. - provable-access used `client.withLockContext({ identityToken }).encrypt()`, which does not exist. The real API constructs a LockContext, identifies it with the JWT, and attaches it to the operation: `client.encrypt(v, opts).withLockContext(lockContext.data)`. - data-residency passed credentials as top-level keys to `Encryption()`. They belong in the nested `config` object. - ai-and-rag queried with `eql_v2.eq(user_id, $1)`, removed in EQL 3.0.0. Now a typed operand: `WHERE user_id = $1::public.text_eq`. The legacy use-cases index was not a section index. Its "what data should I protect" primer moves onto the Solutions index; its data-sovereignty section folds into data-residency, which already covered the same ground. --- content/docs/solutions/ai-and-rag.mdx | 132 +++++++++++++++++++++ content/docs/solutions/data-residency.mdx | 129 ++++++++++++++++++++ content/docs/solutions/index.mdx | 44 ++++++- content/docs/solutions/meta.json | 2 +- content/docs/solutions/provable-access.mdx | 132 +++++++++++++++++++++ 5 files changed, 435 insertions(+), 4 deletions(-) create mode 100644 content/docs/solutions/ai-and-rag.mdx create mode 100644 content/docs/solutions/data-residency.mdx create mode 100644 content/docs/solutions/provable-access.mdx diff --git a/content/docs/solutions/ai-and-rag.mdx b/content/docs/solutions/ai-and-rag.mdx new file mode 100644 index 0000000..fa4ad98 --- /dev/null +++ b/content/docs/solutions/ai-and-rag.mdx @@ -0,0 +1,132 @@ +--- +title: Securing AI and RAG pipelines +description: "Protect sensitive data in AI retrieval-augmented generation pipelines with encrypted document storage and searchable encryption." +type: concept +components: [encryption, eql] +audience: [developer, cto] +verifiedAgainst: + stack: "0.18.0" +--- + +Retrieval-augmented generation (RAG) pipelines commonly store sensitive documents alongside vector embeddings. Without encryption, that data is exposed at rest and during retrieval, creating a significant attack surface. CipherStash lets you encrypt sensitive content while preserving the ability to search and retrieve it. + +## The problem + +RAG architectures typically store: + +- **Document chunks:** the original text, often containing PII, financial data, or confidential business information. +- **Metadata:** source references, user associations, access tags. +- **Vector embeddings:** numeric representations used for similarity search. + +If any of this is exfiltrated from the database, the plaintext content is immediately exposed. Encryption at rest does not help, because the data is decrypted as soon as it is queried. + +<Callout type="info"> +CipherStash encrypts the document chunks and metadata, not the embeddings themselves. An embedding is a lossy projection of its source text, and similarity search has to compare embeddings in the clear. Treat embeddings as sensitive: they can leak information about the text they were derived from. +</Callout> + +## Encrypting RAG context data + +Use the [Stack SDK](/reference/stack) to encrypt sensitive fields before storing them alongside your embeddings. + +### Define a schema for your documents + +```typescript filename="schema.ts" +import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" + +export const documents = encryptedTable("documents", { + content: encryptedColumn("content").freeTextSearch(), + source: encryptedColumn("source").equality(), + userId: encryptedColumn("user_id").equality(), +}) +``` + +Each index method declares a capability. `freeTextSearch()` makes the content matchable by token; `equality()` makes a column filterable by exact match. See [searchable encryption](/concepts/searchable-encryption) for what each capability reveals. + +### Encrypt before storage + +```typescript filename="ingest.ts" +import { Encryption } from "@cipherstash/stack" +import { documents } from "./schema" + +const client = await Encryption({ schemas: [documents] }) + +async function ingestDocument(doc: { + content: string + source: string + userId: string + embedding: number[] +}) { + const encrypted = await client.encryptModel( + { content: doc.content, source: doc.source, userId: doc.userId }, + documents, + ) + + if (encrypted.failure) { + throw new Error(`Encryption failed: ${encrypted.failure.message}`) + } + + await db.query( + `INSERT INTO documents (content, source, user_id, embedding) + VALUES ($1::public.text_match, $2::public.text_eq, $3::public.text_eq, $4)`, + [ + encrypted.data.content, + encrypted.data.source, + encrypted.data.userId, + JSON.stringify(doc.embedding), + ], + ) +} +``` + +### Decrypt retrieved context + +After vector similarity search retrieves the relevant documents, decrypt the content before passing it to the LLM: + +```typescript filename="retrieve.ts" +async function retrieveContext(queryEmbedding: number[], topK = 5) { + const results = await db.query( + `SELECT content, source FROM documents + ORDER BY embedding <-> $1 + LIMIT $2`, + [JSON.stringify(queryEmbedding), topK], + ) + + const decrypted = await client.bulkDecryptModels(results.rows) + + if (decrypted.failure) { + throw new Error(`Decryption failed: ${decrypted.failure.message}`) + } + + return decrypted.data +} +``` + +`bulkDecryptModels` sends every ciphertext in one round trip to ZeroKMS, rather than one call per row. On a `topK` of 5 that hardly matters; on a reranking pass over a few hundred candidates it is the difference between one request and hundreds. + +## Searchable encrypted retrieval + +When you need to filter documents by metadata before or alongside vector search, combine an encrypted equality predicate with the similarity ordering: + +```sql +-- Find documents for a specific user, then rank by similarity +SELECT content, source, embedding +FROM documents +WHERE user_id = $1::public.text_eq +ORDER BY embedding <-> $2 +LIMIT 10; +``` + +The operand must be typed (`$1::public.text_eq`) for the encrypted `=` operator to resolve. See [typed operands](/reference/eql/core-concepts) and [filtering](/reference/eql/filtering). + +This filters on encrypted metadata inside PostgreSQL, without decrypting it. Add a functional index over the term extractor so the filter does not become a sequential scan. See [indexes](/reference/eql/indexes). + +## Benefits for AI pipelines + +- **Sensitive context stays encrypted.** Document chunks containing PII or confidential data are never stored in plaintext. +- **Selective decryption.** Decrypt only what the LLM needs, reducing the exposure surface. +- **Audit trail.** Track who retrieved which documents and when, using [identity-aware encryption](/solutions/provable-access). + +## Related + +- [Provable access control](/solutions/provable-access) to bind retrieval to an authenticated identity. +- [Searchable encryption](/concepts/searchable-encryption) for the leakage model behind these queries. diff --git a/content/docs/solutions/data-residency.mdx b/content/docs/solutions/data-residency.mdx new file mode 100644 index 0000000..1e64c85 --- /dev/null +++ b/content/docs/solutions/data-residency.mdx @@ -0,0 +1,129 @@ +--- +title: Data residency +description: "Meet data residency rules with regional ZeroKMS deployment, a dual-party key split, and multi-region patterns for cross-border access." +type: concept +components: [platform, encryption] +audience: [cto, ciso] +verifiedAgainst: + stack: "0.18.0" +--- + +CipherStash provides data residency guarantees through regional key management, encryption that happens entirely in your infrastructure, and cryptographic key splitting. This page covers the deployment patterns for organizations with cross-border data requirements. + +## Why the architecture gives you residency + +Three properties combine to keep data and key material inside a region: + +- **Plaintext never leaves your systems.** Encryption and decryption happen in your infrastructure, in the Stack SDK or Proxy. The cloud service never sees plaintext. +- **Encrypted values never leave your systems either.** Ciphertext lives in your database. +- **Data keys are never transmitted.** They are derived locally, not fetched over the network. + +## Regional ZeroKMS deployment + +ZeroKMS is available in [multiple regions](/stack/cipherstash/kms/regions): + +| Area | Region | +|---|---| +| Asia Pacific | Sydney (`ap-southeast-2`) | +| Europe | Frankfurt (`eu-central-1`), Ireland (`eu-west-1`) | +| US East | N. Virginia (`us-east-1`) | +| US West | Oregon (`us-west-2`) | + +Selecting a ZeroKMS region controls where authority keys are managed. Combined with your application's deployment region, that determines where all key material exists. + +## Dual-party key split + +CipherStash splits key material between two parties: + +1. **Authority key**, managed by ZeroKMS in your chosen region. +2. **Client key**, managed by your application in your infrastructure. + +Neither key alone derives a data key. Both must cooperate. This means ZeroKMS alone cannot access your data, because it holds only half the key material, and your application alone cannot either, because it needs ZeroKMS to derive data keys. + +## Deployment patterns + +### Single region + +Deploy your application and ZeroKMS in the same region. + +``` +┌──────────────────────────────────┐ +│ Region: eu-central-1 │ +│ │ +│ ┌───────────┐ ┌────────────┐ │ +│ │ Your app │───│ ZeroKMS │ │ +│ │ + client │ │ + authority│ │ +│ │ key │ │ key │ │ +│ └─────┬─────┘ └────────────┘ │ +│ │ │ +│ ┌─────┴──────┐ │ +│ │ PostgreSQL │ │ +│ │ (encrypted)│ │ +│ └────────────┘ │ +└──────────────────────────────────┘ +``` + +All key material and data remain in one region. This satisfies most data residency requirements, including GDPR and regional data protection laws. + +### Multi-region with regional key isolation + +For organizations operating across regions with differing requirements, deploy a separate workspace per region. + +``` +┌───────────────────────┐ ┌────────────────────────┐ +│ Region: eu-central-1 │ │ Region: ap-southeast-2 │ +│ │ │ │ +│ App + client key │ │ App + client key │ +│ ZeroKMS (EU) │ │ ZeroKMS (APAC) │ +│ PostgreSQL (EU) │ │ PostgreSQL (APAC) │ +└───────────────────────┘ └────────────────────────┘ +``` + +Each region gets its own ZeroKMS workspace with independent authority keys, client keys that never leave the region, and its own database. Data encrypted in one region cannot be decrypted in another, which enforces the residency boundary cryptographically rather than by policy. + +### Cross-border access + +When a global team needs to reach encrypted data across regions, construct a client per region with that region's credentials. + +```typescript filename="regional-access.ts" +import { Encryption } from "@cipherstash/stack" +import { customers } from "./schema" + +// A client scoped to the EU workspace +const euClient = await Encryption({ + schemas: [customers], + config: { + workspaceCrn: process.env.CS_EU_WORKSPACE_CRN, + clientId: process.env.CS_EU_CLIENT_ID, + clientKey: process.env.CS_EU_CLIENT_KEY, + accessKey: process.env.CS_EU_ACCESS_KEY, + }, +}) + +// Decrypting EU customer data requires EU credentials +const result = await euClient.decrypt(encryptedEuRecord) + +if (result.failure) { + throw new Error(`Decryption failed: ${result.failure.message}`) +} +``` + +Access to each region's data requires that region's credentials, which gives you an auditable, revocable access model. To revoke a team member's access to a region, delete their client credentials in that region's workspace. + +## Compliance alignment + +| Requirement | How CipherStash addresses it | +|---|---| +| Data must not leave the region | Encryption and decryption happen locally; plaintext never leaves your infrastructure | +| Key material must stay in region | ZeroKMS authority keys are region-bound; client keys deploy with your app | +| Audit trail for cross-border access | ZeroKMS logs key derivation requests with identity context | +| Ability to revoke access | Delete client credentials, or revoke [lock context](/solutions/provable-access) identities | +| Cryptographic enforcement | The dual-party key split means a single party cannot decrypt alone | + +This architecture supports compliance with GDPR, regional data protection laws, and industry-specific requirements in healthcare and financial services. See [compliance](/security/compliance) for framework-by-framework detail. + +## Next steps + +- [Configure ZeroKMS regions](/stack/cipherstash/kms/regions) for your workspaces. +- [Set up provable access control](/solutions/provable-access) to bind decryption to an identity. +- [Review disaster recovery](/stack/cipherstash/kms/disaster-recovery) for multi-region key backup. diff --git a/content/docs/solutions/index.mdx b/content/docs/solutions/index.mdx index 36278b5..c583533 100644 --- a/content/docs/solutions/index.mdx +++ b/content/docs/solutions/index.mdx @@ -1,9 +1,47 @@ --- title: Solutions -description: "What CipherStash solves: PII protection, HIPAA, AI/RAG, data residency, provable access." +description: "What CipherStash solves: protecting sensitive data, AI and RAG pipelines, data residency, and provable access." type: concept +audience: [cto, ciso] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash encrypts sensitive data at the field level, in your infrastructure, while keeping it queryable. This section covers the problems that solves, and what an implementation looks like for each. -Until it lands, current documentation lives in the [existing docs](/stack). +## In this section + +- [Securing AI and RAG pipelines](/solutions/ai-and-rag) keeps document chunks and metadata encrypted while remaining retrievable alongside vector embeddings. +- [Data residency](/solutions/data-residency) covers regional key management and the deployment patterns for cross-border requirements. +- [Provable access control](/solutions/provable-access) binds decryption to an authenticated identity, so access is cryptographically demonstrable rather than merely logged. + +## What data should I protect? + +When improving your data security practices, it can be difficult to know what data is important enough to protect. These are the common categories of sensitive data worth encrypting. + +### Personally identifiable information (PII) + +Any data that could identify a specific individual: names, phone numbers, dates of birth, addresses, emails, IP addresses, social security numbers, license numbers, passport numbers. + +**Applicable regulations:** GDPR, CCPA, HIPAA, APP (Australia), PCI-DSS, SOC 2, ISO 27001. + +### Protected health information (PHI) + +Any information about health status, provision of health care, or payment for health care that can be linked to an individual: medical record numbers, health insurance beneficiary numbers, biometric identifiers, medical conditions, medication histories, payment histories. + +**Applicable regulations:** HIPAA, CMIA, GDPR, APP. + +### Financial information + +Data about money, accounts, and transactions: account numbers and balances, transaction data, TFNs and ITINs, saved payees. + +**Applicable regulations:** GDPR, CCPA, PCI-DSS, CDR (Australia), SOC 2, ISO 27001. + +### Authentication information + +Credentials used to gain access to accounts and services: usernames, passwords (both plaintext and hashed), OAuth tokens, session cookies. + +**Applicable regulations:** SOC 2, ISO 27001, PCI-DSS. + +## Related + +- [Searchable encryption](/concepts/searchable-encryption) for how querying encrypted data works, and what each index term reveals. +- [Compliance](/security/compliance) for how CipherStash maps onto specific frameworks. diff --git a/content/docs/solutions/meta.json b/content/docs/solutions/meta.json index ac4f22b..ff353aa 100644 --- a/content/docs/solutions/meta.json +++ b/content/docs/solutions/meta.json @@ -1,5 +1,5 @@ { "title": "Solutions", "icon": "Target", - "pages": ["..."] + "pages": ["index", "...", "ai-and-rag", "data-residency", "provable-access"] } diff --git a/content/docs/solutions/provable-access.mdx b/content/docs/solutions/provable-access.mdx new file mode 100644 index 0000000..fa259c1 --- /dev/null +++ b/content/docs/solutions/provable-access.mdx @@ -0,0 +1,132 @@ +--- +title: Provable access control +description: "Bind decryption to an authenticated identity with lock contexts, so access to data is cryptographically demonstrable rather than merely logged." +type: concept +components: [platform, encryption] +audience: [ciso, cto] +verifiedAgainst: + stack: "0.18.0" +--- + +Traditional access control relies on application logic. If a bug or misconfiguration exposes data, there is no way to prove afterwards whether access was unauthorized. CipherStash binds decryption to an authenticated identity, so access leaves cryptographic evidence rather than only a log entry. + +## How it works + +A **lock context** ties encryption and decryption to an authenticated identity. You exchange a user's JWT for a CTS token, and that token participates in key derivation. Without it, the data keys cannot be derived and the data cannot be decrypted. + +That creates a provable access boundary: + +- If data was decrypted, the identity token must have been present. +- ZeroKMS records the identity associated with every key derivation. +- The record cannot be falsified by tampering with application logs, because the evidence is the derivation itself, not the log line describing it. + +<Callout type="info"> +A lock context restricts **who can decrypt**. It does not hide the ciphertext's existence, nor does it prevent a caller who holds a valid token from decrypting the values that token unlocks. It moves the enforcement point out of your application and into key derivation. +</Callout> + +## Identity-aware encryption + +Construct a `LockContext`, identify it with the user's JWT, then attach it to an encrypt or decrypt operation with `.withLockContext()`. + +### Bind encryption to an identity + +```typescript filename="identity-encrypt.ts" +import { Encryption } from "@cipherstash/stack" +import { LockContext } from "@cipherstash/stack/identity" +import { patients } from "./schema" + +const client = await Encryption({ schemas: [patients] }) + +// The JWT identifies the healthcare provider performing the action +async function encryptDiagnosis(diagnosis: string, providerJwt: string) { + const lockContext = await new LockContext().identify(providerJwt) + + if (lockContext.failure) { + throw new Error(`Identification failed: ${lockContext.failure.message}`) + } + + const result = await client + .encrypt(diagnosis, { column: patients.diagnosis, table: patients }) + .withLockContext(lockContext.data) + + if (result.failure) { + throw new Error(`Encryption failed: ${result.failure.message}`) + } + + return result.data +} +``` + +`identify()` returns a `Result`, so the CTS token exchange can fail (an expired JWT, an unconfigured OIDC provider) without throwing. Unwrap it before use. + +### Decrypt with identity verification + +Decryption requires the same lock context that encrypted the value. + +```typescript filename="identity-decrypt.ts" +async function decryptDiagnosis(encryptedDiagnosis: unknown, providerJwt: string) { + const lockContext = await new LockContext().identify(providerJwt) + + if (lockContext.failure) { + throw new Error(`Identification failed: ${lockContext.failure.message}`) + } + + const result = await client + .decrypt(encryptedDiagnosis) + .withLockContext(lockContext.data) + + if (result.failure) { + // Key derivation fails when the identity does not match + throw new Error(`Access denied: ${result.failure.message}`) + } + + return result.data +} +``` + +## Audit logging + +Every encryption and decryption through ZeroKMS produces an audit event: + +| Field | Description | +|---|---| +| Identity | The authenticated user or service, from the lock context | +| Operation | Encrypt or decrypt | +| Timestamp | When the operation occurred | +| Keyset | Which keyset was used | +| Application | Which application performed the operation | + +### Combining with Proxy audit + +[CipherStash Proxy](/reference/proxy) adds statement-level audit on top: statement fingerprinting to identify unique query patterns against encrypted data, SQL redaction to strip sensitive values from logged queries, primary key injection to track which records were touched, and record reconciliation to map access events back to rows. See [Proxy audit](/stack/cipherstash/proxy/audit). + +Together these answer who accessed what data, when, and using which query. + +## Use cases + +### Healthcare: HIPAA audit requirements + +HIPAA requires audit controls recording who accessed protected health information. With a lock context, every access to patient data is tied to the authenticated provider, and the ZeroKMS audit log records the identity, the operation, the keyset, and the timestamp for each derivation. + +### Financial services: segregation of duties + +Encrypt audit records under a compliance-team identity. A trading-team JWT produces a different lock context, so key derivation fails and the records do not decrypt. The separation is enforced at derivation, not by a role check in the application. + +### Multi-tenant SaaS: tenant isolation + +Bind encryption to a tenant identity so that only that tenant's identity can decrypt its data. For coarser isolation that does not depend on a per-request JWT, separate [keysets](/stack/cipherstash/kms/keysets) may fit better: a keyset boundary is per-connection or per-client, where a lock context is per-identity. + +## Compared to application-level access control + +| Aspect | Application logic | Lock contexts | +|---|---|---| +| Enforcement | A software check, which can be bypassed | Key derivation, which cannot be skipped | +| Audit trail | Application logs, which can be edited | ZeroKMS derivation records | +| Proof of access | Circumstantial, from log entries | Direct: decryption required the identity | +| Blast radius of a bug | Data exposed when the check is bypassed | Data stays encrypted when application logic fails | + +## Next steps + +- [Data residency](/solutions/data-residency) for revoking access per region. +- [Proxy audit](/stack/cipherstash/proxy/audit) for statement-level audit logging. +- [Compliance](/security/compliance) for GDPR, HIPAA, and PCI-DSS mapping. From 6d7268fc8a32187e9e44c70191eb5e90cf9a1389 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 15:20:30 +1000 Subject: [PATCH 046/151] docs(solutions): address review, move to strategy-based identity API - provable-access: rewrite on the strategy-based API. LockContext.identify() is deprecated (per-operation CTS tokens were removed in protect-ffi 0.25). Authenticate the client as the end user with OidcFederationStrategy via config.authStrategy, then bind with .withLockContext({ identityClaim }). Verified against @cipherstash/stack 0.19.0 and @cipherstash/auth 0.42.0. - regions: extract the ZeroKMS region list into @/lib/zerokms-regions and a <ZeroKmsRegions /> MDX component, used by both the regions reference and data-residency so the list can't drift. Adds the two missing regions, the .aws suffix on identifiers, and states that ZeroKMS is AWS-only. - ai-and-rag: remove pending a rewrite. Its legacy URL now redirects to the Solutions index rather than a page that no longer exists. --- content/docs/solutions/ai-and-rag.mdx | 132 --------------------- content/docs/solutions/data-residency.mdx | 11 +- content/docs/solutions/index.mdx | 1 - content/docs/solutions/meta.json | 2 +- content/docs/solutions/provable-access.mdx | 84 +++++++------ content/stack/cipherstash/kms/regions.mdx | 10 +- src/components/zerokms-regions.tsx | 30 +++++ src/lib/zerokms-regions.ts | 26 ++++ src/mdx-components.tsx | 2 + v2-redirects.mjs | 5 +- 10 files changed, 121 insertions(+), 182 deletions(-) delete mode 100644 content/docs/solutions/ai-and-rag.mdx create mode 100644 src/components/zerokms-regions.tsx create mode 100644 src/lib/zerokms-regions.ts diff --git a/content/docs/solutions/ai-and-rag.mdx b/content/docs/solutions/ai-and-rag.mdx deleted file mode 100644 index fa4ad98..0000000 --- a/content/docs/solutions/ai-and-rag.mdx +++ /dev/null @@ -1,132 +0,0 @@ ---- -title: Securing AI and RAG pipelines -description: "Protect sensitive data in AI retrieval-augmented generation pipelines with encrypted document storage and searchable encryption." -type: concept -components: [encryption, eql] -audience: [developer, cto] -verifiedAgainst: - stack: "0.18.0" ---- - -Retrieval-augmented generation (RAG) pipelines commonly store sensitive documents alongside vector embeddings. Without encryption, that data is exposed at rest and during retrieval, creating a significant attack surface. CipherStash lets you encrypt sensitive content while preserving the ability to search and retrieve it. - -## The problem - -RAG architectures typically store: - -- **Document chunks:** the original text, often containing PII, financial data, or confidential business information. -- **Metadata:** source references, user associations, access tags. -- **Vector embeddings:** numeric representations used for similarity search. - -If any of this is exfiltrated from the database, the plaintext content is immediately exposed. Encryption at rest does not help, because the data is decrypted as soon as it is queried. - -<Callout type="info"> -CipherStash encrypts the document chunks and metadata, not the embeddings themselves. An embedding is a lossy projection of its source text, and similarity search has to compare embeddings in the clear. Treat embeddings as sensitive: they can leak information about the text they were derived from. -</Callout> - -## Encrypting RAG context data - -Use the [Stack SDK](/reference/stack) to encrypt sensitive fields before storing them alongside your embeddings. - -### Define a schema for your documents - -```typescript filename="schema.ts" -import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" - -export const documents = encryptedTable("documents", { - content: encryptedColumn("content").freeTextSearch(), - source: encryptedColumn("source").equality(), - userId: encryptedColumn("user_id").equality(), -}) -``` - -Each index method declares a capability. `freeTextSearch()` makes the content matchable by token; `equality()` makes a column filterable by exact match. See [searchable encryption](/concepts/searchable-encryption) for what each capability reveals. - -### Encrypt before storage - -```typescript filename="ingest.ts" -import { Encryption } from "@cipherstash/stack" -import { documents } from "./schema" - -const client = await Encryption({ schemas: [documents] }) - -async function ingestDocument(doc: { - content: string - source: string - userId: string - embedding: number[] -}) { - const encrypted = await client.encryptModel( - { content: doc.content, source: doc.source, userId: doc.userId }, - documents, - ) - - if (encrypted.failure) { - throw new Error(`Encryption failed: ${encrypted.failure.message}`) - } - - await db.query( - `INSERT INTO documents (content, source, user_id, embedding) - VALUES ($1::public.text_match, $2::public.text_eq, $3::public.text_eq, $4)`, - [ - encrypted.data.content, - encrypted.data.source, - encrypted.data.userId, - JSON.stringify(doc.embedding), - ], - ) -} -``` - -### Decrypt retrieved context - -After vector similarity search retrieves the relevant documents, decrypt the content before passing it to the LLM: - -```typescript filename="retrieve.ts" -async function retrieveContext(queryEmbedding: number[], topK = 5) { - const results = await db.query( - `SELECT content, source FROM documents - ORDER BY embedding <-> $1 - LIMIT $2`, - [JSON.stringify(queryEmbedding), topK], - ) - - const decrypted = await client.bulkDecryptModels(results.rows) - - if (decrypted.failure) { - throw new Error(`Decryption failed: ${decrypted.failure.message}`) - } - - return decrypted.data -} -``` - -`bulkDecryptModels` sends every ciphertext in one round trip to ZeroKMS, rather than one call per row. On a `topK` of 5 that hardly matters; on a reranking pass over a few hundred candidates it is the difference between one request and hundreds. - -## Searchable encrypted retrieval - -When you need to filter documents by metadata before or alongside vector search, combine an encrypted equality predicate with the similarity ordering: - -```sql --- Find documents for a specific user, then rank by similarity -SELECT content, source, embedding -FROM documents -WHERE user_id = $1::public.text_eq -ORDER BY embedding <-> $2 -LIMIT 10; -``` - -The operand must be typed (`$1::public.text_eq`) for the encrypted `=` operator to resolve. See [typed operands](/reference/eql/core-concepts) and [filtering](/reference/eql/filtering). - -This filters on encrypted metadata inside PostgreSQL, without decrypting it. Add a functional index over the term extractor so the filter does not become a sequential scan. See [indexes](/reference/eql/indexes). - -## Benefits for AI pipelines - -- **Sensitive context stays encrypted.** Document chunks containing PII or confidential data are never stored in plaintext. -- **Selective decryption.** Decrypt only what the LLM needs, reducing the exposure surface. -- **Audit trail.** Track who retrieved which documents and when, using [identity-aware encryption](/solutions/provable-access). - -## Related - -- [Provable access control](/solutions/provable-access) to bind retrieval to an authenticated identity. -- [Searchable encryption](/concepts/searchable-encryption) for the leakage model behind these queries. diff --git a/content/docs/solutions/data-residency.mdx b/content/docs/solutions/data-residency.mdx index 1e64c85..db56ca1 100644 --- a/content/docs/solutions/data-residency.mdx +++ b/content/docs/solutions/data-residency.mdx @@ -20,17 +20,14 @@ Three properties combine to keep data and key material inside a region: ## Regional ZeroKMS deployment -ZeroKMS is available in [multiple regions](/stack/cipherstash/kms/regions): +ZeroKMS is deployed on AWS only. A workspace is tied to one region, and its region identifier forms part of the workspace CRN (`crn:ap-southeast-2.aws:your-workspace-id`). -| Area | Region | -|---|---| -| Asia Pacific | Sydney (`ap-southeast-2`) | -| Europe | Frankfurt (`eu-central-1`), Ireland (`eu-west-1`) | -| US East | N. Virginia (`us-east-1`) | -| US West | Oregon (`us-west-2`) | +<ZeroKmsRegions /> Selecting a ZeroKMS region controls where authority keys are managed. Combined with your application's deployment region, that determines where all key material exists. +Need a region that is not listed? Contact [support@cipherstash.com](mailto:support@cipherstash.com). See the [regions reference](/stack/cipherstash/kms/regions) for more. + ## Dual-party key split CipherStash splits key material between two parties: diff --git a/content/docs/solutions/index.mdx b/content/docs/solutions/index.mdx index c583533..c04d308 100644 --- a/content/docs/solutions/index.mdx +++ b/content/docs/solutions/index.mdx @@ -9,7 +9,6 @@ CipherStash encrypts sensitive data at the field level, in your infrastructure, ## In this section -- [Securing AI and RAG pipelines](/solutions/ai-and-rag) keeps document chunks and metadata encrypted while remaining retrievable alongside vector embeddings. - [Data residency](/solutions/data-residency) covers regional key management and the deployment patterns for cross-border requirements. - [Provable access control](/solutions/provable-access) binds decryption to an authenticated identity, so access is cryptographically demonstrable rather than merely logged. diff --git a/content/docs/solutions/meta.json b/content/docs/solutions/meta.json index ff353aa..866869f 100644 --- a/content/docs/solutions/meta.json +++ b/content/docs/solutions/meta.json @@ -1,5 +1,5 @@ { "title": "Solutions", "icon": "Target", - "pages": ["index", "...", "ai-and-rag", "data-residency", "provable-access"] + "pages": ["index", "...", "data-residency", "provable-access"] } diff --git a/content/docs/solutions/provable-access.mdx b/content/docs/solutions/provable-access.mdx index fa259c1..b9473ed 100644 --- a/content/docs/solutions/provable-access.mdx +++ b/content/docs/solutions/provable-access.mdx @@ -5,49 +5,69 @@ type: concept components: [platform, encryption] audience: [ciso, cto] verifiedAgainst: - stack: "0.18.0" + stack: "0.19.0" + auth: "0.42.0" --- Traditional access control relies on application logic. If a bug or misconfiguration exposes data, there is no way to prove afterwards whether access was unauthorized. CipherStash binds decryption to an authenticated identity, so access leaves cryptographic evidence rather than only a log entry. ## How it works -A **lock context** ties encryption and decryption to an authenticated identity. You exchange a user's JWT for a CTS token, and that token participates in key derivation. Without it, the data keys cannot be derived and the data cannot be decrypted. +Two pieces combine. + +**An auth strategy** decides who the client is when it talks to ZeroKMS. `OidcFederationStrategy` federates a signed-in user's OIDC JWT (from Supabase, Clerk, Auth0, or Okta) into a CipherStash token, so every ZeroKMS request is made *as that user* rather than as your service. + +**A lock context** binds a value to a claim from that user's JWT, typically `sub`. ZeroKMS bakes the claim's value into the data key's tag, so only the user who encrypted a value can decrypt it. + +The two are layered, not alternatives: lock context requires `OidcFederationStrategy`, but you can use the strategy without lock context. Authenticating as the user gives you an audit trail; adding lock context gives you the cryptographic binding. That creates a provable access boundary: -- If data was decrypted, the identity token must have been present. +- If data was decrypted, the user's identity must have been present. - ZeroKMS records the identity associated with every key derivation. - The record cannot be falsified by tampering with application logs, because the evidence is the derivation itself, not the log line describing it. <Callout type="info"> -A lock context restricts **who can decrypt**. It does not hide the ciphertext's existence, nor does it prevent a caller who holds a valid token from decrypting the values that token unlocks. It moves the enforcement point out of your application and into key derivation. +A lock context restricts **who can decrypt**. It does not hide the ciphertext's existence, nor does it prevent a signed-in user from decrypting the values their own claim unlocks. It moves the enforcement point out of your application and into key derivation. </Callout> ## Identity-aware encryption -Construct a `LockContext`, identify it with the user's JWT, then attach it to an encrypt or decrypt operation with `.withLockContext()`. +Add your identity provider to the workspace first, at [dashboard.cipherstash.com](https://dashboard.cipherstash.com/workspaces/_/oidc-providers). -### Bind encryption to an identity +### Authenticate as the end user -```typescript filename="identity-encrypt.ts" -import { Encryption } from "@cipherstash/stack" -import { LockContext } from "@cipherstash/stack/identity" +Construct the client with `OidcFederationStrategy`. Pass a function that returns the *current* provider JWT: the strategy re-invokes it when it needs to re-federate, so do not capture a token once. + +```typescript filename="client.ts" +import { Encryption, OidcFederationStrategy } from "@cipherstash/stack" import { patients } from "./schema" -const client = await Encryption({ schemas: [patients] }) +// Every ZeroKMS request is authenticated as the signed-in user +export const client = await Encryption({ + schemas: [patients], + config: { + authStrategy: OidcFederationStrategy.create( + process.env.CS_WORKSPACE_CRN, + () => getProviderJwt(), + ), + }, +}) +``` -// The JWT identifies the healthcare provider performing the action -async function encryptDiagnosis(diagnosis: string, providerJwt: string) { - const lockContext = await new LockContext().identify(providerJwt) +Both strategies are re-exported by `@cipherstash/stack`, so you do not need a separate import from `@cipherstash/auth` for this. - if (lockContext.failure) { - throw new Error(`Identification failed: ${lockContext.failure.message}`) - } +### Bind encryption to the user's identity +```typescript filename="identity-encrypt.ts" +import { client } from "./client" +import { patients } from "./schema" + +// The data key is tagged with the authenticated provider's `sub` claim +async function encryptDiagnosis(diagnosis: string) { const result = await client .encrypt(diagnosis, { column: patients.diagnosis, table: patients }) - .withLockContext(lockContext.data) + .withLockContext({ identityClaim: ["sub"] }) if (result.failure) { throw new Error(`Encryption failed: ${result.failure.message}`) @@ -57,23 +77,15 @@ async function encryptDiagnosis(diagnosis: string, providerJwt: string) { } ``` -`identify()` returns a `Result`, so the CTS token exchange can fail (an expired JWT, an unconfigured OIDC provider) without throwing. Unwrap it before use. - -### Decrypt with identity verification +### Decrypt with the same identity claim -Decryption requires the same lock context that encrypted the value. +Decryption requires the same lock context, resolved against whichever user the client is currently authenticated as. ```typescript filename="identity-decrypt.ts" -async function decryptDiagnosis(encryptedDiagnosis: unknown, providerJwt: string) { - const lockContext = await new LockContext().identify(providerJwt) - - if (lockContext.failure) { - throw new Error(`Identification failed: ${lockContext.failure.message}`) - } - +async function decryptDiagnosis(encryptedDiagnosis: unknown) { const result = await client .decrypt(encryptedDiagnosis) - .withLockContext(lockContext.data) + .withLockContext({ identityClaim: ["sub"] }) if (result.failure) { // Key derivation fails when the identity does not match @@ -84,13 +96,19 @@ async function decryptDiagnosis(encryptedDiagnosis: unknown, providerJwt: string } ``` +Lock contexts work with every operation: `encrypt`, `decrypt`, `encryptModel`, `decryptModel`, `bulkEncrypt`, `bulkDecrypt`, `bulkEncryptModels`, and `bulkDecryptModels`. + +<Callout type="warn"> +`new LockContext()` and `lockContext.identify(jwt)` are **deprecated**. Per-operation CTS tokens were removed in `protect-ffi` 0.25, and `identify()` no longer affects encryption. Authenticate the client with `OidcFederationStrategy` and pass the claim to `.withLockContext()` instead. +</Callout> + ## Audit logging Every encryption and decryption through ZeroKMS produces an audit event: | Field | Description | |---|---| -| Identity | The authenticated user or service, from the lock context | +| Identity | The authenticated user or service | | Operation | Encrypt or decrypt | | Timestamp | When the operation occurred | | Keyset | Which keyset was used | @@ -106,15 +124,15 @@ Together these answer who accessed what data, when, and using which query. ### Healthcare: HIPAA audit requirements -HIPAA requires audit controls recording who accessed protected health information. With a lock context, every access to patient data is tied to the authenticated provider, and the ZeroKMS audit log records the identity, the operation, the keyset, and the timestamp for each derivation. +HIPAA requires audit controls recording who accessed protected health information. Authenticating each request as the signed-in provider means the ZeroKMS audit log records the identity, the operation, the keyset, and the timestamp for each derivation, and a lock context ties each patient record to the provider who encrypted it. ### Financial services: segregation of duties -Encrypt audit records under a compliance-team identity. A trading-team JWT produces a different lock context, so key derivation fails and the records do not decrypt. The separation is enforced at derivation, not by a role check in the application. +Encrypt audit records under a compliance-team member's identity. Someone on the trading desk, authenticated as themselves, resolves a different claim value, so key derivation fails and the records do not decrypt. The separation is enforced at derivation, not by a role check in the application. ### Multi-tenant SaaS: tenant isolation -Bind encryption to a tenant identity so that only that tenant's identity can decrypt its data. For coarser isolation that does not depend on a per-request JWT, separate [keysets](/stack/cipherstash/kms/keysets) may fit better: a keyset boundary is per-connection or per-client, where a lock context is per-identity. +Bind encryption to a per-user claim so only that user's identity can decrypt their data. For coarser isolation that does not depend on a signed-in end user, separate [keysets](/stack/cipherstash/kms/keysets) usually fit better: a keyset boundary is per-client or per-connection, where a lock context is per-identity. ## Compared to application-level access control diff --git a/content/stack/cipherstash/kms/regions.mdx b/content/stack/cipherstash/kms/regions.mdx index bffd4f8..d101365 100644 --- a/content/stack/cipherstash/kms/regions.mdx +++ b/content/stack/cipherstash/kms/regions.mdx @@ -7,13 +7,9 @@ Each workspace is tied to a specific region and is deployed in that region's [Ze ## Supported ZeroKMS regions -- Asia Pacific (Sydney) -- Europe (Frankfurt) -- Europe (Ireland) -- US East (N. Virginia) -- US East (Ohio) -- US West (N. California) -- US West (Oregon) +ZeroKMS is deployed on AWS only. A region identifier forms part of your workspace CRN, for example `crn:ap-southeast-2.aws:your-workspace-id`. + +<ZeroKmsRegions /> ## Requesting a new region diff --git a/src/components/zerokms-regions.tsx b/src/components/zerokms-regions.tsx new file mode 100644 index 0000000..1fd1617 --- /dev/null +++ b/src/components/zerokms-regions.tsx @@ -0,0 +1,30 @@ +import { ZEROKMS_REGIONS } from "@/lib/zerokms-regions"; + +/** + * Renders the supported ZeroKMS regions. Used by every page that lists regions + * so the list is maintained in exactly one place (`@/lib/zerokms-regions`). + */ +export function ZeroKmsRegions() { + return ( + <table> + <thead> + <tr> + <th>Area</th> + <th>Location</th> + <th>Region identifier</th> + </tr> + </thead> + <tbody> + {ZEROKMS_REGIONS.map((region) => ( + <tr key={region.id}> + <td>{region.area}</td> + <td>{region.location}</td> + <td> + <code>{region.id}</code> + </td> + </tr> + ))} + </tbody> + </table> + ); +} diff --git a/src/lib/zerokms-regions.ts b/src/lib/zerokms-regions.ts new file mode 100644 index 0000000..9efe432 --- /dev/null +++ b/src/lib/zerokms-regions.ts @@ -0,0 +1,26 @@ +/** + * The ZeroKMS regions a workspace can be deployed into. Single source of truth: + * rendered by the `<ZeroKmsRegions />` MDX component on every page that lists + * regions, so the list can't drift between the regions reference and the + * data-residency page. + * + * `id` is the region component of a workspace CRN + * (`crn:<id>:<workspace-id>`, e.g. `crn:ap-southeast-2.aws:ZVATKW3VHMFG27DY`). + * The `.aws` suffix is part of the identifier: ZeroKMS is deployed only on AWS + * today, and the suffix leaves room for other cloud providers later. + */ +export type ZeroKmsRegion = { + area: string; + location: string; + id: string; +}; + +export const ZEROKMS_REGIONS: ZeroKmsRegion[] = [ + { area: "Asia Pacific", location: "Sydney", id: "ap-southeast-2.aws" }, + { area: "Europe", location: "Frankfurt", id: "eu-central-1.aws" }, + { area: "Europe", location: "Ireland", id: "eu-west-1.aws" }, + { area: "US East", location: "N. Virginia", id: "us-east-1.aws" }, + { area: "US East", location: "Ohio", id: "us-east-2.aws" }, + { area: "US West", location: "N. California", id: "us-west-1.aws" }, + { area: "US West", location: "Oregon", id: "us-west-2.aws" }, +]; diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index b684d9c..f05ae7c 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -4,6 +4,7 @@ import defaultMdxComponents from "fumadocs-ui/mdx"; import type { MDXComponents } from "mdx/types"; import { TrackedCodeBlock } from "@/components/code-block"; import { EqlVersion } from "@/components/eql-version"; +import { ZeroKmsRegions } from "@/components/zerokms-regions"; export function getMDXComponents(components?: MDXComponents): MDXComponents { return { @@ -15,6 +16,7 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents { Steps, Step, EqlVersion, + ZeroKmsRegions, ...components, }; } diff --git a/v2-redirects.mjs b/v2-redirects.mjs index 8779a7b..a1618a8 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -265,8 +265,11 @@ export const v2Redirects = [ permanent: false, }, { + // The AI/RAG page is not part of the v2 tree yet (it needs a rewrite before + // it can be republished), so send its legacy URL to the Solutions index + // rather than a page that does not exist. source: "/stack/reference/use-cases/ai-rag", - destination: "/solutions/ai-and-rag", + destination: "/solutions", permanent: false, }, { From 619c1228f43cd646ddad532f00ae76b68fe5e01a Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 15:50:32 +1000 Subject: [PATCH 047/151] docs(solutions): narrow the LockContext deprecation to identify() Only identify() and getLockContext() are deprecated. The constructor is not: .withLockContext() accepts a LockContext or a plain { identityClaim }. --- content/docs/solutions/provable-access.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/docs/solutions/provable-access.mdx b/content/docs/solutions/provable-access.mdx index b9473ed..4575743 100644 --- a/content/docs/solutions/provable-access.mdx +++ b/content/docs/solutions/provable-access.mdx @@ -99,7 +99,9 @@ async function decryptDiagnosis(encryptedDiagnosis: unknown) { Lock contexts work with every operation: `encrypt`, `decrypt`, `encryptModel`, `decryptModel`, `bulkEncrypt`, `bulkDecrypt`, `bulkEncryptModels`, and `bulkDecryptModels`. <Callout type="warn"> -`new LockContext()` and `lockContext.identify(jwt)` are **deprecated**. Per-operation CTS tokens were removed in `protect-ffi` 0.25, and `identify()` no longer affects encryption. Authenticate the client with `OidcFederationStrategy` and pass the claim to `.withLockContext()` instead. +`lockContext.identify(jwt)` is **deprecated**. Per-operation CTS tokens were removed in `protect-ffi` 0.25, so `identify()` no longer affects encryption: code that still calls it compiles and logs a deprecation warning, but the token it fetches is unused. Authenticate the client with `OidcFederationStrategy` and pass the claim to `.withLockContext()` instead. + +Constructing a `LockContext` is not deprecated, it is simply optional here. `.withLockContext()` accepts either a `LockContext` or a plain `{ identityClaim }`. </Callout> ## Audit logging From 9804cd6fa31a220a650b05b5418e282358ee0a6b Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 16:07:17 +1000 Subject: [PATCH 048/151] docs(solutions): make the authStrategy dependency explicit in provable-access - Note that OidcFederationStrategy is the only strategy supporting lock contexts; AccessKeyStrategy authenticates as the service, so there is no end-user identity to bind a claim to. - Say that the examples depend on the authStrategy-configured client. - Explain that the '_' in the dashboard OIDC providers URL is the current workspace. --- content/docs/solutions/provable-access.mdx | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/content/docs/solutions/provable-access.mdx b/content/docs/solutions/provable-access.mdx index 4575743..84875fd 100644 --- a/content/docs/solutions/provable-access.mdx +++ b/content/docs/solutions/provable-access.mdx @@ -33,7 +33,7 @@ A lock context restricts **who can decrypt**. It does not hide the ciphertext's ## Identity-aware encryption -Add your identity provider to the workspace first, at [dashboard.cipherstash.com](https://dashboard.cipherstash.com/workspaces/_/oidc-providers). +Add your identity provider to the workspace first, on the [OIDC providers](https://dashboard.cipherstash.com/workspaces/_/oidc-providers) page in the Dashboard. The `_` in that URL resolves to whichever workspace you have selected. ### Authenticate as the end user @@ -55,11 +55,18 @@ export const client = await Encryption({ }) ``` -Both strategies are re-exported by `@cipherstash/stack`, so you do not need a separate import from `@cipherstash/auth` for this. +`OidcFederationStrategy` is re-exported by `@cipherstash/stack`, so you do not need a separate import from [`@cipherstash/auth`](https://www.npmjs.com/package/@cipherstash/auth). + +<Callout type="warn"> +`OidcFederationStrategy` is the only strategy that supports lock contexts. `AccessKeyStrategy` authenticates as your service rather than as an end user, so there is no user identity for ZeroKMS to resolve the claim against. +</Callout> ### Bind encryption to the user's identity +Every example below uses the `client` from above. Without its `authStrategy`, `.withLockContext()` has no end-user identity to bind to. + ```typescript filename="identity-encrypt.ts" +// `client` is configured with OidcFederationStrategy, as above import { client } from "./client" import { patients } from "./schema" @@ -82,6 +89,7 @@ async function encryptDiagnosis(diagnosis: string) { Decryption requires the same lock context, resolved against whichever user the client is currently authenticated as. ```typescript filename="identity-decrypt.ts" +// The same `client`, authenticated as the same user async function decryptDiagnosis(encryptedDiagnosis: unknown) { const result = await client .decrypt(encryptedDiagnosis) From abc761deaf9c37b34b272927defde48f5e406e86 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 16:23:48 +1000 Subject: [PATCH 049/151] docs(compare): update the aws-kms identity example to the strategy-based API The ported snippet used new LockContext().identify(userJwt), deprecated in protect-ffi 0.25, and passed the resulting Result straight to withLockContext() instead of unwrapping .data. main fixed this in #57; this carries the fix across so merging the port doesn't reintroduce it. --- content/docs/concepts/compare/aws-kms.mdx | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/content/docs/concepts/compare/aws-kms.mdx b/content/docs/concepts/compare/aws-kms.mdx index 9b3a568..f92be4a 100644 --- a/content/docs/concepts/compare/aws-kms.mdx +++ b/content/docs/concepts/compare/aws-kms.mdx @@ -123,16 +123,23 @@ const users = encryptedTable("users", { const terms = await client.encryptQuery("secret", { column: users.email, table: users }); ``` -**Identity-aware encryption** — bind encryption to an OIDC identity via `LockContext`. AWS KMS has no built-in equivalent; encryption context is a manual workaround. +**Identity-aware encryption** — authenticate as the signed-in user and bind the data key to a claim from their JWT. AWS KMS has no built-in equivalent; encryption context is a manual workaround. ```typescript -import { LockContext } from "@cipherstash/stack/identity"; - -const lockContext = await new LockContext().identify(userJwt); +import { Encryption, OidcFederationStrategy } from "@cipherstash/stack"; + +// Authenticate every ZeroKMS request as the signed-in user +const client = await Encryption({ + schemas: [users], + config: { + authStrategy: OidcFederationStrategy.create(workspaceCrn, () => getUserJwt()), + }, +}); +// Bind the data key to the user's `sub` claim await client .encrypt("secret@squirrel.example", { column: users.email, table: users }) - .withLockContext(lockContext); + .withLockContext({ identityClaim: ["sub"] }); ``` **Bulk operations** — native batch API. AWS KMS has no bulk endpoint; you batch and handle rate limits manually. From e8e1542ed1af6fb22aa69e8d843093bf37d30bd2 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 16:29:53 +1000 Subject: [PATCH 050/151] chore(ci): gate the build on deprecated and non-existent API in docs A page fixed on one branch gets silently reintroduced by a port from the other. That is how `LockContext.identify()` survived being fixed on main and came back through a comparison-page port (#43), and how v2's legacy tree kept teaching it after main was fixed (#60). `validate-content` scans content/docs and content/stack for API that is deprecated (LockContext.identify), never existed (withLockContext with an identityToken option), or was removed in EQL 3.0.0 (eql_v2_encrypted, add_search_config, the cs_*_v1 config functions), plus stale `protect` and `@cipherstash/cli` branding. Rules are scoped: EQL v3 rules apply only to content/docs, since the legacy tree documents EQL v2 by design. Generated output is skipped; those examples come from the SDK's own doc comments and get fixed upstream. A line is exempt when it also says the API is retired, so deprecation callouts and migration notes can still name the old API in order to warn readers off it. Naming a dead symbol without saying it is dead is the bug. Verified against both real regressions: it flags PR #43's original aws-kms snippet and main's pre-#57 `identityToken` form, and passes on the current tree. --- package.json | 5 +- scripts/validate-content-api.ts | 195 ++++++++++++++++++++++++++++++++ 2 files changed, 198 insertions(+), 2 deletions(-) create mode 100644 scripts/validate-content-api.ts diff --git a/package.json b/package.json index 215bc8b..0718fdb 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-links && bun run validate-redirects", + "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-links && bun run validate-redirects", "build": "next build", "dev": "next dev -p 3001", "start": "next start", @@ -16,7 +16,8 @@ "generate-docs:eql-api": "tsx scripts/generate-eql-api-docs.ts", "generate-docs:cli": "tsx scripts/generate-cli-docs.ts", "validate-links": "tsx scripts/validate-links.ts", - "validate-redirects": "tsx scripts/validate-v2-redirects.ts" + "validate-redirects": "tsx scripts/validate-v2-redirects.ts", + "validate-content": "tsx scripts/validate-content-api.ts" }, "dependencies": { "fumadocs-core": "16.6.0", diff --git a/scripts/validate-content-api.ts b/scripts/validate-content-api.ts new file mode 100644 index 0000000..30d0b61 --- /dev/null +++ b/scripts/validate-content-api.ts @@ -0,0 +1,195 @@ +#!/usr/bin/env tsx +/** + * Content API gate. + * + * Fails the build when documentation teaches an API that is deprecated, was + * removed, or never existed. Two long-lived content branches plus a fast-moving + * SDK means a page fixed on one branch can be silently reintroduced by a port + * from the other — which is exactly how the deprecated `LockContext.identify()` + * flow survived a fix and came back in a comparison-page port. + * + * Run via `bun run validate-content`; wired into prebuild. + * + * A line is exempt if it also says the API is retired ("deprecated", "removed", + * "no longer", "are gone"), so that callouts and migration notes are free to + * name the old API in order to warn readers off it. The check is deliberately + * line-local: naming a dead symbol without saying it is dead is the bug. + * + * Generated output is skipped: it mirrors the SDK's own doc comments, which we + * fix upstream rather than here. + */ +import fs from "node:fs"; +import path from "node:path"; + +/** Generated by scripts/*, or a version reference that documents old syntax on purpose. */ +const SKIP_PATHS = [ + "content/stack/reference/stack/", // TypeDoc output + "content/docs/reference/stack/", // TypeDoc output (post-repoint) + "content/stack/reference/eql/index.mdx", // generated EQL API reference + "content/docs/reference/eql/functions.mdx", // generated + "content/docs/reference/cli/", // generated from `stash manifest --json` + "content/docs/reference/eql/v2/", // the retained EQL v2 reference +]; + +/** + * Prose that names a retired API in order to warn readers off it. Kept narrow: + * these are the words we actually use in deprecation callouts and migration + * notes, not a general escape hatch. + */ +const RETIRED_MARKER = + /\b(deprecat\w*|removed|no longer|are gone|was gone|never existed)\b/i; + +type Rule = { + id: string; + pattern: RegExp; + message: string; + fix: string; + /** Only apply the rule to files under these prefixes. */ + scope: string[]; +}; + +const IDENTITY_SCOPE = ["content/docs/", "content/stack/"]; +/** The legacy tree documents EQL v2 throughout; only the v2 IA must be v3-only. */ +const V3_SCOPE = ["content/docs/"]; + +const RULES: Rule[] = [ + { + id: "lockcontext-identify", + pattern: /\.identify\s*\(/, + message: + "`LockContext.identify()` is deprecated. Per-operation CTS tokens were removed in protect-ffi 0.25; the token it fetches no longer affects encryption.", + fix: 'Authenticate the client with `OidcFederationStrategy` via `config.authStrategy`, then pass the claim to `.withLockContext({ identityClaim: ["sub"] })`.', + scope: IDENTITY_SCOPE, + }, + { + id: "identity-token-option", + pattern: /identityToken\s*:/, + message: + "`withLockContext({ identityToken })` has never existed in any released version of @cipherstash/stack.", + fix: 'Use `.withLockContext({ identityClaim: ["sub"] })` on the operation, not on the client.', + scope: IDENTITY_SCOPE, + }, + { + id: "bare-lockcontext-constructor", + pattern: /new\s+LockContext\s*\(\s*\)/, + message: + "A bare `new LockContext()` is only useful with the deprecated `identify()` flow.", + fix: 'Pass a plain `{ identityClaim: ["sub"] }` to `.withLockContext()`. The Supabase query builder still requires an instance: `new LockContext({ context: { identityClaim: ["sub"] } })`.', + scope: IDENTITY_SCOPE, + }, + { + id: "eql-v2-encrypted-type", + pattern: /\beql_v2_encrypted\b/, + message: "The `eql_v2_encrypted` column type was removed in EQL 3.0.0.", + fix: "Type the column with an EQL v3 domain variant, e.g. `public.text_eq`. See /reference/eql/core-concepts.", + scope: V3_SCOPE, + }, + { + id: "eql-v2-schema-functions", + pattern: /\beql_v2\.\w+\s*\(/, + message: "The `eql_v2` schema was removed in EQL 3.0.0.", + fix: "Use the `eql_v3` equivalents, or the encrypted operators directly with a typed operand.", + scope: V3_SCOPE, + }, + { + id: "eql-v2-config-table", + pattern: + /\b(cs_add_column_v1|cs_match_v1|cs_ste_vec_v2|cs_check_encrypted_v1|add_search_config|config_add_column|config_add_table)\b/, + message: + "EQL v3 has no database-side configuration table; these functions are gone.", + fix: "A column's searchable capability is fixed by the domain variant it is typed as. See /reference/eql/core-concepts.", + scope: V3_SCOPE, + }, + { + id: "protect-branding", + pattern: /\b(ProtectClientConfig|@cipherstash\/cli)\b/, + message: + "Stale naming from before the `protect` -> `stack` rename, or the `@cipherstash/cli` -> `stash` rename.", + fix: "Use `EncryptionClientConfig` and `stash`.", + scope: V3_SCOPE, + }, +]; + +type Finding = { + file: string; + line: number; + rule: Rule; + text: string; +}; + +function collectFiles(dir: string): string[] { + if (!fs.existsSync(dir)) return []; + const files: string[] = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) files.push(...collectFiles(full)); + else if (/\.mdx?$/.test(entry.name)) files.push(full); + } + return files; +} + +function isSkipped(relative: string): boolean { + return SKIP_PATHS.some((prefix) => relative.startsWith(prefix)); +} + +function inScope(relative: string, rule: Rule): boolean { + return rule.scope.some((prefix) => relative.startsWith(prefix)); +} + +const root = process.cwd(); +const findings: Finding[] = []; + +for (const dir of ["content/docs", "content/stack"]) { + for (const file of collectFiles(path.join(root, dir))) { + const relative = path.relative(root, file).split(path.sep).join("/"); + if (isSkipped(relative)) continue; + + const lines = fs.readFileSync(file, "utf8").split("\n"); + lines.forEach((text, i) => { + // A line that names a dead API *and says it is dead* is doing its job. + if (RETIRED_MARKER.test(text)) return; + + for (const rule of RULES) { + if (!inScope(relative, rule)) continue; + if (rule.pattern.test(text)) { + findings.push({ + file: relative, + line: i + 1, + rule, + text: text.trim(), + }); + } + } + }); + } +} + +if (findings.length > 0) { + const byRule = new Map<string, Finding[]>(); + for (const f of findings) { + const list = byRule.get(f.rule.id) ?? []; + list.push(f); + byRule.set(f.rule.id, list); + } + + console.error( + `✗ ${findings.length} occurrence(s) of deprecated or non-existent API in documentation:\n`, + ); + for (const [id, group] of byRule) { + const { message, fix } = group[0].rule; + console.error(` [${id}] ${message}`); + console.error(` Fix: ${fix}\n`); + for (const f of group) { + console.error(` ${f.file}:${f.line}`); + console.error(` ${f.text.slice(0, 100)}`); + } + console.error(""); + } + console.error( + 'A line that also says the API is retired ("deprecated", "removed", "no longer",\n' + + '"are gone", "never existed") is exempt, so deprecation callouts still pass.', + ); + process.exit(1); +} + +console.log("✓ no deprecated or non-existent API found in documentation"); From 0bf6fe5bec6aea2c2f73f3d700ed0ab80bbafc72 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 16:48:25 +1000 Subject: [PATCH 051/151] docs(security): write the canonical architecture page The docs described ZeroKMS three ways, and each description was a different layer of the same mechanism with the others omitted. Reconciled per product review: - Proxy symmetric re-encryption (patent pending) produces the key seed server-side. HMAC-based key derivation expands that seed into a unique data key per value, client-side. Both are true; neither alone is the story. - An AWS KMS root key protects the authority key at rest. The authority key is the server half of the dual-party split. No per-value data key is ever wrapped or stored, so both the "AWS KMS backed" and "no wrapped-key storage" claims hold once the layers are separated. - "No caching needed" was too broad. Proxy caches keyset-scoped ciphers (cipher_cache_size, cipher_cache_ttl_seconds). No data key is ever cached, stored, or transmitted. The page states both, in a table. Standardises on AES-256-GCM-SIV. Leaves the index-term leakage model to /concepts/searchable-encryption, per the anti-drift rule, and links to it. --- content/docs/security/architecture.mdx | 165 +++++++++++++++++++++++++ content/docs/security/index.mdx | 17 ++- content/docs/security/meta.json | 2 +- 3 files changed, 180 insertions(+), 4 deletions(-) create mode 100644 content/docs/security/architecture.mdx diff --git a/content/docs/security/architecture.mdx b/content/docs/security/architecture.mdx new file mode 100644 index 0000000..acf9117 --- /dev/null +++ b/content/docs/security/architecture.mdx @@ -0,0 +1,165 @@ +--- +title: Architecture +description: "The canonical account of CipherStash's cryptographic design: the key hierarchy, what ZeroKMS does and does not learn, and what is cached." +type: concept +components: [platform] +audience: [ciso, cto] +reviewBy: "2027-01-09" +--- + +This page is the single reference for CipherStash's cryptographic design. Every other page that touches key management links here rather than restating it. + +## Cryptographic primitives + +| Purpose | Algorithm | Details | +|---|---|---| +| Data encryption | AES-256-GCM-SIV | Authenticated encryption with nonce-misuse resistance | +| Equality search terms | HMAC-SHA-256 | Deterministic terms for exact-match lookups | +| Range and sorting terms | Block ORE | Order-revealing encryption ([Lewi-Wu 2016](https://eprint.iacr.org/2016/612)), with enhancements from [Bogatov et al. 2018](https://arxiv.org/abs/1810.05135) | +| Free-text search terms | Encrypted Bloom filters | Trigram tokenization ([Nojima/Kadobayashi 2009](https://link.springer.com/chapter/10.1007/978-3-642-04474-8_17), [Chum/Zhang 2017](https://link.springer.com/chapter/10.1007/978-3-319-66399-9_15)) | +| Payload integrity | BLAKE3 | Structure validation of the encrypted payload | +| Payload encoding | MessagePack + Base85 | Compact binary serialization, stored as `jsonb` in PostgreSQL | + +Encryption and decryption happen in your application process, in the native Rust module. CipherStash infrastructure never sees plaintext. + +## The key hierarchy + +Three distinct things are often all called "the key". Keeping them apart is what makes the rest of this page readable. + +| Key | Where it lives | What protects it | +|---|---|---| +| **Authority key** | ZeroKMS, server-side | Encrypted at rest under an AWS KMS root key | +| **Client key** | Your application or workload | You do (`CS_CLIENT_KEY`) | +| **Data key** | Your application's memory, briefly | Nothing. It is derived per value and discarded | + +The authority key and the client key are two halves of a split. Neither alone derives a data key. + +## How a data key is produced + +The mechanism operates at two layers, and descriptions that name only one of them are incomplete. + +### Layer 1: the key seed, produced server-side + +ZeroKMS uses **proxy symmetric re-encryption** (patent pending) to combine the authority key with the client key component and return a **key seed** to your application. + +This is the property that makes the architecture zero-knowledge: ZeroKMS produces a seed it cannot itself turn into a data key, because the second half of the input never leaves your infrastructure. ZeroKMS never sees a data key, and no data key crosses the network. + +### Layer 2: the data key, derived client-side + +Your application expands the key seed into a **unique data key per value**, using an **HMAC-based key derivation function**. The data key encrypts the value with AES-256-GCM-SIV, then is discarded from memory. + +``` + AWS KMS root key + │ protects at rest + ▼ + Authority key ──┐ + (ZeroKMS) │ proxy symmetric re-encryption + ├──────────────────────────────► Key seed ──┐ + Client key ─────┘ (server-side) │ + (your app) │ HMAC-based KDF + │ (client-side) + ▼ + Data key, per value + AES-256-GCM-SIV + discarded after use +``` + +So: re-encryption describes how the seed is produced; HMAC key derivation describes how the seed becomes per-value keys. Both are true, at different layers. + +## What is cached, and what is not + +<Callout type="info"> +This distinction matters for a security review, and earlier documentation stated it too broadly. "Nothing is cached" is not accurate. What is true is that **no data key is ever cached, stored, or transmitted.** +</Callout> + +| Thing | Cached? | Detail | +|---|---|---| +| Data keys | Never | Derived per value, held in memory for the duration of one operation, then discarded | +| Key seeds | Not persisted | Held only for the operation that requested them | +| Keyset-scoped ciphers | **Yes, in Proxy** | [CipherStash Proxy](/reference/proxy/configuration) caches keyset-scoped cipher objects so it does not re-initialize per statement | +| Authority keys | At rest, in ZeroKMS | Encrypted under an AWS KMS root key | + +Proxy's cipher cache is bounded by `cipher_cache_size` (64 entries) and `cipher_cache_ttl_seconds` (3600 seconds), and its hit rate is exposed as `cipherstash_proxy_keyset_cipher_cache_hits_total`. Caching a keyset-scoped cipher is not the same as caching a data key: the cipher still requires the client key to derive anything, and per-value keys are still derived per value. + +The Stack SDK derives per operation and caches nothing. + +## Trust model + +An attacker must compromise **both** the ZeroKMS authority key and your client key to derive data keys. Compromising either alone is insufficient. + +- CipherStash never sees plaintext. Encryption and decryption run in your process. +- CipherStash never sees a data key. Data keys are derived in your memory from a seed. +- Ciphertext never has to leave your infrastructure. ZeroKMS handles key material, not data. + +### Shared responsibility + +| You | CipherStash | +|---|---| +| Protect the client key (`CS_CLIENT_KEY`) | Protect authority keys, encrypted at rest under AWS KMS | +| Secure your application and database | Operate ZeroKMS with high availability | +| Manage access keys and keysets | Enforce access-control policy on keysets | +| Register identity providers for lock contexts | Operate the CipherStash Token Service (CTS) | +| Store encrypted data in your database | Never store, access, or log plaintext | + +### Blast radius + +[Keysets](/stack/cipherstash/kms/keysets) scope keys. Each keyset is a full cryptographic boundary: one tenant's keyset cannot decrypt another's data. Compromising a client key affects only the keysets that application can reach, and revoking its access key stops further key derivation immediately. + +## Data flow + +### Write path + +1. The application calls `client.encrypt(plaintext, { column, table })`. +2. The SDK requests a key seed from ZeroKMS over TLS. +3. ZeroKMS combines the authority key with the client key component and returns a key seed. +4. The SDK derives a unique data key from the seed, locally. +5. The SDK encrypts the plaintext with AES-256-GCM-SIV. +6. If the column declares searchable capability, the SDK generates the index terms (HMAC, ORE, Bloom filter). +7. The SDK packs ciphertext and index terms into an [EQL payload](/reference/eql/core-concepts). +8. The data key is discarded. +9. The application stores the payload in PostgreSQL. + +### Read path + +1. The application reads the payload and calls `client.decrypt(...)`. +2. The SDK requests a key seed and derives the data key locally. +3. The SDK decrypts the ciphertext, discards the data key, and returns plaintext. + +### Query path + +1. The application encrypts a search term. +2. The SDK generates the appropriate index term (HMAC for equality, ORE for range and ordering, Bloom filter for free text). +3. PostgreSQL compares encrypted terms using [EQL](/reference/eql) operators. The database never sees plaintext. + +## What querying encrypted data reveals + +Searchable encryption is a trade. Each index term reveals bounded information to whoever can read the database: HMAC terms reveal equality and therefore frequency, ORE terms reveal relative order, and Bloom filter terms reveal probabilistic token membership. + +That leakage model is documented once, in [Searchable encryption](/concepts/searchable-encryption), with per-term detail and guidance on when the trade is not worth making. Assess it as part of your threat model. If the ordering or frequency of a column's values is itself sensitive, encrypt that column without a searchable index and filter after decryption. + +## Network security + +All communication between the SDK and CipherStash services uses TLS 1.2 or later: + +- SDK to ZeroKMS, for key seeds. +- SDK to CTS, for token exchange during identity-aware encryption. +- SDK to your database: your existing connection. CipherStash does not proxy it. + +Key material does not leave the region your workspace is configured in. See [regions](/stack/cipherstash/kms/regions). + +## Open-source components + +| Component | Repository | +|---|---| +| EQL | [cipherstash/encrypt-query-language](https://github.com/cipherstash/encrypt-query-language) | +| ORE implementation | [cipherstash/ore.rs](https://github.com/cipherstash/ore.rs) | +| CipherStash Proxy | [cipherstash/proxy](https://github.com/cipherstash/proxy) | + +The core cryptographic implementations are open source and independently auditable. ZeroKMS is a managed service operated by CipherStash. + +## Related + +- [Searchable encryption](/concepts/searchable-encryption) for the canonical index-term leakage model. +- [Keysets](/stack/cipherstash/kms/keysets) for the isolation boundary. +- [Proxy configuration](/reference/proxy/configuration) for the cipher cache settings. +- [Provable access control](/solutions/provable-access) for binding decryption to an authenticated identity. diff --git a/content/docs/security/index.mdx b/content/docs/security/index.mdx index 33b00fe..7a675b5 100644 --- a/content/docs/security/index.mdx +++ b/content/docs/security/index.mdx @@ -1,9 +1,20 @@ --- title: Architecture & security -description: "Trust model, components, availability, audit, and compliance — self-contained for security review." +description: "Trust model, cryptographic design, availability, audit, and compliance, written to be read end to end during a vendor security review." type: concept +audience: [ciso, cto] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +This section is written to be self-contained. A security team should be able to assess CipherStash from these pages without piecing the story together from reference material elsewhere. -Until it lands, current documentation lives in the [existing docs](/stack). +Start with [Architecture](/security/architecture). It is the canonical account of the cryptographic design: the key hierarchy, what ZeroKMS learns and does not learn, and what is cached. Every other page that touches key management links to it rather than restating it. + +## In this section + +- [Architecture](/security/architecture) covers the primitives, the key hierarchy, the trust model, and the data flow. +- [Compliance](/security/compliance) maps CipherStash onto specific frameworks. + +## Related + +- [Searchable encryption](/concepts/searchable-encryption) is the canonical account of what each index term reveals to the database. +- [Provable access control](/solutions/provable-access) covers binding decryption to an authenticated identity. diff --git a/content/docs/security/meta.json b/content/docs/security/meta.json index 5aa7273..bdb7ae9 100644 --- a/content/docs/security/meta.json +++ b/content/docs/security/meta.json @@ -1,5 +1,5 @@ { "title": "Architecture & security", "icon": "Shield", - "pages": ["..."] + "pages": ["index", "architecture", "...", "compliance"] } From 005d22c7e42bff993af5240ccf97fef7b3693622 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 17:05:51 +1000 Subject: [PATCH 052/151] docs(security): rename Architecture to Cryptography, label the index Overview - /security/architecture -> /security/cryptography (H1, nav, slug). Updated the v2-redirects.mjs destination for /stack/reference/security-architecture and ticked the item in IA.md. - The section index nav item read "Architecture & security", duplicating the folder it sits under. Fumadocs takes the sidebar label and the H1 from the same `title`, so add a `navTitle` frontmatter field that overrides the sidebar label only, applied in getV2PageTree. The URL and H1 are untouched. Reusable for the other section indexes, which have the same duplication. --- IA.md | 2 +- .../{architecture.mdx => cryptography.mdx} | 2 +- content/docs/security/index.mdx | 5 +-- content/docs/security/meta.json | 2 +- source.config.ts | 5 +++ src/lib/source.ts | 36 ++++++++++++++++++- v2-redirects.mjs | 2 +- 7 files changed, 47 insertions(+), 7 deletions(-) rename content/docs/security/{architecture.mdx => cryptography.mdx} (99%) diff --git a/IA.md b/IA.md index a56a5cc..1294823 100644 --- a/IA.md +++ b/IA.md @@ -369,7 +369,7 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). ## Architecture & security — CIP-3331, CIP-3332 (compliance) - [x] Section scaffold 🚧 -- [ ] `/security/architecture` — ONE reconciled ZeroKMS mechanism story (kills the 3 conflicting accounts) +- [x] `/security/cryptography` — ONE reconciled ZeroKMS mechanism story (kills the 3 conflicting accounts) - [ ] `/security/zerokms` - [ ] `/security/cts` — auth layer architecture (CIP-3330) - [ ] `/security/stack-sdk` diff --git a/content/docs/security/architecture.mdx b/content/docs/security/cryptography.mdx similarity index 99% rename from content/docs/security/architecture.mdx rename to content/docs/security/cryptography.mdx index acf9117..cd4bf12 100644 --- a/content/docs/security/architecture.mdx +++ b/content/docs/security/cryptography.mdx @@ -1,5 +1,5 @@ --- -title: Architecture +title: Cryptography description: "The canonical account of CipherStash's cryptographic design: the key hierarchy, what ZeroKMS does and does not learn, and what is cached." type: concept components: [platform] diff --git a/content/docs/security/index.mdx b/content/docs/security/index.mdx index 7a675b5..9a8e230 100644 --- a/content/docs/security/index.mdx +++ b/content/docs/security/index.mdx @@ -1,5 +1,6 @@ --- title: Architecture & security +navTitle: Overview description: "Trust model, cryptographic design, availability, audit, and compliance, written to be read end to end during a vendor security review." type: concept audience: [ciso, cto] @@ -7,11 +8,11 @@ audience: [ciso, cto] This section is written to be self-contained. A security team should be able to assess CipherStash from these pages without piecing the story together from reference material elsewhere. -Start with [Architecture](/security/architecture). It is the canonical account of the cryptographic design: the key hierarchy, what ZeroKMS learns and does not learn, and what is cached. Every other page that touches key management links to it rather than restating it. +Start with [Cryptography](/security/cryptography). It is the canonical account of the cryptographic design: the key hierarchy, what ZeroKMS learns and does not learn, and what is cached. Every other page that touches key management links to it rather than restating it. ## In this section -- [Architecture](/security/architecture) covers the primitives, the key hierarchy, the trust model, and the data flow. +- [Cryptography](/security/cryptography) covers the primitives, the key hierarchy, the trust model, and the data flow. - [Compliance](/security/compliance) maps CipherStash onto specific frameworks. ## Related diff --git a/content/docs/security/meta.json b/content/docs/security/meta.json index bdb7ae9..ea315bc 100644 --- a/content/docs/security/meta.json +++ b/content/docs/security/meta.json @@ -1,5 +1,5 @@ { "title": "Architecture & security", "icon": "Shield", - "pages": ["index", "architecture", "...", "compliance"] + "pages": ["index", "cryptography", "...", "compliance"] } diff --git a/source.config.ts b/source.config.ts index a95efc4..c44cd8c 100644 --- a/source.config.ts +++ b/source.config.ts @@ -32,6 +32,11 @@ export const v2docs = defineDocs({ docs: { schema: pageSchema.extend({ seoTitle: z.string().optional(), + // Sidebar label, when it should differ from the page's `title` (which is + // also the H1). Mainly for section index pages: the folder already names + // the section, so repeating it on the index item is noise. Applied to the + // page tree in `src/lib/source.ts`; never affects the URL or the H1. + navTitle: z.string().optional(), // Diátaxis page type. Every page should declare one; enforced by the // docs lint (CIP-3337) rather than the schema so stubs can land first. type: z.enum(["tutorial", "guide", "concept", "reference"]).optional(), diff --git a/src/lib/source.ts b/src/lib/source.ts index c056250..b3b58ca 100644 --- a/src/lib/source.ts +++ b/src/lib/source.ts @@ -47,9 +47,43 @@ function flattenEmptyFolders(nodes: PageTree.Node[]): PageTree.Node[] { }); } +// The sidebar label comes from a page's `title`, which is also its H1. A +// section index wants a short nav label ("Overview") under a folder that +// already names the section, while keeping the descriptive H1. `navTitle` +// frontmatter overrides the label only; the URL and H1 are untouched. +function applyNavTitles(nodes: PageTree.Node[]): PageTree.Node[] { + const navTitles = new Map<string, string>(); + for (const page of v2source.getPages()) { + const navTitle = page.data.navTitle; + if (navTitle) navTitles.set(page.url, navTitle); + } + if (navTitles.size === 0) return nodes; + + const rename = (list: PageTree.Node[]): PageTree.Node[] => + list.map((node) => { + if (node.type === "folder") { + return { + ...node, + index: node.index + ? (rename([node.index])[0] as typeof node.index) + : undefined, + children: rename(node.children), + }; + } + if (node.type !== "page") return node; + const navTitle = navTitles.get(node.url); + return navTitle ? { ...node, name: navTitle } : node; + }); + + return rename(nodes); +} + export function getV2PageTree(): PageTree.Root { const tree = v2source.getPageTree(); - return { ...tree, children: flattenEmptyFolders(tree.children) }; + return { + ...tree, + children: applyNavTitles(flattenEmptyFolders(tree.children)), + }; } export function getPageImage(page: InferPageType<typeof source>) { diff --git a/v2-redirects.mjs b/v2-redirects.mjs index a1618a8..e983333 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -241,7 +241,7 @@ export const v2Redirects = [ }, { source: "/stack/reference/security-architecture", - destination: "/security/architecture", + destination: "/security/cryptography", permanent: false, }, { From 5cbb9cea383b213cad7ce0f50d24d036d97be246 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 17:26:42 +1000 Subject: [PATCH 053/151] feat(mdx): render mermaid code fences as diagrams The key-derivation diagram was ASCII in an unlabelled code fence: monospace, ~80 columns, overflowing the content column. Adds Mermaid, authored as a ```mermaid fence rather than a component call. The fence survives the markdown pipeline untouched; the Shiki transformer copies its source onto the <pre> as data-mermaid, and TrackedCodeBlock swaps in the diagram at render time. That ordering is deliberate. fumadocs-mdx serializes the same mdast tree it renders, so a remark plugin rewriting the fence into <Mermaid chart="..." /> also rewrites the markdown we serve at .mdx and in llms.txt, where a diagram should degrade to readable source, not an opaque component call with escaped entities. Shiki ships a mermaid grammar, so the fence is a valid code block everywhere it isn't a picture. Mermaid is ~1MB and is imported dynamically inside the effect, so only pages with a diagram load it and it never enters the server bundle. The component re-renders on theme toggle, since Mermaid bakes colours into the SVG. --- bun.lock | 219 ++++++++++++++++++++++++- content/docs/security/cryptography.mdx | 37 +++-- package.json | 1 + source.config.ts | 8 + src/components/code-block.tsx | 12 ++ src/components/mermaid.tsx | 79 +++++++++ 6 files changed, 340 insertions(+), 16 deletions(-) create mode 100644 src/components/mermaid.tsx diff --git a/bun.lock b/bun.lock index 8a38c5d..323067b 100644 --- a/bun.lock +++ b/bun.lock @@ -10,6 +10,7 @@ "fumadocs-ui": "16.6.0", "github-slugger": "^2.0.0", "lucide-react": "^0.563.0", + "mermaid": "^11.16.0", "next": "16.2.3", "posthog-js": "^1.354.0", "posthog-node": "^5.26.0", @@ -37,6 +38,8 @@ "packages": { "@alloc/quick-lru": ["@alloc/quick-lru@5.2.0", "", {}, "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw=="], + "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], + "@biomejs/biome": ["@biomejs/biome@2.3.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.3.15", "@biomejs/cli-darwin-x64": "2.3.15", "@biomejs/cli-linux-arm64": "2.3.15", "@biomejs/cli-linux-arm64-musl": "2.3.15", "@biomejs/cli-linux-x64": "2.3.15", "@biomejs/cli-linux-x64-musl": "2.3.15", "@biomejs/cli-win32-arm64": "2.3.15", "@biomejs/cli-win32-x64": "2.3.15" }, "bin": { "biome": "bin/biome" } }, "sha512-u+jlPBAU2B45LDkjjNNYpc1PvqrM/co4loNommS9/sl9oSxsAQKsNZejYuUztvToB5oXi1tN/e62iNd6ESiY3g=="], "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SDCdrJ4COim1r8SNHg19oqT50JfkI/xGZHSyC6mGzMfKrpNe/217Eq6y98XhNTc0vGWDjznSDNXdUc6Kg24jbw=="], @@ -55,6 +58,10 @@ "@biomejs/cli-win32-x64": ["@biomejs/cli-win32-x64@2.3.15", "", { "os": "win32", "cpu": "x64" }, "sha512-kDZr/hgg+igo5Emi0LcjlgfkoGZtgIpJKhnvKTRmMBv6FF/3SDyEV4khBwqNebZIyMZTzvpca9sQNSXJ39pI2A=="], + "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="], + + "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], + "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], @@ -125,6 +132,10 @@ "@gerrit0/mini-shiki": ["@gerrit0/mini-shiki@3.22.0", "", { "dependencies": { "@shikijs/engine-oniguruma": "3.22.0", "@shikijs/langs": "3.22.0", "@shikijs/themes": "3.22.0", "@shikijs/types": "3.22.0", "@shikijs/vscode-textmate": "10.0.2" } }, "sha512-jMpciqEVUBKE1QwU64S4saNMzpsSza6diNCk4MWAeCxO2+LFi2FIFmL2S0VDLzEJCxuvCbU783xi8Hp/gkM5CQ=="], + "@iconify/types": ["@iconify/types@2.0.0", "", {}, "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="], + + "@iconify/utils": ["@iconify/utils@3.1.4", "", { "dependencies": { "@antfu/install-pkg": "^1.1.0", "@iconify/types": "^2.0.0", "import-meta-resolve": "^4.2.0" } }, "sha512-b1S7B1k9ohZ+iNTi2ATxbRYG9fTrJmUT0rc46bvVnNxqNRGW7dyo/vRREwyniI5IRN2RSJHDcm+s3BjWrSAjHw=="], + "@img/colour": ["@img/colour@1.0.0", "", {}, "sha512-A5P/LfWGFSl6nsckYtjw9da+19jB8hkJ6ACTGcDfEJ0aE+l2n2El7dsVM7UVHZQ9s2lmYMWlrS21YLy2IR1LUw=="], "@img/sharp-darwin-arm64": ["@img/sharp-darwin-arm64@0.34.5", "", { "optionalDependencies": { "@img/sharp-libvips-darwin-arm64": "1.2.4" }, "os": "darwin", "cpu": "arm64" }, "sha512-imtQ3WMJXbMY4fxb/Ndp6HBTNVtWCUI0WdobyheGf5+ad6xX8VIDO8u2xE4qc/fr08CKG/7dDseFtn6M6g/r3w=="], @@ -187,6 +198,8 @@ "@mdx-js/mdx": ["@mdx-js/mdx@3.1.1", "", { "dependencies": { "@types/estree": "1.0.8", "@types/estree-jsx": "1.0.5", "@types/hast": "3.0.4", "@types/mdx": "2.0.13", "acorn": "8.15.0", "collapse-white-space": "2.1.0", "devlop": "1.1.0", "estree-util-is-identifier-name": "3.0.0", "estree-util-scope": "1.0.0", "estree-walker": "3.0.3", "hast-util-to-jsx-runtime": "2.3.6", "markdown-extensions": "2.0.0", "recma-build-jsx": "1.0.0", "recma-jsx": "1.0.1", "recma-stringify": "1.0.0", "rehype-recma": "1.0.0", "remark-mdx": "3.1.1", "remark-parse": "11.0.0", "remark-rehype": "11.1.2", "source-map": "0.7.6", "unified": "11.0.5", "unist-util-position-from-estree": "2.0.0", "unist-util-stringify-position": "4.0.0", "unist-util-visit": "5.1.0", "vfile": "6.0.3" } }, "sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ=="], + "@mermaid-js/parser": ["@mermaid-js/parser@1.2.0", "", { "dependencies": { "@chevrotain/types": "~11.1.2" } }, "sha512-oYPyv8A4As1yH5Bx+04iQEQxXuIQDe0GKCNSRgao6z8AM9jixXIfP0vsppRLvGf+nKIOb9/LdpWA4YuJiVvESA=="], + "@next/env": ["@next/env@16.2.3", "", {}, "sha512-ZWXyj4uNu4GCWQw9cjRxWlbD+33mcDszIo9iQxFnBX3Wmgq9ulaSJcl6VhuWx5pCWqqD+9W6Wfz7N0lM5lYPMA=="], "@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.2.3", "", { "os": "darwin", "cpu": "arm64" }, "sha512-u37KDKTKQ+OQLvY+z7SNXixwo4Q2/IAJFDzU1fYe66IbCE51aDSAzkNDkWmLN0yjTUh4BKBd+hb69jYn6qqqSg=="], @@ -373,12 +386,76 @@ "@tailwindcss/postcss": ["@tailwindcss/postcss@4.1.18", "", { "dependencies": { "@alloc/quick-lru": "5.2.0", "@tailwindcss/node": "4.1.18", "@tailwindcss/oxide": "4.1.18", "postcss": "8.5.6", "tailwindcss": "4.1.18" } }, "sha512-Ce0GFnzAOuPyfV5SxjXGn0CubwGcuDB0zcdaPuCSzAa/2vII24JTkH+I6jcbXLb1ctjZMZZI6OjDaLPJQL1S0g=="], + "@types/d3": ["@types/d3@7.4.3", "", { "dependencies": { "@types/d3-array": "*", "@types/d3-axis": "*", "@types/d3-brush": "*", "@types/d3-chord": "*", "@types/d3-color": "*", "@types/d3-contour": "*", "@types/d3-delaunay": "*", "@types/d3-dispatch": "*", "@types/d3-drag": "*", "@types/d3-dsv": "*", "@types/d3-ease": "*", "@types/d3-fetch": "*", "@types/d3-force": "*", "@types/d3-format": "*", "@types/d3-geo": "*", "@types/d3-hierarchy": "*", "@types/d3-interpolate": "*", "@types/d3-path": "*", "@types/d3-polygon": "*", "@types/d3-quadtree": "*", "@types/d3-random": "*", "@types/d3-scale": "*", "@types/d3-scale-chromatic": "*", "@types/d3-selection": "*", "@types/d3-shape": "*", "@types/d3-time": "*", "@types/d3-time-format": "*", "@types/d3-timer": "*", "@types/d3-transition": "*", "@types/d3-zoom": "*" } }, "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww=="], + + "@types/d3-array": ["@types/d3-array@3.2.2", "", {}, "sha512-hOLWVbm7uRza0BYXpIIW5pxfrKe0W+D5lrFiAEYR+pb6w3N2SwSMaJbXdUfSEv+dT4MfHBLtn5js0LAWaO6otw=="], + + "@types/d3-axis": ["@types/d3-axis@3.0.6", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw=="], + + "@types/d3-brush": ["@types/d3-brush@3.0.6", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A=="], + + "@types/d3-chord": ["@types/d3-chord@3.0.6", "", {}, "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg=="], + + "@types/d3-color": ["@types/d3-color@3.1.3", "", {}, "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="], + + "@types/d3-contour": ["@types/d3-contour@3.0.6", "", { "dependencies": { "@types/d3-array": "*", "@types/geojson": "*" } }, "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg=="], + + "@types/d3-delaunay": ["@types/d3-delaunay@6.0.4", "", {}, "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw=="], + + "@types/d3-dispatch": ["@types/d3-dispatch@3.0.7", "", {}, "sha512-5o9OIAdKkhN1QItV2oqaE5KMIiXAvDWBDPrD85e58Qlz1c1kI/J0NcqbEG88CoTwJrYe7ntUCVfeUl2UJKbWgA=="], + + "@types/d3-drag": ["@types/d3-drag@3.0.7", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ=="], + + "@types/d3-dsv": ["@types/d3-dsv@3.0.7", "", {}, "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g=="], + + "@types/d3-ease": ["@types/d3-ease@3.0.2", "", {}, "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="], + + "@types/d3-fetch": ["@types/d3-fetch@3.0.7", "", { "dependencies": { "@types/d3-dsv": "*" } }, "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA=="], + + "@types/d3-force": ["@types/d3-force@3.0.10", "", {}, "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="], + + "@types/d3-format": ["@types/d3-format@3.0.4", "", {}, "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g=="], + + "@types/d3-geo": ["@types/d3-geo@3.1.0", "", { "dependencies": { "@types/geojson": "*" } }, "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ=="], + + "@types/d3-hierarchy": ["@types/d3-hierarchy@3.1.7", "", {}, "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg=="], + + "@types/d3-interpolate": ["@types/d3-interpolate@3.0.4", "", { "dependencies": { "@types/d3-color": "*" } }, "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA=="], + + "@types/d3-path": ["@types/d3-path@3.1.1", "", {}, "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="], + + "@types/d3-polygon": ["@types/d3-polygon@3.0.2", "", {}, "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA=="], + + "@types/d3-quadtree": ["@types/d3-quadtree@3.0.6", "", {}, "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg=="], + + "@types/d3-random": ["@types/d3-random@3.0.4", "", {}, "sha512-UHYId5WTCx4L4YNel7NU00XUXXgvgpgZOvp10PuvsQENjMDXhh2RyFc0KBjO7B45ne4Ha1yVH7ii0vnzKkuzWA=="], + + "@types/d3-scale": ["@types/d3-scale@4.0.9", "", { "dependencies": { "@types/d3-time": "*" } }, "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw=="], + + "@types/d3-scale-chromatic": ["@types/d3-scale-chromatic@3.1.0", "", {}, "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ=="], + + "@types/d3-selection": ["@types/d3-selection@3.0.11", "", {}, "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="], + + "@types/d3-shape": ["@types/d3-shape@3.1.8", "", { "dependencies": { "@types/d3-path": "*" } }, "sha512-lae0iWfcDeR7qt7rA88BNiqdvPS5pFVPpo5OfjElwNaT2yyekbM0C9vK+yqBqEmHr6lDkRnYNoTBYlAgJa7a4w=="], + + "@types/d3-time": ["@types/d3-time@3.0.4", "", {}, "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="], + + "@types/d3-time-format": ["@types/d3-time-format@4.0.3", "", {}, "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg=="], + + "@types/d3-timer": ["@types/d3-timer@3.0.2", "", {}, "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="], + + "@types/d3-transition": ["@types/d3-transition@3.0.9", "", { "dependencies": { "@types/d3-selection": "*" } }, "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg=="], + + "@types/d3-zoom": ["@types/d3-zoom@3.0.8", "", { "dependencies": { "@types/d3-interpolate": "*", "@types/d3-selection": "*" } }, "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw=="], + "@types/debug": ["@types/debug@4.1.12", "", { "dependencies": { "@types/ms": "2.1.0" } }, "sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ=="], "@types/estree": ["@types/estree@1.0.8", "", {}, "sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w=="], "@types/estree-jsx": ["@types/estree-jsx@1.0.5", "", { "dependencies": { "@types/estree": "1.0.8" } }, "sha512-52CcUVNFyfb1A2ALocQw/Dd1BQFNmSdkuC3BkZ6iqhdMfQz7JWOFRuJFloOzjk+6WijU56m9oKXFAXc7o3Towg=="], + "@types/geojson": ["@types/geojson@7946.0.16", "", {}, "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="], + "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "3.0.3" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "3.0.3" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], @@ -399,6 +476,8 @@ "@ungap/structured-clone": ["@ungap/structured-clone@1.3.0", "", {}, "sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g=="], + "@upsetjs/venn.js": ["@upsetjs/venn.js@2.0.0", "", { "optionalDependencies": { "d3-selection": "^3.0.0", "d3-transition": "^3.0.1" } }, "sha512-WbBhLrooyePuQ1VZxrJjtLvTc4NVfpOyKx0sKqioq9bX1C1m7Jgykkn8gLrtwumBioXIqam8DLxp88Adbue6Hw=="], + "acorn": ["acorn@8.15.0", "", { "bin": { "acorn": "bin/acorn" } }, "sha512-NZyJarBfL7nWwIq+FDL6Zp/yHEhePMNnnJ0y3qfieCrmNvYct8uvtiV41UvlSe6apAfk0fY1FbWx+NwfmpvtTg=="], "acorn-jsx": ["acorn-jsx@5.3.2", "", { "peerDependencies": { "acorn": "8.15.0" } }, "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ=="], @@ -441,20 +520,100 @@ "comma-separated-tokens": ["comma-separated-tokens@2.0.3", "", {}, "sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg=="], + "commander": ["commander@8.3.0", "", {}, "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww=="], + "compute-scroll-into-view": ["compute-scroll-into-view@3.1.1", "", {}, "sha512-VRhuHOLoKYOy4UbilLbUzbYg93XLjv2PncJC50EuTWPA3gaja1UjBsUP/D/9/juV3vQFr6XBEzn9KCAHdUvOHw=="], "core-js": ["core-js@3.48.0", "", {}, "sha512-zpEHTy1fjTMZCKLHUZoVeylt9XrzaIN2rbPXEt0k+q7JE5CkCZdo6bNq55bn24a69CH7ErAVLKijxJja4fw+UQ=="], + "cose-base": ["cose-base@1.0.3", "", { "dependencies": { "layout-base": "^1.0.0" } }, "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg=="], + "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "3.1.1", "shebang-command": "2.0.0", "which": "2.0.2" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], + "cytoscape": ["cytoscape@3.34.0", "", {}, "sha512-62rNSrioXw93uliKFBwjukeQyeWwH2PqDrTac31r2P6464u3AUvTk0xS4LVvT251g7IgkFunrI48ZEZGjywSOg=="], + + "cytoscape-cose-bilkent": ["cytoscape-cose-bilkent@4.1.0", "", { "dependencies": { "cose-base": "^1.0.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ=="], + + "cytoscape-fcose": ["cytoscape-fcose@2.2.0", "", { "dependencies": { "cose-base": "^2.2.0" }, "peerDependencies": { "cytoscape": "^3.2.0" } }, "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ=="], + + "d3": ["d3@7.9.0", "", { "dependencies": { "d3-array": "3", "d3-axis": "3", "d3-brush": "3", "d3-chord": "3", "d3-color": "3", "d3-contour": "4", "d3-delaunay": "6", "d3-dispatch": "3", "d3-drag": "3", "d3-dsv": "3", "d3-ease": "3", "d3-fetch": "3", "d3-force": "3", "d3-format": "3", "d3-geo": "3", "d3-hierarchy": "3", "d3-interpolate": "3", "d3-path": "3", "d3-polygon": "3", "d3-quadtree": "3", "d3-random": "3", "d3-scale": "4", "d3-scale-chromatic": "3", "d3-selection": "3", "d3-shape": "3", "d3-time": "3", "d3-time-format": "4", "d3-timer": "3", "d3-transition": "3", "d3-zoom": "3" } }, "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA=="], + + "d3-array": ["d3-array@3.2.4", "", { "dependencies": { "internmap": "1 - 2" } }, "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg=="], + + "d3-axis": ["d3-axis@3.0.0", "", {}, "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw=="], + + "d3-brush": ["d3-brush@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "3", "d3-transition": "3" } }, "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ=="], + + "d3-chord": ["d3-chord@3.0.1", "", { "dependencies": { "d3-path": "1 - 3" } }, "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g=="], + + "d3-color": ["d3-color@3.1.0", "", {}, "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA=="], + + "d3-contour": ["d3-contour@4.0.2", "", { "dependencies": { "d3-array": "^3.2.0" } }, "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA=="], + + "d3-delaunay": ["d3-delaunay@6.0.4", "", { "dependencies": { "delaunator": "5" } }, "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A=="], + + "d3-dispatch": ["d3-dispatch@3.0.1", "", {}, "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg=="], + + "d3-drag": ["d3-drag@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-selection": "3" } }, "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg=="], + + "d3-dsv": ["d3-dsv@3.0.1", "", { "dependencies": { "commander": "7", "iconv-lite": "0.6", "rw": "1" }, "bin": { "csv2json": "bin/dsv2json.js", "csv2tsv": "bin/dsv2dsv.js", "dsv2dsv": "bin/dsv2dsv.js", "dsv2json": "bin/dsv2json.js", "json2csv": "bin/json2dsv.js", "json2dsv": "bin/json2dsv.js", "json2tsv": "bin/json2dsv.js", "tsv2csv": "bin/dsv2dsv.js", "tsv2json": "bin/dsv2json.js" } }, "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q=="], + + "d3-ease": ["d3-ease@3.0.1", "", {}, "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w=="], + + "d3-fetch": ["d3-fetch@3.0.1", "", { "dependencies": { "d3-dsv": "1 - 3" } }, "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw=="], + + "d3-force": ["d3-force@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-quadtree": "1 - 3", "d3-timer": "1 - 3" } }, "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg=="], + + "d3-format": ["d3-format@3.1.2", "", {}, "sha512-AJDdYOdnyRDV5b6ArilzCPPwc1ejkHcoyFarqlPqT7zRYjhavcT3uSrqcMvsgh2CgoPbK3RCwyHaVyxYcP2Arg=="], + + "d3-geo": ["d3-geo@3.1.1", "", { "dependencies": { "d3-array": "2.5.0 - 3" } }, "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q=="], + + "d3-hierarchy": ["d3-hierarchy@3.1.2", "", {}, "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA=="], + + "d3-interpolate": ["d3-interpolate@3.0.1", "", { "dependencies": { "d3-color": "1 - 3" } }, "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g=="], + + "d3-path": ["d3-path@3.1.0", "", {}, "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ=="], + + "d3-polygon": ["d3-polygon@3.0.1", "", {}, "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg=="], + + "d3-quadtree": ["d3-quadtree@3.0.1", "", {}, "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw=="], + + "d3-random": ["d3-random@3.0.1", "", {}, "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ=="], + + "d3-sankey": ["d3-sankey@0.12.3", "", { "dependencies": { "d3-array": "1 - 2", "d3-shape": "^1.2.0" } }, "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ=="], + + "d3-scale": ["d3-scale@4.0.2", "", { "dependencies": { "d3-array": "2.10.0 - 3", "d3-format": "1 - 3", "d3-interpolate": "1.2.0 - 3", "d3-time": "2.1.1 - 3", "d3-time-format": "2 - 4" } }, "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ=="], + + "d3-scale-chromatic": ["d3-scale-chromatic@3.1.0", "", { "dependencies": { "d3-color": "1 - 3", "d3-interpolate": "1 - 3" } }, "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ=="], + + "d3-selection": ["d3-selection@3.0.0", "", {}, "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ=="], + + "d3-shape": ["d3-shape@3.2.0", "", { "dependencies": { "d3-path": "^3.1.0" } }, "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA=="], + + "d3-time": ["d3-time@3.1.0", "", { "dependencies": { "d3-array": "2 - 3" } }, "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q=="], + + "d3-time-format": ["d3-time-format@4.1.0", "", { "dependencies": { "d3-time": "1 - 3" } }, "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg=="], + + "d3-timer": ["d3-timer@3.0.1", "", {}, "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA=="], + + "d3-transition": ["d3-transition@3.0.1", "", { "dependencies": { "d3-color": "1 - 3", "d3-dispatch": "1 - 3", "d3-ease": "1 - 3", "d3-interpolate": "1 - 3", "d3-timer": "1 - 3" }, "peerDependencies": { "d3-selection": "2 - 3" } }, "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w=="], + + "d3-zoom": ["d3-zoom@3.0.0", "", { "dependencies": { "d3-dispatch": "1 - 3", "d3-drag": "2 - 3", "d3-interpolate": "1 - 3", "d3-selection": "2 - 3", "d3-transition": "2 - 3" } }, "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw=="], + + "dagre-d3-es": ["dagre-d3-es@7.0.14", "", { "dependencies": { "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg=="], + + "dayjs": ["dayjs@1.11.21", "", {}, "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA=="], + "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "2.0.2" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], + "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], + "dequal": ["dequal@2.0.3", "", {}, "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA=="], "detect-libc": ["detect-libc@2.1.2", "", {}, "sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ=="], @@ -463,12 +622,14 @@ "devlop": ["devlop@1.1.0", "", { "dependencies": { "dequal": "2.0.3" } }, "sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA=="], - "dompurify": ["dompurify@3.3.1", "", { "optionalDependencies": { "@types/trusted-types": "2.0.7" } }, "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q=="], + "dompurify": ["dompurify@3.4.11", "", { "optionalDependencies": { "@types/trusted-types": "^2.0.7" } }, "sha512-zhlUV12GsaRzMsf9q5M254YhA4+VuF0fG+QFqu6aYpoGlKtz+w8//jBcGVYBgQkR5GHjUomejY84AV+/uPbWdw=="], "enhanced-resolve": ["enhanced-resolve@5.19.0", "", { "dependencies": { "graceful-fs": "4.2.11", "tapable": "2.3.0" } }, "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg=="], "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "es-toolkit": ["es-toolkit@1.49.0", "", {}, "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g=="], + "esast-util-from-estree": ["esast-util-from-estree@2.0.0", "", { "dependencies": { "@types/estree-jsx": "1.0.5", "devlop": "1.1.0", "estree-util-visit": "2.0.0", "unist-util-position-from-estree": "2.0.0" } }, "sha512-4CyanoAudUSBAn5K13H4JhsMH6L9ZP7XbLVe/dKybkxMO7eDyLsT8UHl9TRNrU2Gr9nz+FovfSIjuXWJ81uVwQ=="], "esast-util-from-js": ["esast-util-from-js@2.0.1", "", { "dependencies": { "@types/estree-jsx": "1.0.5", "acorn": "8.15.0", "esast-util-from-estree": "2.0.0", "vfile-message": "4.0.3" } }, "sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw=="], @@ -517,6 +678,8 @@ "graceful-fs": ["graceful-fs@4.2.11", "", {}, "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="], + "hachure-fill": ["hachure-fill@0.5.2", "", {}, "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="], + "hast-util-from-parse5": ["hast-util-from-parse5@8.0.3", "", { "dependencies": { "@types/hast": "3.0.4", "@types/unist": "3.0.3", "devlop": "1.1.0", "hastscript": "9.0.1", "property-information": "7.1.0", "vfile": "6.0.3", "vfile-location": "5.0.3", "web-namespaces": "2.0.1" } }, "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg=="], "hast-util-parse-selector": ["hast-util-parse-selector@4.0.0", "", { "dependencies": { "@types/hast": "3.0.4" } }, "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A=="], @@ -539,10 +702,16 @@ "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], + "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], + "image-size": ["image-size@2.0.2", "", { "bin": { "image-size": "bin/image-size.js" } }, "sha512-IRqXKlaXwgSMAMtpNzZa1ZAe8m+Sa1770Dhk8VkSsP9LS+iHD62Zd8FQKs8fbPiagBE7BzoFX23cxFnwshpV6w=="], + "import-meta-resolve": ["import-meta-resolve@4.2.0", "", {}, "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg=="], + "inline-style-parser": ["inline-style-parser@0.2.7", "", {}, "sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA=="], + "internmap": ["internmap@1.0.1", "", {}, "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="], + "is-alphabetical": ["is-alphabetical@2.0.1", "", {}, "sha512-FWyyY60MeTNyeSRpkM2Iry0G9hpr7/9kD40mD/cGQEuilcZYS4okz8SN2Q6rLCJ8gbCt6fN+rC+6tMGS99LaxQ=="], "is-alphanumerical": ["is-alphanumerical@2.0.1", "", { "dependencies": { "is-alphabetical": "2.0.1", "is-decimal": "2.0.1" } }, "sha512-hmbYhX/9MUMF5uh7tOXyK/n0ZvWpad5caBA17GsC6vyuCqaWliRG5K1qS9inmUhEMaOBIW7/whAnSwveW/LtZw=="], @@ -559,6 +728,12 @@ "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + "katex": ["katex@0.16.47", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg=="], + + "khroma": ["khroma@2.1.0", "", {}, "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="], + + "layout-base": ["layout-base@1.0.2", "", {}, "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="], + "lightningcss": ["lightningcss@1.30.2", "", { "dependencies": { "detect-libc": "2.1.2" }, "optionalDependencies": { "lightningcss-android-arm64": "1.30.2", "lightningcss-darwin-arm64": "1.30.2", "lightningcss-darwin-x64": "1.30.2", "lightningcss-freebsd-x64": "1.30.2", "lightningcss-linux-arm-gnueabihf": "1.30.2", "lightningcss-linux-arm64-gnu": "1.30.2", "lightningcss-linux-arm64-musl": "1.30.2", "lightningcss-linux-x64-gnu": "1.30.2", "lightningcss-linux-x64-musl": "1.30.2", "lightningcss-win32-arm64-msvc": "1.30.2", "lightningcss-win32-x64-msvc": "1.30.2" } }, "sha512-utfs7Pr5uJyyvDETitgsaqSyjCb2qNRAtuqUeWIAKztsOYdcACf2KtARYXg2pSvhkt+9NfoaNY7fxjl6nuMjIQ=="], "lightningcss-android-arm64": ["lightningcss-android-arm64@1.30.2", "", { "os": "android", "cpu": "arm64" }, "sha512-BH9sEdOCahSgmkVhBLeU7Hc9DWeZ1Eb6wNS6Da8igvUwAe0sqROHddIlvU06q3WyXVEOYDZ6ykBZQnjTbmo4+A=="], @@ -585,6 +760,8 @@ "linkify-it": ["linkify-it@5.0.0", "", { "dependencies": { "uc.micro": "2.1.0" } }, "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ=="], + "lodash-es": ["lodash-es@4.18.1", "", {}, "sha512-J8xewKD/Gk22OZbhpOVSwcs60zhd95ESDwezOFuA3/099925PdHJ7OFHNTGtajL3AlZkykD32HykiMo+BIBI8A=="], + "long": ["long@5.3.2", "", {}, "sha512-mNAgZ1GmyNhD7AuqnTG3/VQ26o760+ZYBPKjPvugO8+nLbYfX6TVpJPseBvopbdY+qpZ/lKUnmEc1LeZYS3QAA=="], "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], @@ -601,6 +778,8 @@ "markdown-table": ["markdown-table@3.0.4", "", {}, "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw=="], + "marked": ["marked@16.4.2", "", { "bin": { "marked": "bin/marked.js" } }, "sha512-TI3V8YYWvkVf3KJe1dRkpnjs68JUPyEa5vjKrp1XEEJUAOaQc+Qj+L1qWbPd0SJuAdQkFU0h73sXXqwDYxsiDA=="], + "mdast-util-find-and-replace": ["mdast-util-find-and-replace@3.0.2", "", { "dependencies": { "@types/mdast": "4.0.4", "escape-string-regexp": "5.0.0", "unist-util-is": "6.0.1", "unist-util-visit-parents": "6.0.2" } }, "sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg=="], "mdast-util-from-markdown": ["mdast-util-from-markdown@2.0.2", "", { "dependencies": { "@types/mdast": "4.0.4", "@types/unist": "3.0.3", "decode-named-character-reference": "1.3.0", "devlop": "1.1.0", "mdast-util-to-string": "4.0.0", "micromark": "4.0.2", "micromark-util-decode-numeric-character-reference": "2.0.2", "micromark-util-decode-string": "2.0.1", "micromark-util-normalize-identifier": "2.0.1", "micromark-util-symbol": "2.0.1", "micromark-util-types": "2.0.2", "unist-util-stringify-position": "4.0.0" } }, "sha512-uZhTV/8NBuw0WHkPTrCqDOl0zVe1BIng5ZtHoDk49ME1qqcjYmmLmOf0gELgcRMxN4w2iuIeVso5/6QymSrgmA=="], @@ -635,6 +814,8 @@ "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], + "mermaid": ["mermaid@11.16.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.2", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.2.0", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.3", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.20", "dompurify": "^3.3.3", "es-toolkit": "^1.45.1", "katex": "^0.16.45", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-Zvm3kbstgdpvIJPPItlL7fppIZ3kibvc1oZIGxdvk9t6UFz6flv+Jw7FtRGKwfcI8OckmH04LqG6LlS6X4B1pA=="], + "micromark": ["micromark@4.0.2", "", { "dependencies": { "@types/debug": "4.1.12", "debug": "4.4.3", "decode-named-character-reference": "1.3.0", "devlop": "1.1.0", "micromark-core-commonmark": "2.0.3", "micromark-factory-space": "2.0.1", "micromark-util-character": "2.1.1", "micromark-util-chunked": "2.0.1", "micromark-util-combine-extensions": "2.0.1", "micromark-util-decode-numeric-character-reference": "2.0.2", "micromark-util-encode": "2.0.1", "micromark-util-normalize-identifier": "2.0.1", "micromark-util-resolve-all": "2.0.1", "micromark-util-sanitize-uri": "2.0.1", "micromark-util-subtokenize": "2.1.0", "micromark-util-symbol": "2.0.1", "micromark-util-types": "2.0.2" } }, "sha512-zpe98Q6kvavpCr1NPVSCMebCKfD7CA2NqZ+rykeNhONIJBpc1tFKt9hucLGwha3jNTNI8lHpctWJWoimVF4PfA=="], "micromark-core-commonmark": ["micromark-core-commonmark@2.0.3", "", { "dependencies": { "decode-named-character-reference": "1.3.0", "devlop": "1.1.0", "micromark-factory-destination": "2.0.1", "micromark-factory-label": "2.0.1", "micromark-factory-space": "2.0.1", "micromark-factory-title": "2.0.1", "micromark-factory-whitespace": "2.0.1", "micromark-util-character": "2.1.1", "micromark-util-chunked": "2.0.1", "micromark-util-classify-character": "2.0.1", "micromark-util-html-tag-name": "2.0.1", "micromark-util-normalize-identifier": "2.0.1", "micromark-util-resolve-all": "2.0.1", "micromark-util-subtokenize": "2.1.0", "micromark-util-symbol": "2.0.1", "micromark-util-types": "2.0.2" } }, "sha512-RDBrHEMSxVFLg6xvnXmb1Ayr2WzLAWjeSATAoxwKYJV94TeNavgoIdA0a9ytzDSVzBy2YKFK+emCPOEibLeCrg=="], @@ -729,10 +910,14 @@ "oniguruma-to-es": ["oniguruma-to-es@4.3.4", "", { "dependencies": { "oniguruma-parser": "0.12.1", "regex": "6.1.0", "regex-recursion": "6.0.2" } }, "sha512-3VhUGN3w2eYxnTzHn+ikMI+fp/96KoRSVK9/kMTcFqj1NRDh2IhQCKvYxDnWePKRXY/AqH+Fuiyb7VHSzBjHfA=="], + "package-manager-detector": ["package-manager-detector@1.7.0", "", {}, "sha512-xg1eHpwYL/D/HEdWw2goFZP6vV0FH7W+PZ5rFkGjdIDLtxq7EkzBUeT3m+lndYCt8wKbmofUu1MUdMCXkCk9ZQ=="], + "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "2.0.11", "character-entities-legacy": "3.0.0", "character-reference-invalid": "2.0.1", "decode-named-character-reference": "1.3.0", "is-alphanumerical": "2.0.1", "is-decimal": "2.0.1", "is-hexadecimal": "2.0.1" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "6.0.1" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + "path-data-parser": ["path-data-parser@0.1.0", "", {}, "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="], + "path-key": ["path-key@3.1.1", "", {}, "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q=="], "path-to-regexp": ["path-to-regexp@8.3.0", "", {}, "sha512-7jdwVIRtsP8MYpdXSwOS0YdD0Du+qOoF/AEPIt88PcCFrZCzx41oxku1jD88hZBwbNUIEfpqvuhjFaMAqMTWnA=="], @@ -741,6 +926,10 @@ "picomatch": ["picomatch@4.0.3", "", {}, "sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q=="], + "points-on-curve": ["points-on-curve@0.2.0", "", {}, "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="], + + "points-on-path": ["points-on-path@0.2.1", "", { "dependencies": { "path-data-parser": "0.1.0", "points-on-curve": "0.2.0" } }, "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g=="], + "postcss": ["postcss@8.5.6", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg=="], "postcss-selector-parser": ["postcss-selector-parser@7.1.1", "", { "dependencies": { "cssesc": "3.0.0", "util-deprecate": "1.0.2" } }, "sha512-orRsuYpJVw8LdAwqqLykBj9ecS5/cRHlI5+nvTo8LcCKmzDmqVORXtOIYEEQuL9D4BxtA1lm5isAqzQZCoQ6Eg=="], @@ -805,6 +994,14 @@ "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], + "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="], + + "roughjs": ["roughjs@4.6.6", "", { "dependencies": { "hachure-fill": "^0.5.2", "path-data-parser": "^0.1.0", "points-on-curve": "^0.2.0", "points-on-path": "^0.2.1" } }, "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ=="], + + "rw": ["rw@1.3.3", "", {}, "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="], + + "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], "scroll-into-view-if-needed": ["scroll-into-view-if-needed@3.1.0", "", { "dependencies": { "compute-scroll-into-view": "3.1.1" } }, "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ=="], @@ -833,6 +1030,8 @@ "styled-jsx": ["styled-jsx@5.1.6", "", { "dependencies": { "client-only": "0.0.1" }, "peerDependencies": { "react": "19.2.4" } }, "sha512-qSVyDTeMotdvQYoHWLNGwRFJHC+i+ZvdBRYosOFgC+Wg1vx4frN2/RG/NA7SYqqvKNLf39P2LSRA2pu6n0XYZA=="], + "stylis": ["stylis@4.4.0", "", {}, "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA=="], + "tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="], "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], @@ -847,6 +1046,8 @@ "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], + "ts-dedent": ["ts-dedent@2.3.0", "", {}, "sha512-JfJeIHke7y2egdGGgRAvpCwYFUsHlM2gPcrVOxFkznt/4uzQ7HFmvE63iFHVLBJNDuyDOQgijDK/tXH/f6Msjg=="], + "tslib": ["tslib@2.8.1", "", {}, "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w=="], "tsx": ["tsx@4.21.0", "", { "dependencies": { "esbuild": "0.27.3", "get-tsconfig": "4.13.6" }, "optionalDependencies": { "fsevents": "2.3.3" }, "bin": { "tsx": "dist/cli.mjs" } }, "sha512-5C1sg4USs1lfG0GFb2RLXsdpXqBSEhAaA/0kPL01wxzpMqLILNxIxIOKiILz+cdg/pLnOUxFYOR5yhHU666wbw=="], @@ -885,6 +1086,8 @@ "util-deprecate": ["util-deprecate@1.0.2", "", {}, "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="], + "uuid": ["uuid@14.0.1", "", { "bin": { "uuid": "dist-node/bin/uuid" } }, "sha512-6ZxzVpzDXDa3bJWaHilVayA+BH/1zmxCJoVgvmqJnid/gPoKHxUrS/aC/T6LGQtNHT+XHG9fXPJB4d+IrU30Ew=="], + "vfile": ["vfile@6.0.3", "", { "dependencies": { "@types/unist": "3.0.3", "vfile-message": "4.0.3" } }, "sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q=="], "vfile-location": ["vfile-location@5.0.3", "", { "dependencies": { "@types/unist": "3.0.3", "vfile": "6.0.3" } }, "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg=="], @@ -921,6 +1124,14 @@ "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "optionalDependencies": { "@types/react": "19.2.14" }, "peerDependencies": { "react": "19.2.4" } }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], + + "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], + + "d3-sankey/d3-array": ["d3-array@2.12.1", "", { "dependencies": { "internmap": "^1.0.0" } }, "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ=="], + + "d3-sankey/d3-shape": ["d3-shape@1.3.7", "", { "dependencies": { "d3-path": "1" } }, "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw=="], + "fumadocs-core/next": ["next@16.1.6", "", { "dependencies": { "@next/env": "16.1.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "2.9.19", "caniuse-lite": "1.0.30001769", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.6", "@next/swc-darwin-x64": "16.1.6", "@next/swc-linux-arm64-gnu": "16.1.6", "@next/swc-linux-arm64-musl": "16.1.6", "@next/swc-linux-x64-gnu": "16.1.6", "@next/swc-linux-x64-musl": "16.1.6", "@next/swc-win32-arm64-msvc": "16.1.6", "@next/swc-win32-x64-msvc": "16.1.6", "@opentelemetry/api": "1.9.0", "sharp": "0.34.5" }, "peerDependencies": { "react": "19.2.4", "react-dom": "19.2.4" }, "bin": { "next": "dist/bin/next" } }, "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw=="], "fumadocs-mdx/next": ["next@16.1.6", "", { "dependencies": { "@next/env": "16.1.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "2.9.19", "caniuse-lite": "1.0.30001769", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.6", "@next/swc-darwin-x64": "16.1.6", "@next/swc-linux-arm64-gnu": "16.1.6", "@next/swc-linux-arm64-musl": "16.1.6", "@next/swc-linux-x64-gnu": "16.1.6", "@next/swc-linux-x64-musl": "16.1.6", "@next/swc-win32-arm64-msvc": "16.1.6", "@next/swc-win32-x64-msvc": "16.1.6", "@opentelemetry/api": "1.9.0", "sharp": "0.34.5" }, "peerDependencies": { "react": "19.2.4", "react-dom": "19.2.4" }, "bin": { "next": "dist/bin/next" } }, "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw=="], @@ -933,6 +1144,12 @@ "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], + "posthog-js/dompurify": ["dompurify@3.3.1", "", { "optionalDependencies": { "@types/trusted-types": "2.0.7" } }, "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q=="], + + "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], + + "d3-sankey/d3-shape/d3-path": ["d3-path@1.0.9", "", {}, "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="], + "fumadocs-core/next/@next/env": ["@next/env@16.1.6", "", {}, "sha512-N1ySLuZjnAtN3kFnwhAwPvZah8RJxKasD7x1f8shFqhncnWZn4JMfg37diLNuoHsLAlrDfM3g4mawVdtAG8XLQ=="], "fumadocs-core/next/@next/swc-darwin-arm64": ["@next/swc-darwin-arm64@16.1.6", "", { "os": "darwin", "cpu": "arm64" }, "sha512-wTzYulosJr/6nFnqGW7FrG3jfUUlEf8UjGA0/pyypJl42ExdVgC6xJgcXQ+V8QFn6niSG2Pb8+MIG1mZr2vczw=="], diff --git a/content/docs/security/cryptography.mdx b/content/docs/security/cryptography.mdx index cd4bf12..953ea20 100644 --- a/content/docs/security/cryptography.mdx +++ b/content/docs/security/cryptography.mdx @@ -48,23 +48,30 @@ This is the property that makes the architecture zero-knowledge: ZeroKMS produce Your application expands the key seed into a **unique data key per value**, using an **HMAC-based key derivation function**. The data key encrypts the value with AES-256-GCM-SIV, then is discarded from memory. +```mermaid +flowchart TD + subgraph zerokms["ZeroKMS (CipherStash)"] + root["AWS KMS root key"] + auth["Authority key"] + seed["Key seed"] + root -. encrypts at rest .-> auth + auth -- "layer 1:<br/>proxy symmetric re-encryption" --> seed + end + + subgraph you["Your infrastructure"] + client["Client key"] + datakey["Data key<br/>one per value<br/>discarded after use"] + ciphertext["Ciphertext"] + end + + client -- derivation input --> seed + seed -- "layer 2:<br/>HMAC-based KDF" --> datakey + datakey -- AES-256-GCM-SIV --> ciphertext ``` - AWS KMS root key - │ protects at rest - ▼ - Authority key ──┐ - (ZeroKMS) │ proxy symmetric re-encryption - ├──────────────────────────────► Key seed ──┐ - Client key ─────┘ (server-side) │ - (your app) │ HMAC-based KDF - │ (client-side) - ▼ - Data key, per value - AES-256-GCM-SIV - discarded after use -``` -So: re-encryption describes how the seed is produced; HMAC key derivation describes how the seed becomes per-value keys. Both are true, at different layers. +Re-encryption describes how the seed is produced. HMAC key derivation describes how the seed becomes per-value keys. Both are true, at different layers. + +Note where the boundary falls: the key seed crosses it, and the data key never does. ## What is cached, and what is not diff --git a/package.json b/package.json index 0718fdb..dfcbb51 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "fumadocs-ui": "16.6.0", "github-slugger": "^2.0.0", "lucide-react": "^0.563.0", + "mermaid": "^11.16.0", "next": "16.2.3", "posthog-js": "^1.354.0", "posthog-node": "^5.26.0", diff --git a/source.config.ts b/source.config.ts index c44cd8c..feeed91 100644 --- a/source.config.ts +++ b/source.config.ts @@ -102,6 +102,14 @@ const codeCopyTrackingTransformer: ShikiTransformer = { pre(node) { node.properties["data-language"] = this.options.lang ?? "plaintext"; + // A ```mermaid fence stays a code fence in the mdast, so the processed + // markdown we serve at `.mdx` and in llms.txt keeps the diagram as + // readable source. Carry the raw source through to the client, where + // `TrackedCodeBlock` swaps the highlighted block for a rendered diagram. + if (this.options.lang === "mermaid") { + node.properties["data-mermaid"] = this.source; + } + const raw = typeof this.options.meta?.__raw === "string" ? this.options.meta.__raw diff --git a/src/components/code-block.tsx b/src/components/code-block.tsx index b0f9d18..d15fbaa 100644 --- a/src/components/code-block.tsx +++ b/src/components/code-block.tsx @@ -9,6 +9,7 @@ import { slug } from "github-slugger"; import { usePathname } from "next/navigation"; import posthog from "posthog-js"; import { type MouseEvent, useCallback, useEffect, useRef } from "react"; +import { Mermaid } from "@/components/mermaid"; // Build-time metadata is attached to the `<pre>` as `data-*` attributes by the // `cipherstash:code-copy-tracking` Shiki transformer (see `source.config.ts`). @@ -18,6 +19,8 @@ type TrackingProps = { "data-filename"?: string; "data-cta"?: string; "data-cta-type"?: string; + /** Raw diagram source, carried through for `mermaid` fences. */ + "data-mermaid"?: string; }; /** @@ -35,6 +38,15 @@ type TrackingProps = { export function TrackedCodeBlock(props: CodeBlockProps) { const attrs = props as CodeBlockProps & TrackingProps; const language = attrs["data-language"] ?? "plaintext"; + + // A ```mermaid fence is a code fence everywhere except on screen: the source + // survives in the mdast (so `.mdx` and llms.txt keep it readable), and the + // rendered page gets a diagram instead of an overflowing block of syntax. + const mermaidChart = attrs["data-mermaid"]; + if (language === "mermaid" && mermaidChart) { + return <Mermaid chart={mermaidChart} />; + } + const exampleId = attrs["data-example-id"]; const isCta = attrs["data-cta"] === "true"; const ctaType = attrs["data-cta-type"]; diff --git a/src/components/mermaid.tsx b/src/components/mermaid.tsx new file mode 100644 index 0000000..bdf5687 --- /dev/null +++ b/src/components/mermaid.tsx @@ -0,0 +1,79 @@ +"use client"; + +import { useEffect, useId, useState } from "react"; + +/** + * Renders a Mermaid diagram authored as a ```mermaid code fence. + * + * The fence stays a code fence all the way through the markdown pipeline. The + * Shiki transformer in `source.config.ts` copies its source onto the `<pre>` as + * `data-mermaid`, and `TrackedCodeBlock` swaps in this component at render + * time. That ordering matters: `fumadocs-mdx` serializes the *same* mdast tree + * that it renders, so a remark plugin rewriting the fence into JSX would also + * rewrite the markdown we serve at `.mdx` and in llms.txt, where a diagram + * should degrade to readable source rather than an opaque component call. + * + * Mermaid is ~1MB, so it is imported dynamically inside the effect. Only pages + * that actually contain a diagram pay for it, and it never enters the server + * bundle. + */ +export function Mermaid({ chart }: { chart: string }) { + // `useId` yields colons, which are not valid in a DOM id passed to Mermaid. + const id = useId().replace(/[^a-zA-Z0-9]/g, ""); + const [svg, setSvg] = useState<string>(""); + + useEffect(() => { + let cancelled = false; + + async function render() { + const mermaid = (await import("mermaid")).default; + const isDark = document.documentElement.classList.contains("dark"); + + mermaid.initialize({ + startOnLoad: false, + theme: isDark ? "dark" : "default", + // Diagram labels should match the surrounding prose, not Mermaid's + // default sans stack. + fontFamily: "inherit", + securityLevel: "strict", + }); + + try { + const { svg } = await mermaid.render(`mermaid-${id}`, chart); + if (!cancelled) setSvg(svg); + } catch { + // A malformed diagram should not blank the page; the fence's text is + // still in the source and in the markdown output. + if (!cancelled) setSvg(""); + } + } + + render(); + + // Re-render on theme toggle: Mermaid bakes colours into the SVG. + const observer = new MutationObserver(render); + observer.observe(document.documentElement, { + attributes: true, + attributeFilter: ["class"], + }); + + return () => { + cancelled = true; + observer.disconnect(); + }; + }, [chart, id]); + + if (!svg) { + // Reserve nothing: an empty diagram is better than a layout jump. + return null; + } + + return ( + <div + className="my-6 flex justify-center overflow-x-auto rounded-lg border border-fd-border bg-fd-card p-4 [&_svg]:h-auto [&_svg]:max-w-full" + // Mermaid output, generated from our own content with securityLevel: strict. + // biome-ignore lint/security/noDangerouslySetInnerHtml: Mermaid returns an SVG string. + dangerouslySetInnerHTML={{ __html: svg }} + /> + ); +} From cabc111c4312bbd6bf45e85824bf5f69f8e7c847 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 17:49:42 +1000 Subject: [PATCH 054/151] docs(solutions): convert the data-residency diagrams to mermaid Also gates the build on diagram validity. Mermaid parses in the browser, and the component catches errors so a bad chart can't blank the page. That makes the failure mode silent: a diagram that renders as nothing looks exactly like a diagram nobody noticed was missing. `validate-mermaid` parses every ```mermaid fence at build time (mermaid needs a DOM, so jsdom provides one) and fails with the file and line. Verified by planting a broken diagram. The component now falls back to rendering the diagram source rather than nothing, for the render step the parse gate can't cover. The two deployment diagrams gain what ASCII couldn't express: the key-seed exchange is bidirectional, and a crossed edge shows that EU ciphertext cannot be decrypted by the APAC app. Region identifiers now carry the .aws suffix, matching the regions table. --- bun.lock | 94 +++++++++++++++++++-- content/docs/solutions/data-residency.mdx | 51 ++++++------ package.json | 7 +- scripts/validate-mermaid.ts | 99 +++++++++++++++++++++++ src/components/mermaid.tsx | 19 ++++- 5 files changed, 236 insertions(+), 34 deletions(-) create mode 100644 scripts/validate-mermaid.ts diff --git a/bun.lock b/bun.lock index 323067b..aa71d99 100644 --- a/bun.lock +++ b/bun.lock @@ -21,10 +21,12 @@ "devDependencies": { "@biomejs/biome": "^2.3.14", "@tailwindcss/postcss": "^4.1.18", + "@types/jsdom": "^28.0.3", "@types/mdx": "^2.0.13", "@types/node": "^25.2.1", "@types/react": "^19.2.13", "@types/react-dom": "^19.2.3", + "jsdom": "^29.1.1", "postcss": "^8.5.6", "tailwindcss": "^4.1.18", "tsx": "^4.0.0", @@ -40,6 +42,14 @@ "@antfu/install-pkg": ["@antfu/install-pkg@1.1.0", "", { "dependencies": { "package-manager-detector": "^1.3.0", "tinyexec": "^1.0.1" } }, "sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ=="], + "@asamuzakjp/css-color": ["@asamuzakjp/css-color@5.1.11", "", { "dependencies": { "@asamuzakjp/generational-cache": "^1.0.1", "@csstools/css-calc": "^3.2.0", "@csstools/css-color-parser": "^4.1.0", "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-KVw6qIiCTUQhByfTd78h2yD1/00waTmm9uy/R7Ck/ctUyAPj+AEDLkQIdJW0T8+qGgj3j5bpNKK7Q3G+LedJWg=="], + + "@asamuzakjp/dom-selector": ["@asamuzakjp/dom-selector@7.1.1", "", { "dependencies": { "@asamuzakjp/generational-cache": "^1.0.1", "@asamuzakjp/nwsapi": "^2.3.9", "bidi-js": "^1.0.3", "css-tree": "^3.2.1", "is-potential-custom-element-name": "^1.0.1" } }, "sha512-67RZDnYRc8H/8MLDgQCDE//zoqVFwajkepHZgmXrbwybzXOEwOWGPYGmALYl9J2DOLfFPPs6kKCqmbzV895hTQ=="], + + "@asamuzakjp/generational-cache": ["@asamuzakjp/generational-cache@1.0.1", "", {}, "sha512-wajfB8KqzMCN2KGNFdLkReeHncd0AslUSrvHVvvYWuU8ghncRJoA50kT3zP9MVL0+9g4/67H+cdvBskj9THPzg=="], + + "@asamuzakjp/nwsapi": ["@asamuzakjp/nwsapi@2.3.9", "", {}, "sha512-n8GuYSrI9bF7FFZ/SjhwevlHc8xaVlb/7HmHelnc/PZXBD2ZR49NnN9sMMuDdEGPeeRQ5d0hqlSlEpgCX3Wl0Q=="], + "@biomejs/biome": ["@biomejs/biome@2.3.15", "", { "optionalDependencies": { "@biomejs/cli-darwin-arm64": "2.3.15", "@biomejs/cli-darwin-x64": "2.3.15", "@biomejs/cli-linux-arm64": "2.3.15", "@biomejs/cli-linux-arm64-musl": "2.3.15", "@biomejs/cli-linux-x64": "2.3.15", "@biomejs/cli-linux-x64-musl": "2.3.15", "@biomejs/cli-win32-arm64": "2.3.15", "@biomejs/cli-win32-x64": "2.3.15" }, "bin": { "biome": "bin/biome" } }, "sha512-u+jlPBAU2B45LDkjjNNYpc1PvqrM/co4loNommS9/sl9oSxsAQKsNZejYuUztvToB5oXi1tN/e62iNd6ESiY3g=="], "@biomejs/cli-darwin-arm64": ["@biomejs/cli-darwin-arm64@2.3.15", "", { "os": "darwin", "cpu": "arm64" }, "sha512-SDCdrJ4COim1r8SNHg19oqT50JfkI/xGZHSyC6mGzMfKrpNe/217Eq6y98XhNTc0vGWDjznSDNXdUc6Kg24jbw=="], @@ -60,8 +70,22 @@ "@braintree/sanitize-url": ["@braintree/sanitize-url@7.1.2", "", {}, "sha512-jigsZK+sMF/cuiB7sERuo9V7N9jx+dhmHHnQyDSVdpZwVutaBu7WvNYqMDLSgFgfB30n452TP3vjDAvFC973mA=="], + "@bramus/specificity": ["@bramus/specificity@2.4.2", "", { "dependencies": { "css-tree": "^3.0.0" }, "bin": { "specificity": "bin/cli.js" } }, "sha512-ctxtJ/eA+t+6q2++vj5j7FYX3nRu311q1wfYH3xjlLOsczhlhxAg2FWNUXhpGvAw3BWo1xBcvOV6/YLc2r5FJw=="], + "@chevrotain/types": ["@chevrotain/types@11.1.2", "", {}, "sha512-U+HFai5+zmJCkK86QsaJtoITlboZHBqrVketcO2ROv865xfCMSFpELQoz1GkX5GzME8pTa+3kbKrZHQtI0gdbw=="], + "@csstools/color-helpers": ["@csstools/color-helpers@6.1.0", "", {}, "sha512-064IFJdjTfUqnjpCVpMOdbr8FLQBhinbZj6yRv2An2E41O/pLEXqfFRWqGq/SxlE5PEUYTlvWsG2r8MswAVvkg=="], + + "@csstools/css-calc": ["@csstools/css-calc@3.2.1", "", { "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg=="], + + "@csstools/css-color-parser": ["@csstools/css-color-parser@4.1.9", "", { "dependencies": { "@csstools/color-helpers": "^6.1.0", "@csstools/css-calc": "^3.2.1" }, "peerDependencies": { "@csstools/css-parser-algorithms": "^4.0.0", "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-paQcIaOO53Rk5+YrBaBjm/SgrV4INImjo2BT1DtQRYr+XeTRbeAYlS+jxXp9drqvKmtFnWRJKIalDLhZZDu42A=="], + + "@csstools/css-parser-algorithms": ["@csstools/css-parser-algorithms@4.0.0", "", { "peerDependencies": { "@csstools/css-tokenizer": "^4.0.0" } }, "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w=="], + + "@csstools/css-syntax-patches-for-csstree": ["@csstools/css-syntax-patches-for-csstree@1.1.6", "", { "peerDependencies": { "css-tree": "^3.2.1" }, "optionalPeers": ["css-tree"] }, "sha512-TcJCWFbXLPpJYq6z7bfOyjWYJDiDg2/I4gyUC9pqPNqHFRIey0EB0q0L5cSnQDfWJg8Jd6VadakxdIez/3zkqQ=="], + + "@csstools/css-tokenizer": ["@csstools/css-tokenizer@4.0.0", "", {}, "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA=="], + "@emnapi/runtime": ["@emnapi/runtime@1.8.1", "", { "dependencies": { "tslib": "2.8.1" } }, "sha512-mehfKSMWjjNol8659Z8KxEMrdSJDDot5SXMq00dM8BN4o+CLNXQ0xH2V7EchNHV4RmbZLmmPdEaXZc5H2FXmDg=="], "@esbuild/aix-ppc64": ["@esbuild/aix-ppc64@0.27.3", "", { "os": "aix", "cpu": "ppc64" }, "sha512-9fJMTNFTWZMh5qwrBItuziu834eOCUcEqymSH7pY+zoMVEZg3gcPuBNxH1EvfVYe9h0x/Ptw8KBzv7qxb7l8dg=="], @@ -116,6 +140,8 @@ "@esbuild/win32-x64": ["@esbuild/win32-x64@0.27.3", "", { "os": "win32", "cpu": "x64" }, "sha512-4uJGhsxuptu3OcpVAzli+/gWusVGwZZHTlS63hh++ehExkVT8SgiEf7/uC/PclrPPkLhZqGgCTjd0VWLo6xMqA=="], + "@exodus/bytes": ["@exodus/bytes@1.15.1", "", { "peerDependencies": { "@noble/hashes": "^1.8.0 || ^2.0.0" }, "optionalPeers": ["@noble/hashes"] }, "sha512-S6mL0yNB/Abt9Ei4tq8gDhcczc4S3+vQ4ra7vxnAf+YHC02srtqxKKZghx2Dq6p0e66THKwR6r8N6P95wEty7Q=="], + "@floating-ui/core": ["@floating-ui/core@1.7.4", "", { "dependencies": { "@floating-ui/utils": "0.2.10" } }, "sha512-C3HlIdsBxszvm5McXlB8PeOEWfBhcGBTZGkGlWc2U0KFY5IwG5OQEuQ8rq52DZmcHDlPLd+YFBK+cZcytwIFWg=="], "@floating-ui/dom": ["@floating-ui/dom@1.7.5", "", { "dependencies": { "@floating-ui/core": "1.7.4", "@floating-ui/utils": "0.2.10" } }, "sha512-N0bD2kIPInNHUHehXhMke1rBGs1dwqvC9O9KYMyyjK7iXt7GAhnro7UlcuYcGdS/yYOlq0MAVgrow8IbWJwyqg=="], @@ -458,6 +484,8 @@ "@types/hast": ["@types/hast@3.0.4", "", { "dependencies": { "@types/unist": "3.0.3" } }, "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ=="], + "@types/jsdom": ["@types/jsdom@28.0.3", "", { "dependencies": { "@types/node": "*", "@types/tough-cookie": "*", "parse5": "^8.0.0", "undici-types": "^7.21.0" } }, "sha512-/HQ2uFoetFTXuye8vzIcHw2z6Fwi7Hi/qcgC+RoS9NCyewiqxhVGqlG+ViGB6lkax481R6dmhf1I7lIGlzJStQ=="], + "@types/mdast": ["@types/mdast@4.0.4", "", { "dependencies": { "@types/unist": "3.0.3" } }, "sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA=="], "@types/mdx": ["@types/mdx@2.0.13", "", {}, "sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw=="], @@ -470,6 +498,8 @@ "@types/react-dom": ["@types/react-dom@19.2.3", "", { "peerDependencies": { "@types/react": "19.2.14" } }, "sha512-jp2L/eY6fn+KgVVQAOqYItbF0VY/YApe5Mz2F0aykSO8gx31bYCZyvSeYxCHKvzHG5eZjc+zyaS5BrBWya2+kQ=="], + "@types/tough-cookie": ["@types/tough-cookie@4.0.5", "", {}, "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA=="], + "@types/trusted-types": ["@types/trusted-types@2.0.7", "", {}, "sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw=="], "@types/unist": ["@types/unist@3.0.3", "", {}, "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q=="], @@ -494,6 +524,8 @@ "baseline-browser-mapping": ["baseline-browser-mapping@2.9.19", "", { "bin": { "baseline-browser-mapping": "dist/cli.js" } }, "sha512-ipDqC8FrAl/76p2SSWKSI+H9tFwm7vYqXQrItCuiVPt26Km0jS+NzSsBWAaBusvSbQcfJG+JitdMm+wZAgTYqg=="], + "bidi-js": ["bidi-js@1.0.3", "", { "dependencies": { "require-from-string": "^2.0.2" } }, "sha512-RKshQI1R3YQ+n9YJz2QQ147P66ELpa1FQEg20Dk8oW9t2KgLbpDLLp9aGZ7y8WHSshDknG0bknqGw5/tyCs5tw=="], + "brace-expansion": ["brace-expansion@5.0.3", "", { "dependencies": { "balanced-match": "4.0.4" } }, "sha512-fy6KJm2RawA5RcHkLa1z/ScpBeA762UF9KmZQxwIbDtRJrgLzM10depAiEQ+CXYcoiqW1/m96OAAoke2nE9EeA=="], "caniuse-lite": ["caniuse-lite@1.0.30001769", "", {}, "sha512-BCfFL1sHijQlBGWBMuJyhZUhzo7wer5sVj9hqekB/7xn0Ypy+pER/edCYQm4exbXj4WiySGp40P8UuTh6w1srg=="], @@ -530,6 +562,8 @@ "cross-spawn": ["cross-spawn@7.0.6", "", { "dependencies": { "path-key": "3.1.1", "shebang-command": "2.0.0", "which": "2.0.2" } }, "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA=="], + "css-tree": ["css-tree@3.2.1", "", { "dependencies": { "mdn-data": "2.27.1", "source-map-js": "^1.2.1" } }, "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA=="], + "cssesc": ["cssesc@3.0.0", "", { "bin": { "cssesc": "bin/cssesc" } }, "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg=="], "csstype": ["csstype@3.2.3", "", {}, "sha512-z1HGKcYy2xA8AGQfwrn0PAy+PB7X/GSj3UVJW9qKyn43xWa+gl5nXmU4qqLMRzWVLFC8KusUX8T/0kCiOYpAIQ=="], @@ -606,10 +640,14 @@ "dagre-d3-es": ["dagre-d3-es@7.0.14", "", { "dependencies": { "d3": "^7.9.0", "lodash-es": "^4.17.21" } }, "sha512-P4rFMVq9ESWqmOgK+dlXvOtLwYg0i7u0HBGJER0LZDJT2VHIPAMZ/riPxqJceWMStH5+E61QxFra9kIS3AqdMg=="], + "data-urls": ["data-urls@7.0.0", "", { "dependencies": { "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.0" } }, "sha512-23XHcCF+coGYevirZceTVD7NdJOqVn+49IHyxgszm+JIiHLoB2TkmPtsYkNWT1pvRSGkc35L6NHs0yHkN2SumA=="], + "dayjs": ["dayjs@1.11.21", "", {}, "sha512-98IT+HOahAisibz/yjKbzuOBwYcjJ7BCLPzARyHiyEBmRz4fatF+KPJszEHXsGYjUG234aH/cOjW1wwTbKUZlA=="], "debug": ["debug@4.4.3", "", { "dependencies": { "ms": "2.1.3" } }, "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA=="], + "decimal.js": ["decimal.js@10.6.0", "", {}, "sha512-YpgQiITW3JXGntzdUmyUR1V812Hn8T1YVXhCu+wO3OpS4eU9l4YdD3qjyiKdV6mvV29zapkMeD390UVEf2lkUg=="], + "decode-named-character-reference": ["decode-named-character-reference@1.3.0", "", { "dependencies": { "character-entities": "2.0.2" } }, "sha512-GtpQYB283KrPp6nRw50q3U9/VfOutZOe103qlN7BPP6Ad27xYnOIWv4lPzo8HCAL+mMZofJ9KEy30fq6MfaK6Q=="], "delaunator": ["delaunator@5.1.0", "", { "dependencies": { "robust-predicates": "^3.0.2" } }, "sha512-AGrQ4QSgssa1NGmWmLPqN5NY2KajF5MqxetNEO+o0n3ZwZZeTmt7bBnvzHWrmkZFxGgr4HdyFgelzgi06otLuQ=="], @@ -626,7 +664,7 @@ "enhanced-resolve": ["enhanced-resolve@5.19.0", "", { "dependencies": { "graceful-fs": "4.2.11", "tapable": "2.3.0" } }, "sha512-phv3E1Xl4tQOShqSte26C7Fl84EwUdZsyOuSSk9qtAGyyQs2s3jJzComh+Abf4g187lUUAvH+H26omrqia2aGg=="], - "entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "entities": ["entities@8.0.0", "", {}, "sha512-zwfzJecQ/Uej6tusMqwAqU/6KL2XaB2VZ2Jg54Je6ahNBGNH6Ek6g3jjNCF0fG9EWQKGZNddNjU5F1ZQn/sBnA=="], "es-toolkit": ["es-toolkit@1.49.0", "", {}, "sha512-G5iZ6Pc/FNRY/soKZHC+TxGDD83rHUDXxzaWhGCX44vAv/tMs56WMusnm/KMNK+luUPsgA9U28cGr4RDlSzL2g=="], @@ -700,6 +738,8 @@ "hastscript": ["hastscript@9.0.1", "", { "dependencies": { "@types/hast": "3.0.4", "comma-separated-tokens": "2.0.3", "hast-util-parse-selector": "4.0.0", "property-information": "7.1.0", "space-separated-tokens": "2.0.2" } }, "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w=="], + "html-encoding-sniffer": ["html-encoding-sniffer@6.0.0", "", { "dependencies": { "@exodus/bytes": "^1.6.0" } }, "sha512-CV9TW3Y3f8/wT0BRFc1/KAVQ3TUHiXmaAb6VW9vtiMFf7SLoMd1PdAc4W3KFOFETBJUb90KatHqlsZMWV+R9Gg=="], + "html-void-elements": ["html-void-elements@3.0.0", "", {}, "sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg=="], "iconv-lite": ["iconv-lite@0.6.3", "", { "dependencies": { "safer-buffer": ">= 2.1.2 < 3.0.0" } }, "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw=="], @@ -722,12 +762,16 @@ "is-plain-obj": ["is-plain-obj@4.1.0", "", {}, "sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg=="], + "is-potential-custom-element-name": ["is-potential-custom-element-name@1.0.1", "", {}, "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ=="], + "isexe": ["isexe@2.0.0", "", {}, "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="], "jiti": ["jiti@2.6.1", "", { "bin": { "jiti": "lib/jiti-cli.mjs" } }, "sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ=="], "js-yaml": ["js-yaml@4.1.1", "", { "dependencies": { "argparse": "2.0.1" }, "bin": { "js-yaml": "bin/js-yaml.js" } }, "sha512-qQKT4zQxXl8lLwBtHMWwaTcGfFOZviOJet3Oy/xmGk2gZH677CJM9EvtfdSkgWcATZhj/55JZ0rmy3myCT5lsA=="], + "jsdom": ["jsdom@29.1.1", "", { "dependencies": { "@asamuzakjp/css-color": "^5.1.11", "@asamuzakjp/dom-selector": "^7.1.1", "@bramus/specificity": "^2.4.2", "@csstools/css-syntax-patches-for-csstree": "^1.1.3", "@exodus/bytes": "^1.15.0", "css-tree": "^3.2.1", "data-urls": "^7.0.0", "decimal.js": "^10.6.0", "html-encoding-sniffer": "^6.0.0", "is-potential-custom-element-name": "^1.0.1", "lru-cache": "^11.3.5", "parse5": "^8.0.1", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", "tough-cookie": "^6.0.1", "undici": "^7.25.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^8.0.1", "whatwg-mimetype": "^5.0.0", "whatwg-url": "^16.0.1", "xml-name-validator": "^5.0.0" }, "peerDependencies": { "canvas": "^3.0.0" }, "optionalPeers": ["canvas"] }, "sha512-ECi4Fi2f7BdJtUKTflYRTiaMxIB0O6zfR1fX0GXpUrf6flp8QIYn1UT20YQqdSOfk2dfkCwS8LAFoJDEppNK5Q=="], + "katex": ["katex@0.16.47", "", { "dependencies": { "commander": "^8.3.0" }, "bin": { "katex": "cli.js" } }, "sha512-Eeo8Ys1doU1z+x8AZsPpQu+p/QcZBI5PeOo7QGQdy2x2m0MU/hYagBbGOmXwr5KVbEfVuWv9LpnQWeehogurjg=="], "khroma": ["khroma@2.1.0", "", {}, "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="], @@ -766,6 +810,8 @@ "longest-streak": ["longest-streak@3.1.0", "", {}, "sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g=="], + "lru-cache": ["lru-cache@11.5.2", "", {}, "sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g=="], + "lucide-react": ["lucide-react@0.563.0", "", { "peerDependencies": { "react": "19.2.4" } }, "sha512-8dXPB2GI4dI8jV4MgUDGBeLdGk8ekfqVZ0BdLcrRzocGgG75ltNEmWS+gE7uokKF/0oSUuczNDT+g9hFJ23FkA=="], "lunr": ["lunr@2.3.9", "", {}, "sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow=="], @@ -812,6 +858,8 @@ "mdast-util-to-string": ["mdast-util-to-string@4.0.0", "", { "dependencies": { "@types/mdast": "4.0.4" } }, "sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg=="], + "mdn-data": ["mdn-data@2.27.1", "", {}, "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ=="], + "mdurl": ["mdurl@2.0.0", "", {}, "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w=="], "mermaid": ["mermaid@11.16.0", "", { "dependencies": { "@braintree/sanitize-url": "^7.1.2", "@iconify/utils": "^3.0.2", "@mermaid-js/parser": "^1.2.0", "@types/d3": "^7.4.3", "@upsetjs/venn.js": "^2.0.0", "cytoscape": "^3.33.3", "cytoscape-cose-bilkent": "^4.1.0", "cytoscape-fcose": "^2.2.0", "d3": "^7.9.0", "d3-sankey": "^0.12.3", "dagre-d3-es": "7.0.14", "dayjs": "^1.11.20", "dompurify": "^3.3.3", "es-toolkit": "^1.45.1", "katex": "^0.16.45", "khroma": "^2.1.0", "marked": "^16.3.0", "roughjs": "^4.6.6", "stylis": "^4.3.6", "ts-dedent": "^2.2.0", "uuid": "^11.1.0 || ^12 || ^13 || ^14.0.0" } }, "sha512-Zvm3kbstgdpvIJPPItlL7fppIZ3kibvc1oZIGxdvk9t6UFz6flv+Jw7FtRGKwfcI8OckmH04LqG6LlS6X4B1pA=="], @@ -914,7 +962,7 @@ "parse-entities": ["parse-entities@4.0.2", "", { "dependencies": { "@types/unist": "2.0.11", "character-entities-legacy": "3.0.0", "character-reference-invalid": "2.0.1", "decode-named-character-reference": "1.3.0", "is-alphanumerical": "2.0.1", "is-decimal": "2.0.1", "is-hexadecimal": "2.0.1" } }, "sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw=="], - "parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "6.0.1" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + "parse5": ["parse5@8.0.1", "", { "dependencies": { "entities": "^8.0.0" } }, "sha512-z1e/HMG90obSGeidlli3hj7cbocou0/wa5HacvI3ASx34PecNjNQeaHNo5WIZpWofN9kgkqV1q5YvXe3F0FoPw=="], "path-data-parser": ["path-data-parser@0.1.0", "", {}, "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="], @@ -944,6 +992,8 @@ "protobufjs": ["protobufjs@7.5.4", "", { "dependencies": { "@protobufjs/aspromise": "1.1.2", "@protobufjs/base64": "1.1.2", "@protobufjs/codegen": "2.0.4", "@protobufjs/eventemitter": "1.1.0", "@protobufjs/fetch": "1.1.0", "@protobufjs/float": "1.0.2", "@protobufjs/inquire": "1.1.0", "@protobufjs/path": "1.1.2", "@protobufjs/pool": "1.1.0", "@protobufjs/utf8": "1.1.0", "@types/node": "25.2.3", "long": "5.3.2" } }, "sha512-CvexbZtbov6jW2eXAvLukXjXUW1TzFaivC46BpWc/3BpcCysb5Vffu+B3XHMm8lVEuy2Mm4XGex8hBSg1yapPg=="], + "punycode": ["punycode@2.3.1", "", {}, "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg=="], + "punycode.js": ["punycode.js@2.3.1", "", {}, "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA=="], "query-selector-shadow-dom": ["query-selector-shadow-dom@1.0.1", "", {}, "sha512-lT5yCqEBgfoMYpf3F2xQRK7zEr1rhIIZuceDK6+xRkJQ4NMbHTwXqk4NkwDwQMNqXgG9r9fyHnzwNVs6zV5KRw=="], @@ -992,6 +1042,8 @@ "remark-stringify": ["remark-stringify@11.0.0", "", { "dependencies": { "@types/mdast": "4.0.4", "mdast-util-to-markdown": "2.1.2", "unified": "11.0.5" } }, "sha512-1OSmLd3awB/t8qdoEOMazZkNsfVTeY4fTsgzcQFdXNq8ToTN4ZGwrMnlda4K6smTFKD+GRV6O48i6Z4iKgPPpw=="], + "require-from-string": ["require-from-string@2.0.2", "", {}, "sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw=="], + "resolve-pkg-maps": ["resolve-pkg-maps@1.0.0", "", {}, "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw=="], "robust-predicates": ["robust-predicates@3.0.3", "", {}, "sha512-NS3levdsRIUOmiJ8FZWCP7LG3QpJyrs/TE0Zpf1yvZu8cAJJ6QMW92H1c7kWpdIHo8RvmLxN/o2JXTKHp74lUA=="], @@ -1002,6 +1054,8 @@ "safer-buffer": ["safer-buffer@2.1.2", "", {}, "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg=="], + "saxes": ["saxes@6.0.0", "", { "dependencies": { "xmlchars": "^2.2.0" } }, "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA=="], + "scheduler": ["scheduler@0.27.0", "", {}, "sha512-eNv+WrVbKu1f3vbYJT/xtiF5syA5HPIMtf9IgY/nKg0sWqzAUEvqY/xm7OcZc/qafLx/iO9FgOmeSAp4v5ti/Q=="], "scroll-into-view-if-needed": ["scroll-into-view-if-needed@3.1.0", "", { "dependencies": { "compute-scroll-into-view": "3.1.1" } }, "sha512-49oNpRjWRvnU8NyGVmUaYG4jtTkNonFZI86MmGRDqBphEK2EXT9gdEUoQPZhuBM8yWHxCWbobltqYO5M4XrUvQ=="], @@ -1032,6 +1086,8 @@ "stylis": ["stylis@4.4.0", "", {}, "sha512-5Z9ZpRzfuH6l/UAvCPAPUo3665Nk2wLaZU3x+TLHKVzIz33+sbJqbtrYoC3KD4/uVOr2Zp+L0LySezP9OHV9yA=="], + "symbol-tree": ["symbol-tree@3.2.4", "", {}, "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw=="], + "tailwind-merge": ["tailwind-merge@3.4.0", "", {}, "sha512-uSaO4gnW+b3Y2aWoWfFpX62vn2sR3skfhbjsEnaBI81WD1wBLlHZe5sWf0AqjksNdYTbGBEd0UasQMT3SNV15g=="], "tailwindcss": ["tailwindcss@4.1.18", "", {}, "sha512-4+Z+0yiYyEtUVCScyfHCxOYP06L5Ne+JiHhY2IjR2KWMIWhJOYZKLSGZaP5HkZ8+bY0cxfzwDE5uOmzFXyIwxw=="], @@ -1042,6 +1098,14 @@ "tinyglobby": ["tinyglobby@0.2.15", "", { "dependencies": { "fdir": "6.5.0", "picomatch": "4.0.3" } }, "sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ=="], + "tldts": ["tldts@7.4.7", "", { "dependencies": { "tldts-core": "^7.4.7" }, "bin": { "tldts": "bin/cli.js" } }, "sha512-56L0/9HELHSsG1bFCzay8UoLxzRL7kpFf7Wl5q/kSYwiSJGACvro61xnKzPNM+SadxllzdtXsKDSXE7HPeqIAw=="], + + "tldts-core": ["tldts-core@7.4.7", "", {}, "sha512-rNlAI8fKn/JckBMUSbNL/ES2kmDiurWaE49l+ikwEc9A6lFR7gMx9AhgQMQKBK4H5w4pKLH64JzZfB99uRsGNQ=="], + + "tough-cookie": ["tough-cookie@6.0.2", "", { "dependencies": { "tldts": "^7.0.5" } }, "sha512-exgYmnmL/sJpR3upZfXG5PoatXQii55xAiXGXzY+sROLZ/Y+SLcp9PgJNI9Vz37HpQ74WvDcLT8eqm+kV3FzrA=="], + + "tr46": ["tr46@6.0.0", "", { "dependencies": { "punycode": "^2.3.1" } }, "sha512-bLVMLPtstlZ4iMQHpFHTR7GAGj2jxi8Dg0s2h2MafAE4uSWF98FC/3MomU51iQAMf8/qDUbKWf5GxuvvVcXEhw=="], + "trim-lines": ["trim-lines@3.0.1", "", {}, "sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg=="], "trough": ["trough@2.2.0", "", {}, "sha512-tmMpK00BjZiUyVyvrBK7knerNgmgvcV/KLVyuma/SC+TQN167GrMRciANTz09+k3zW8L8t60jWO1GpfkZdjTaw=="], @@ -1062,7 +1126,9 @@ "uc.micro": ["uc.micro@2.1.0", "", {}, "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A=="], - "undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "undici": ["undici@7.28.0", "", {}, "sha512-cRZYrTDwWznlnRiPjggAGxZXanty6M8RV1ff8Wm4LWXBp7/IG8v5DnOm74DtUBp9OONpK75YlPnIjQqX0dBDtA=="], + + "undici-types": ["undici-types@7.28.0", "", {}, "sha512-LJAfY+2w6HGeT8d8J1wNQsUGUEGio6NWWpwdwurQe4f6oojzCFuGLizl1KSve4irsTxyLly1QhEeE6iapdaIvQ=="], "unified": ["unified@11.0.5", "", { "dependencies": { "@types/unist": "3.0.3", "bail": "2.0.2", "devlop": "1.1.0", "extend": "3.0.2", "is-plain-obj": "4.1.0", "trough": "2.2.0", "vfile": "6.0.3" } }, "sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA=="], @@ -1094,12 +1160,24 @@ "vfile-message": ["vfile-message@4.0.3", "", { "dependencies": { "@types/unist": "3.0.3", "unist-util-stringify-position": "4.0.0" } }, "sha512-QTHzsGd1EhbZs4AsQ20JX1rC3cOlt/IWJruk893DfLRr57lcnOeMaWG4K0JrRta4mIJZKth2Au3mM3u03/JWKw=="], + "w3c-xmlserializer": ["w3c-xmlserializer@5.0.0", "", { "dependencies": { "xml-name-validator": "^5.0.0" } }, "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA=="], + "web-namespaces": ["web-namespaces@2.0.1", "", {}, "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ=="], "web-vitals": ["web-vitals@5.1.0", "", {}, "sha512-ArI3kx5jI0atlTtmV0fWU3fjpLmq/nD3Zr1iFFlJLaqa5wLBkUSzINwBPySCX/8jRyjlmy1Volw1kz1g9XE4Jg=="], + "webidl-conversions": ["webidl-conversions@8.0.1", "", {}, "sha512-BMhLD/Sw+GbJC21C/UgyaZX41nPt8bUTg+jWyDeg7e7YN4xOM05YPSIXceACnXVtqyEw/LMClUQMtMZ+PGGpqQ=="], + + "whatwg-mimetype": ["whatwg-mimetype@5.0.0", "", {}, "sha512-sXcNcHOC51uPGF0P/D4NVtrkjSU2fNsm9iog4ZvZJsL3rjoDAzXZhkm2MWt1y+PUdggKAYVoMAIYcs78wJ51Cw=="], + + "whatwg-url": ["whatwg-url@16.0.1", "", { "dependencies": { "@exodus/bytes": "^1.11.0", "tr46": "^6.0.0", "webidl-conversions": "^8.0.1" } }, "sha512-1to4zXBxmXHV3IiSSEInrreIlu02vUOvrhxJJH5vcxYTBDAx51cqZiKdyTxlecdKNSjj8EcxGBxNf6Vg+945gw=="], + "which": ["which@2.0.2", "", { "dependencies": { "isexe": "2.0.0" }, "bin": { "node-which": "./bin/node-which" } }, "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA=="], + "xml-name-validator": ["xml-name-validator@5.0.0", "", {}, "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg=="], + + "xmlchars": ["xmlchars@2.2.0", "", {}, "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw=="], + "yaml": ["yaml@2.8.2", "", { "bin": { "yaml": "bin.mjs" } }, "sha512-mplynKqc1C2hTVYxd0PU2xQAc22TI1vShAYGksCCfxbn/dFwnHTNi1bvYsBTkhdUNtGIf5xNOg938rrSSYvS9A=="], "zod": ["zod@4.3.6", "", {}, "sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg=="], @@ -1124,6 +1202,8 @@ "@radix-ui/react-primitive/@radix-ui/react-slot": ["@radix-ui/react-slot@1.2.3", "", { "dependencies": { "@radix-ui/react-compose-refs": "1.1.2" }, "optionalDependencies": { "@types/react": "19.2.14" }, "peerDependencies": { "react": "19.2.4" } }, "sha512-aeNmHnBxbi2St0au6VBVC7JXFlhLlOnvIIlePNniyUNAClzmtAUEY8/pBiK3iHjufOlwA+c20/8jngo7xcrg8A=="], + "@types/node/undici-types": ["undici-types@7.16.0", "", {}, "sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw=="], + "cytoscape-fcose/cose-base": ["cose-base@2.2.0", "", { "dependencies": { "layout-base": "^2.0.0" } }, "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g=="], "d3-dsv/commander": ["commander@7.2.0", "", {}, "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw=="], @@ -1138,12 +1218,14 @@ "fumadocs-ui/next": ["next@16.1.6", "", { "dependencies": { "@next/env": "16.1.6", "@swc/helpers": "0.5.15", "baseline-browser-mapping": "2.9.19", "caniuse-lite": "1.0.30001769", "postcss": "8.4.31", "styled-jsx": "5.1.6" }, "optionalDependencies": { "@next/swc-darwin-arm64": "16.1.6", "@next/swc-darwin-x64": "16.1.6", "@next/swc-linux-arm64-gnu": "16.1.6", "@next/swc-linux-arm64-musl": "16.1.6", "@next/swc-linux-x64-gnu": "16.1.6", "@next/swc-linux-x64-musl": "16.1.6", "@next/swc-win32-arm64-msvc": "16.1.6", "@next/swc-win32-x64-msvc": "16.1.6", "@opentelemetry/api": "1.9.0", "sharp": "0.34.5" }, "peerDependencies": { "react": "19.2.4", "react-dom": "19.2.4" }, "bin": { "next": "dist/bin/next" } }, "sha512-hkyRkcu5x/41KoqnROkfTm2pZVbKxvbZRuNvKXLRXxs3VfyO0WhY50TQS40EuKO9SW3rBj/sF3WbVwDACeMZyw=="], + "hast-util-raw/parse5": ["parse5@7.3.0", "", { "dependencies": { "entities": "6.0.1" } }, "sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw=="], + + "markdown-it/entities": ["entities@4.5.0", "", {}, "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw=="], + "next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], "parse-entities/@types/unist": ["@types/unist@2.0.11", "", {}, "sha512-CmBKiL6NNo/OqgmMn95Fk9Whlp2mtvIv+KNpQKN2F4SjvrEesubTRWGYSg+BnWZOnlCaSTU1sMpsBOzgbYhnsA=="], - "parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], - "posthog-js/dompurify": ["dompurify@3.3.1", "", { "optionalDependencies": { "@types/trusted-types": "2.0.7" } }, "sha512-qkdCKzLNtrgPFP1Vo+98FRzJnBRGe4ffyCea9IwHB1fyxPOeNTHpLKYGd4Uk9xvNoH0ZoOjwZxNptyMwqrId1Q=="], "cytoscape-fcose/cose-base/layout-base": ["layout-base@2.0.1", "", {}, "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="], @@ -1209,5 +1291,7 @@ "fumadocs-ui/next/@next/swc-win32-x64-msvc": ["@next/swc-win32-x64-msvc@16.1.6", "", { "os": "win32", "cpu": "x64" }, "sha512-NRfO39AIrzBnixKbjuo2YiYhB6o9d8v/ymU9m/Xk8cyVk+k7XylniXkHwjs4s70wedVffc6bQNbufk5v0xEm0A=="], "fumadocs-ui/next/postcss": ["postcss@8.4.31", "", { "dependencies": { "nanoid": "3.3.11", "picocolors": "1.1.1", "source-map-js": "1.2.1" } }, "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ=="], + + "hast-util-raw/parse5/entities": ["entities@6.0.1", "", {}, "sha512-aN97NXWF6AWBTahfVOIrB/NShkzi5H7F9r1s9mD3cDj4Ko5f2qhhVoYMibXF7GlLveb/D2ioWay8lxI97Ven3g=="], } } diff --git a/content/docs/solutions/data-residency.mdx b/content/docs/solutions/data-residency.mdx index db56ca1..796e79e 100644 --- a/content/docs/solutions/data-residency.mdx +++ b/content/docs/solutions/data-residency.mdx @@ -43,21 +43,15 @@ Neither key alone derives a data key. Both must cooperate. This means ZeroKMS al Deploy your application and ZeroKMS in the same region. -``` -┌──────────────────────────────────┐ -│ Region: eu-central-1 │ -│ │ -│ ┌───────────┐ ┌────────────┐ │ -│ │ Your app │───│ ZeroKMS │ │ -│ │ + client │ │ + authority│ │ -│ │ key │ │ key │ │ -│ └─────┬─────┘ └────────────┘ │ -│ │ │ -│ ┌─────┴──────┐ │ -│ │ PostgreSQL │ │ -│ │ (encrypted)│ │ -│ └────────────┘ │ -└──────────────────────────────────┘ +```mermaid +flowchart TB + subgraph region["Region: eu-central-1.aws"] + app["Your app<br/>+ client key"] + zerokms["ZeroKMS<br/>+ authority key"] + db[("PostgreSQL<br/>encrypted")] + app <-- key seed --> zerokms + app -- ciphertext --> db + end ``` All key material and data remain in one region. This satisfies most data residency requirements, including GDPR and regional data protection laws. @@ -66,14 +60,25 @@ All key material and data remain in one region. This satisfies most data residen For organizations operating across regions with differing requirements, deploy a separate workspace per region. -``` -┌───────────────────────┐ ┌────────────────────────┐ -│ Region: eu-central-1 │ │ Region: ap-southeast-2 │ -│ │ │ │ -│ App + client key │ │ App + client key │ -│ ZeroKMS (EU) │ │ ZeroKMS (APAC) │ -│ PostgreSQL (EU) │ │ PostgreSQL (APAC) │ -└───────────────────────┘ └────────────────────────┘ +```mermaid +flowchart LR + subgraph eu["Region: eu-central-1.aws"] + euApp["App<br/>+ client key"] + euKms["ZeroKMS (EU)"] + euDb[("PostgreSQL (EU)")] + euApp <-- key seed --> euKms + euApp -- ciphertext --> euDb + end + + subgraph apac["Region: ap-southeast-2.aws"] + apacApp["App<br/>+ client key"] + apacKms["ZeroKMS (APAC)"] + apacDb[("PostgreSQL (APAC)")] + apacApp <-- key seed --> apacKms + apacApp -- ciphertext --> apacDb + end + + euDb -. "cannot be decrypted by" .-x apacApp ``` Each region gets its own ZeroKMS workspace with independent authority keys, client keys that never leave the region, and its own database. Data encrypted in one region cannot be decrypted in another, which enforces the residency boundary cryptographically rather than by policy. diff --git a/package.json b/package.json index dfcbb51..b727a79 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-links && bun run validate-redirects", + "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-mermaid && bun run validate-links && bun run validate-redirects", "build": "next build", "dev": "next dev -p 3001", "start": "next start", @@ -17,7 +17,8 @@ "generate-docs:cli": "tsx scripts/generate-cli-docs.ts", "validate-links": "tsx scripts/validate-links.ts", "validate-redirects": "tsx scripts/validate-v2-redirects.ts", - "validate-content": "tsx scripts/validate-content-api.ts" + "validate-content": "tsx scripts/validate-content-api.ts", + "validate-mermaid": "tsx scripts/validate-mermaid.ts" }, "dependencies": { "fumadocs-core": "16.6.0", @@ -36,10 +37,12 @@ "devDependencies": { "@biomejs/biome": "^2.3.14", "@tailwindcss/postcss": "^4.1.18", + "@types/jsdom": "^28.0.3", "@types/mdx": "^2.0.13", "@types/node": "^25.2.1", "@types/react": "^19.2.13", "@types/react-dom": "^19.2.3", + "jsdom": "^29.1.1", "postcss": "^8.5.6", "tailwindcss": "^4.1.18", "tsx": "^4.0.0", diff --git a/scripts/validate-mermaid.ts b/scripts/validate-mermaid.ts new file mode 100644 index 0000000..e9de692 --- /dev/null +++ b/scripts/validate-mermaid.ts @@ -0,0 +1,99 @@ +#!/usr/bin/env tsx +/** + * Mermaid diagram gate. + * + * A malformed diagram does not fail the build: Mermaid parses in the browser, + * and `src/components/mermaid.tsx` catches the error so a bad chart can't blank + * the page. The failure mode is therefore silent, and a diagram that renders as + * nothing looks identical to a diagram nobody noticed was missing. + * + * So parse every ```mermaid fence at build time instead. Mermaid needs a DOM to + * initialize, which jsdom provides. + * + * Run via `bun run validate-mermaid`; wired into prebuild. + */ +import fs from "node:fs"; +import path from "node:path"; +import { JSDOM } from "jsdom"; + +const CONTENT_DIRS = ["content/docs", "content/stack"]; + +function collectFiles(dir: string): string[] { + if (!fs.existsSync(dir)) return []; + const files: string[] = []; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + const full = path.join(dir, entry.name); + if (entry.isDirectory()) files.push(...collectFiles(full)); + else if (/\.mdx?$/.test(entry.name)) files.push(full); + } + return files; +} + +type Block = { file: string; line: number; chart: string }; + +function collectBlocks(file: string): Block[] { + const source = fs.readFileSync(file, "utf8"); + const blocks: Block[] = []; + const pattern = /^```mermaid[^\n]*\n([\s\S]*?)^```/gm; + + for (const match of source.matchAll(pattern)) { + const line = source.slice(0, match.index).split("\n").length; + blocks.push({ file, line, chart: match[1] }); + } + return blocks; +} + +async function main() { + const root = process.cwd(); + const blocks = CONTENT_DIRS.flatMap((dir) => + collectFiles(path.join(root, dir)).flatMap(collectBlocks), + ); + + if (blocks.length === 0) { + console.log("✓ no mermaid diagrams to validate"); + return; + } + + // Mermaid reaches for browser globals at import time and during parse. + // `navigator` is a getter-only property on Node's globalThis, so assign via + // defineProperty rather than `=`. + const dom = new JSDOM("<!doctype html><html><body></body></html>"); + for (const name of ["window", "document", "navigator"] as const) { + Object.defineProperty(globalThis, name, { + value: name === "window" ? dom.window : dom.window[name], + configurable: true, + writable: true, + }); + } + + const mermaid = (await import("mermaid")).default; + mermaid.initialize({ startOnLoad: false }); + + const failures: { block: Block; message: string }[] = []; + + for (const block of blocks) { + try { + await mermaid.parse(block.chart); + } catch (error) { + const message = error instanceof Error ? error.message : String(error); + failures.push({ block, message: message.split("\n")[0] }); + } + } + + if (failures.length > 0) { + console.error(`✗ ${failures.length} invalid mermaid diagram(s):\n`); + for (const { block, message } of failures) { + const relative = path.relative(root, block.file); + console.error(` ${relative}:${block.line}`); + console.error(` ${message}\n`); + } + process.exit(1); + } + + console.log(`✓ all ${blocks.length} mermaid diagram(s) parse`); +} + +main().catch((error) => { + console.error("✗ mermaid validation failed to run:", error); + process.exit(1); +}); diff --git a/src/components/mermaid.tsx b/src/components/mermaid.tsx index bdf5687..33d59d3 100644 --- a/src/components/mermaid.tsx +++ b/src/components/mermaid.tsx @@ -21,6 +21,7 @@ export function Mermaid({ chart }: { chart: string }) { // `useId` yields colons, which are not valid in a DOM id passed to Mermaid. const id = useId().replace(/[^a-zA-Z0-9]/g, ""); const [svg, setSvg] = useState<string>(""); + const [failed, setFailed] = useState(false); useEffect(() => { let cancelled = false; @@ -42,9 +43,10 @@ export function Mermaid({ chart }: { chart: string }) { const { svg } = await mermaid.render(`mermaid-${id}`, chart); if (!cancelled) setSvg(svg); } catch { - // A malformed diagram should not blank the page; the fence's text is - // still in the source and in the markdown output. - if (!cancelled) setSvg(""); + // A malformed diagram falls back to its source rather than blanking the + // page. `scripts/validate-mermaid.ts` fails the build before this can + // reach production, so in practice this covers only the render step. + if (!cancelled) setFailed(true); } } @@ -63,8 +65,17 @@ export function Mermaid({ chart }: { chart: string }) { }; }, [chart, id]); + if (failed) { + return ( + <pre className="my-6 overflow-x-auto rounded-lg border border-fd-border bg-fd-card p-4 text-sm"> + <code>{chart}</code> + </pre> + ); + } + if (!svg) { - // Reserve nothing: an empty diagram is better than a layout jump. + // Nothing to reserve: the diagram appears once Mermaid resolves, and a + // placeholder box would only add a layout jump. return null; } From 9cdfb8f50ecb4f8494bb315921173a433d6bbd57 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 18:01:02 +1000 Subject: [PATCH 055/151] docs(security): correct the key exchange, the client key never leaves The diagram and prose had the client key flowing into ZeroKMS as a "derivation input", which inverts the property the architecture exists to provide. ZeroKMS re-encrypts under the authority key alone and returns a key seed. It never receives the client key, and the request carries no key material. The client key processes the seed in your infrastructure, and an HMAC-based KDF expands the result into a per-value data key. Only the seed crosses the boundary, and it crosses inward. Nothing crosses outward: not the client key, not the processed seed, not the data key. Fixes the layer 1/2 prose, the diagram, the trust-model bullets, and both data-flow paths. Also tightens data-residency, where "both must cooperate" implied the halves meet somewhere, and where client keys were said to never leave the region rather than never leave your infrastructure. --- content/docs/security/cryptography.mdx | 35 +++++++++++++---------- content/docs/solutions/data-residency.mdx | 6 ++-- 2 files changed, 24 insertions(+), 17 deletions(-) diff --git a/content/docs/security/cryptography.mdx b/content/docs/security/cryptography.mdx index 953ea20..bd677d4 100644 --- a/content/docs/security/cryptography.mdx +++ b/content/docs/security/cryptography.mdx @@ -32,7 +32,7 @@ Three distinct things are often all called "the key". Keeping them apart is what | **Client key** | Your application or workload | You do (`CS_CLIENT_KEY`) | | **Data key** | Your application's memory, briefly | Nothing. It is derived per value and discarded | -The authority key and the client key are two halves of a split. Neither alone derives a data key. +The authority key and the client key are two halves of a split. Neither alone derives a data key, and the two are never brought together in one place. The key seed travels from ZeroKMS to you. The client key never travels at all. ## How a data key is produced @@ -40,13 +40,15 @@ The mechanism operates at two layers, and descriptions that name only one of the ### Layer 1: the key seed, produced server-side -ZeroKMS uses **proxy symmetric re-encryption** (patent pending) to combine the authority key with the client key component and return a **key seed** to your application. +ZeroKMS uses **proxy symmetric re-encryption** (patent pending) on the authority key to produce a **key seed**, and returns it to your application. -This is the property that makes the architecture zero-knowledge: ZeroKMS produces a seed it cannot itself turn into a data key, because the second half of the input never leaves your infrastructure. ZeroKMS never sees a data key, and no data key crosses the network. +ZeroKMS does this without the client key. It never receives it, and the request carries no key material of yours. That is what makes the architecture zero-knowledge: ZeroKMS produces a seed it cannot itself turn into a data key. ### Layer 2: the data key, derived client-side -Your application expands the key seed into a **unique data key per value**, using an **HMAC-based key derivation function**. The data key encrypts the value with AES-256-GCM-SIV, then is discarded from memory. +Your application **processes the key seed with the client key**, then expands the result into a **unique data key per value** using an **HMAC-based key derivation function**. The data key encrypts the value with AES-256-GCM-SIV, then is discarded from memory. + +The client key never leaves your infrastructure, and neither does anything it processes. Only the seed crosses the boundary, and it crosses inward. ```mermaid flowchart TD @@ -59,19 +61,21 @@ flowchart TD end subgraph you["Your infrastructure"] - client["Client key"] + client["Client key<br/>never leaves"] + processed["Processed seed"] datakey["Data key<br/>one per value<br/>discarded after use"] ciphertext["Ciphertext"] + client -- processes the seed --> processed + processed -- "layer 2:<br/>HMAC-based KDF" --> datakey + datakey -- AES-256-GCM-SIV --> ciphertext end - client -- derivation input --> seed - seed -- "layer 2:<br/>HMAC-based KDF" --> datakey - datakey -- AES-256-GCM-SIV --> ciphertext + seed -- returned to your app --> processed ``` -Re-encryption describes how the seed is produced. HMAC key derivation describes how the seed becomes per-value keys. Both are true, at different layers. +Re-encryption describes how the seed is produced. HMAC key derivation describes how the processed seed becomes per-value keys. Both are true, at different layers. -Note where the boundary falls: the key seed crosses it, and the data key never does. +Note which way the boundary is crossed. The key seed travels inward, from ZeroKMS to you. Nothing travels outward: not the client key, not the processed seed, not the data key. ## What is cached, and what is not @@ -95,7 +99,8 @@ The Stack SDK derives per operation and caches nothing. An attacker must compromise **both** the ZeroKMS authority key and your client key to derive data keys. Compromising either alone is insufficient. - CipherStash never sees plaintext. Encryption and decryption run in your process. -- CipherStash never sees a data key. Data keys are derived in your memory from a seed. +- CipherStash never sees your client key, nor anything the client key has processed. +- CipherStash never sees a data key. Data keys are derived in your memory. - Ciphertext never has to leave your infrastructure. ZeroKMS handles key material, not data. ### Shared responsibility @@ -117,9 +122,9 @@ An attacker must compromise **both** the ZeroKMS authority key and your client k ### Write path 1. The application calls `client.encrypt(plaintext, { column, table })`. -2. The SDK requests a key seed from ZeroKMS over TLS. -3. ZeroKMS combines the authority key with the client key component and returns a key seed. -4. The SDK derives a unique data key from the seed, locally. +2. The SDK requests a key seed from ZeroKMS over TLS. The request carries no key material. +3. ZeroKMS re-encrypts under the authority key and returns a key seed. +4. The SDK processes the seed with the client key, then derives a unique data key from the result, locally. 5. The SDK encrypts the plaintext with AES-256-GCM-SIV. 6. If the column declares searchable capability, the SDK generates the index terms (HMAC, ORE, Bloom filter). 7. The SDK packs ciphertext and index terms into an [EQL payload](/reference/eql/core-concepts). @@ -129,7 +134,7 @@ An attacker must compromise **both** the ZeroKMS authority key and your client k ### Read path 1. The application reads the payload and calls `client.decrypt(...)`. -2. The SDK requests a key seed and derives the data key locally. +2. The SDK requests a key seed, processes it with the client key, and derives the data key locally. 3. The SDK decrypts the ciphertext, discards the data key, and returns plaintext. ### Query path diff --git a/content/docs/solutions/data-residency.mdx b/content/docs/solutions/data-residency.mdx index 796e79e..74effb9 100644 --- a/content/docs/solutions/data-residency.mdx +++ b/content/docs/solutions/data-residency.mdx @@ -35,7 +35,9 @@ CipherStash splits key material between two parties: 1. **Authority key**, managed by ZeroKMS in your chosen region. 2. **Client key**, managed by your application in your infrastructure. -Neither key alone derives a data key. Both must cooperate. This means ZeroKMS alone cannot access your data, because it holds only half the key material, and your application alone cannot either, because it needs ZeroKMS to derive data keys. +Neither key alone derives a data key. ZeroKMS alone cannot access your data, because it holds only half the key material. Your application alone cannot either, because it needs a key seed from ZeroKMS. + +The two halves are never brought together in one place. ZeroKMS returns a key seed; your application processes that seed with the client key and derives the data key locally. The client key never leaves your infrastructure, and neither does anything it processes. See [cryptography](/security/cryptography). ## Deployment patterns @@ -81,7 +83,7 @@ flowchart LR euDb -. "cannot be decrypted by" .-x apacApp ``` -Each region gets its own ZeroKMS workspace with independent authority keys, client keys that never leave the region, and its own database. Data encrypted in one region cannot be decrypted in another, which enforces the residency boundary cryptographically rather than by policy. +Each region gets its own ZeroKMS workspace with independent authority keys, its own client key (which, like every client key, never leaves your infrastructure), and its own database. Data encrypted in one region cannot be decrypted in another, which enforces the residency boundary cryptographically rather than by policy. ### Cross-border access From d17c110c9ba27e7d0e33067be559d1263951c037 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 18:13:34 +1000 Subject: [PATCH 056/151] docs(security): show the key-ID request in the ZeroKMS diagram The diagram had the key seed arriving from nowhere. The application requests it by sending a key ID, which is what gives each data key a unique identity and lets the same seed be requested again to decrypt the value. Outbound across the boundary: a key ID, which is not key material. Inbound: the key seed. Nothing else. --- content/docs/security/cryptography.mdx | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/content/docs/security/cryptography.mdx b/content/docs/security/cryptography.mdx index bd677d4..19db2c0 100644 --- a/content/docs/security/cryptography.mdx +++ b/content/docs/security/cryptography.mdx @@ -30,7 +30,7 @@ Three distinct things are often all called "the key". Keeping them apart is what |---|---|---| | **Authority key** | ZeroKMS, server-side | Encrypted at rest under an AWS KMS root key | | **Client key** | Your application or workload | You do (`CS_CLIENT_KEY`) | -| **Data key** | Your application's memory, briefly | Nothing. It is derived per value and discarded | +| **Data key** | Your application's memory, briefly | Nothing. It is derived per value, identified by a key ID, and discarded | The authority key and the client key are two halves of a split. Neither alone derives a data key, and the two are never brought together in one place. The key seed travels from ZeroKMS to you. The client key never travels at all. @@ -40,9 +40,11 @@ The mechanism operates at two layers, and descriptions that name only one of the ### Layer 1: the key seed, produced server-side -ZeroKMS uses **proxy symmetric re-encryption** (patent pending) on the authority key to produce a **key seed**, and returns it to your application. +Your application requests a key seed by sending a **key ID**. ZeroKMS uses **proxy symmetric re-encryption** (patent pending) on the authority key to produce the **key seed** for that ID, and returns it. -ZeroKMS does this without the client key. It never receives it, and the request carries no key material of yours. That is what makes the architecture zero-knowledge: ZeroKMS produces a seed it cannot itself turn into a data key. +The ID is what gives every data key a unique identity. It travels with the encrypted value, so the same seed can be requested again to decrypt it. + +ZeroKMS does all of this without the client key. It never receives it, and the request carries no key material of yours, only the ID. That is what makes the architecture zero-knowledge: ZeroKMS produces a seed it cannot itself turn into a data key. ### Layer 2: the data key, derived client-side @@ -61,6 +63,7 @@ flowchart TD end subgraph you["Your infrastructure"] + keyid["Key ID<br/>unique per data key"] client["Client key<br/>never leaves"] processed["Processed seed"] datakey["Data key<br/>one per value<br/>discarded after use"] @@ -70,12 +73,13 @@ flowchart TD datakey -- AES-256-GCM-SIV --> ciphertext end + keyid -- "requests a seed<br/>(no key material)" --> auth seed -- returned to your app --> processed ``` Re-encryption describes how the seed is produced. HMAC key derivation describes how the processed seed becomes per-value keys. Both are true, at different layers. -Note which way the boundary is crossed. The key seed travels inward, from ZeroKMS to you. Nothing travels outward: not the client key, not the processed seed, not the data key. +Note what crosses the boundary. Outbound: a key ID, which is not key material. Inbound: the key seed. Nothing else leaves your infrastructure, not the client key, not the processed seed, not the data key. ## What is cached, and what is not @@ -122,9 +126,9 @@ An attacker must compromise **both** the ZeroKMS authority key and your client k ### Write path 1. The application calls `client.encrypt(plaintext, { column, table })`. -2. The SDK requests a key seed from ZeroKMS over TLS. The request carries no key material. -3. ZeroKMS re-encrypts under the authority key and returns a key seed. -4. The SDK processes the seed with the client key, then derives a unique data key from the result, locally. +2. The SDK requests a key seed from ZeroKMS over TLS, sending a unique key ID. The request carries no key material. +3. ZeroKMS re-encrypts under the authority key and returns the key seed for that ID. +4. The SDK processes the seed with the client key, then derives the data key from the result, locally. 5. The SDK encrypts the plaintext with AES-256-GCM-SIV. 6. If the column declares searchable capability, the SDK generates the index terms (HMAC, ORE, Bloom filter). 7. The SDK packs ciphertext and index terms into an [EQL payload](/reference/eql/core-concepts). @@ -134,7 +138,7 @@ An attacker must compromise **both** the ZeroKMS authority key and your client k ### Read path 1. The application reads the payload and calls `client.decrypt(...)`. -2. The SDK requests a key seed, processes it with the client key, and derives the data key locally. +2. The SDK requests a key seed using the key ID stored with the value, processes it with the client key, and derives the data key locally. 3. The SDK decrypts the ciphertext, discards the data key, and returns plaintext. ### Query path From c6ed577bbd5ff9b91be6f71888fd650c1ab60382 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 18:33:23 +1000 Subject: [PATCH 057/151] docs(get-started): rewrite the quickstart on EQL v3 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The live quickstart contains six errors, not the two on the ticket. Each was checked against the shipped stash 0.17.1 and @cipherstash/stack 0.19.0, not against the prose: 1. `cs_match_v1(email) = $1` — no such function in any EQL version. Now `WHERE email = $1::public.text_eq`, with the typed-operand rule explained, since an untyped operand silently skips the encrypted operator. 2. `import { users } from "./encryption/schema"` — init scaffolds `src/encryption/index.ts` (33 references in the CLI package), and exports both `users` and `encryptionClient` from it. 3. `decrypt(row.email, { column, table })` — decrypt takes one argument. 4. `.freeTextSearch() // WHERE email LIKE '%alice%'` — LIKE and ILIKE are unsupported on all six text variants in EQL v3. 5. "Each column gets its own encryption key" — the key is per value. 6. "Every value gets its own key, bound to an identity" — identity binding needs OidcFederationStrategy plus a lock context, and is not what this page sets up. Also drops "The index terms are themselves encrypted, they reveal nothing about the plaintext", which contradicts the leakage tables on the security and FHE pages. Replaced with the true, narrower claim: an equality term reveals which rows share a value. Restructured as a Diátaxis tutorial with Steps, adds the missing CREATE TABLE step (the old page never showed the encrypted column type), and links each mechanism to its canonical page. --- content/docs/get-started/meta.json | 2 +- content/docs/get-started/quickstart.mdx | 177 ++++++++++++++++++++++++ 2 files changed, 178 insertions(+), 1 deletion(-) create mode 100644 content/docs/get-started/quickstart.mdx diff --git a/content/docs/get-started/meta.json b/content/docs/get-started/meta.json index 3f92dab..1293c5b 100644 --- a/content/docs/get-started/meta.json +++ b/content/docs/get-started/meta.json @@ -1,5 +1,5 @@ { "title": "Get started", "icon": "Rocket", - "pages": ["..."] + "pages": ["index", "quickstart", "..."] } diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx new file mode 100644 index 0000000..613a244 --- /dev/null +++ b/content/docs/get-started/quickstart.mdx @@ -0,0 +1,177 @@ +--- +title: Quickstart +description: "Encrypt, store, query, and decrypt your first field in Postgres, using the stash CLI and @cipherstash/stack." +type: tutorial +components: [encryption, eql, cli, platform] +audience: [developer] +verifiedAgainst: + stack: "0.19.0" + cli: "0.17.1" + eql: "3.0.0" +--- + +CipherStash encrypts your data at the field level. Every value gets its own encryption key, and the database never sees plaintext. A breach, a compromised agent, or a curious insider sees ciphertext. + +By the end of this page you will have encrypted a field, stored it in Postgres, queried it **without decrypting it**, and read it back. It takes about ten minutes and works with any Postgres: Supabase, Neon, RDS, or a Docker container. + +## Before you start + +- Node.js 18 or later. +- A Postgres database you can connect to. +- A [CipherStash account](https://dashboard.cipherstash.com/sign-up). The free plan is enough. + +<Steps> + +<Step> + +## Initialize your project + +```bash cta cta-type="quickstart" example-id="quickstart-stash-init" +npx stash init +``` + +This opens a browser for device-based authentication, so local development needs no environment variables and no shared secrets. `init` then: + +1. Connects to your workspace. +2. Resolves your database connection and installs [EQL](/reference/eql), the Postgres surface that makes encrypted columns queryable. +3. Installs `@cipherstash/stack` if it isn't already present. +4. Scaffolds an encryption module at `src/encryption/index.ts`. +5. Writes `.cipherstash/context.json` with what it detected about your project. + +See the [CLI reference](/reference/cli/init) for the flags, including `--supabase`, `--drizzle`, and `--prisma-next`. + +</Step> + +<Step> + +## Define what to encrypt + +`init` scaffolds `src/encryption/index.ts`. It declares which columns are encrypted, and exports a ready-to-use client. Edit it to match your table: + +```typescript filename="src/encryption/index.ts" +import { Encryption, encryptedTable, encryptedColumn } from "@cipherstash/stack" + +export const users = encryptedTable("users", { + email: encryptedColumn("email").equality(), +}) + +export const encryptionClient = await Encryption({ schemas: [users] }) +``` + +`.equality()` declares a **capability**: it is what makes `WHERE email = ?` work later. Add `.orderAndRange()` for `ORDER BY` and comparisons, or `.freeTextSearch()` for token containment. Declare only the capabilities you query on, because each one stores an extra index term alongside the ciphertext. + +<Callout type="info"> +Prefer to have an agent do this? `npx stash plan` inspects your project and drafts `.cipherstash/plan.md` listing the columns worth encrypting. Review it, then `npx stash impl` applies it. This page does it by hand so you can see each moving part. +</Callout> + +</Step> + +<Step> + +## Create the encrypted column + +An encrypted column is typed with an EQL domain. The domain you pick has to match the capability you declared: `.equality()` on a text column means `public.text_eq`. + +```sql filename="schema.sql" +CREATE TABLE users ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email public.text_eq +); +``` + +The type is what fixes the column's searchable surface. There is no separate configuration table. See [core concepts](/reference/eql/core-concepts) for the full variant model. + +</Step> + +<Step> + +## Encrypt a value and store it + +```typescript filename="src/encrypt.ts" +import { encryptionClient, users } from "./encryption" + +const encrypted = await encryptionClient.encrypt("alice@example.com", { + column: users.email, + table: users, +}) + +if (encrypted.failure) { + throw new Error(`Encryption failed: ${encrypted.failure.message}`) +} + +await db.query("INSERT INTO users (email) VALUES ($1)", [encrypted.data]) +``` + +Every operation returns a `Result`: either `data` or `failure`, never both. Encryption happens in your process, so the plaintext never leaves it. + +</Step> + +<Step> + +## Query without decrypting + +Encrypt the search term, then use it in an ordinary `WHERE` clause. + +```typescript filename="src/query.ts" +import { encryptionClient, users } from "./encryption" + +const term = await encryptionClient.encryptQuery("alice@example.com", { + column: users.email, + table: users, +}) + +if (term.failure) { + throw new Error(`Query encryption failed: ${term.failure.message}`) +} + +const rows = await db.query( + "SELECT id, email FROM users WHERE email = $1::public.text_eq", + [term.data], +) +``` + +The cast matters. An encrypted operator only resolves against a **typed operand**, so `$1::public.text_eq` is what tells Postgres to compare encrypted terms rather than fall back to raw `jsonb` semantics. See [typed operands](/reference/eql/core-concepts). + +Postgres compares ciphertext against ciphertext. It never sees either plaintext. + +<Callout type="warn"> +`LIKE` and `ILIKE` do not work on encrypted columns, in any variant. Free-text matching uses bloom-filter token containment (`@>`) on a `text_match` or `text_search` column instead. See [text](/reference/eql/text). +</Callout> + +</Step> + +<Step> + +## Decrypt + +```typescript filename="src/decrypt.ts" +const decrypted = await encryptionClient.decrypt(row.email) + +if (decrypted.failure) { + throw new Error(`Decryption failed: ${decrypted.failure.message}`) +} + +console.log(decrypted.data) // "alice@example.com" +``` + +`decrypt` takes the encrypted payload and nothing else. The payload carries the key ID it needs. + +</Step> + +</Steps> + +## What you just built + +You encrypted a field, stored it, queried it without decrypting, and read it back. Underneath: + +- **ZeroKMS** returned a key seed, which your application processed with its client key to derive a **unique data key for that value**. The data key existed in your memory for one operation and was then discarded. See [cryptography](/security/cryptography). +- **Your client key** never left your infrastructure. Without it, nothing decrypts, including CipherStash. +- **Your keyset** is the isolation boundary. Data encrypted under one keyset cannot be decrypted with another, which is how you separate tenants or environments. +- **The index term** stored alongside the ciphertext is what let Postgres answer the query. It is derived from the value, not the plaintext, but it is not free: an equality term reveals which rows share a value. Declare only the capabilities you query on, and read [searchable encryption](/concepts/searchable-encryption) before deciding a column is safe to index. + +## Next steps + +- **Using an ORM or Supabase?** The [Drizzle](/stack/cipherstash/encryption/drizzle) and [Supabase](/integrations/supabase) integrations wrap your existing client so queries look normal. +- **No app changes possible?** [CipherStash Proxy](/reference/proxy) sits in front of Postgres and does this transparently. +- **Bind decryption to a user.** [Provable access control](/solutions/provable-access) ties a value to the identity that encrypted it. +- **Ready to deploy?** [Going to production](/stack/deploy/going-to-production) covers the switch from device auth to machine credentials. From 1b4f34000229ef2b3d74a57b42a29481f4ff8df7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 18:51:51 +1000 Subject: [PATCH 058/151] docs(get-started): tell the quickstart to install EQL v3 explicitly stash 0.17.1 does support EQL v3; it is not the default. Verified against `npx stash@0.17.1 manifest --json`: eql install / eql upgrade --eql-version <2|3> EQL generation to target. [default: 2] `stash init` runs `eql install` as part of its EQL phase (the CLI's own help says so) with no way to pass the flag, so init lands EQL v2. `eql install` is idempotent and skips when EQL is present, so switching afterwards needs --force. Adds a step: `npx stash eql install --eql-version 3 --force`, then `stash eql status` to confirm. Notes that the default becomes 3 in a future release and the step then goes away, and that v3 is a direct install so --drizzle, --migration and --latest do not apply to it. Defers to /reference/eql for the full option set rather than restating it. --- content/docs/get-started/quickstart.mdx | 28 ++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx index 613a244..42568fd 100644 --- a/content/docs/get-started/quickstart.mdx +++ b/content/docs/get-started/quickstart.mdx @@ -33,7 +33,7 @@ npx stash init This opens a browser for device-based authentication, so local development needs no environment variables and no shared secrets. `init` then: 1. Connects to your workspace. -2. Resolves your database connection and installs [EQL](/reference/eql), the Postgres surface that makes encrypted columns queryable. +2. Resolves your database connection and runs `stash eql install`, which installs [EQL](/reference/eql), the Postgres surface that makes encrypted columns queryable. 3. Installs `@cipherstash/stack` if it isn't already present. 4. Scaffolds an encryption module at `src/encryption/index.ts`. 5. Writes `.cipherstash/context.json` with what it detected about your project. @@ -44,6 +44,32 @@ See the [CLI reference](/reference/cli/init) for the flags, including `--supabas <Step> +## Install EQL v3 + +This guide, and the rest of the EQL reference, targets **EQL v3**. `stash init` installs EQL v2 by default today, so ask for v3 explicitly: + +```bash example-id="quickstart-eql-v3" +npx stash eql install --eql-version 3 --force +``` + +`--force` reinstalls over the v2 schema that `init` just laid down. On a new database with no encrypted data, that is safe: there is nothing to migrate. + +Check what you ended up with: + +```bash +npx stash eql status +``` + +<Callout type="info"> +`--eql-version` accepts `2` or `3` and **defaults to `2`** in `stash` 0.17.1. The default becomes `3` in a future release, at which point this step goes away. Pass the flag until then, so you know which generation you are on rather than inheriting a default that is about to change. + +v3 installs directly against the database, so the `--drizzle`, `--migration`, and `--latest` flags do not apply to it. See [installing EQL](/reference/eql) for the full options, including installing across several databases. +</Callout> + +</Step> + +<Step> + ## Define what to encrypt `init` scaffolds `src/encryption/index.ts`. It declares which columns are encrypted, and exports a ready-to-use client. Edit it to match your table: From 4f13b938fdc218f7dd69d8fc6c05e43f95dae435 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 20:02:57 +1000 Subject: [PATCH 059/151] docs(get-started): write the section overview, fix the landing page IA.md assigns /get-started no content: the section is four pages plus the component hubs, and the mental model belongs to what-is-cipherstash. But the landing page links to /get-started, so it needs a real page rather than a dead URL. Written as a link-only router: start with the Quickstart, then branch by intent (integrating, no app changes, understanding, security review). It owns no mechanics. navTitle: Overview keeps the sidebar from repeating the folder name. Landing page fixes: - The Quickstart card pointed at /stack/quickstart and the Agent skills card at /stack/reference/agent-skills. Both have v2 homes now. - Dropped "bound to an identity" from the opening line. Identity binding needs OidcFederationStrategy plus a lock context; it is not what you get by default. Same overclaim removed from the quickstart. - Removed em-dashes. Only links pages that exist. what-is-cipherstash, choose-your-stack, examples, and the hubs get added to the router as they land. --- content/docs/get-started/index.mdx | 31 +++++++++++++++++++++++++++--- content/docs/index.mdx | 17 ++++++++-------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/content/docs/get-started/index.mdx b/content/docs/get-started/index.mdx index a92e606..f7d6375 100644 --- a/content/docs/get-started/index.mdx +++ b/content/docs/get-started/index.mdx @@ -1,9 +1,34 @@ --- title: Get started -description: "What CipherStash is, a 10-minute quickstart, and how to choose your integration path." +navTitle: Overview +description: "Encrypt your first field in ten minutes, then pick the integration path that matches your stack." type: tutorial +audience: [developer] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash encrypts your data at the field level, in your application, and keeps the ciphertext queryable in Postgres. The database never sees plaintext, and neither do we. -Until it lands, current documentation lives in the [existing docs](/stack). +This section gets you from nothing to an encrypted, queryable field. It owns no mechanics: each page links to the reference that does. + +## Start here + +The [Quickstart](/get-started/quickstart) takes about ten minutes. You will encrypt a field, store it, query it without decrypting it, and read it back. It works against any Postgres: Supabase, Neon, RDS, or a container. + +## Then pick your path + +- **Adopting CipherStash into an existing app?** [Integrations](/integrations) covers the platforms, ORMs, frameworks, and auth providers that wrap your existing client, so your queries keep the shape they already have. +- **Can't change the application?** [CipherStash Proxy](/reference/proxy) sits in front of Postgres and encrypts on the wire. +- **Want to understand it before you install it?** [Concepts](/concepts) explains searchable encryption, key management, and identity-aware encryption. +- **Evaluating for a security review?** [Architecture & security](/security) is written to be read end to end, starting with [Cryptography](/security/cryptography). + +## The pieces + +Three layers, and you rarely need all three at once. + +| | What it does | +|---|---| +| [Stack SDK](/reference/stack) | Encrypts and decrypts values in your application. The path the Quickstart takes. | +| [EQL](/reference/eql) | The Postgres surface that makes encrypted columns queryable. Installed once per database. | +| [Proxy](/reference/proxy) | An alternative to the SDK: speaks EQL for you, so the application needs no changes. | + +Underneath all three sits the platform: ZeroKMS derives a unique key for every value, and CTS binds decryption to an authenticated identity when you ask it to. See [cryptography](/security/cryptography). diff --git a/content/docs/index.mdx b/content/docs/index.mdx index a2f2d22..8d82072 100644 --- a/content/docs/index.mdx +++ b/content/docs/index.mdx @@ -1,23 +1,22 @@ --- title: CipherStash Docs -seoTitle: CipherStash Docs — Searchable encryption for Postgres -description: "Searchable field-level encryption, identity-bound keys, and cryptographic audit trails — built into your existing Postgres stack." +seoTitle: "CipherStash Docs: searchable encryption for Postgres" +description: "Searchable field-level encryption, identity-bound keys, and cryptographic audit trails, built into your existing Postgres stack." type: concept audience: [developer, cto, ciso] --- CipherStash encrypts your data at the field level. Every value gets its own -key, bound to an identity — and the ciphertext stays queryable in Postgres. -A breach, a compromised agent, a curious insider: they all see ciphertext -with no key. +key, and the ciphertext stays queryable in Postgres. A breach, a compromised +agent, a curious insider: they all see ciphertext with no key. ## Start here <Cards> <Card title="Get started" href="/get-started" description="What CipherStash is and your first encrypted fields in 10 minutes." /> - <Card title="Quickstart" href="/stack/quickstart" description="Encrypt, store, query, and decrypt your first fields in any Postgres." /> + <Card title="Quickstart" href="/get-started/quickstart" description="Encrypt, store, query, and decrypt your first fields in any Postgres." /> <Card title="Supabase" href="/integrations/supabase" description="Searchable, application-level encryption for your Supabase project." /> - <Card title="Agent skills" href="/stack/reference/agent-skills" description="CipherStash knowledge for Cursor, Copilot, and Claude Code." /> + <Card title="Agent skills" href="/reference/agent-skills" description="CipherStash knowledge for Cursor, Copilot, and Claude Code." /> </Cards> ## Browse the docs @@ -26,9 +25,9 @@ with no key. <Card title="Integrations" href="/integrations" description="Platforms, ORMs, frameworks, auth providers, and runtimes." /> <Card title="Concepts" href="/concepts" description="How searchable encryption, key management, and identity-aware encryption work." /> <Card title="Guides" href="/guides" description="Development workflow, data migration, deployment, and troubleshooting." /> - <Card title="Architecture & security" href="/security" description="Trust model, components, availability, audit, and compliance — for security review." /> + <Card title="Architecture & security" href="/security" description="Trust model, components, availability, audit, and compliance, for security review." /> <Card title="Solutions" href="/solutions" description="PII protection, HIPAA, AI/RAG, data residency, and provable access." /> - <Card title="Reference" href="/reference" description="EQL, the Stack SDK, Auth, the CLI, and Proxy — precise API documentation." /> + <Card title="Reference" href="/reference" description="EQL, the Stack SDK, Auth, the CLI, and Proxy: precise API documentation." /> </Cards> ## AI-ready documentation From c255d16a9d998d982c0c1b74879e8bbc53e04211 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 20:14:43 +1000 Subject: [PATCH 060/151] fix(eql): document the CLLW OPE ordering term, unblocking the build The EQL docs generator fetches the latest release from GitHub with no pin. eql-3.0.0-alpha.4 removed `eql_v3.ore_cllw`, so the STRICT drift check has been failing on v2 for every PR, not just this one. alpha.4 replaces it with an OPE path, and the rename is not cosmetic: eql_v3.ore_cllw -> eql_v3.ord_ope_term (public extractor) payload term key `oc` -> `op` (backing domain) -> eql_v3_internal.ope_cllw, private json.mdx and sorting.mdx are updated to match. core-concepts gains an `op` row in the payload term table, alongside `hm`, `ob`, and `bf`. The SEM specifier section said OPE was a future addition. It has landed: `public.<T>_ord_ope` domains exist for every orderable scalar type. The section now explains why the two mechanisms differ in what they demand of the database rather than in capability. An OPE term is a bytea domain that orders under Postgres's default btree operator class, so a functional index on it works anywhere you can CREATE INDEX. An ORE term needs a custom operator class and family, which managed platforms frequently block. Adds a callout that the mechanism behind the unpinned `_ord` is changing to OPE before 3.0.0 stabilizes, with ORE remaining available pinned as `_ord_ore`. Documents what alpha.4 ships: `ord_term(integer_ord)` still returns ore_block_256 today, so the default has not moved yet. --- content/docs/reference/eql/core-concepts.mdx | 14 +++++++++++--- content/docs/reference/eql/json.mdx | 6 +++--- content/docs/reference/eql/sorting.mdx | 6 +++--- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index ea9884b..1445ac8 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -37,10 +37,17 @@ Two things worth calling out: A trailing mechanism suffix — the `_ore` in `_ord_ore` — is a **SEM specifier**: it pins *which* searchable-encryption mechanism implements the capability, rather than just declaring the capability itself. -- `public.<T>_ord` declares *orderable* and leaves the mechanism to EQL's default — currently ORE (order-revealing encryption). -- `public.<T>_ord_ore` declares *orderable via ORE, explicitly*. Today the two are byte-identical surfaces backed by the same term. +- `public.<T>_ord` declares *orderable* and leaves the mechanism to EQL's default. +- `public.<T>_ord_ore` declares *orderable via ORE* (order-revealing encryption), explicitly. Its term is `ob`, extracted with `eql_v3.ord_term`. +- `public.<T>_ord_ope` declares *orderable via OPE* (order-preserving encryption), explicitly. Its term is `op`, extracted with `eql_v3.ord_ope_term`. -The distinction earns its keep as mechanisms multiply: the EQL v3 release adds an **OPE** (order-preserving encryption) specifier for every orderable type — including `text` — at which point pinning a specifier documents and freezes a column's mechanism choice, while unspecified variants track the default. Each type page lists its available specifiers under an "SEM specifiers" heading. +The two mechanisms differ in what they demand of the database, not in the capability they declare. An OPE term is a `bytea` domain that orders under Postgres's **default** btree operator class, so a functional index on it works anywhere you can `CREATE INDEX`. An ORE term needs a custom operator class and family, which managed platforms frequently block. + +<Callout type="warn"> +The mechanism behind the unpinned `public.<T>_ord` is **changing to OPE** before EQL 3.0.0 stabilizes, so that ordering works on every platform out of the box. ORE remains available, pinned explicitly as `_ord_ore`, on databases that permit operator class and family creation. Pin a specifier if you need to freeze a column's mechanism; leave it off to track the default. +</Callout> + +Each type page lists its available specifiers under an "SEM specifiers" heading. Declaring a table is just typing each column as the variant it needs: @@ -101,6 +108,7 @@ Alongside the envelope, a payload carries the index terms for its column's capab | --- | --- | --- | --- | --- | | `hm` | `eql_v3_internal.hmac_256` (domain over `text`) | Hex string (HMAC-SHA-256) | `=`, `<>` on `_eq` and `text_search` domains | Whether two values are equal — nothing else | | `ob` | `eql_v3_internal.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks (block count varies by scalar width) | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | +| `op` | `eql_v3_internal.ope_cllw` (domain over `bytea`) | Hex-encoded CLLW OPE ciphertext | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord_ope` domains, and on String / Number leaves of `public.json` | The relative order of two values | | `bf` | `eql_v3_internal.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit — large filters emit negative positions) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | The capability is encoded as **required keys**: the payload for a `public.text_eq` column must carry `hm`; a `public.integer_ord` payload must carry `ob` (and only `ob`); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index 273fc8c..f2608e2 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -31,7 +31,7 @@ An encrypted JSON document uses a different payload shape from the scalar types: | --- | --- | | `s` | Selector — a deterministic hash of the JSON path. Required; entry matching compares selectors first. | | `c` | Ciphertext for the node at that path. | -| `hm` **or** `oc` | Exactly one, never both — the domain `CHECK` enforces the exclusivity. `hm` (HMAC-256) on Boolean/`null` leaves and Object/Array roots; `oc` (CLLW ORE, backed by `eql_v3.ore_cllw`) on String/Number leaves. | +| `hm` **or** `op` | Exactly one, never both — the domain `CHECK` enforces the exclusivity. `hm` (HMAC-256) on Boolean/`null` leaves and Object/Array roots; `op` (CLLW OPE, backed by `eql_v3_internal.ope_cllw`) on String/Number leaves. | | `a` | Optional array marker — `true` when the selector points at an array context. | The decoded `oc` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier payload versions split this into two fields — `ocf` (fixed-width, numeric) and `ocv` (variable-width, string) — which consolidated into the single `oc` key; the tag byte now carries the distinction. @@ -150,7 +150,7 @@ SELECT metadata -> 0 FROM orders; The extracted `public.jsonb_entry` is itself comparable: - `=` / `<>` resolve via `eql_v3.eq_term` — works on every node type -- `<` / `<=` / `>` / `>=` resolve via `eql_v3.ore_cllw` — String and Number leaves only +- `<` / `<=` / `>` / `>=` resolve via `eql_v3.ord_ope_term` — String and Number leaves only - `MIN` / `MAX` over an extracted ordered leaf use the `eql_v3.min` / `eql_v3.max` aggregates ```sql @@ -164,7 +164,7 @@ FROM orders GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); ``` -A hash index on `eql_v3.eq_term(col -> '<selector>'::text)` engages the equality lookup; a btree on `eql_v3.ore_cllw(...)` engages range and `ORDER BY`. See [Indexes](/reference/eql/indexes). +A hash index on `eql_v3.eq_term(col -> '<selector>'::text)` engages the equality lookup; a btree on `eql_v3.ord_ope_term(...)` engages range and `ORDER BY`. The OPE term is a `bytea` domain that orders under the default btree operator class, so this index needs no custom operator class. See [Indexes](/reference/eql/indexes). ## Path queries and array helpers diff --git a/content/docs/reference/eql/sorting.mdx b/content/docs/reference/eql/sorting.mdx index c847404..2529fba 100644 --- a/content/docs/reference/eql/sorting.mdx +++ b/content/docs/reference/eql/sorting.mdx @@ -81,15 +81,15 @@ If you project the column with a cast and sort on it — `SELECT col::jsonb ... ## Sorting extracted JSON leaves -String and Number leaves inside an encrypted JSON document carry a CLLW ORE term, so they sort too — the extractor is `eql_v3.ore_cllw` on the extracted entry: +String and Number leaves inside an encrypted JSON document carry a CLLW OPE term, so they sort too — the extractor is `eql_v3.ord_ope_term` on the extracted entry: ```sql SELECT * FROM orders -ORDER BY eql_v3.ore_cllw(metadata -> 'total_selector'::text) DESC +ORDER BY eql_v3.ord_ope_term(metadata -> 'total_selector'::text) DESC LIMIT 10; ``` -A btree on the same `eql_v3.ore_cllw(...)` expression streams this ordered, exactly like `ord_term` on a scalar column. Selectors, node types, and which leaves are orderable are covered in [JSON](/reference/eql/json). +A btree on the same `eql_v3.ord_ope_term(...)` expression streams this ordered, exactly like `ord_term` on a scalar column. Selectors, node types, and which leaves are orderable are covered in [JSON](/reference/eql/json). ## Where to go next From 60ce2902b7da8d213fb7c9804d12630b94b93fb0 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 20:37:27 +1000 Subject: [PATCH 061/151] fix(eql): rename the remaining oc payload keys, and pin the EQL release MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two follow-ups to the ope_cllw rename. The drift check only validates schema-qualified symbols, so it never saw the payload term key. json.mdx still called it `oc` in eight places: the payload table, both example payloads, the node-type table, and the exclusivity prose. alpha.4's manifest has no `oc`, `ocf`, or `ocv` anywhere; sv entries carry `hm` or `op`. Confirmed against eq_term(jsonb_entry), whose own description reads "whichever deterministic term the sv entry carries — hm (HMAC-256) or op (CLLW OPE)". grouping-and-aggregates.mdx also still credited MIN/MAX on JSON leaves to a "CLLW ORE term". And the cause: generate-eql-docs.ts fetched whatever GitHub released most recently, and didn't filter prereleases. alpha.3 and alpha.4 shipped a day apart, so an upstream publish turned this build red with no commit here. The release is now pinned to eql-3.0.0-alpha.4, overridable for a one-off check with EQL_RELEASE_TAG. Upgrading EQL becomes a deliberate commit whose drift the check reports in review. Prerelease manifests report `"version": "DEV"`, which the EqlVersion banner rendered as "validated against EQL DEV" on every reference page. When the manifest omits a real version, the pinned tag supplies one, so the banner now reads 3.0.0-alpha.4. --- .../reference/eql/grouping-and-aggregates.mdx | 2 +- content/docs/reference/eql/json.mdx | 18 ++-- scripts/generate-eql-docs.ts | 82 +++++++++++-------- 3 files changed, 58 insertions(+), 44 deletions(-) diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx index 615d6b2..568be31 100644 --- a/content/docs/reference/eql/grouping-and-aggregates.mdx +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -97,7 +97,7 @@ SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); ``` -`eql_v3.eq_term` reads whichever term the entry carries, so this works on every JSON node type. String and Number leaves also support `eql_v3.min` / `eql_v3.max` via their CLLW ORE term. Selectors and node capabilities are in [JSON](/reference/eql/json). +`eql_v3.eq_term` reads whichever term the entry carries, so this works on every JSON node type. String and Number leaves also support `eql_v3.min` / `eql_v3.max` via their CLLW OPE term. Selectors and node capabilities are in [JSON](/reference/eql/json). ## Where to go next diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index f2608e2..63add60 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -34,7 +34,7 @@ An encrypted JSON document uses a different payload shape from the scalar types: | `hm` **or** `op` | Exactly one, never both — the domain `CHECK` enforces the exclusivity. `hm` (HMAC-256) on Boolean/`null` leaves and Object/Array roots; `op` (CLLW OPE, backed by `eql_v3_internal.ope_cllw`) on String/Number leaves. | | `a` | Optional array marker — `true` when the selector points at an array context. | -The decoded `oc` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier payload versions split this into two fields — `ocf` (fixed-width, numeric) and `ocv` (variable-width, string) — which consolidated into the single `oc` key; the tag byte now carries the distinction. +The decoded `op` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier alphas named this key `oc` and backed it with CLLW ORE; `3.0.0-alpha.4` renamed it to `op` and moved it to CLLW OPE, whose term orders under the default btree operator class. Older payload versions split it further, into `ocf` (fixed-width, numeric) and `ocv` (variable-width, string). A document payload for a `public.json` column: @@ -45,22 +45,22 @@ A document payload for a `public.json` column: "i": { "t": "orders", "c": "metadata" }, "sv": [ { "s": "2517068c0d1f9d4d41d2c666211f785e", "c": "mBbKmM...", "hm": "b0e0..." }, - { "s": "f510853a4ab9d4f75f51a533ac264c5d", "c": "mBbKmQ...", "oc": "01a3f2..." }, - { "s": "33743aed3ae636f6bf05cff11ac4b519", "c": "mBbKmR...", "oc": "004e19..." } + { "s": "f510853a4ab9d4f75f51a533ac264c5d", "c": "mBbKmQ...", "op": "01a3f2..." }, + { "s": "33743aed3ae636f6bf05cff11ac4b519", "c": "mBbKmR...", "op": "004e19..." } ] } ``` - First entry: an object root — `hm` only, equality/containment -- Second entry: a string leaf — `oc` starting with tag `01` -- Third entry: a numeric leaf — `oc` starting with tag `00` +- Second entry: a string leaf — `op` starting with tag `01` +- Third entry: a numeric leaf — `op` starting with tag `00` A containment **query** payload (`eql_v3.query_jsonb`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. This is the needle the client builds for a `@>` query: ```json { "sv": [ - { "s": "f510853a4ab9d4f75f51a533ac264c5d", "oc": "01a3f2..." } + { "s": "f510853a4ab9d4f75f51a533ac264c5d", "op": "01a3f2..." } ] } ``` @@ -89,10 +89,10 @@ During encryption, the client flattens the document: each unique path gets a det | Object | `hm` (HMAC-256) | Yes | No | | Array | `hm` (HMAC-256) | Yes | No | | Boolean / JSON `null` | `hm` (HMAC-256) | Yes | No | -| String | `oc` (CLLW ORE, string domain) | Yes | Yes | -| Number | `oc` (CLLW ORE, numeric domain) | Yes | Yes | +| String | `op` (CLLW OPE, string domain) | Yes | Yes | +| Number | `op` (CLLW OPE, numeric domain) | Yes | Yes | -Each entry carries exactly one of `hm` or `oc` — the domain `CHECK` enforces the exclusivity. `hm` is a deterministic hash, so it supports equality only. `oc` is a CLLW ORE term that reveals ordering and, being deterministic, collapses to equality on matching selectors — `eql_v3.eq_term` reads whichever term an entry carries, so equality works uniformly across all node types. +Each entry carries exactly one of `hm` or `op` — the domain `CHECK` enforces the exclusivity. `hm` is a deterministic hash, so it supports equality only. `op` is a CLLW OPE term that reveals ordering and, being deterministic, collapses to equality on matching selectors — `eql_v3.eq_term` reads whichever term an entry carries, so equality works uniformly across all node types. JSON `null` here means a `null` literal *inside* the document. A SQL `NULL` column value is not encrypted at all. diff --git a/scripts/generate-eql-docs.ts b/scripts/generate-eql-docs.ts index cd21d6f..b7a5f7c 100644 --- a/scripts/generate-eql-docs.ts +++ b/scripts/generate-eql-docs.ts @@ -2,17 +2,36 @@ /** * Generates EQL (Encrypt Query Language) API reference documentation. * - * Fetches the latest release from the encrypt-query-language repository, - * downloads the docs tarball, and converts API.md to an MDX page under - * content/stack/reference/eql/. + * Downloads the docs tarball for the pinned EQL release and converts API.md to + * an MDX page under content/stack/reference/eql/. + * + * The release is PINNED. `generate-eql-api-docs.ts` then runs a STRICT drift + * check of the hand-written reference against this release's manifest, so an + * unpinned "latest release" meant any upstream EQL publish could turn the docs + * build red with no commit in this repo — which is exactly what + * eql-3.0.0-alpha.4 did when it replaced `eql_v3.ore_cllw`. + * + * To upgrade: bump EQL_RELEASE_TAG, run `bun run build`, and fix whatever the + * drift check reports. That makes an EQL upgrade a deliberate, reviewable + * commit rather than an ambush on whoever has a PR open. + * + * `EQL_RELEASE_TAG=eql-3.0.0 bun run generate-docs:eql` overrides it for a + * one-off check against a different release. */ import { execSync } from "node:child_process"; import fs from "node:fs/promises"; import path from "node:path"; import GithubSlugger from "github-slugger"; -const GITHUB_API_URL = - "https://api.github.com/repos/cipherstash/encrypt-query-language/releases"; +/** + * The EQL release the docs are written against. EQL 3.0.0 is still in + * prerelease and churning (alpha.3 and alpha.4 shipped a day apart), so this + * tracks an alpha deliberately rather than by accident. + */ +const EQL_RELEASE_TAG = process.env.EQL_RELEASE_TAG ?? "eql-3.0.0-alpha.4"; + +const GITHUB_RELEASE_DOWNLOAD = + "https://github.com/cipherstash/encrypt-query-language/releases/download"; const TEMP_DIR = ".tmp-eql"; const OUTPUT_DIR = path.join(process.cwd(), "content/stack/reference/eql"); // Where the machine-readable manifest is surfaced for the v2 API-reference @@ -35,37 +54,26 @@ function checkTarballExists(url: string): boolean { } /** - * Get the latest release that has a docs tarball available + * Resolve the docs tarball for the pinned release. */ -async function getLatestRelease(): Promise<{ +async function getPinnedRelease(): Promise<{ tag: string; tarballUrl: string; }> { - console.log("Fetching releases from GitHub..."); - const response = execSync(`curl -sL ${GITHUB_API_URL}`, { - encoding: "utf8", - }); - - const releases = JSON.parse(response); - - if (!Array.isArray(releases) || releases.length === 0) { - throw new Error("No releases found in GitHub API response"); - } - - for (const release of releases) { - const tag = release.tag_name; - if (!tag || !tag.startsWith("eql-")) continue; - - const tarballUrl = `https://github.com/cipherstash/encrypt-query-language/releases/download/${tag}/eql-docs-${tag}.tar.gz`; - - console.log(`Checking ${tag}...`); - if (checkTarballExists(tarballUrl)) { - console.log(`Found docs tarball for ${tag}`); - return { tag, tarballUrl }; - } + const tag = EQL_RELEASE_TAG; + const tarballUrl = `${GITHUB_RELEASE_DOWNLOAD}/${tag}/eql-docs-${tag}.tar.gz`; + + console.log(`Using pinned EQL release: ${tag}`); + if (!checkTarballExists(tarballUrl)) { + throw new Error( + `No docs tarball for pinned EQL release "${tag}".\n` + + ` Expected: ${tarballUrl}\n` + + " Update EQL_RELEASE_TAG in scripts/generate-eql-docs.ts, or set the\n" + + " EQL_RELEASE_TAG environment variable to a release that ships one.", + ); } - throw new Error("No release with documentation tarball found"); + return { tag, tarballUrl }; } /** @@ -236,8 +244,7 @@ async function main() { console.log("EQL API Reference Documentation Generator"); console.log("=".repeat(60)); - const { tag, tarballUrl } = await getLatestRelease(); - console.log(`Latest release: ${tag}`); + const { tag, tarballUrl } = await getPinnedRelease(); const extractPath = await downloadAndExtractDocs(tarballUrl, tag); @@ -269,9 +276,16 @@ async function main() { // this is best-effort and the generator falls back to the committed sample. const manifestSrc = path.join(extractPath, "json", "eql-manifest.json"); try { - await fs.copyFile(manifestSrc, RELEASE_MANIFEST); + // Prerelease manifests report `"version": "DEV"`, which would surface as + // "generated and validated against EQL DEV" in the banner on every + // reference page. We know which release we pinned, so say so. + const manifest = JSON.parse(await fs.readFile(manifestSrc, "utf8")); + if (!manifest.version || manifest.version === "DEV") { + manifest.version = tag.replace(/^eql-/, ""); + } + await fs.writeFile(RELEASE_MANIFEST, JSON.stringify(manifest, null, 2)); console.log( - `✓ Extracted eql-manifest.json → ${path.basename(RELEASE_MANIFEST)}`, + `✓ Extracted eql-manifest.json → ${path.basename(RELEASE_MANIFEST)} (version: ${manifest.version})`, ); } catch { await fs.rm(RELEASE_MANIFEST, { force: true }); // clear any stale cache From 6fe86b109f4677a7c77b45a4322a7d8c17a4e5bd Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 21:11:08 +1000 Subject: [PATCH 062/151] docs(get-started): write what-is-cipherstash and choose-your-stack Completes the section. Both are ports with the claims checked rather than carried across. what-is-cipherstash: mental model, a mermaid components map, the audience router, and the threat table. Drops three unverifiable performance claims ("100x faster than AWS KMS", "100,000x faster than FHE", "< 1ms query overhead") because the corpus disagrees with itself: fhe.mdx says 410,000x, and the pending benchmarks page says 14x for ZeroKMS vs AWS KMS. Numbers belong on /reference/benchmarks, sourced once. Also drops "identity and policy baked into every key", which overstates the default: identity binding needs OidcFederationStrategy plus a lock context. Adds what the source never said: the terms stored alongside ciphertext are the price of a WHERE clause, and an equality term reveals which rows share a value. And a "what it does not protect against" row, because a page that only lists wins is not a threat model. choose-your-stack: merges planning-guide and discovery-session into four ordered decisions (SDK or Proxy, platform, ORM, identity provider), with the at-rest / in-transit / in-use table and the dev-to-production credential path. Notes that SDK and Proxy produce the same ciphertext, so the choice is not a one-way door. The section index now routes to all three pages and no longer restates the component table that what-is-cipherstash owns. --- .../docs/get-started/choose-your-stack.mdx | 105 ++++++++++++++++++ content/docs/get-started/index.mdx | 16 +-- content/docs/get-started/meta.json | 8 +- .../docs/get-started/what-is-cipherstash.mdx | 92 +++++++++++++++ 4 files changed, 207 insertions(+), 14 deletions(-) create mode 100644 content/docs/get-started/choose-your-stack.mdx create mode 100644 content/docs/get-started/what-is-cipherstash.mdx diff --git a/content/docs/get-started/choose-your-stack.mdx b/content/docs/get-started/choose-your-stack.mdx new file mode 100644 index 0000000..e8cd3a8 --- /dev/null +++ b/content/docs/get-started/choose-your-stack.mdx @@ -0,0 +1,105 @@ +--- +title: Choose your stack +description: "Pick an integration path: SDK or Proxy, your Postgres platform, your ORM, and your identity provider." +type: guide +components: [encryption, proxy, eql, platform] +audience: [developer, cto] +--- + +Four decisions, in order. The first one matters most; the rest usually follow from what you already run. + +## 1. SDK or Proxy + +| | [Stack SDK](/reference/stack) | [Proxy](/reference/proxy) | +|---|---|---| +| Where encryption happens | In your application process | In the proxy, which you run | +| Application changes | Encrypt and decrypt calls, or an ORM wrapper that adds them for you | Point your connection string at the proxy | +| Best when | You own the code and want fine-grained control | You cannot change the application, or it isn't TypeScript | +| Language | TypeScript / JavaScript | Any. It speaks the Postgres wire protocol | +| Runs where | Your app | A container or sidecar in your infrastructure | + +Both produce the same ciphertext and both speak [EQL](/reference/eql), so this is not a one-way door. You can move a table from one to the other without re-encrypting it. + +Start with the SDK unless you already know you can't change the application. + +## 2. Your Postgres + +EQL installs into any Postgres you can connect to. It needs no extension, no superuser, and no `postgresql.conf` changes. + +| Platform | Works | Notes | +|---|---|---| +| Supabase | Yes | [Supabase integration](/integrations/supabase). Expose the `eql_v3` schema in the dashboard. | +| Neon, RDS, Aurora, Cloud SQL | Yes | Nothing special. `stash eql install` detects a non-superuser role and adapts. | +| Self-hosted Postgres | Yes | Full operator-class support, so the ORE ordering mechanism is available. | +| Postgres behind PgBouncer | Yes | Transaction pooling is fine. Proxy has its own pooling. | +| DynamoDB | Yes, without EQL | [DynamoDB integration](/stack/cipherstash/encryption/dynamodb). Encrypted attributes and HMAC key lookups; no EQL, because there's no Postgres. | +| MySQL, MongoDB, others | Not yet | The SDK still encrypts values for you, but nothing is queryable server-side. | + +<Callout type="info"> +Managed platforms usually block custom operator class creation. That's why the default ordering mechanism is moving to OPE, which indexes under Postgres's default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). +</Callout> + +## 3. Your ORM + +| Query layer | Path | What it looks like | +|---|---|---| +| Drizzle | [Drizzle integration](/stack/cipherstash/encryption/drizzle) | An `encryptedType` column and typed query operators. Your Drizzle code keeps its shape. | +| Supabase JS | [Supabase integration](/integrations/supabase) | `encryptedSupabase` wraps the client. `.eq()`, `.like()`, `.gt()` keep working. | +| Prisma | [Prisma integration](/stack/cipherstash/encryption/prisma-next) | Encrypt in the data layer around Prisma calls. | +| Raw SQL | [Quickstart](/get-started/quickstart) | Encrypt the value, insert it, cast the query operand. | +| An ORM we don't list | The SDK | Encrypt before write, decrypt after read. Every ORM supports that. | + +If you use no ORM, nothing is missing. The SDK's `encrypt` and `encryptQuery` are the whole surface. + +## 4. Identity binding, if you need it + +Most teams start without this. Reach for it when a value should be decryptable only by the user it belongs to, rather than by anything holding the application's credentials. + +It requires an OIDC provider, registered on the [OIDC providers](https://dashboard.cipherstash.com/workspaces/_/oidc-providers) page in the Dashboard. + +| Provider | Supported | +|---|---| +| Supabase Auth | Yes | +| Clerk | Yes | +| Auth0 | Yes | +| Okta | Yes | +| Any OIDC issuer | Yes, if it publishes a discovery endpoint | + +See [provable access control](/solutions/provable-access) for what this buys you, and what it does not. + +## Where CipherStash sits among the encryption you already have + +Encryption at rest and in transit are not alternatives to this. They protect different things, and you should keep both. + +| | At rest | In transit | In use | +|---|---|---|---| +| Protects the disk | Yes | No | Yes | +| Protects the wire | No | Yes | Yes | +| Protects during a query | No | No | Yes | +| Plaintext visible to the database | Yes | Yes | **No** | +| Queryable without decrypting | n/a | n/a | Yes | + +A database breach defeats encryption at rest, because the database decrypts on read. That is the gap this fills. + +## From development to production + +| Stage | Credentials | Setup | +|---|---|---| +| Local development | Device-based | `stash init` per developer. No environment variables. | +| CI and staging | Machine | An application client key, plus `CS_*` environment variables. | +| Production | Machine | Same, with the client key held in your secret manager. | + +Device auth gives each developer their own identity, so local decryptions are attributable. There's no interactive device in CI, hence the switch. See [going to production](/stack/deploy/going-to-production). + +## Still not sure + +A [discovery session](https://cipherstash.com/contact) is a 60-minute conversation with our engineering team. No slides. Bring whoever owns the data layer, and a compliance lead if that's someone else. + +Worth thinking through beforehand: + +- Which fields are sensitive, and which regulations cover them. +- Whether you need those fields **searchable**, or only stored and retrieved. Encrypt-only columns carry no index terms and leak nothing. +- Whether you need per-user decryption, or per-tenant isolation, or both. +- Your database, ORM, and deployment target, plus any restriction on native Node modules. + +You'll leave with a recommended path and answers to whatever is blocking you. diff --git a/content/docs/get-started/index.mdx b/content/docs/get-started/index.mdx index f7d6375..14f25bc 100644 --- a/content/docs/get-started/index.mdx +++ b/content/docs/get-started/index.mdx @@ -12,7 +12,9 @@ This section gets you from nothing to an encrypted, queryable field. It owns no ## Start here -The [Quickstart](/get-started/quickstart) takes about ten minutes. You will encrypt a field, store it, query it without decrypting it, and read it back. It works against any Postgres: Supabase, Neon, RDS, or a container. +- **[What is CipherStash?](/get-started/what-is-cipherstash)** is the mental model. What the pieces are, what the trade is, and which door to walk through. +- **[Quickstart](/get-started/quickstart)** is ten minutes of typing. Encrypt a field, store it, query it without decrypting it, and read it back. It works against any Postgres: Supabase, Neon, RDS, or a container. +- **[Choose your stack](/get-started/choose-your-stack)** picks your integration path: SDK or Proxy, your platform, your ORM, and your identity provider. ## Then pick your path @@ -20,15 +22,3 @@ The [Quickstart](/get-started/quickstart) takes about ten minutes. You will encr - **Can't change the application?** [CipherStash Proxy](/reference/proxy) sits in front of Postgres and encrypts on the wire. - **Want to understand it before you install it?** [Concepts](/concepts) explains searchable encryption, key management, and identity-aware encryption. - **Evaluating for a security review?** [Architecture & security](/security) is written to be read end to end, starting with [Cryptography](/security/cryptography). - -## The pieces - -Three layers, and you rarely need all three at once. - -| | What it does | -|---|---| -| [Stack SDK](/reference/stack) | Encrypts and decrypts values in your application. The path the Quickstart takes. | -| [EQL](/reference/eql) | The Postgres surface that makes encrypted columns queryable. Installed once per database. | -| [Proxy](/reference/proxy) | An alternative to the SDK: speaks EQL for you, so the application needs no changes. | - -Underneath all three sits the platform: ZeroKMS derives a unique key for every value, and CTS binds decryption to an authenticated identity when you ask it to. See [cryptography](/security/cryptography). diff --git a/content/docs/get-started/meta.json b/content/docs/get-started/meta.json index 1293c5b..a1ffe31 100644 --- a/content/docs/get-started/meta.json +++ b/content/docs/get-started/meta.json @@ -1,5 +1,11 @@ { "title": "Get started", "icon": "Rocket", - "pages": ["index", "quickstart", "..."] + "pages": [ + "index", + "what-is-cipherstash", + "quickstart", + "choose-your-stack", + "..." + ] } diff --git a/content/docs/get-started/what-is-cipherstash.mdx b/content/docs/get-started/what-is-cipherstash.mdx new file mode 100644 index 0000000..b4e4309 --- /dev/null +++ b/content/docs/get-started/what-is-cipherstash.mdx @@ -0,0 +1,92 @@ +--- +title: What is CipherStash? +description: "Field-level encryption that stays queryable in Postgres: the mental model, the pieces, and which door to walk through." +type: concept +components: [encryption, platform, eql, proxy] +audience: [developer, cto, ciso] +--- + +CipherStash encrypts individual fields in your application, before they reach the database, and keeps them queryable in Postgres. The database stores ciphertext and can still answer `WHERE`, `ORDER BY`, and containment queries against it. + +A breach yields ciphertext. So does a compromised agent, an over-permissioned service, and a curious insider. + +## The problem + +Encrypting a column has always meant losing the query. So teams encrypt at rest, which protects the disk and nothing else: the moment a query runs, the database has plaintext, and so does anyone who reached the database. + +That was tolerable when the thing reading your data was a person. It is less so now that it is an agent running on application credentials, at machine speed, one prompt injection away from exfiltration. + +## The mental model + +Three ideas carry the whole product. + +**Encryption happens in your process.** Not in the database, not on our infrastructure. Plaintext never leaves your application. + +**Every value gets its own key.** Not a table key or a column key. A per-value key, derived for one operation and discarded. Compromising one value tells an attacker nothing about the next. + +**Ciphertext stays queryable.** Alongside each encrypted value, the client stores index terms that let Postgres compare ciphertext without decrypting it. This is the trade at the heart of the product, and it is not free: see [what the terms reveal](#the-trade). + +## The pieces + +```mermaid +flowchart TB + subgraph app["Your application"] + sdk["Stack SDK<br/>encrypt / decrypt"] + end + + subgraph db["Your Postgres"] + eql["EQL<br/>encrypted column types<br/>and operators"] + end + + subgraph platform["CipherStash platform"] + zerokms["ZeroKMS<br/>key seeds"] + cts["CTS<br/>identity tokens"] + end + + proxy["Proxy<br/>speaks EQL for you"] + + sdk -- ciphertext + index terms --> eql + proxy -- ciphertext + index terms --> eql + sdk <-- key seed --> zerokms + proxy <-- key seed --> zerokms + cts -. binds decryption<br/>to an identity .-> sdk +``` + +| Piece | What it does | When you need it | +|---|---|---| +| [Stack SDK](/reference/stack) | Encrypts and decrypts values in your application | The default path. Start here. | +| [EQL](/reference/eql) | The Postgres surface: encrypted column types, operators, and term extractors | Always, if the data lives in Postgres. Installed once per database. | +| [Proxy](/reference/proxy) | Sits in front of Postgres and speaks EQL for you | When you cannot change the application | +| ZeroKMS | Returns a key seed per value; never sees your client key or a data key | Always. See [cryptography](/security/cryptography). | +| CTS | Federates your identity provider so decryption can be bound to a user | Only for [identity-aware encryption](/solutions/provable-access) | + +You rarely need all of them at once. The Stack SDK plus EQL is the common case. Proxy is the alternative to the SDK, not an addition to it. + +Note that **EQL is only for Postgres**. The SDK also encrypts values that never touch a database, and non-Postgres stores like [DynamoDB](/stack/cipherstash/encryption/dynamodb), with no EQL involved. + +## The trade + +Querying ciphertext is possible because each value carries index terms derived from the plaintext. Those terms are not the plaintext, but they are not nothing either. + +An equality term reveals which rows share a value. An ordering term reveals relative order. A free-text term reveals probabilistic token overlap. That is the price of a `WHERE` clause, and whether it is worth paying depends on the column. + +The honest version of this, per term, is in [searchable encryption](/concepts/searchable-encryption). Read it before deciding a column is safe to index. Columns you only store and retrieve can carry no terms at all. + +## Which door + +**You are building.** Start with the [Quickstart](/get-started/quickstart), then [choose your stack](/get-started/choose-your-stack) to find the integration that matches your platform and ORM. + +**You are evaluating.** [Architecture & security](/security) is self-contained for a vendor review, starting with [cryptography](/security/cryptography). [Solutions](/solutions) covers the problems teams bring us. + +**You are deciding whether this is the right tool.** [Concepts](/concepts) explains how it works and where it does not apply. The [comparisons](/concepts/compare) are written to be honest about what CipherStash is not. + +## What it protects against + +| Threat | What happens | +|---|---| +| Database breach | Ciphertext. The keys were never in the database. | +| Compromised application credentials | Ciphertext, unless the attacker also holds the client key. | +| AI agent exfiltration | The agent reaches the database and decrypts nothing, because its credentials are not the user's keys. | +| Curious insider | Every decryption is a key derivation, and ZeroKMS records who performed it. | + +What it does **not** protect against: an attacker who has compromised your running application process, holding the client key and able to call `decrypt`. Encryption in the application means the application can decrypt. See [cryptography](/security/cryptography) for the full trust model. From 7f7b38cd7f55dd223eedc893f28c665af85940da Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 21:47:45 +1000 Subject: [PATCH 063/151] docs(get-started): restore the performance numbers, with 14x for AWS KMS Per review: the 100x AWS KMS figure describes unreleased work, so the page uses 14x, which the benches repo supports and which proxy/index.mdx already states. The FHE and sub-millisecond claims are defensible and come back. Each number now names its source rather than floating free: - Sub-millisecond query overhead, explained (operators inline into functional indexes, so Postgres does a normal index scan). - 410,000x vs FHE, linked to the open tfhe-ore-bench harness. The old page said 100,000x; fhe.mdx and searchable-encryption.mdx both say 410,000x, so the outlier was the page being ported. - Up to 14x the throughput of AWS KMS, with the reason (bulk key derivation). Also frames the trade rather than leading with speed: encryption in use is slow if you do it with FHE, and searchable encryption buys its speed with bounded, published leakage. --- content/docs/get-started/what-is-cipherstash.mdx | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/content/docs/get-started/what-is-cipherstash.mdx b/content/docs/get-started/what-is-cipherstash.mdx index b4e4309..9f4c9f9 100644 --- a/content/docs/get-started/what-is-cipherstash.mdx +++ b/content/docs/get-started/what-is-cipherstash.mdx @@ -80,6 +80,18 @@ The honest version of this, per term, is in [searchable encryption](/concepts/se **You are deciding whether this is the right tool.** [Concepts](/concepts) explains how it works and where it does not apply. The [comparisons](/concepts/compare) are written to be honest about what CipherStash is not. +## Performance + +Encryption in use is usually assumed to be slow. It is, if you do it with fully homomorphic encryption. Searchable encryption is a different trade: bounded, published leakage in exchange for the database doing ordinary index work on ciphertext. + +| | | +|---|---| +| Query overhead | Sub-millisecond. The encrypted operators inline into functional indexes, so Postgres does a normal index scan. | +| vs fully homomorphic encryption | [410,000x faster](https://github.com/cipherstash/tfhe-ore-bench) on the per-row primitives a database actually executes. | +| vs AWS KMS | Up to 14x the throughput, because ZeroKMS derives keys in bulk rather than one call per value. | + +The FHE comparison is an open benchmark harness you can run yourself. See [CipherStash vs FHE](/stack/reference/comparisons/fhe) for the methodology, and for the workloads where FHE is genuinely the right tool. + ## What it protects against | Threat | What happens | From 2f79af0bab03f486db15ea95b97d32fa69ce7d7e Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 21:54:18 +1000 Subject: [PATCH 064/151] docs(get-started): frame leakage as a design choice, not a confession "The trade" read as an apology. Each scheme's leakage is bounded and published, which makes it something you choose per column rather than something that happens to you. Renamed to "Choosing what each column reveals", with a table mapping declared capability to what an observer could infer, from "nothing" upward. The point is now that the goal is not to eliminate leakage but to pick capabilities whose leakage your threat model already tolerates, and to know exactly what you picked. A column whose frequency distribution is itself the secret gets encrypted without that capability and filtered after decryption. Same reframing on the quickstart's closing bullet, which had the same tone. --- content/docs/get-started/quickstart.mdx | 2 +- .../docs/get-started/what-is-cipherstash.mdx | 19 ++++++++++++++----- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx index 42568fd..999ff0d 100644 --- a/content/docs/get-started/quickstart.mdx +++ b/content/docs/get-started/quickstart.mdx @@ -193,7 +193,7 @@ You encrypted a field, stored it, queried it without decrypting, and read it bac - **ZeroKMS** returned a key seed, which your application processed with its client key to derive a **unique data key for that value**. The data key existed in your memory for one operation and was then discarded. See [cryptography](/security/cryptography). - **Your client key** never left your infrastructure. Without it, nothing decrypts, including CipherStash. - **Your keyset** is the isolation boundary. Data encrypted under one keyset cannot be decrypted with another, which is how you separate tenants or environments. -- **The index term** stored alongside the ciphertext is what let Postgres answer the query. It is derived from the value, not the plaintext, but it is not free: an equality term reveals which rows share a value. Declare only the capabilities you query on, and read [searchable encryption](/concepts/searchable-encryption) before deciding a column is safe to index. +- **The index term** stored alongside the ciphertext is what let Postgres answer the query. Each capability you declare has a bounded, published leakage profile: an equality term lets an observer see which rows share a value, and nothing more. Declare only the capabilities you query on, so that what a column reveals stays within what your threat model already tolerates. See [searchable encryption](/concepts/searchable-encryption). ## Next steps diff --git a/content/docs/get-started/what-is-cipherstash.mdx b/content/docs/get-started/what-is-cipherstash.mdx index 9f4c9f9..49d4fe1 100644 --- a/content/docs/get-started/what-is-cipherstash.mdx +++ b/content/docs/get-started/what-is-cipherstash.mdx @@ -24,7 +24,7 @@ Three ideas carry the whole product. **Every value gets its own key.** Not a table key or a column key. A per-value key, derived for one operation and discarded. Compromising one value tells an attacker nothing about the next. -**Ciphertext stays queryable.** Alongside each encrypted value, the client stores index terms that let Postgres compare ciphertext without decrypting it. This is the trade at the heart of the product, and it is not free: see [what the terms reveal](#the-trade). +**Ciphertext stays queryable.** Alongside each encrypted value, the client stores index terms that let Postgres compare ciphertext without decrypting it. Which terms a column carries is something you choose, and it decides what the database could infer: see [choosing what each column reveals](#choosing-what-each-column-reveals). ## The pieces @@ -64,13 +64,22 @@ You rarely need all of them at once. The Stack SDK plus EQL is the common case. Note that **EQL is only for Postgres**. The SDK also encrypts values that never touch a database, and non-Postgres stores like [DynamoDB](/stack/cipherstash/encryption/dynamodb), with no EQL involved. -## The trade +## Choosing what each column reveals -Querying ciphertext is possible because each value carries index terms derived from the plaintext. Those terms are not the plaintext, but they are not nothing either. +Querying ciphertext works because each value carries index terms derived from its plaintext. Those terms are not the plaintext, and what each one reveals is **bounded and published** rather than incidental: each scheme has a formal leakage profile. -An equality term reveals which rows share a value. An ordering term reveals relative order. A free-text term reveals probabilistic token overlap. That is the price of a `WHERE` clause, and whether it is worth paying depends on the column. +That turns leakage into a design choice rather than a surprise. You decide, per column, which capabilities to declare, and that decides what an observer of the database could infer: -The honest version of this, per term, is in [searchable encryption](/concepts/searchable-encryption). Read it before deciding a column is safe to index. Columns you only store and retrieve can carry no terms at all. +| You declare | So you can | An observer could infer | +|---|---|---| +| Nothing | Store and decrypt | Nothing from the ciphertext | +| Equality | `WHERE email = ?`, `GROUP BY`, joins | Which rows share a value | +| Ordering | `ORDER BY`, ranges, `MIN` / `MAX` | The relative order of values | +| Free-text | Token containment | Probabilistic token overlap | + +The engineering is in matching those choices to your threat model. For most columns, knowing that two rows share some unknown value is not an exposure. For a column whose frequency distribution is itself the secret, it might be, and then you encrypt without that capability and filter after decryption. + +So the goal is not to eliminate leakage. It is to choose capabilities whose leakage your threat model already tolerates, and to know exactly what you chose. Declare only what you query on. The per-scheme detail is in [searchable encryption](/concepts/searchable-encryption). ## Which door From 2961856d07e96455f8aba27e7d8883624ff9b2ad Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 22:02:58 +1000 Subject: [PATCH 065/151] docs(get-started): apply the choose-your-stack preview comments - Platform table, Neon/RDS/Aurora/Cloud SQL row: drop "Nothing special." - Section 4: "Identity binding, if you need it" -> "Identity binding". Removing "if you need it" changes the framing from optional to standard, so "Most teams start without this" went with it. Replaced by the reason it matters: identity binding is what shrinks the blast radius of a compromised application process, which is the point raised on the threat-model review. --- content/docs/get-started/choose-your-stack.mdx | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/content/docs/get-started/choose-your-stack.mdx b/content/docs/get-started/choose-your-stack.mdx index e8cd3a8..94f9e5c 100644 --- a/content/docs/get-started/choose-your-stack.mdx +++ b/content/docs/get-started/choose-your-stack.mdx @@ -29,7 +29,7 @@ EQL installs into any Postgres you can connect to. It needs no extension, no sup | Platform | Works | Notes | |---|---|---| | Supabase | Yes | [Supabase integration](/integrations/supabase). Expose the `eql_v3` schema in the dashboard. | -| Neon, RDS, Aurora, Cloud SQL | Yes | Nothing special. `stash eql install` detects a non-superuser role and adapts. | +| Neon, RDS, Aurora, Cloud SQL | Yes | `stash eql install` detects a non-superuser role and adapts. | | Self-hosted Postgres | Yes | Full operator-class support, so the ORE ordering mechanism is available. | | Postgres behind PgBouncer | Yes | Transaction pooling is fine. Proxy has its own pooling. | | DynamoDB | Yes, without EQL | [DynamoDB integration](/stack/cipherstash/encryption/dynamodb). Encrypted attributes and HMAC key lookups; no EQL, because there's no Postgres. | @@ -51,9 +51,9 @@ Managed platforms usually block custom operator class creation. That's why the d If you use no ORM, nothing is missing. The SDK's `encrypt` and `encryptQuery` are the whole surface. -## 4. Identity binding, if you need it +## 4. Identity binding -Most teams start without this. Reach for it when a value should be decryptable only by the user it belongs to, rather than by anything holding the application's credentials. +Reach for this when a value should be decryptable only by the user it belongs to, rather than by anything holding the application's credentials. It is also what shrinks the blast radius of a compromised application process. It requires an OIDC provider, registered on the [OIDC providers](https://dashboard.cipherstash.com/workspaces/_/oidc-providers) page in the Dashboard. From 98e03ee7a9f694422f392589262fb29b950347e2 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 23:27:24 +1000 Subject: [PATCH 066/151] docs(eql): update the reference to the EQL 3.0.0 shapes Rewrites the EQL reference against the type and term shapes landing in EQL 3.0.0 (encrypt-query-language #391 and #389), verified against the generated schema and the domain SQL rather than against the PR bodies. Public domain types are now version-prefixed: `public.text_ord` becomes `public.eql_v3_text_ord`. 174 names across 15 pages. Ordering now defaults to CLLW OPE: - `_ord` carries `op` and extracts with `eql_v3.ord_term` - `_ord_ope` is its byte-identical, explicitly pinned twin - `_ord_ore` carries `ob` and extracts with `eql_v3.ord_term_ore` - `text_search` is `[hm, op, bf]`; the new `text_search_ore` is `[hm, ob, bf]` - `eql_v3.ord_ope_term` is gone; `eql_v3.ord_term` took its name OPE terms sort under `bytea_ops`, so ordering no longer needs a custom operator class. Where the installer runs as a non-superuser it cannot create one, and it disables the ORE-backed domains rather than let them install half-working. Documented on every page that offers the choice. Also corrects an equality claim the old pages had wrong in both directions. Equality on the non-text `_ord` variants compares the ordering term (those payloads carry no `hm`), but every text variant carries `hm` and compares that, because ordering over text is not equality-lossless. Confirmed in the domain SQL: `eq(bigint_ord)` calls `ord_term`, `eq(text_ord)` calls `eq_term`. The drift check stays red until EQL 3.0.0 publishes, because the pinned manifest is alpha.4, which predates both PRs. Every symbol this commit introduces was cross-checked against the SQL on the release branch. --- content/docs/get-started/quickstart.mdx | 8 +- content/docs/reference/eql/booleans.mdx | 22 ++--- content/docs/reference/eql/core-concepts.mdx | 74 ++++++++++------- .../docs/reference/eql/dates-and-times.mdx | 68 ++++++++-------- content/docs/reference/eql/filtering.mdx | 48 +++++------ .../reference/eql/grouping-and-aggregates.mdx | 20 ++--- content/docs/reference/eql/indexes.mdx | 32 +++++--- content/docs/reference/eql/joins.mdx | 14 ++-- content/docs/reference/eql/json.mdx | 36 ++++----- content/docs/reference/eql/numbers.mdx | 77 +++++++++--------- content/docs/reference/eql/sorting.mdx | 16 ++-- content/docs/reference/eql/text.mdx | 81 +++++++++++-------- .../docs/reference/proxy/configuration.mdx | 2 +- content/docs/reference/proxy/errors.mdx | 2 +- scripts/generate-eql-api-docs.ts | 4 +- 15 files changed, 274 insertions(+), 230 deletions(-) diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx index 999ff0d..37a43d9 100644 --- a/content/docs/get-started/quickstart.mdx +++ b/content/docs/get-started/quickstart.mdx @@ -96,12 +96,12 @@ Prefer to have an agent do this? `npx stash plan` inspects your project and draf ## Create the encrypted column -An encrypted column is typed with an EQL domain. The domain you pick has to match the capability you declared: `.equality()` on a text column means `public.text_eq`. +An encrypted column is typed with an EQL domain. The domain you pick has to match the capability you declared: `.equality()` on a text column means `public.eql_v3_text_eq`. ```sql filename="schema.sql" CREATE TABLE users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email public.text_eq + email public.eql_v3_text_eq ); ``` @@ -151,12 +151,12 @@ if (term.failure) { } const rows = await db.query( - "SELECT id, email FROM users WHERE email = $1::public.text_eq", + "SELECT id, email FROM users WHERE email = $1::public.eql_v3_text_eq", [term.data], ) ``` -The cast matters. An encrypted operator only resolves against a **typed operand**, so `$1::public.text_eq` is what tells Postgres to compare encrypted terms rather than fall back to raw `jsonb` semantics. See [typed operands](/reference/eql/core-concepts). +The cast matters. An encrypted operator only resolves against a **typed operand**, so `$1::public.eql_v3_text_eq` is what tells Postgres to compare encrypted terms rather than fall back to raw `jsonb` semantics. See [typed operands](/reference/eql/core-concepts). Postgres compares ciphertext against ciphertext. It never sees either plaintext. diff --git a/content/docs/reference/eql/booleans.mdx b/content/docs/reference/eql/booleans.mdx index 294a846..22f0794 100644 --- a/content/docs/reference/eql/booleans.mdx +++ b/content/docs/reference/eql/booleans.mdx @@ -1,6 +1,6 @@ --- title: Booleans -description: "Encrypted booleans are storage-only by design: public.boolean stores and decrypts, carries no index terms, and blocks every comparison." +description: "Encrypted booleans are storage-only by design: public.eql_v3_boolean stores and decrypts, carries no index terms, and blocks every comparison." type: reference components: [eql] verifiedAgainst: @@ -9,7 +9,7 @@ verifiedAgainst: <EqlVersion /> -Every scalar type has a storage-only variant — for `bool` it's the only one. EQL ships `public.boolean` and nothing else: there is no `bool_eq` and no `bool_ord`. An encrypted boolean column can be stored, decrypted, and null-checked; it cannot be filtered, sorted, grouped, or joined on. +Every scalar type has a storage-only variant — for `bool` it's the only one. EQL ships `public.eql_v3_boolean` and nothing else: there is no `bool_eq` and no `bool_ord`. An encrypted boolean column can be stored, decrypted, and null-checked; it cannot be filtered, sorted, grouped, or joined on. ## Why there are no query variants @@ -17,11 +17,11 @@ A two-value column has too little cardinality for any searchable index to be saf ## What works, what raises -`public.boolean` follows the bare-variant contract described in [Core concepts](/reference/eql/core-concepts#variants-declare-capability): it carries no index terms, so `IS NULL` / `IS NOT NULL` are the only predicates that work. Every comparison operator routes to a blocker and raises — the [fail-loud behavior](/reference/eql/core-concepts#unsupported-operations-fail-loudly) shared by all encrypted variants: +`public.eql_v3_boolean` follows the bare-variant contract described in [Core concepts](/reference/eql/core-concepts#variants-declare-capability): it carries no index terms, so `IS NULL` / `IS NOT NULL` are the only predicates that work. Every comparison operator routes to a blocker and raises — the [fail-loud behavior](/reference/eql/core-concepts#unsupported-operations-fail-loudly) shared by all encrypted variants: ```sql --- ❌ Raises: operator = is not supported for public.boolean -SELECT * FROM users WHERE is_active = $1::public.boolean; +-- ❌ Raises: operator = is not supported for public.eql_v3_boolean +SELECT * FROM users WHERE is_active = $1::public.eql_v3_boolean; -- ✅ Works: NULL columns are not encrypted SELECT * FROM users WHERE is_active IS NOT NULL; @@ -34,16 +34,16 @@ Query on other columns, decrypt the boolean in your application, and filter ther ```sql CREATE TABLE users ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email public.text_eq, -- exact lookup - created_at public.timestamp_ord, -- range queries, ORDER BY - is_active public.boolean -- storage only (by design) + email public.eql_v3_text_eq, -- exact lookup + created_at public.eql_v3_timestamp_ord, -- range queries, ORDER BY + is_active public.eql_v3_boolean -- storage only (by design) ); ``` ```sql -- Narrow the result set with the columns that do carry index terms… SELECT id, email, is_active FROM users -WHERE created_at >= $1::public.timestamp_ord; +WHERE created_at >= $1::public.eql_v3_timestamp_ord; -- …then decrypt is_active in the client and filter on the plaintext. ``` @@ -53,12 +53,12 @@ If a boolean genuinely needs to be a server-side predicate, that is a data-model ## Storing without querying -`bool` is the forced case of a pattern available to every scalar type: the bare variant `public.<T>` (for example `public.integer`, `public.text`, `public.timestamp`) is storage-and-decryption only. It carries no index terms, and every comparison operator raises — use it for columns you only ever store and decrypt, so the database holds no searchable material for them at all. +`bool` is the forced case of a pattern available to every scalar type: the bare variant `public.eql_v3_<T>` (for example `public.eql_v3_integer`, `public.eql_v3_text`, `public.eql_v3_timestamp`) is storage-and-decryption only. It carries no index terms, and every comparison operator raises — use it for columns you only ever store and decrypt, so the database holds no searchable material for them at all. For every type other than `bool`, storage-only is a choice you can walk back. If you later need to query, retype the column as a query variant — or, if the payloads already carry the needed term (the client decides which terms travel in the payload), cast at the call site: ```sql -SELECT * FROM readings WHERE value::public.integer_ord > $1::public.integer_ord; +SELECT * FROM readings WHERE value::public.eql_v3_integer_ord > $1::public.eql_v3_integer_ord; ``` The variant families and what each one enables are covered in [Core concepts](/reference/eql/core-concepts); the per-type specifics live in [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), and [Text](/reference/eql/text). diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index 1445ac8..f0422f5 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -21,46 +21,56 @@ For any scalar type `<T>`, the family looks like this: | Domain variant | Capability | | --- | --- | -| `public.<T>` | Storage and decryption only. | -| `public.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | -| `public.<T>_ord` | Comparisons (`<` … `>=`), `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | -| `public.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | -| `public.text_match` (text only) | Free-text token containment: `@>` / `<@`. | -| `public.text_search` (text only) | Equality + ordering + token containment. | +| `public.eql_v3_<T>` | Storage and decryption only. | +| `public.eql_v3_<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `public.eql_v3_<T>_ord` | Comparisons (`<` … `>=`), `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `public.eql_v3_<T>_ord_ope` | The byte-identical twin of `_ord`, with OPE pinned. See [SEM specifiers](#sem-specifiers). | +| `public.eql_v3_<T>_ord_ore` | As `_ord`, with block-ORE pinned. | +| `public.eql_v3_text_match` (text only) | Free-text token containment: `@>` / `<@`. | +| `public.eql_v3_text_search` (text only) | Equality + ordering + token containment. | +| `public.eql_v3_text_search_ore` (text only) | As `text_search`, with block-ORE pinned. | + +Every public domain name carries the `eql_v3_` prefix. It keeps EQL's types from shadowing built-in Postgres type names (`public.text`, `public.json`), and gives each EQL version its own column-type namespace so two versions can coexist. Query-operand domains live in the versioned `eql_v3` schema already, so they are unprefixed: `eql_v3.query_text_eq`, `eql_v3.query_jsonb`. Two things worth calling out: -- **The bare variant blocks everything.** `public.<T>` carries no index term. Querying it with any comparison operator raises an "operator not supported" exception. Use it for columns you only ever store and decrypt — [Booleans](/reference/eql/booleans) covers this pattern in full. +- **The bare variant blocks everything.** `public.eql_v3_<T>` carries no index term. Querying it with any comparison operator raises an "operator not supported" exception. Use it for columns you only ever store and decrypt — [Booleans](/reference/eql/booleans) covers this pattern in full. - **Which index term backs each capability** is an implementation detail of the payload — covered in [Anatomy of an encrypted value](#anatomy-of-an-encrypted-value) below. ### SEM specifiers -A trailing mechanism suffix — the `_ore` in `_ord_ore` — is a **SEM specifier**: it pins *which* searchable-encryption mechanism implements the capability, rather than just declaring the capability itself. +A trailing mechanism suffix — the `_ope` in `_ord_ope` — is a **SEM specifier**: it pins *which* searchable-encryption mechanism implements the capability, rather than just declaring the capability itself. + +| Variant | Mechanism | Term | Extractor | +| --- | --- | --- | --- | +| `_ord` | CLLW OPE (the default) | `op` | `eql_v3.ord_term(col)` | +| `_ord_ope` | CLLW OPE, pinned. Byte-identical to `_ord` | `op` | `eql_v3.ord_term(col)` | +| `_ord_ore` | Block-ORE, pinned | `ob` | `eql_v3.ord_term_ore(col)` | +| `text_search` | CLLW OPE for its ordering term | `hm`, `op`, `bf` | `eq_term` / `ord_term` / `match_term` | +| `text_search_ore` | Block-ORE for its ordering term | `hm`, `ob`, `bf` | `eq_term` / `ord_term_ore` / `match_term` | -- `public.<T>_ord` declares *orderable* and leaves the mechanism to EQL's default. -- `public.<T>_ord_ore` declares *orderable via ORE* (order-revealing encryption), explicitly. Its term is `ob`, extracted with `eql_v3.ord_term`. -- `public.<T>_ord_ope` declares *orderable via OPE* (order-preserving encryption), explicitly. Its term is `op`, extracted with `eql_v3.ord_ope_term`. +The two mechanisms differ in what they demand of the database, not in the capability they declare. `eql_v3_internal.ope_cllw` is a domain over `bytea`, so an ordered functional index on `eql_v3.ord_term(col)` binds `bytea_ops`, the base type's **default** operator class. It works anywhere you can `CREATE INDEX`, with no superuser. -The two mechanisms differ in what they demand of the database, not in the capability they declare. An OPE term is a `bytea` domain that orders under Postgres's **default** btree operator class, so a functional index on it works anywhere you can `CREATE INDEX`. An ORE term needs a custom operator class and family, which managed platforms frequently block. +Block-ORE's operator class is hand-written for a composite type and needs superuser to create. <Callout type="warn"> -The mechanism behind the unpinned `public.<T>_ord` is **changing to OPE** before EQL 3.0.0 stabilizes, so that ordering works on every platform out of the box. ORE remains available, pinned explicitly as `_ord_ore`, on databases that permit operator class and family creation. Pin a specifier if you need to freeze a column's mechanism; leave it off to track the default. +On a database where EQL cannot create that operator class (cloud Supabase and most managed Postgres), the installer **disables every ORE-backed domain**. The types still exist, but a `CHECK` constraint rejects the first value written to one, raising `feature_not_supported` and naming the alternative to use. That is deliberate: installing them anyway leaves `<` and `>` running as unindexable sequential scans while `CREATE INDEX ... (eql_v3.ord_term_ore(col))` fails with an opaque Postgres error. Failing loudly on the first write beats degrading silently. </Callout> -Each type page lists its available specifiers under an "SEM specifiers" heading. +Use `_ord` unless you have a specific reason to pin block-ORE, and pin `_ord_ope` when you want a column's mechanism frozen against a future default change. Each type page lists its available specifiers under an "SEM specifiers" heading. Declaring a table is just typing each column as the variant it needs: ```sql CREATE TABLE users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email public.text_eq, -- equality only - salary public.integer_ord, -- equality + range + ORDER BY - created_at public.timestamp_ord + email public.eql_v3_text_eq, -- equality only + salary public.eql_v3_integer_ord, -- equality + range + ORDER BY + created_at public.eql_v3_timestamp_ord ); ``` -Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `public.json`, with its own operator surface — see [JSON](/reference/eql/json). +Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `public.eql_v3_json`, with its own operator surface — see [JSON](/reference/eql/json). ## The three schemas @@ -68,11 +78,11 @@ EQL spreads its surface across three PostgreSQL schemas, and the split is what m | Schema | Holds | Do you call it? | | --- | --- | --- | -| `public` | The encrypted **domain types** — every `public.<T>` variant you type a column as. | Referenced in your table DDL. | +| `public` | The encrypted **domain types** — every `public.eql_v3_<T>` variant you type a column as. | Referenced in your table DDL. | | `eql_v3` | All **user-callable functions and operators** — the searchable-encryption API (`eql_v3.eq_term`, `eql_v3.jsonb_path_query`, the encrypted `=` / `<` / `@>` operators, `eql_v3.version()`). | Yes — this is the API. | | `eql_v3_internal` | The **implementation functions** the domains and operators are built from. | No — never call these directly. | -**Why the types live in `public`.** Your columns are typed as `public.integer_ord`, `public.text_eq`, and so on — never `eql_v3.*`. Keeping the types in the unversioned `public` schema means an EQL upgrade never rewrites your table definitions: the logic ships in a *versioned* schema (`eql_v3` today, a future `eql_v4` alongside it tomorrow) while the type names your schema depends on stay put. `eql_v2` was removed wholesale in 3.0.0 without any `public.*` type changing. +**Why the types live in `public`, and carry a version prefix.** Your columns are typed as `public.eql_v3_integer_ord`, `public.eql_v3_text_eq`, and so on — never `eql_v3.*`. Types stay in `public` so a column's type resolves without `search_path` games. The `eql_v3_` prefix does two jobs: it stops EQL's types shadowing Postgres built-ins (`public.text`, `public.json`, `public.integer` all exist), and it gives each EQL generation its own column-type namespace, so `eql_v3_text_eq` and a future `eql_v4_text_eq` can sit side by side in one database while you migrate table by table. **Why `eql_v3` is versioned.** The schema name encodes the major API version and is itself part of the public contract — a breaking change introduces a new `eql_vN` schema *beside* the old one rather than mutating it, so you migrate on your own timeline. Everything in `eql_v3` is fair game to call. @@ -107,13 +117,13 @@ Alongside the envelope, a payload carries the index terms for its column's capab | Key | SEM type | Wire shape | Enables | Reveals | | --- | --- | --- | --- | --- | | `hm` | `eql_v3_internal.hmac_256` (domain over `text`) | Hex string (HMAC-SHA-256) | `=`, `<>` on `_eq` and `text_search` domains | Whether two values are equal — nothing else | -| `ob` | `eql_v3_internal.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks (block count varies by scalar width) | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | -| `op` | `eql_v3_internal.ope_cllw` (domain over `bytea`) | Hex-encoded CLLW OPE ciphertext | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord_ope` domains, and on String / Number leaves of `public.json` | The relative order of two values | +| `op` | `eql_v3_internal.ope_cllw` (domain over `bytea`) | Hex-encoded CLLW OPE ciphertext | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ope` domains and `text_search`, and on String / Number leaves of `public.eql_v3_json` | The relative order of two values | +| `ob` | `eql_v3_internal.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks (block count varies by scalar width) | The same comparisons on the pinned `_ord_ore` and `text_search_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | | `bf` | `eql_v3_internal.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit — large filters emit negative positions) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | -The capability is encoded as **required keys**: the payload for a `public.text_eq` column must carry `hm`; a `public.integer_ord` payload must carry `ob` (and only `ob`); a `text_match` payload must carry `bf`; a `text_search` payload carries all three. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. +The capability is encoded as **required keys**: the payload for a `public.eql_v3_text_eq` column must carry `hm`; a `public.eql_v3_integer_ord` payload must carry `op` (and only `op`); a `text_match` payload must carry `bf`; a `text_search` payload carries `hm`, `op`, and `bf`. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. -A scalar payload for a `public.text_search` column (lookup + ordering + free-text match, so all three terms are required): +A scalar payload for a `public.eql_v3_text_search` column (lookup + ordering + free-text match, so all three terms are required): ```json { @@ -150,10 +160,10 @@ The `eql_v3` domains are backed by `jsonb`. When an operand has no known type SELECT * FROM users WHERE email = $1; -- ✅ Right: typed operand — the encrypted `=` resolves. -SELECT * FROM users WHERE email = $1::public.text_eq; +SELECT * FROM users WHERE email = $1::public.eql_v3_text_eq; ``` -Always type the operand: a typed parameter (`$1::public.text_eq`) or an explicit cast (`'…'::public.integer_ord`). The [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) type bound parameters automatically — raw SQL must do it by hand. +Always type the operand: a typed parameter (`$1::public.eql_v3_text_eq`) or an explicit cast (`'…'::public.eql_v3_integer_ord`). The [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy) type bound parameters automatically — raw SQL must do it by hand. This is the one place where a mistake is *silent*. Everything else fails loudly: @@ -162,17 +172,19 @@ This is the one place where a mistake is *silent*. Everything else fails loudly: Unsupported operators are not silent no-ops. Every operator that a variant doesn't support is still *defined* — it routes to a blocker function that raises an `operator … is not supported` exception. A mis-typed query fails loudly instead of silently returning wrong results: ```sql --- salary is public.bigint_eq (equality only) -SELECT * FROM users WHERE salary > $1::public.bigint_eq; --- ERROR: operator > is not supported for public.bigint_eq +-- salary is public.eql_v3_bigint_eq (equality only) +SELECT * FROM users WHERE salary > $1::public.eql_v3_bigint_eq; +-- ERROR: operator > is not supported for public.eql_v3_bigint_eq ``` A `NULL` operand still raises — the blockers are deliberately not `STRICT`, so PostgreSQL can't skip the check. (A SQL `NULL` column value is not encrypted, so `IS NULL` / `IS NOT NULL` themselves always work, on every variant.) `LIKE` and `ILIKE` are blocked on **every** encrypted variant — pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter token containment instead; [Text](/reference/eql/text) covers it. -One equality subtlety follows from the term table above: on `_ord` / `_ord_ore` columns, `=` and `<>` compare the **ORE (`ob`) term** — ORE comparison collapses to equality — so `_ord` payloads carry no `hm` term at all. On `_eq` and `text_search` columns, equality compares the HMAC (`hm`) term. +One equality subtlety follows from the term table above, and it splits on whether the column is text. + +On the non-text scalars, ordering is equality-lossless: `=` and `<>` on an `_ord` column compare the **ordering term** (`op`, or `ob` on `_ord_ore`), so those payloads carry no `hm` term at all and get equality for free. On text, ordering is *not* equality-lossless, so every orderable text variant carries `hm` alongside its ordering term and resolves `=` and `<>` against it. `_eq` columns always compare `hm`. ## What the terms reveal -Every index term a value carries is extra material stored in the database, and each term class reveals defined structure to an observer who can read the stored payloads: equality terms reveal *value repetition* (which rows share a value), ORE terms reveal *ordering* (which of two values is larger), and bloom terms reveal *probabilistic token overlap*. None of them reveal the plaintext — but you should only carry the terms you actually query on. The full analysis of what each term does and doesn't leak is in [Searchable encryption](/concepts/searchable-encryption). +Every index term a value carries is extra material stored in the database, and each term class reveals defined structure to an observer who can read the stored payloads: equality terms reveal *value repetition* (which rows share a value), ordering terms reveal *ordering* (which of two values is larger), and bloom terms reveal *probabilistic token overlap*. None of them reveal the plaintext — but you should only carry the terms you actually query on. The full analysis of what each term does and doesn't leak is in [Searchable encryption](/concepts/searchable-encryption). diff --git a/content/docs/reference/eql/dates-and-times.mdx b/content/docs/reference/eql/dates-and-times.mdx index ea8f0a9..659dce1 100644 --- a/content/docs/reference/eql/dates-and-times.mdx +++ b/content/docs/reference/eql/dates-and-times.mdx @@ -1,6 +1,6 @@ --- title: Dates & times -description: "The complete reference for encrypted date and timestamp columns: the domain variants, the ORE-backed payload, and time-window, newest-first, and MIN/MAX queries." +description: "The complete reference for encrypted date and timestamp columns: the domain variants, the payload they carry, and time-window, newest-first, and MIN/MAX queries." type: reference components: [eql] verifiedAgainst: @@ -17,17 +17,20 @@ Both types generate the same `jsonb`-backed domain variants. The generic form: | Domain variant | Capability | | --- | --- | -| `public.<T>` | Storage and decryption only. | -| `public.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | -| `public.<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | -| `public.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | +| `public.eql_v3_<T>` | Storage and decryption only. | +| `public.eql_v3_<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `public.eql_v3_<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `public.eql_v3_<T>_ord_ope` | The byte-identical twin of `<T>_ord`, with OPE pinned. See [SEM specifiers](#sem-specifiers). | +| `public.eql_v3_<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned. | + +`<T>` is the encrypted type name from the table below, so `public.eql_v3_<T>_ord` is `public.eql_v3_timestamp_ord` for `timestamp`. And every concrete domain this page covers: | Type | Variants | | --- | --- | -| `date` | `public.date` · `public.date_eq` · `public.date_ord` · `public.date_ord_ore` | -| `timestamp` | `public.timestamp` · `public.timestamp_eq` · `public.timestamp_ord` · `public.timestamp_ord_ore` | +| `date` | `public.eql_v3_date` · `public.eql_v3_date_eq` · `public.eql_v3_date_ord` · `public.eql_v3_date_ord_ope` · `public.eql_v3_date_ord_ore` | +| `timestamp` | `public.eql_v3_timestamp` · `public.eql_v3_timestamp_eq` · `public.eql_v3_timestamp_ord` · `public.eql_v3_timestamp_ord_ope` · `public.eql_v3_timestamp_ord_ore` | Time columns are nearly always ranged and sorted, so `_ord` is the usual choice. Declare only the capability you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts). @@ -38,9 +41,9 @@ An audit-events table where the timestamps drive time-window queries and sorting ```sql CREATE TABLE audit_events ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - occurred_at public.timestamp_ord, -- time windows, newest-first, MIN/MAX - review_due public.date_ord, -- range filters - sealed_on public.date -- store and decrypt only + occurred_at public.eql_v3_timestamp_ord, -- time windows, newest-first, MIN/MAX + review_due public.eql_v3_date_ord, -- range filters + sealed_on public.eql_v3_date -- store and decrypt only ); ``` @@ -48,36 +51,37 @@ CREATE TABLE audit_events ( Both types take the same mechanism specifiers on their orderable variant (the concept is defined in [Core concepts](/reference/eql/core-concepts#sem-specifiers)): -| Specifier | Meaning | -| --- | --- | -| `_ord` | Orderable, using EQL's default mechanism (currently ORE). | -| `_ord_ore` | Orderable via ORE, pinned explicitly. | +| Specifier | Mechanism | Ordering term | Extractor | +| --- | --- | --- | --- | +| `_ord` | The default, currently CLLW OPE | `op` | `eql_v3.ord_term` | +| `_ord_ope` | CLLW OPE, pinned explicitly | `op` | `eql_v3.ord_term` | +| `_ord_ore` | Block-ORE, pinned explicitly | `ob` | `eql_v3.ord_term_ore` | + +`<T>_ord` and `<T>_ord_ope` are byte-identical today. Pin `_ord_ope` when you want a column's mechanism frozen against a future change of the default. -The EQL v3 release adds an OPE specifier for every orderable type; unspecified `_ord` columns keep tracking the default. +<Callout type="warn"> +Block-ORE terms sort only under a custom btree operator class, and creating one requires superuser. Where the EQL installer runs as a non-superuser, which is the case on most managed Postgres including cloud Supabase, it cannot create the class, so it **disables every ORE-backed domain** rather than let them install half-working. `<T>_ord_ore` then raises `feature_not_supported` on the first value written to it. Use `<T>_ord` there. +</Callout> ## Payload -A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `public.timestamp_ord` `occurred_at` column: +A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `op` ordering term. Here is a payload for the `public.eql_v3_timestamp_ord` `occurred_at` column: ```json { "v": 3, "i": { "t": "audit_events", "c": "occurred_at" }, "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", - "ob": [ - "7a1fd0c2...", "d24c9be1...", "03fa66b8...", "91b7e04d...", - "5c28aa19...", "e6f3071c...", "48d92ab5...", "0b64cf37...", - "2ce8b1f4...", "a90d57e2...", "6f13c8ba...", "d4720e95..." - ] + "op": "5f2b1a9e4c07d38b6ea15c92..." } ``` -- **`ob` is the only index term.** An `_ord` payload carries no `hm`: equality on `_ord` variants compares ORE terms, which collapse to equality — see [Core concepts](/reference/eql/core-concepts). -- **The `ob` block count varies with the plaintext width** — `timestamp` values carry 12 blocks. +- **`op` is the only index term.** It is a hex-encoded CLLW OPE ciphertext, which Postgres sorts by native `bytea` comparison. An `_ord` payload carries no `hm`, because ordering over a date or timestamp is equality-lossless: `=` and `<>` resolve against the same term. +- **An `_ord_ore` payload carries `ob` in place of `op`**: an array of block-ORE ciphertexts, 12 blocks for a `timestamp`. ## Operators -| SQL operator | `public.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | +| SQL operator | `public.eql_v3_<T>` | `<T>_eq` | `<T>_ord` variants | | --- | :---: | :---: | :---: | | `=` / `<>` | ❌ | ✅ | ✅ | | `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | @@ -87,7 +91,7 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — | `ORDER BY` | ❌ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | -Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.timestamp_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.eql_v3_timestamp_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions @@ -95,9 +99,9 @@ Every operator has a function form, for managed platforms that disallow custom o | Function | Equivalent | Available on | | --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, `_ord` / `_ord_ore` | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | `_ord` / `_ord_ore` | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | `_ord` / `_ord_ore` | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, all `_ord` variants | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `_ord` variants | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `_ord` variants | ## Example queries @@ -105,17 +109,17 @@ Every operator has a function form, for managed platforms that disallow custom o ```sql SELECT * FROM audit_events -WHERE occurred_at BETWEEN $1::public.timestamp_ord AND $2::public.timestamp_ord; +WHERE occurred_at BETWEEN $1::public.eql_v3_timestamp_ord AND $2::public.eql_v3_timestamp_ord; SELECT * FROM audit_events -WHERE review_due BETWEEN $1::public.date_ord AND $2::public.date_ord; +WHERE review_due BETWEEN $1::public.eql_v3_date_ord AND $2::public.eql_v3_date_ord; ``` ### Retention cutoff ```sql SELECT id FROM audit_events -WHERE occurred_at < $1::public.timestamp_ord; +WHERE occurred_at < $1::public.eql_v3_timestamp_ord; ``` ### Newest-first listing @@ -124,7 +128,7 @@ Write the sort key in extractor form to stream rows out of the index already ord ```sql SELECT * FROM audit_events -WHERE occurred_at >= $1::public.timestamp_ord +WHERE occurred_at >= $1::public.eql_v3_timestamp_ord ORDER BY eql_v3.ord_term(occurred_at) DESC LIMIT 10; ``` diff --git a/content/docs/reference/eql/filtering.mdx b/content/docs/reference/eql/filtering.mdx index 6210731..f81a6bf 100644 --- a/content/docs/reference/eql/filtering.mdx +++ b/content/docs/reference/eql/filtering.mdx @@ -9,25 +9,25 @@ verifiedAgainst: <EqlVersion /> -Every filter below is ordinary SQL — the encrypted operators resolve from the column's domain variant, and a functional index on the matching term extractor serves the predicate. One rule applies throughout: **operands must be typed** (`$1::public.text_eq`, not a bare literal), or PostgreSQL falls through to native `jsonb` semantics. See [Core concepts](/reference/eql/core-concepts) for the typed-operand rule and how unsupported operators fail loudly instead of returning wrong rows. +Every filter below is ordinary SQL — the encrypted operators resolve from the column's domain variant, and a functional index on the matching term extractor serves the predicate. One rule applies throughout: **operands must be typed** (`$1::public.eql_v3_text_eq`, not a bare literal), or PostgreSQL falls through to native `jsonb` semantics. See [Core concepts](/reference/eql/core-concepts) for the typed-operand rule and how unsupported operators fail loudly instead of returning wrong rows. ## Equality: `=` and `<>` -Works on `_eq` and `_ord` / `_ord_ore` variants of every scalar, and on `text_search`: +Works on `_eq` and every `_ord` variant of every scalar, and on `text_search`: ```sql -SELECT * FROM users WHERE email = $1::public.text_eq; -SELECT * FROM users WHERE tax_id <> $1::public.text_eq; +SELECT * FROM users WHERE email = $1::public.eql_v3_text_eq; +SELECT * FROM users WHERE tax_id <> $1::public.eql_v3_text_eq; ``` -On `_eq` and `text_search` columns equality compares the HMAC (`hm`) term. On `_ord` variants there is no `hm` — equality compares the ORE (`ob`) term, which collapses to equality, so `_ord` columns get `=` and `<>` for free. See [Core concepts](/reference/eql/core-concepts) for the mechanism. +On `_eq` columns, and on every text variant, equality compares the HMAC (`hm`) term. On the `_ord` variants of the non-text scalars there is no `hm`: equality compares the ordering term instead, which is lossless over those domains, so those columns get `=` and `<>` for free. See [Core concepts](/reference/eql/core-concepts) for the mechanism. ```sql --- salary is public.bigint_ord: equality works without an hm term -SELECT * FROM users WHERE salary = $1::public.bigint_ord; +-- salary is public.eql_v3_bigint_ord: equality works without an hm term +SELECT * FROM users WHERE salary = $1::public.eql_v3_bigint_ord; ``` -Bare storage-only variants (`public.text`, `public.integer`, …) block every comparison — see the type pages for what each variant supports: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), [Booleans](/reference/eql/booleans). +Bare storage-only variants (`public.eql_v3_text`, `public.eql_v3_integer`, …) block every comparison — see the type pages for what each variant supports: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), [Booleans](/reference/eql/booleans). ## `IN` lists @@ -35,29 +35,29 @@ Bare storage-only variants (`public.text`, `public.integer`, …) block every co ```sql SELECT * FROM users -WHERE email IN ($1::public.text_eq, $2::public.text_eq, $3::public.text_eq); +WHERE email IN ($1::public.eql_v3_text_eq, $2::public.eql_v3_text_eq, $3::public.eql_v3_text_eq); ``` There is no way to encrypt a list as one value — the client encrypts each element and binds it as its own parameter. `IN (subquery)` also works, subject to the same-keyset rule covered in [Joins](/reference/eql/joins). ## Ranges and `BETWEEN` -`<`, `<=`, `>`, `>=` work on `_ord` / `_ord_ore` variants and `text_search` — the variants carrying an ORE (`ob`) term: +`<`, `<=`, `>`, `>=` work on `_ord` / `_ord_ope` variants and `text_search`, which carry an OPE (`op`) term, and on the pinned `_ord_ore` / `text_search_ore` variants, which carry a block-ORE (`ob`) term: ```sql -SELECT * FROM users WHERE salary >= $1::public.bigint_ord; +SELECT * FROM users WHERE salary >= $1::public.eql_v3_bigint_ord; -- BETWEEN desugars to >= and <= SELECT * FROM users -WHERE created_at BETWEEN $1::public.timestamp_ord AND $2::public.timestamp_ord; +WHERE created_at BETWEEN $1::public.eql_v3_timestamp_ord AND $2::public.eql_v3_timestamp_ord; ``` Half-open ranges compose the same way: ```sql SELECT * FROM events -WHERE occurred_at >= $1::public.timestamp_ord - AND occurred_at < $2::public.timestamp_ord; +WHERE occurred_at >= $1::public.eql_v3_timestamp_ord + AND occurred_at < $2::public.eql_v3_timestamp_ord; ``` ## Text token matching: `@>` @@ -65,14 +65,14 @@ WHERE occurred_at >= $1::public.timestamp_ord There is no `LIKE` on encrypted columns — encrypted free-text matching is bloom-filter token containment via `@>` on a `text_match` or `text_search` column: ```sql -SELECT * FROM users WHERE name @> $1::public.text_match; +SELECT * FROM users WHERE name @> $1::public.eql_v3_text_match; ``` The client encrypts the search term into a bloom-filter query value; matching is probabilistic (false positives possible, false negatives not). For the full no-`LIKE` story and match-term tuning, see [Text](/reference/eql/text). ## JSON containment and path filters -Encrypted JSON documents (`public.json`) filter by containment and path existence: +Encrypted JSON documents (`public.eql_v3_json`) filter by containment and path existence: ```sql -- Does the document contain this (encrypted) structure? @@ -83,7 +83,7 @@ SELECT * FROM orders WHERE eql_v3.jsonb_path_exists(metadata, 'region_selector') -- Equality on an extracted leaf SELECT * FROM orders -WHERE metadata -> 'email_selector'::text = $1::public.jsonb_entry; +WHERE metadata -> 'email_selector'::text = $1::public.eql_v3_jsonb_entry; ``` Field access is by selector hash, not plaintext path. The full JSON surface — containment, field access, path queries, and range filters on extracted leaves — is in [JSON](/reference/eql/json). @@ -95,9 +95,9 @@ Encrypted predicates compose with `AND`, `OR`, `NOT`, and parentheses like any o ```sql SELECT * FROM users WHERE status = 'active' -- plaintext column, native operator - AND created_at >= $1::public.timestamp_ord -- encrypted range - AND (email = $2::public.text_eq -- encrypted equality - OR name @> $3::public.text_match); -- encrypted token match + AND created_at >= $1::public.eql_v3_timestamp_ord -- encrypted range + AND (email = $2::public.eql_v3_text_eq -- encrypted equality + OR name @> $3::public.eql_v3_text_match); -- encrypted token match ``` The planner treats each encrypted predicate independently, so it can combine an index on a plaintext column with a functional index on an encrypted one (bitmap-AND, or whichever plan is cheapest). @@ -117,10 +117,10 @@ Don't confuse this with a JSON `null` *inside* an encrypted document, which is a | Filter shape | Operators | Works on | Index | | --- | --- | --- | --- | -| Equality | `=` `<>` `IN` | `_eq`, `_ord` / `_ord_ore`, `text_search` | hash (or btree) on `eql_v3.eq_term` — btree on `eql_v3.ord_term` for `_ord` | -| Range | `<` `<=` `>` `>=` `BETWEEN` | `_ord` / `_ord_ore`, `text_search` | btree on `eql_v3.ord_term` | -| Text token match | `@>` `<@` | `text_match`, `text_search` | GIN on `eql_v3.match_term` | -| JSON containment | `@>` `<@` | `public.json` | GIN on `eql_v3.to_ste_vec_query(col)::jsonb` | +| Equality | `=` `<>` `IN` | `_eq`, all `_ord` variants, `text_search` variants | hash (or btree) on `eql_v3.eq_term` — btree on `eql_v3.ord_term` for the non-text `_ord` variants | +| Range | `<` `<=` `>` `>=` `BETWEEN` | all `_ord` variants, `text_search` variants | btree on `eql_v3.ord_term` (`eql_v3.ord_term_ore` on `_ord_ore`) | +| Text token match | `@>` `<@` | `text_match`, `text_search` variants | GIN on `eql_v3.match_term` | +| JSON containment | `@>` `<@` | `public.eql_v3_json` | GIN on `eql_v3.to_ste_vec_query(col)::jsonb` | | Null check | `IS NULL` / `IS NOT NULL` | every variant | — | Every one of these has a full index recipe — which method, which extractor, and how to confirm the index engages with `EXPLAIN` — in [Indexes](/reference/eql/indexes). diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx index 568be31..8798d33 100644 --- a/content/docs/reference/eql/grouping-and-aggregates.mdx +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -9,7 +9,7 @@ verifiedAgainst: <EqlVersion /> -Grouping and deduplication need an equality term, so they work on the same variants as `=`: `_eq`, `_ord` / `_ord_ore`, and `text_search`. `MIN` / `MAX` need an ordering term (`_ord` / `_ord_ore`, `text_search`). Arithmetic aggregates don't work at all — that's the last section. As everywhere, operands and call-site casts must be typed; see [Core concepts](/reference/eql/core-concepts). +Grouping and deduplication need an equality term, so they work on the same variants as `=`: `_eq`, every `_ord` variant, and the `text_search` variants. `MIN` / `MAX` need an ordering term (any `_ord` variant, or `text_search`). Arithmetic aggregates don't work at all — that's the last section. As everywhere, operands and call-site casts must be typed; see [Core concepts](/reference/eql/core-concepts). ## `GROUP BY` and `DISTINCT` @@ -41,7 +41,7 @@ Note the trade-off: grouping on `eq_term` returns the *term*, not the encrypted Plain `COUNT(col)` counts non-`NULL` rows — it never compares values, so it works on **any** variant, including storage-only ones: ```sql -SELECT COUNT(tax_id) FROM users; -- works even on bare public.text +SELECT COUNT(tax_id) FROM users; -- works even on bare public.eql_v3_text ``` `COUNT(DISTINCT col)` deduplicates, so it needs an equality-capable variant — and the same extractor advice applies: @@ -55,13 +55,15 @@ SELECT COUNT(DISTINCT eql_v3.eq_term(email)) FROM logins; EQL ships `min` / `max` aggregates per ord-capable variant of every scalar type. The input type selects the aggregate, and the return type matches the input: ```sql -eql_v3.min(public.<T>_ord) RETURNS public.<T>_ord -eql_v3.max(public.<T>_ord) RETURNS public.<T>_ord -eql_v3.min(public.<T>_ord_ore) RETURNS public.<T>_ord_ore -eql_v3.max(public.<T>_ord_ore) RETURNS public.<T>_ord_ore +eql_v3.min(public.eql_v3_<T>_ord) RETURNS public.eql_v3_<T>_ord +eql_v3.max(public.eql_v3_<T>_ord) RETURNS public.eql_v3_<T>_ord +eql_v3.min(public.eql_v3_<T>_ord_ope) RETURNS public.eql_v3_<T>_ord_ope +eql_v3.max(public.eql_v3_<T>_ord_ope) RETURNS public.eql_v3_<T>_ord_ope +eql_v3.min(public.eql_v3_<T>_ord_ore) RETURNS public.eql_v3_<T>_ord_ore +eql_v3.max(public.eql_v3_<T>_ord_ore) RETURNS public.eql_v3_<T>_ord_ore ``` -Comparison routes through the variant's `<` / `>` operator on the ORE term — no decryption happens in the database, and the result is an encrypted value the client decrypts. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`, matching native aggregate semantics. +Comparison routes through the variant's `<` / `>` operator on the ordering term — no decryption happens in the database, and the result is an encrypted value the client decrypts. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`, matching native aggregate semantics. ```sql SELECT eql_v3.min(salary) FROM users; @@ -76,7 +78,7 @@ SELECT eql_v3.eq_term(department_code) AS dept, eql_v3.max(salary) If the column is generic `jsonb` rather than a domain, cast to the right variant at the call site so overload resolution can pick the aggregate: ```sql -SELECT eql_v3.min(salary_jsonb::public.bigint_ord) FROM users; +SELECT eql_v3.min(salary_jsonb::public.eql_v3_bigint_ord) FROM users; ``` A btree on `eql_v3.ord_term(col)` serves `MIN` / `MAX` — the [Indexes](/reference/eql/indexes) page has the recipe. @@ -84,7 +86,7 @@ A btree on `eql_v3.ord_term(col)` serves `MIN` / `MAX` — the [Indexes](/refere ## No `SUM`, no `AVG` <Callout type="warn"> -**`SUM`, `AVG`, and every other arithmetic aggregate are unsupported** on encrypted columns — they would require homomorphic encryption, which EQL does not do. `MIN` / `MAX` work because they only need *comparison*, which the ORE term provides. For sums and averages, select the rows (or `MIN`/`MAX`/`COUNT` server-side to narrow them) and aggregate client-side after decryption. +**`SUM`, `AVG`, and every other arithmetic aggregate are unsupported** on encrypted columns — they would require homomorphic encryption, which EQL does not do. `MIN` / `MAX` work because they only need *comparison*, which the ordering term provides. For sums and averages, select the rows (or `MIN`/`MAX`/`COUNT` server-side to narrow them) and aggregate client-side after decryption. </Callout> ## Grouping on extracted JSON leaves diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index df87fb4..d518cbd 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -14,13 +14,14 @@ EQL indexes are ordinary PostgreSQL functional indexes over **term-extractor fun | Extractor | Index method | Term | Capability | | --- | --- | --- | --- | | `eql_v3.eq_term(col)` | `hash` (or `btree`) | `hm` (HMAC-256) | equality | -| `eql_v3.ord_term(col)` | `btree` | `ob` (ORE block) | range, `ORDER BY`, `MIN` / `MAX` | +| `eql_v3.ord_term(col)` | `btree` | `op` (CLLW OPE) | range, `ORDER BY`, `MIN` / `MAX` | +| `eql_v3.ord_term_ore(col)` | `btree` | `ob` (ORE block) | the same, on pinned `_ord_ore` / `text_search_ore` columns | | `eql_v3.match_term(col)` | `gin` | `bf` (bloom filter) | text containment | The extractors are inlinable SQL functions, so the planner rewrites a bare-form predicate into the same expression the index was built on. You don't rewrite queries to use the index: ```sql -SELECT * FROM users WHERE email = $1::public.text_eq; +SELECT * FROM users WHERE email = $1::public.eql_v3_text_eq; -- planner inlines `=` to: eql_v3.eq_term(email) = eql_v3.eq_term($1) -- Index Cond on USING hash (eql_v3.eq_term(email)) ``` @@ -35,18 +36,23 @@ Type the column as the domain variant that carries the term (see [Core concepts] ```sql -- Equality: hash index on eq_term --- (columns typed public.<T>_eq or text_search; equality on _ord columns --- compares ORE terms, so the btree on ord_term below serves it) +-- (columns typed public.eql_v3_<T>_eq, any text variant, or text_search; equality on +-- the non-text _ord columns compares ordering terms, so the btree below serves it) CREATE INDEX users_email_eq ON users USING hash (eql_v3.eq_term(email)); -- Range / ordering: btree index on ord_term --- (columns typed public.<T>_ord or _ord_ore) +-- (columns typed public.eql_v3_<T>_ord, _ord_ope, or text_search) CREATE INDEX users_created_at_ord ON users USING btree (eql_v3.ord_term(created_at)); +-- Range / ordering on a pinned block-ORE column: btree on ord_term_ore +-- (columns typed public.eql_v3_<T>_ord_ore or text_search_ore) +CREATE INDEX users_created_at_ord_ore + ON users USING btree (eql_v3.ord_term_ore(created_at_ore)); + -- Text match: GIN index on match_term --- (columns typed public.text_match or text_search) +-- (columns typed public.eql_v3_text_match or text_search) CREATE INDEX users_name_match ON users USING gin (eql_v3.match_term(name)); @@ -61,13 +67,13 @@ Create indexes when the table has a significant number of rows (typically more t All three must hold: -1. **The value carries the required term.** Equality needs `hm`, range needs `ob`, containment needs `bf`. Which terms travel in a value's payload is decided by the encryption client — a value with only a bloom term will not drive an equality index. +1. **The value carries the required term.** Range needs `op` (or `ob` on the pinned block-ORE variants), containment needs `bf`, and equality needs `hm`, except on the non-text `_ord` variants, where equality resolves against the ordering term instead. Which terms travel in a value's payload is decided by the encryption client — a value with only a bloom term will not drive an equality index. 2. **The index was built after the data carried the term.** If you change which terms a column's values carry, recreate the index. 3. **The query operand is typed.** A typed parameter (`$1`, which CipherStash Proxy supplies) or an explicit cast resolves the encrypted operator; a bare `jsonb` literal falls through to native `jsonb` semantics and skips the index entirely: ```sql -- ✓ resolves the encrypted operator → uses the index -WHERE email = $1::public.text_eq; +WHERE email = $1::public.eql_v3_text_eq; WHERE email = $1; -- only when the client (Stack SDK / Proxy) binds $1 typed -- ✗ falls through to native jsonb semantics @@ -79,7 +85,7 @@ WHERE email = '{"hm":"abc"}'::jsonb; ### Equality ```sql -SELECT * FROM users WHERE email = $1::public.text_eq; +SELECT * FROM users WHERE email = $1::public.eql_v3_text_eq; -- Index Scan using users_email_eq -- Index Cond: (eql_v3.eq_term(email) = eql_v3.eq_term($1)) ``` @@ -89,14 +95,14 @@ SELECT * FROM users WHERE email = $1::public.text_eq; The `<`, `<=`, `>`, `>=` operators inline to comparisons on `eql_v3.ord_term`, so natural-form range predicates match the btree: ```sql -SELECT * FROM users WHERE created_at < $1::public.timestamp_ord; +SELECT * FROM users WHERE created_at < $1::public.eql_v3_timestamp_ord; ``` `ORDER BY` needs care. The planner inlines operators in *predicates* but does not rewrite *sort keys*: `ORDER BY created_at` uses the index for the `WHERE` clause but still adds a `Sort` node, which scales linearly with the rows passing the filter. To stream rows out of the btree already ordered, write the sort key in extractor form: ```sql SELECT * FROM users - WHERE created_at < $1::public.timestamp_ord + WHERE created_at < $1::public.eql_v3_timestamp_ord ORDER BY eql_v3.ord_term(created_at) DESC LIMIT 10; ``` @@ -121,7 +127,7 @@ SELECT eql_v3.eq_term(email), count(*) ## Encrypted JSON -Containment (`@>` / `<@`) on `public.json` document columns uses a GIN index over `eql_v3.to_ste_vec_query(col)::jsonb`, and field-level equality and ordering have their own extractor recipes. See [JSON](/reference/eql/json). +Containment (`@>` / `<@`) on `public.eql_v3_json` document columns uses a GIN index over `eql_v3.to_ste_vec_query(col)::jsonb`, and field-level equality and ordering have their own extractor recipes. See [JSON](/reference/eql/json). ## Verify with EXPLAIN @@ -177,7 +183,7 @@ Everything above is a functional index over an `IMMUTABLE` SQL function — no o FROM users LIMIT 1; ``` -2. Verify the operand is typed (`$1::public.text_eq`, not `$1::jsonb`). +2. Verify the operand is typed (`$1::public.eql_v3_text_eq`, not `$1::jsonb`). 3. Recreate the index if the column's terms changed after it was built. 4. Run `ANALYZE`. Very small tables may still choose a sequential scan — that's correct. diff --git a/content/docs/reference/eql/joins.mdx b/content/docs/reference/eql/joins.mdx index 2b31347..583c4b4 100644 --- a/content/docs/reference/eql/joins.mdx +++ b/content/docs/reference/eql/joins.mdx @@ -9,13 +9,13 @@ verifiedAgainst: <EqlVersion /> -Equijoins work on equality-capable variants (`_eq`, `_ord` / `_ord_ore`, `text_search`) — the join condition is just encrypted equality. But there is one constraint that has no plaintext equivalent, and it is the single thing to internalize on this page: +Equijoins work on equality-capable variants (`_eq`, every `_ord` variant, `text_search` variants) — the join condition is just encrypted equality. But there is one constraint that has no plaintext equivalent, and it is the single thing to internalize on this page: <Callout type="warn"> **Both sides of the join must be encrypted with the same keyset and typed as a matching variant.** Encrypted equality compares deterministic index terms, and those terms are derived from the encryption keys. Two columns encrypted under different keysets produce different terms for the *same plaintext* — their terms can **never** match, and the join returns no rows. This is not an error the database can detect: the query is valid, the plan is fine, the result is simply empty. </Callout> -"Matching variant" means both sides compare the same term kind: `_eq` with `_eq` (or `text_search`, which carries an `hm` term too) compares HMAC terms; `_ord` with `_ord` compares ORE terms. An `_eq` column can't join an `_ord` column — one side has no `hm`, the other no `ob`, and the equality operator between mismatched variants doesn't resolve. See [Core concepts](/reference/eql/core-concepts) for the term model. +"Matching variant" means both sides are the same domain, so the equality operator resolves and both sides compare the same term kind: `_eq` columns compare HMAC terms, and so does every text variant; the `_ord` variants of the non-text scalars compare ordering terms. An `_eq` column can't join an `_ord` column, because EQL defines its equality operators per domain and none exists between the two. See [Core concepts](/reference/eql/core-concepts) for the term model. ## Equijoin @@ -23,7 +23,7 @@ Equijoins work on equality-capable variants (`_eq`, `_ord` / `_ord_ore`, `text_s SELECT u.*, o.total FROM users u JOIN orders o ON u.email = o.customer_email; --- both columns public.text_eq, encrypted with the same keyset +-- both columns public.eql_v3_text_eq, encrypted with the same keyset ``` No typed-operand cast is needed here — both operands are encrypted columns, so their domain types resolve the encrypted operator directly. All join types (`INNER`, `LEFT`, `RIGHT`, `FULL`) work; `LEFT JOIN` null-extension behaves normally because SQL `NULL`s are not encrypted. @@ -49,17 +49,17 @@ If the two columns are under different keysets, `IN (subquery)` matches nothing, ## Worked example -Two tables sharing an encrypted customer identifier, both columns typed `public.text_eq` and encrypted by the same client configuration (same keyset): +Two tables sharing an encrypted customer identifier, both columns typed `public.eql_v3_text_eq` and encrypted by the same client configuration (same keyset): ```sql CREATE TABLE users ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email public.text_eq + email public.eql_v3_text_eq ); CREATE TABLE orders ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - customer_email public.text_eq, + customer_email public.eql_v3_text_eq, total BIGINT NOT NULL ); @@ -74,7 +74,7 @@ Orders per user, filtered by an encrypted lookup on one side: SELECT u.id, COUNT(o.id) AS order_count FROM users u LEFT JOIN orders o ON u.email = o.customer_email -WHERE u.email = $1::public.text_eq +WHERE u.email = $1::public.eql_v3_text_eq GROUP BY u.id; ``` diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index 63add60..7253a6f 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -1,6 +1,6 @@ --- title: JSON -description: "The complete reference for encrypted JSON documents with public.json — the ste_vec payload shape, containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." +description: "The complete reference for encrypted JSON documents with public.eql_v3_json — the ste_vec payload shape, containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." type: reference components: [eql] verifiedAgainst: @@ -9,9 +9,9 @@ verifiedAgainst: <EqlVersion /> -`public.json` is EQL's encrypted JSON document type, built on structured encryption (**ste_vec**). The document is encrypted as a vector of encrypted entries — one entry per path inside the document — and every path is queryable without decryption: containment, field and array access, and equality or range comparisons on extracted leaves. +`public.eql_v3_json` is EQL's encrypted JSON document type, built on structured encryption (**ste_vec**). The document is encrypted as a vector of encrypted entries — one entry per path inside the document — and every path is queryable without decryption: containment, field and array access, and equality or range comparisons on extracted leaves. -Like every EQL type, `public.json` holds ciphertext the database can't read. Encryption, decryption, and selector generation happen in the client — the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). See [Searchable encryption](/concepts/searchable-encryption) for how querying ciphertext works at all. +Like every EQL type, `public.eql_v3_json` holds ciphertext the database can't read. Encryption, decryption, and selector generation happen in the client — the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). See [Searchable encryption](/concepts/searchable-encryption) for how querying ciphertext works at all. ## The types @@ -19,8 +19,8 @@ Three `jsonb`-backed domains make up the encrypted JSON surface: | Type | What it is | | --- | --- | -| `public.json` | The column type. An encrypted document envelope carrying an `sv` array — one encrypted entry per path in the document. | -| `public.jsonb_entry` | A single entry from the vector: a selector, a ciphertext, and exactly one index term. This is what `->` returns. | +| `public.eql_v3_json` | The column type. An encrypted document envelope carrying an `sv` array — one encrypted entry per path in the document. | +| `public.eql_v3_jsonb_entry` | A single entry from the vector: a selector, a ciphertext, and exactly one index term. This is what `->` returns. | | `eql_v3.query_jsonb` | A containment needle: entries with selectors and index terms but **no ciphertext**. This is what you cast a `@>` operand to. | ## Payload shape @@ -34,9 +34,9 @@ An encrypted JSON document uses a different payload shape from the scalar types: | `hm` **or** `op` | Exactly one, never both — the domain `CHECK` enforces the exclusivity. `hm` (HMAC-256) on Boolean/`null` leaves and Object/Array roots; `op` (CLLW OPE, backed by `eql_v3_internal.ope_cllw`) on String/Number leaves. | | `a` | Optional array marker — `true` when the selector points at an array context. | -The decoded `op` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Earlier alphas named this key `oc` and backed it with CLLW ORE; `3.0.0-alpha.4` renamed it to `op` and moved it to CLLW OPE, whose term orders under the default btree operator class. Older payload versions split it further, into `ocf` (fixed-width, numeric) and `ocv` (variable-width, string). +The decoded `op` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Pre-release payloads named this key `oc` and backed it with CLLW ORE, and older ones split it further, into `ocf` (fixed-width, numeric) and `ocv` (variable-width, string). EQL 3.0.0 ships `op`, backed by CLLW OPE, whose term orders under the default btree operator class. -A document payload for a `public.json` column: +A document payload for a `public.eql_v3_json` column: ```json { @@ -67,16 +67,16 @@ A containment **query** payload (`eql_v3.query_jsonb`) has the same `sv` shape b ## Storing encrypted JSON -Type the column as `public.json`: +Type the column as `public.eql_v3_json`: ```sql CREATE TABLE orders ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - metadata public.json + metadata public.eql_v3_json ); ``` -There is no database-side configuration step. Which index terms a document carries is decided by the encryption client; typing the column as `public.json` is what makes the encrypted operators and functions resolve. The domain's `CHECK` constraint validates the payload shape on insert, so malformed values are rejected at write time. +There is no database-side configuration step. Which index terms a document carries is decided by the encryption client; typing the column as `public.eql_v3_json` is what makes the encrypted operators and functions resolve. The domain's `CHECK` constraint validates the payload shape on insert, so malformed values are rejected at write time. Insert and read through the Stack SDK or Proxy, which encrypt the document into the ste_vec payload on write and decrypt it on read. @@ -98,7 +98,7 @@ JSON `null` here means a `null` literal *inside* the document. A SQL `NULL` colu ## Blocked native jsonb operators -These native PostgreSQL `jsonb` operators are **blocked** on `public.json`. They raise an error rather than silently running plaintext-jsonb semantics against the encrypted payload: +These native PostgreSQL `jsonb` operators are **blocked** on `public.eql_v3_json`. They raise an error rather than silently running plaintext-jsonb semantics against the encrypted payload: - Key/path existence: `?`, `?|`, `?&`, `@?`, `@@` - Path extraction: `#>`, `#>>` @@ -113,7 +113,7 @@ Use containment (`@>` / `<@`), field access (`->` / `->>`), or the `eql_v3.jsonb ## Containment: `@>` and `<@` -`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle with the client and cast it to `eql_v3.query_jsonb` (a typed `public.json` or `public.jsonb_entry` operand also works): +`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle with the client and cast it to `eql_v3.query_jsonb` (a typed `public.eql_v3_json` or `public.eql_v3_jsonb_entry` operand also works): ```sql SELECT * FROM orders @@ -137,7 +137,7 @@ See [Indexes](/reference/eql/indexes) for the full recipes. Fields are addressed by **selector hash** — the deterministic identifier the client emits for a JSON path during encryption — not a plaintext path string like `$.customer.tier`. ```sql --- Field access by selector (returns public.jsonb_entry) +-- Field access by selector (returns public.eql_v3_jsonb_entry) SELECT metadata -> 'selector_hash'::text FROM orders; -- The entry serialized as text (ciphertext JSON, not decrypted plaintext) @@ -147,16 +147,16 @@ SELECT metadata ->> 'selector_hash'::text FROM orders; SELECT metadata -> 0 FROM orders; ``` -The extracted `public.jsonb_entry` is itself comparable: +The extracted `public.eql_v3_jsonb_entry` is itself comparable: - `=` / `<>` resolve via `eql_v3.eq_term` — works on every node type -- `<` / `<=` / `>` / `>=` resolve via `eql_v3.ord_ope_term` — String and Number leaves only +- `<` / `<=` / `>` / `>=` resolve via `eql_v3.ord_term` — String and Number leaves only - `MIN` / `MAX` over an extracted ordered leaf use the `eql_v3.min` / `eql_v3.max` aggregates ```sql -- Equality on an extracted leaf SELECT * FROM orders -WHERE metadata -> 'email_selector'::text = $1::public.jsonb_entry; +WHERE metadata -> 'email_selector'::text = $1::public.eql_v3_jsonb_entry; -- Group by an extracted leaf's equality term SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) @@ -164,7 +164,7 @@ FROM orders GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); ``` -A hash index on `eql_v3.eq_term(col -> '<selector>'::text)` engages the equality lookup; a btree on `eql_v3.ord_ope_term(...)` engages range and `ORDER BY`. The OPE term is a `bytea` domain that orders under the default btree operator class, so this index needs no custom operator class. See [Indexes](/reference/eql/indexes). +A hash index on `eql_v3.eq_term(col -> '<selector>'::text)` engages the equality lookup; a btree on `eql_v3.ord_term(...)` engages range and `ORDER BY`. The OPE term is a `bytea` domain that orders under the default btree operator class, so this index needs no custom operator class. See [Indexes](/reference/eql/indexes). ## Path queries and array helpers @@ -215,7 +215,7 @@ The client encrypts this into a ste_vec payload with selectors for `$`, `$.custo ```sql CREATE TABLE orders ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - metadata public.json + metadata public.eql_v3_json ); INSERT INTO orders (metadata) VALUES ($1); diff --git a/content/docs/reference/eql/numbers.mdx b/content/docs/reference/eql/numbers.mdx index 7c74fd2..f0cdf81 100644 --- a/content/docs/reference/eql/numbers.mdx +++ b/content/docs/reference/eql/numbers.mdx @@ -1,6 +1,6 @@ --- title: Numbers -description: "The complete reference for encrypted numeric columns: the int, float, and numeric domain variants, the ORE-backed payload they carry, and range, ORDER BY, and MIN/MAX queries." +description: "The complete reference for encrypted numeric columns: the int, float, and numeric domain variants, the ordering term they carry, and range, ORDER BY, and MIN/MAX queries." type: reference components: [eql] verifiedAgainst: @@ -19,21 +19,24 @@ Each numeric type generates the same `jsonb`-backed domain variants. The generic | Domain variant | Capability | | --- | --- | -| `public.<T>` | Storage and decryption only. | -| `public.<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | -| `public.<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | -| `public.<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | +| `public.eql_v3_<T>` | Storage and decryption only. | +| `public.eql_v3_<T>_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `public.eql_v3_<T>_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `public.eql_v3_<T>_ord_ope` | The byte-identical twin of `<T>_ord`, with OPE pinned. See [SEM specifiers](#sem-specifiers). | +| `public.eql_v3_<T>_ord_ore` | As `<T>_ord`, with the ORE mechanism pinned. | + +`<T>` is the encrypted type name from the table below, so `public.eql_v3_<T>_ord` is `public.eql_v3_bigint_ord` for `int8`. And every concrete domain this page covers: | Type | Variants | | --- | --- | -| `int2` | `public.smallint` · `public.smallint_eq` · `public.smallint_ord` · `public.smallint_ord_ore` | -| `int4` | `public.integer` · `public.integer_eq` · `public.integer_ord` · `public.integer_ord_ore` | -| `int8` | `public.bigint` · `public.bigint_eq` · `public.bigint_ord` · `public.bigint_ord_ore` | -| `float4` | `public.real` · `public.real_eq` · `public.real_ord` · `public.real_ord_ore` | -| `float8` | `public.double` · `public.double_eq` · `public.double_ord` · `public.double_ord_ore` | -| `numeric` | `public.numeric` · `public.numeric_eq` · `public.numeric_ord` · `public.numeric_ord_ore` | +| `int2` | `public.eql_v3_smallint` · `public.eql_v3_smallint_eq` · `public.eql_v3_smallint_ord` · `public.eql_v3_smallint_ord_ope` · `public.eql_v3_smallint_ord_ore` | +| `int4` | `public.eql_v3_integer` · `public.eql_v3_integer_eq` · `public.eql_v3_integer_ord` · `public.eql_v3_integer_ord_ope` · `public.eql_v3_integer_ord_ore` | +| `int8` | `public.eql_v3_bigint` · `public.eql_v3_bigint_eq` · `public.eql_v3_bigint_ord` · `public.eql_v3_bigint_ord_ope` · `public.eql_v3_bigint_ord_ore` | +| `float4` | `public.eql_v3_real` · `public.eql_v3_real_eq` · `public.eql_v3_real_ord` · `public.eql_v3_real_ord_ope` · `public.eql_v3_real_ord_ore` | +| `float8` | `public.eql_v3_double` · `public.eql_v3_double_eq` · `public.eql_v3_double_ord` · `public.eql_v3_double_ord_ope` · `public.eql_v3_double_ord_ore` | +| `numeric` | `public.eql_v3_numeric` · `public.eql_v3_numeric_eq` · `public.eql_v3_numeric_ord` · `public.eql_v3_numeric_ord_ope` · `public.eql_v3_numeric_ord_ore` | Declare only the capability you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)), and the variant model itself is covered in [Core concepts](/reference/eql/core-concepts). @@ -44,9 +47,9 @@ A payroll table mixing the variants by how each column is queried: ```sql CREATE TABLE employees ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - salary public.bigint_ord, -- range queries, ORDER BY, MIN/MAX - tax_rate public.numeric_eq, -- exact lookup only - net_worth public.numeric -- store and decrypt only, never queried + salary public.eql_v3_bigint_ord, -- range queries, ORDER BY, MIN/MAX + tax_rate public.eql_v3_numeric_eq, -- exact lookup only + net_worth public.eql_v3_numeric -- store and decrypt only, never queried ); ``` @@ -54,35 +57,37 @@ CREATE TABLE employees ( All six types take the same mechanism specifiers on their orderable variant (the concept is defined in [Core concepts](/reference/eql/core-concepts#sem-specifiers)): -| Specifier | Meaning | -| --- | --- | -| `_ord` | Orderable, using EQL's default mechanism (currently ORE). | -| `_ord_ore` | Orderable via ORE, pinned explicitly. | +| Specifier | Mechanism | Ordering term | Extractor | +| --- | --- | --- | --- | +| `_ord` | The default, currently CLLW OPE | `op` | `eql_v3.ord_term` | +| `_ord_ope` | CLLW OPE, pinned explicitly | `op` | `eql_v3.ord_term` | +| `_ord_ore` | Block-ORE, pinned explicitly | `ob` | `eql_v3.ord_term_ore` | + +`<T>_ord` and `<T>_ord_ope` are byte-identical today. Pin `_ord_ope` when you want a column's mechanism frozen against a future change of the default. -The EQL v3 release adds an OPE specifier for every orderable type; unspecified `_ord` columns keep tracking the default. +<Callout type="warn"> +Block-ORE terms sort only under a custom btree operator class, and creating one requires superuser. Where the EQL installer runs as a non-superuser, which is the case on most managed Postgres including cloud Supabase, it cannot create the class, so it **disables every ORE-backed domain** rather than let them install half-working. `<T>_ord_ore` then raises `feature_not_supported` on the first value written to it. Use `<T>_ord` there. +</Callout> ## Payload -A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `ob` ordering term. Here is a payload for the `public.bigint_ord` `salary` column: +A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — see [Core concepts](/reference/eql/core-concepts)) plus the `op` ordering term. Here is a payload for the `public.eql_v3_bigint_ord` `salary` column: ```json { "v": 3, "i": { "t": "employees", "c": "salary" }, "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", - "ob": [ - "7a1fd0c2...", "d24c9be1...", "03fa66b8...", "91b7e04d...", - "5c28aa19...", "e6f3071c...", "48d92ab5...", "0b64cf37..." - ] + "op": "5f2b1a9e4c07d38b6ea15c92..." } ``` -- **`ob` is the only index term.** An `_ord` payload carries no `hm`: equality on `_ord` variants compares ORE terms, which collapse to equality — see [Core concepts](/reference/eql/core-concepts). Only `_eq` payloads carry `hm` (a single hex HMAC-SHA-256 string) instead of `ob`. -- **The `ob` block count varies with the plaintext width**: 8 blocks for the int types, 14 for `numeric`. +- **`op` is the only index term.** It is a hex-encoded CLLW OPE ciphertext, which Postgres sorts by native `bytea` comparison. An `_ord` payload carries no `hm`, because ordering over a numeric scalar is equality-lossless: `=` and `<>` resolve against the same term. Only `_eq` payloads carry `hm` (a single hex HMAC-SHA-256 string) instead. +- **An `_ord_ore` payload carries `ob` in place of `op`**: an array of block-ORE ciphertexts, 8 blocks for the int types and 14 for `numeric`. ## Operators -| SQL operator | `public.<T>` | `<T>_eq` | `<T>_ord` / `<T>_ord_ore` | +| SQL operator | `public.eql_v3_<T>` | `<T>_eq` | `<T>_ord` variants | | --- | :---: | :---: | :---: | | `=` / `<>` | ❌ | ✅ | ✅ | | `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | @@ -92,7 +97,7 @@ A value for an `_ord` column carries the shared envelope keys (`v`, `i`, `c` — | `ORDER BY` | ❌ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | -Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.bigint_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.eql_v3_bigint_ord`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions @@ -100,9 +105,9 @@ Every operator has a function form, for managed platforms that disallow custom o | Function | Equivalent | Available on | | --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, `_ord` / `_ord_ore` | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | `_ord` / `_ord_ore` | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | `_ord` / `_ord_ore` | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, all `_ord` variants | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `_ord` variants | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `_ord` variants | **`SUM`, `AVG`, and other arithmetic aggregates are not supported** on encrypted columns — they would require homomorphic encryption. `MIN` / `MAX` work because they only need comparison; for sums and averages, decrypt at the application boundary and aggregate client-side. @@ -112,15 +117,15 @@ Every operator has a function form, for managed platforms that disallow custom o ```sql SELECT * FROM employees -WHERE salary >= $1::public.bigint_ord; +WHERE salary >= $1::public.eql_v3_bigint_ord; SELECT * FROM employees -WHERE salary BETWEEN $1::public.bigint_ord AND $2::public.bigint_ord; +WHERE salary BETWEEN $1::public.eql_v3_bigint_ord AND $2::public.eql_v3_bigint_ord; ``` ### MIN and MAX -`eql_v3.min` / `eql_v3.max` compare ORE terms — no decryption happens in the database, and the encrypted result decrypts in the client. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`: +`eql_v3.min` / `eql_v3.max` compare ordering terms — no decryption happens in the database, and the encrypted result decrypts in the client. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`: ```sql SELECT eql_v3.min(salary) FROM employees; @@ -139,10 +144,10 @@ LIMIT 10; ### Cast at the call site -On a generic `jsonb` column whose payloads already carry the `ob` term, cast to the right domain in the query: +On a generic `jsonb` column whose payloads already carry the `op` term, cast to the right domain in the query: ```sql -SELECT eql_v3.min(salary_jsonb::public.bigint_ord) FROM employees; +SELECT eql_v3.min(salary_jsonb::public.eql_v3_bigint_ord) FROM employees; ``` ## Where to next diff --git a/content/docs/reference/eql/sorting.mdx b/content/docs/reference/eql/sorting.mdx index 2529fba..840faea 100644 --- a/content/docs/reference/eql/sorting.mdx +++ b/content/docs/reference/eql/sorting.mdx @@ -9,9 +9,11 @@ verifiedAgainst: <EqlVersion /> -`ORDER BY` on an encrypted column needs an ORE ordering term: it works on `_ord` / `_ord_ore` variants of every scalar and on `text_search`. ORE terms are order-preserving, so the database sorts ciphertext in exactly the order the plaintext would sort — without decrypting anything. Which variants carry the term is covered in [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), and [Text](/reference/eql/text); the variant model itself is in [Core concepts](/reference/eql/core-concepts). +`ORDER BY` on an encrypted column needs an ordering term: it works on the `_ord`, `_ord_ope`, and `_ord_ore` variants of every scalar, and on `text_search` / `text_search_ore`. Ordering terms are order-preserving, so the database sorts ciphertext in exactly the order the plaintext would sort — without decrypting anything. Which variants carry the term is covered in [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), and [Text](/reference/eql/text); the variant model itself is in [Core concepts](/reference/eql/core-concepts). -Sorting a variant *without* an ORE term (`_eq`, `text_match`, bare storage variants) won't raise — but the order is meaningless. Type the column as an `_ord` variant when ordering matters. +Sorting a variant *without* an ordering term (`_eq`, `text_match`, bare storage variants) won't raise — but the order is meaningless. Type the column as an `_ord` variant when ordering matters. + +The mechanism behind the term, CLLW OPE (`op`) or block-ORE (`ob`), changes nothing about how you write the query. `eql_v3.ord_term` is the extractor for `_ord`, `_ord_ope`, and `text_search`; `eql_v3.ord_term_ore` is the extractor for `_ord_ore` and `text_search_ore`. Everything on this page applies to both, with one exception: only the OPE term indexes under Postgres's default btree operator class, so on managed Postgres it is the only mechanism available. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). ## Bare form vs extractor form @@ -35,7 +37,7 @@ CREATE INDEX users_created_at_ord ANALYZE users; SELECT * FROM users - WHERE created_at < $1::public.timestamp_ord + WHERE created_at < $1::public.eql_v3_timestamp_ord ORDER BY eql_v3.ord_term(created_at) DESC LIMIT 10; -- Index Scan Backward using users_created_at_ord — no Sort node @@ -66,7 +68,7 @@ SELECT id, email, created_at FROM users -- Next page: pass the last row's created_at back, re-encrypted as the cursor SELECT id, email, created_at FROM users - WHERE created_at < $1::public.timestamp_ord + WHERE created_at < $1::public.eql_v3_timestamp_ord ORDER BY eql_v3.ord_term(created_at) DESC LIMIT 20; ``` @@ -81,15 +83,15 @@ If you project the column with a cast and sort on it — `SELECT col::jsonb ... ## Sorting extracted JSON leaves -String and Number leaves inside an encrypted JSON document carry a CLLW OPE term, so they sort too — the extractor is `eql_v3.ord_ope_term` on the extracted entry: +String and Number leaves inside an encrypted JSON document carry a CLLW OPE term, so they sort too — the extractor is `eql_v3.ord_term` on the extracted entry: ```sql SELECT * FROM orders -ORDER BY eql_v3.ord_ope_term(metadata -> 'total_selector'::text) DESC +ORDER BY eql_v3.ord_term(metadata -> 'total_selector'::text) DESC LIMIT 10; ``` -A btree on the same `eql_v3.ord_ope_term(...)` expression streams this ordered, exactly like `ord_term` on a scalar column. Selectors, node types, and which leaves are orderable are covered in [JSON](/reference/eql/json). +A btree on the same `eql_v3.ord_term(...)` expression streams this ordered, exactly like `ord_term` on a scalar column. Selectors, node types, and which leaves are orderable are covered in [JSON](/reference/eql/json). ## Where to go next diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index 7865e8c..810ff25 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -1,6 +1,6 @@ --- title: Text -description: "The complete reference for encrypted text columns: all six text domain variants, the multi-term payload, why LIKE is gone everywhere, and bloom-filter token containment as the encrypted free-text match." +description: "The complete reference for encrypted text columns: every text domain variant, the multi-term payload, why LIKE is gone everywhere, and bloom-filter token containment as the encrypted free-text match." type: reference components: [eql] verifiedAgainst: @@ -9,20 +9,22 @@ verifiedAgainst: <EqlVersion /> -Text is the richest encrypted scalar. Beyond the four variants every scalar type gets, `text` adds two of its own: `text_match` for encrypted free-text matching, and `text_search` for columns you need to look up, sort, *and* search. Emails, names, tax IDs, addresses — this page is the full surface for all of them. +Text is the richest encrypted scalar. Beyond the variants every scalar type gets, `text` adds its own: `text_match` for encrypted free-text matching, and `text_search` for columns you need to look up, sort, *and* search. Emails, names, tax IDs, addresses — this page is the full surface for all of them. ## Variants -All six are `jsonb`-backed domains. Which one you declare fixes the column's query capability — the variant model itself is covered in [Core concepts](/reference/eql/core-concepts): +All of these are `jsonb`-backed domains. Which one you declare fixes the column's query capability — the variant model itself is covered in [Core concepts](/reference/eql/core-concepts): | Domain variant | Capability | | --- | --- | -| `public.text` | Storage and decryption only. | -| `public.text_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | -| `public.text_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | -| `public.text_ord_ore` | As `text_ord`, with the ORE mechanism pinned — see [SEM specifiers](#sem-specifiers). | -| `public.text_match` | Free-text token containment: `@>` / `<@`. | -| `public.text_search` | Equality + ordering + token containment. | +| `public.eql_v3_text` | Storage and decryption only. | +| `public.eql_v3_text_eq` | Equality: `=`, `<>`, `IN`, `GROUP BY`, `DISTINCT`, equijoins. | +| `public.eql_v3_text_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | +| `public.eql_v3_text_ord_ope` | The byte-identical twin of `text_ord`, with OPE pinned. See [SEM specifiers](#sem-specifiers). | +| `public.eql_v3_text_ord_ore` | As `text_ord`, with the ORE mechanism pinned. | +| `public.eql_v3_text_match` | Free-text token containment: `@>` / `<@`. | +| `public.eql_v3_text_search` | Equality + ordering + token containment. | +| `public.eql_v3_text_search_ore` | As `text_search`, with the ORE mechanism pinned. | Declare only the capabilities you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)). @@ -33,10 +35,10 @@ A users table mixing the variants by how each column is queried: ```sql CREATE TABLE users ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email public.text_search, -- lookup, sort, and free-text match - name public.text_match, -- free-text match only - tax_id public.text_eq, -- exact lookup only - notes public.text -- store and decrypt only + email public.eql_v3_text_search, -- lookup, sort, and free-text match + name public.eql_v3_text_match, -- free-text match only + tax_id public.eql_v3_text_eq, -- exact lookup only + notes public.eql_v3_text -- store and decrypt only ); ``` @@ -44,12 +46,19 @@ CREATE TABLE users ( Text takes the same mechanism specifiers as the other orderable types (the concept is defined in [Core concepts](/reference/eql/core-concepts#sem-specifiers)): -| Specifier | Meaning | -| --- | --- | -| `_ord` | Orderable, using EQL's default mechanism (currently ORE). | -| `_ord_ore` | Orderable via ORE, pinned explicitly. | +| Specifier | Mechanism | Ordering term | Extractor | +| --- | --- | --- | --- | +| `_ord` | The default, currently CLLW OPE | `op` | `eql_v3.ord_term` | +| `_ord_ope` | CLLW OPE, pinned explicitly | `op` | `eql_v3.ord_term` | +| `_ord_ore` | Block-ORE, pinned explicitly | `ob` | `eql_v3.ord_term_ore` | +| `text_search` | The default, currently CLLW OPE | `op` | `eql_v3.ord_term` | +| `text_search_ore` | Block-ORE, pinned explicitly | `ob` | `eql_v3.ord_term_ore` | + +`text_ord` and `text_ord_ope` are byte-identical today. Pin `_ord_ope` when you want a column's mechanism frozen against a future change of the default. -The EQL v3 release adds an OPE specifier for every orderable type — including `text` — so lexicographic ordering can be pinned to either mechanism; unspecified `_ord` columns keep tracking the default. +<Callout type="warn"> +Block-ORE terms sort only under a custom btree operator class, and creating one requires superuser. Where the EQL installer runs as a non-superuser, which is the case on most managed Postgres including cloud Supabase, it cannot create the class, so it **disables every ORE-backed domain** rather than let them install half-working. `text_ord_ore` and `text_search_ore` then raise `feature_not_supported` on the first value written to them. Use `text_ord` or `text_search` there. +</Callout> ## Payload @@ -61,22 +70,24 @@ A value for a `text_search` column carries the shared envelope keys (`v`, `i`, ` "i": { "t": "users", "c": "email" }, "c": "mBbKmsMM%bK#QQOx1yLDBHyD...", "hm": "9c8ec1d2f9932b979b1bf3f09f8a4e2f6a41f8de2f0c8b7a52e1f5c3d4b6a790", - "ob": ["7a1fd0c2...", "d24c9be1...", "03fa66b8..."], + "op": "5f2b1a9e4c07d38b6ea15c92...", "bf": [42, 1290, -8113, 30201] } ``` - `hm` — equality term: `WHERE email = $1` compares this -- `ob` — ordering term: `ORDER BY` and range comparisons walk these blocks +- `op` — ordering term: a hex-encoded CLLW OPE ciphertext, which `ORDER BY` and range comparisons sort by native `bytea` comparison - `bf` — bloom-filter term: `@>` token containment tests these bit positions -The narrower variants carry only their own term: a `text_eq` payload carries `hm` only, `text_match` carries `bf` only, and `text_ord` / `text_ord_ore` carry `ob` only (no `hm` — equality on `_ord` variants compares ORE terms, see [Core concepts](/reference/eql/core-concepts)). A payload missing its variant's required term fails the domain `CHECK` at write time. +A `text_search_ore` payload carries `ob` in place of `op`: an array of block-ORE ciphertexts rather than a single string. + +The narrower variants carry only their own terms. A `text_eq` payload carries `hm` alone, `text_match` carries `bf` alone, and the orderable variants carry `hm` plus their ordering term (`op` for `text_ord` / `text_ord_ope`, `ob` for `text_ord_ore`). Text keeps `hm` on every orderable variant, because ordering over text is not equality-lossless the way it is over the numeric scalars: `=` and `<>` resolve against the HMAC term rather than the ordering term. A payload missing its variant's required term fails the domain `CHECK` at write time. **`bf` positions are signed**: EQL stores the filter as PostgreSQL `smallint[]`, and filters sized above 32768 emit upper-half bit positions as *negative* signed values. Consumers must use a signed 16-bit integer type. ## Operators -| SQL operator | `public.text` | `text_eq` | `text_ord` / `text_ord_ore` | `text_match` | `text_search` | +| SQL operator | `public.eql_v3_text` | `text_eq` | `text_ord` variants | `text_match` | `text_search` variants | | --- | :---: | :---: | :---: | :---: | :---: | | `=` / `<>` | ❌ | ✅ | ✅ | ❌ | ✅ | | `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | ❌ | ✅ | @@ -86,7 +97,7 @@ The narrower variants carry only their own term: a `text_eq` payload carries `hm | `ORDER BY` | ❌ | ❌ | ✅ | ❌ | ✅ | | `IS NULL` / `IS NOT NULL` | ✅ | ✅ | ✅ | ✅ | ✅ | -Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.text_eq`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). +Blocked *operator* cells raise an `operator … is not supported` exception — they never silently return wrong rows. `ORDER BY` is the one blocked cell that doesn't raise: it isn't an operator, so sorting a variant without an ordering term runs — but the order is meaningless (see [Sorting](/reference/eql/sorting)). Operands must be typed (`$1::public.eql_v3_text_eq`), or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. Both rules are covered in [Core concepts](/reference/eql/core-concepts). ## Functions @@ -94,10 +105,10 @@ Every operator has a function form, for managed platforms that disallow custom o | Function | Equivalent | Available on | | --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `text_eq`, `text_ord` / `text_ord_ore`, `text_search` | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | `text_ord` / `text_ord_ore`, `text_search` | -| `eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)` | `@>` / `<@` | `text_match`, `text_search` | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | `text_ord` / `text_ord_ore`, `text_search` | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `text_eq`, all `text_ord` variants, all `text_search` variants | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `text_ord` variants, all `text_search` variants | +| `eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)` | `@>` / `<@` | `text_match`, all `text_search` variants | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `text_ord` variants, all `text_search` variants | There are no `like` / `ilike` function forms — encrypted text matching is `eql_v3.contains` on a `text_match` value. @@ -110,7 +121,7 @@ There are no `like` / `ilike` function forms — encrypted text matching is `eql SELECT * FROM users WHERE email LIKE '%alice%'; -- ✅ Encrypted free-text match -SELECT * FROM users WHERE email @> $1::public.text_match; +SELECT * FROM users WHERE email @> $1::public.eql_v3_text_match; ``` `@>` / `<@` here is **probabilistic ngram-bloom containment** — it tests whether the encrypted text contains the (encrypted) search terms. It is not JSONB containment and not `LIKE`. The client encrypts the search term into a bloom-filter query value; false positives are possible, false negatives are not. There are no `like` / `ilike` function forms either — text matching is `eql_v3.contains` on a `text_match` value. @@ -122,10 +133,10 @@ SELECT * FROM users WHERE email @> $1::public.text_match; Equality on a `text_eq` column compares HMAC terms. `IN` desugars to `=`: ```sql -SELECT * FROM users WHERE tax_id = $1::public.text_eq; +SELECT * FROM users WHERE tax_id = $1::public.eql_v3_text_eq; SELECT * FROM users -WHERE tax_id IN ($1::public.text_eq, $2::public.text_eq); +WHERE tax_id IN ($1::public.eql_v3_text_eq, $2::public.eql_v3_text_eq); ``` ### Free-text match @@ -133,10 +144,10 @@ WHERE tax_id IN ($1::public.text_eq, $2::public.text_eq); The client encrypts the search term into the bloom-filter needle: ```sql -SELECT * FROM users WHERE name @> $1::public.text_match; +SELECT * FROM users WHERE name @> $1::public.eql_v3_text_match; -- Function form, for platforms without custom operators -SELECT * FROM users WHERE eql_v3.contains(name, $1::public.text_match); +SELECT * FROM users WHERE eql_v3.contains(name, $1::public.eql_v3_text_match); ``` ### The works: `text_search` @@ -145,15 +156,15 @@ A `text_search` column answers exact lookup, free-text match, and ordering — h ```sql SELECT id, email FROM users -WHERE email @> $1::public.text_match -- token containment on bf - AND email <> $2::public.text_eq -- exclude an exact value via hm +WHERE email @> $1::public.eql_v3_text_match -- token containment on bf + AND email <> $2::public.eql_v3_text_eq -- exclude an exact value via hm ORDER BY eql_v3.ord_term(email) -- sort on ob LIMIT 20; ``` ### Sorting text -ORE terms are order-preserving, so `ORDER BY` sorts encrypted text correctly. Write the sort key in extractor form so a btree index can do the ordering instead of a `Sort` node — see [Sorting](/reference/eql/sorting): +Ordering terms are order-preserving, so `ORDER BY` sorts encrypted text correctly. Write the sort key in extractor form so a btree index can do the ordering instead of a `Sort` node — see [Sorting](/reference/eql/sorting): ```sql SELECT * FROM users diff --git a/content/docs/reference/proxy/configuration.mdx b/content/docs/reference/proxy/configuration.mdx index 4316a2f..e98b04a 100644 --- a/content/docs/reference/proxy/configuration.mdx +++ b/content/docs/reference/proxy/configuration.mdx @@ -53,7 +53,7 @@ For local development, create a client key and access key in the [Dashboard](htt ## Setting up the database schema -Proxy queries encrypted data through [EQL](/reference/eql), which must be installed in the target database. Encrypted columns are typed with an EQL domain such as `public.text_eq`, and that type is what fixes the column's searchable capability. There is no database-side configuration table. +Proxy queries encrypted data through [EQL](/reference/eql), which must be installed in the target database. Encrypted columns are typed with an EQL domain such as `public.eql_v3_text_eq`, and that type is what fixes the column's searchable capability. There is no database-side configuration table. - [Install EQL](/reference/eql) covers the install itself, including the permissions split and Supabase. - [Core concepts](/reference/eql/core-concepts) covers the variant model and which domain type to choose. diff --git a/content/docs/reference/proxy/errors.mdx b/content/docs/reference/proxy/errors.mdx index 76c1e0d..c6dd510 100644 --- a/content/docs/reference/proxy/errors.mdx +++ b/content/docs/reference/proxy/errors.mdx @@ -152,7 +152,7 @@ When Proxy decrypts data, it casts and encodes the result as the PostgreSQL repr Proxy has no encrypted-column mapping for this column. In EQL v3 a column's searchable capability is fixed by the [domain variant](/reference/eql/core-concepts) it is typed as, so a column Proxy cannot map is usually one that was never given an EQL type: ```sql -ALTER TABLE users ALTER COLUMN email TYPE public.text_eq; +ALTER TABLE users ALTER COLUMN email TYPE public.eql_v3_text_eq; ``` Proxy reloads the database schema on the interval set by `CS_DATABASE__SCHEMA_RELOAD_INTERVAL` (60 seconds by default), so a newly typed column may take up to that long to become mappable. diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index 0967d92..ab41f80 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -243,11 +243,13 @@ function driftCheck(manifest: Manifest): string[] { const text = fs.readFileSync(path.join(EQL_DIR, file), "utf8"); // Any schema-qualified reference — function call, domain cast, or type. // A trailing `*` marks a prose family (e.g. `eql_v3.jsonb_path_*`), which - // names a set rather than one symbol, so it's skipped. + // names a set rather than one symbol, so it's skipped. So is a trailing + // `<T>` placeholder (e.g. `public.eql_v3_<T>_ord`). for (const m of text.matchAll( /\b(public|eql_v3_internal|eql_v3)\.([a-z0-9_]+)(\*?)/g, )) { if (m[3] === "*") continue; + if (text[(m.index ?? 0) + m[0].length] === "<") continue; const fqn = `${m[1]}.${m[2]}`; const pages = referenced.get(fqn) ?? new Set<string>(); pages.add(file); From 393559815bb0b1a5da6327c8872a55e08fd91143 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 01:15:25 +1000 Subject: [PATCH 067/151] docs(eql): pin to the EQL 3.0.0 release Bumps EQL_RELEASE_TAG from eql-3.0.0-alpha.4. The drift check now passes against the real manifest, which confirms every domain and function this branch renamed. Two follow-ons the bump exposed: - The 40 scalar query-operand domains (`eql_v3.query_text_eq` and its siblings) are created inside a `DO ... EXECUTE` block, which the manifest's catalog generator does not walk, so the drift check rejected a correct reference. `eql_v3.query_jsonb`, created at the top level, is present. Added a narrow, documented allowlist rather than weakening the check; verified against the release SQL. - core-concepts named `public.text` / `public.json` / `public.integer` as the Postgres built-ins the `eql_v3_` prefix avoids shadowing. The drift check reads any `public.<name>` as an EQL domain reference. Say the same thing without schema-qualifying the built-ins. --- content/docs/reference/eql/core-concepts.mdx | 4 ++-- scripts/generate-eql-api-docs.ts | 16 +++++++++++++++- scripts/generate-eql-docs.ts | 2 +- 3 files changed, 18 insertions(+), 4 deletions(-) diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index f0422f5..2b6ada8 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -30,7 +30,7 @@ For any scalar type `<T>`, the family looks like this: | `public.eql_v3_text_search` (text only) | Equality + ordering + token containment. | | `public.eql_v3_text_search_ore` (text only) | As `text_search`, with block-ORE pinned. | -Every public domain name carries the `eql_v3_` prefix. It keeps EQL's types from shadowing built-in Postgres type names (`public.text`, `public.json`), and gives each EQL version its own column-type namespace so two versions can coexist. Query-operand domains live in the versioned `eql_v3` schema already, so they are unprefixed: `eql_v3.query_text_eq`, `eql_v3.query_jsonb`. +Every public domain name carries the `eql_v3_` prefix. It keeps EQL's types from shadowing built-in Postgres type names such as `text` and `json`, and gives each EQL version its own column-type namespace so two versions can coexist. Query-operand domains live in the versioned `eql_v3` schema already, so they are unprefixed: `eql_v3.query_text_eq`, `eql_v3.query_jsonb`. Two things worth calling out: @@ -82,7 +82,7 @@ EQL spreads its surface across three PostgreSQL schemas, and the split is what m | `eql_v3` | All **user-callable functions and operators** — the searchable-encryption API (`eql_v3.eq_term`, `eql_v3.jsonb_path_query`, the encrypted `=` / `<` / `@>` operators, `eql_v3.version()`). | Yes — this is the API. | | `eql_v3_internal` | The **implementation functions** the domains and operators are built from. | No — never call these directly. | -**Why the types live in `public`, and carry a version prefix.** Your columns are typed as `public.eql_v3_integer_ord`, `public.eql_v3_text_eq`, and so on — never `eql_v3.*`. Types stay in `public` so a column's type resolves without `search_path` games. The `eql_v3_` prefix does two jobs: it stops EQL's types shadowing Postgres built-ins (`public.text`, `public.json`, `public.integer` all exist), and it gives each EQL generation its own column-type namespace, so `eql_v3_text_eq` and a future `eql_v4_text_eq` can sit side by side in one database while you migrate table by table. +**Why the types live in `public`, and carry a version prefix.** Your columns are typed as `public.eql_v3_integer_ord`, `public.eql_v3_text_eq`, and so on — never `eql_v3.*`. Types stay in `public` so a column's type resolves without `search_path` games. The `eql_v3_` prefix does two jobs: it stops EQL's types shadowing Postgres built-ins, since `text`, `json`, and `integer` already resolve in `public`, and it gives each EQL generation its own column-type namespace, so `eql_v3_text_eq` and a future `eql_v4_text_eq` can sit side by side in one database while you migrate table by table. **Why `eql_v3` is versioned.** The schema name encodes the major API version and is itself part of the public contract — a breaking change introduces a new `eql_vN` schema *beside* the old one rather than mutating it, so you migrate on your own timeline. Everything in `eql_v3` is fair game to call. diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index ab41f80..727e050 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -259,11 +259,25 @@ function driftCheck(manifest: Manifest): string[] { const unknown: string[] = []; for (const [fqn, pages] of referenced) { - if (!known.has(fqn)) unknown.push(`${fqn} (in ${[...pages].join(", ")})`); + if (known.has(fqn) || MANIFEST_BLIND_SPOTS.has(fqn)) continue; + unknown.push(`${fqn} (in ${[...pages].join(", ")})`); } return unknown.sort(); } +// Symbols that EQL really ships but the manifest's catalog does not list, so +// the drift check would reject a correct reference. +// +// The scalar query-operand domains (`eql_v3.query_text_eq`, and 39 siblings) +// are created inside a `DO ... EXECUTE` block in the install SQL, which the +// catalog generator does not walk — `eql_v3.query_jsonb`, created at the top +// level, IS in the manifest. Verified present in the 3.0.0 install SQL: +// grep -c "CREATE DOMAIN eql_v3.query_" cipherstash-encrypt.sql # => 40 +// +// Keep this list minimal, and delete entries as the manifest grows to cover +// them. +const MANIFEST_BLIND_SPOTS = new Set(["eql_v3.query_text_eq"]); + // ── Main ───────────────────────────────────────────────────────────────────── function main() { const manifest = loadManifest(); diff --git a/scripts/generate-eql-docs.ts b/scripts/generate-eql-docs.ts index b7a5f7c..3b72377 100644 --- a/scripts/generate-eql-docs.ts +++ b/scripts/generate-eql-docs.ts @@ -28,7 +28,7 @@ import GithubSlugger from "github-slugger"; * prerelease and churning (alpha.3 and alpha.4 shipped a day apart), so this * tracks an alpha deliberately rather than by accident. */ -const EQL_RELEASE_TAG = process.env.EQL_RELEASE_TAG ?? "eql-3.0.0-alpha.4"; +const EQL_RELEASE_TAG = process.env.EQL_RELEASE_TAG ?? "eql-3.0.0"; const GITHUB_RELEASE_DOWNLOAD = "https://github.com/cipherstash/encrypt-query-language/releases/download"; From 249dfe207b5d7628196ed9417c53dfaa1a863295 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 14 Jul 2026 21:48:13 +1000 Subject: [PATCH 068/151] docs(reference): add the benchmarks page (#54) * docs(reference): add the benchmarks page Publishes the EQL v3 query-performance numbers from cipherstash/benches at /reference/benchmarks, so the performance claims have a docs page to land on: - encrypted-vs-plaintext query latency (exact match and OPE range within ~1.2-1.4x of plaintext, flat from 10k to 10M rows) - the OPE-vs-ORE range/order tradeoff, free-text bloom match, JSON, GROUP BY - ingest throughput, methodology, caveats, and repro steps Every figure is sourced from the public benches report and cross-checked against the plaintext baseline. Ticks the IA checklist item. * docs(benchmarks): fix the inverted OPE/ORE variant labels The page had the ordering variants backwards relative to shipped EQL 3.0.0. It attributed OPE (fast, ~1s index build) to `_ord_ope` only and called `_ord` the ORE variant. Shipped, `_ord` IS the OPE default (op term, `eql_v3.ord_term`, indexes under the built-in btree opclass), and `_ord_ore` is the ORE-pinned variant (ob term, `eql_v3.ord_term_ore`, needs a superuser opclass). Verified against the 3.0.0 install SQL. Only the variant labels were wrong; every latency and build-time figure was already correct and is unchanged. --- IA.md | 2 +- content/docs/reference/benchmarks.mdx | 73 +++++++++++++++++++++++++++ 2 files changed, 74 insertions(+), 1 deletion(-) create mode 100644 content/docs/reference/benchmarks.mdx diff --git a/IA.md b/IA.md index 1294823..7aad829 100644 --- a/IA.md +++ b/IA.md @@ -434,7 +434,7 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). - [ ] `/reference/proxy/*` (configuration, message-flow, multitenant, errors) - [ ] `/reference/workspace/billing` + `/members` + `/configuration` - **Cross-cutting:** -- [ ] `/reference/benchmarks` — listing numbers + methodology (CIP-3334) +- [x] `/reference/benchmarks` — listing numbers + methodology (CIP-3334) - [ ] `/reference/agent-skills` (port; expand per CIP-3339) - [ ] `/reference/glossary` (port) - [ ] Repoint `scripts/generate-docs.ts` TypeDoc output → `content/docs/reference/stack` diff --git a/content/docs/reference/benchmarks.mdx b/content/docs/reference/benchmarks.mdx new file mode 100644 index 0000000..be8ae7c --- /dev/null +++ b/content/docs/reference/benchmarks.mdx @@ -0,0 +1,73 @@ +--- +title: Benchmarks +description: "Query latency on encrypted columns versus plaintext PostgreSQL. Exact match and range run within 1.2-1.4x of plaintext and stay flat from 10k to 10M rows." +type: reference +components: [eql] +--- + +CipherStash encrypts data in your application and queries it in PostgreSQL through [EQL](/reference/eql). These benchmarks measure what that costs: the same query shapes run against encrypted columns and against plaintext tables with equivalent indexes, so every figure is an honest encrypted-versus-plaintext ratio rather than a number in isolation. + +All results are medians on **Apple M1 Max, PostgreSQL 17, EQL v3**, across datasets from 10,000 to 10,000,000 rows. The full suite (per-scenario SQL, `EXPLAIN` plans, charts, and the v2-to-v3 regression comparison) lives in [cipherstash/benches](https://github.com/cipherstash/benches). + +<Callout title="Headline" type="info"> +On the fast paths, querying encrypted data costs almost nothing. Exact match and OPE range queries run at about **0.12 ms, within 1.2-1.4x of plaintext PostgreSQL, and stay flat from 10k to 10M rows**. Latency tracks the index, not the row count. +</Callout> + +## Query latency + +Median latency at 1,000,000 rows, with the ratio to the same query on a plaintext table with an equivalent index. + +| Operation | EQL index | Encrypted median | vs plaintext | +| --- | --- | --- | --- | +| Exact match (`=`) | B-tree (equality term) | 0.12 ms | 1.3x | +| Range / `ORDER BY` (OPE) | B-tree (OPE order term) | 0.12 ms | 1.2x | +| Range / `ORDER BY` (ORE) | B-tree (ORE order term) | 0.52 ms | 5.2x | +| JSON containment (`@>`) | GIN (SteVec) | 0.40 ms | 1.4x | +| `GROUP BY` (low cardinality) | B-tree (equality term) | 83 ms | 2.2x | + +**Range and ordering have two index options.** The `_ord` variants use order-preserving encryption (OPE), which is EQL v3's default: near-plaintext latency, and an index that builds in about 1 s at 1M rows. The `_ord_ore` variants use order-revealing encryption (ORE): roughly 5x plaintext, and the index takes about 44 s to build at 1M. They have different leakage profiles, so the right choice is per column rather than universal, see [Searchable encryption](/concepts/searchable-encryption) for the tradeoff and [Numbers](/reference/eql/numbers) for the variants. + +**Free-text match** uses a bloom-filter term (there is no `LIKE` on encrypted text) and runs at about 15.7 ms at 1M rows. What matters most is that the index engages at all: the bloom GIN is **100-400x faster than a sequential scan**. See [Text](/reference/eql/text). + +## Scaling + +Latency on an indexed encrypted column tracks the index, not the table, so the encrypted-versus-plaintext ratio barely moves as the dataset grows 1000x: + +| Operation | 10k | 100k | 1M | 10M | +| --- | --- | --- | --- | --- | +| Exact match (`=`) | 0.13 ms (1.4x) | 0.11 ms (1.2x) | 0.12 ms (1.3x) | 0.13 ms (1.4x) | +| Range (OPE) | 0.12 ms (1.2x) | 0.12 ms (1.2x) | 0.12 ms (1.2x) | 0.12 ms (1.2x) | + +Aggregations that scan every matched row, like `GROUP BY`, grow with the number of rows in the group exactly as they do on plaintext: about 2x plaintext throughout (2.1 ms at 10k, 83 ms at 1M). + +## Ingest + +Encryption happens in your application on write, so insert throughput reflects client-side work rather than database load. On the reference machine, encrypted insert throughput ranges from about **11k rows/s** for exact-match and OPE columns down to about **1.3k rows/s** for the free-text `text_search` domain, which generates a bloom and an order term per value. Batching and parallel writers scale this well past the single-threaded figures here. The per-domain breakdown is in the [ingest report](https://github.com/cipherstash/benches/blob/main/report/BENCHMARK_REPORT.md). + +## Methodology + +- **Environment:** Apple M1 Max, PostgreSQL 17, EQL v3. Datasets of 10k, 100k, 1M, and 10M rows. +- **Baseline:** every encrypted scenario is compared to the same query shape on a plaintext table with an equivalent index (`benches/plaintext_v3.rs`). Ratios are encrypted median divided by plaintext median. +- **Indexes:** queries use functional indexes over EQL's extractor terms, exactly as documented in [Indexes](/reference/eql/indexes). A query that cannot use its index falls back to a sequential scan, as it would on plaintext. +- **Caveats:** medians are single-machine and single-connection, so absolute numbers on your hardware and under concurrency will differ. One outlier is called out in the report: JSON `contains` at 10M rows uses a query recipe that materializes the full GIN bitmap before `LIMIT` (a documented plan artifact, not the operator's real cost). + +## Reproduce + +```bash +git clone https://github.com/cipherstash/benches +cd benches +mise run setup-db-v3 +mise run bench:v3:query:all 1000000 +mise run report:v3-compare +``` + +## Related + +<Cards> + <Card title="Searchable encryption" href="/concepts/searchable-encryption"> + The leakage model behind each index type: what exact, range, and match terms reveal. + </Card> + <Card title="EQL indexes" href="/reference/eql/indexes"> + The functional-index recipes these numbers depend on, and what it takes for an index to engage. + </Card> +</Cards> From 43213558924351accdff899a9a077f5256810bce Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 14 Jul 2026 18:31:41 +1000 Subject: [PATCH 069/151] fix(generator): make the TypeDoc SDK reference build against Stack 1.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The Vercel build failed in `generate-docs`. Three causes, all from the Stack 1.0 monorepo restructure: 1. Stale entry points. `secrets/`, `drizzle/`, and `supabase/` no longer exist under `packages/stack/src` (secrets removed; the two adapters moved to their own packages), so TypeDoc had nothing to read. Dropped them; kept the seven modules `@cipherstash/stack` still ships. 2. Type errors from cross-package resolution. The stack monorepo is a pnpm workspace, but the generator installs it with `bun`, which leaves references like `@cipherstash/protect-ffi`'s `ProtectError` unresolved for the isolated typecheck even though 0.29.0 exports it. Set TypeDoc's `skipErrorChecking: true` — it emits accurate signatures from the source AST regardless, which is the right posture for documenting external source we don't control. 3. Multi-version generation broke on the layout change. The module layout diverged across majors (0.18 still has the adapters/secrets; 1.0 does not), and one shared `entryPoints` config can't document both. Generate only the latest major. Also reset the working tree before each checkout, since a prior tag's `bun install` rewrites the tracked package.json and would block switching tags. Also strips the now-dead TypeDoc deep-links from the legacy Drizzle reference page (the adapter's API pages are no longer generated here) and points it at /integrations/drizzle. Verified: `generate-docs`, `validate-links`, and a full `bun run build` all pass. --- content/stack/reference/drizzle.mdx | 25 ++++++++++++------------- scripts/generate-docs.ts | 7 ++++--- scripts/lib/docs-generator.ts | 19 +++++++++++++++++-- 3 files changed, 33 insertions(+), 18 deletions(-) diff --git a/content/stack/reference/drizzle.mdx b/content/stack/reference/drizzle.mdx index c7d67bd..a19ef0f 100644 --- a/content/stack/reference/drizzle.mdx +++ b/content/stack/reference/drizzle.mdx @@ -3,18 +3,18 @@ title: Drizzle adapter reference description: Encrypted query operators, schema extraction, EQL migration generation, and API surface for @cipherstash/stack/drizzle. --- -`@cipherstash/stack/drizzle` integrates CipherStash field-level encryption with Drizzle ORM. It provides a custom column type for encrypted fields and drop-in query operators that encrypt search values before they reach PostgreSQL. This page covers the operators, batching patterns, and migration generation. The step-by-step integration guide is at [Drizzle integration guide](/stack/cipherstash/encryption/drizzle). Full type signatures live in the [auto-generated API reference](/stack/reference/stack/latest/packages/stack/src/drizzle). +`@cipherstash/stack/drizzle` integrates CipherStash field-level encryption with Drizzle ORM. It provides a custom column type for encrypted fields and drop-in query operators that encrypt search values before they reach PostgreSQL. This page covers the operators, batching patterns, and migration generation. The step-by-step integration guide is at [Drizzle integration guide](/stack/cipherstash/encryption/drizzle). Full type signatures live in the auto-generated API reference. ## Public entry points | Export | Purpose | |---|---| -| [`encryptedType`](/stack/reference/stack/latest/packages/stack/src/drizzle/functions/encryptedType) | Custom Drizzle column type for an encrypted field. Accepts a `dataType` and index config. | -| [`extractEncryptionSchema`](/stack/reference/stack/latest/packages/stack/src/drizzle/functions/extractEncryptionSchema) | Converts a Drizzle `pgTable` definition into a CipherStash `EncryptedTable` schema for the SDK. | -| [`createEncryptionOperators`](/stack/reference/stack/latest/packages/stack/src/drizzle/functions/createEncryptionOperators) | Returns an object with all Drizzle query operators wrapped for encrypted columns. | -| [`EncryptedColumnConfig`](/stack/reference/stack/latest/packages/stack/src/drizzle/type-aliases/EncryptedColumnConfig) | Type alias for the column configuration object (`dataType`, `equality`, `freeTextSearch`, `orderAndRange`, `searchableJson`). | -| [`EncryptionConfigError`](/stack/reference/stack/latest/packages/stack/src/drizzle/classes/EncryptionConfigError) | Thrown when a column lacks the index required by an operator. | -| [`EncryptionOperatorError`](/stack/reference/stack/latest/packages/stack/src/drizzle/classes/EncryptionOperatorError) | Thrown for operator-level failures (invalid arguments, unsupported operations). | +| `encryptedType` | Custom Drizzle column type for an encrypted field. Accepts a `dataType` and index config. | +| `extractEncryptionSchema` | Converts a Drizzle `pgTable` definition into a CipherStash `EncryptedTable` schema for the SDK. | +| `createEncryptionOperators` | Returns an object with all Drizzle query operators wrapped for encrypted columns. | +| `EncryptedColumnConfig` | Type alias for the column configuration object (`dataType`, `equality`, `freeTextSearch`, `orderAndRange`, `searchableJson`). | +| `EncryptionConfigError` | Thrown when a column lacks the index required by an operator. | +| `EncryptionOperatorError` | Thrown for operator-level failures (invalid arguments, unsupported operations). | ## Encrypted query operators @@ -131,10 +131,9 @@ See the [CipherStash CLI reference](/stack/cipherstash/cli) for all `db install` ## Full API surface -Everything else is in the auto-generated TypeDoc reference: +The Drizzle adapter now ships as its own package, `@cipherstash/stack-drizzle`. The EQL v3 dialect is on `@cipherstash/stack-drizzle/v3`. See the [Drizzle integration](/integrations/drizzle) for the current, EQL v3 surface: -- [Drizzle module](/stack/reference/stack/latest/packages/stack/src/drizzle) — all exports -- [`encryptedType`](/stack/reference/stack/latest/packages/stack/src/drizzle/functions/encryptedType) — column builder -- [`extractEncryptionSchema`](/stack/reference/stack/latest/packages/stack/src/drizzle/functions/extractEncryptionSchema) — schema conversion -- [`createEncryptionOperators`](/stack/reference/stack/latest/packages/stack/src/drizzle/functions/createEncryptionOperators) — operator factory -- [`EncryptedColumnConfig`](/stack/reference/stack/latest/packages/stack/src/drizzle/type-aliases/EncryptedColumnConfig) — column config type +- `encryptedType` — column builder +- `extractEncryptionSchema` — schema conversion +- `createEncryptionOperators` — operator factory +- `EncryptedColumnConfig` — column config type diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index e254677..3ba8391 100644 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -17,13 +17,14 @@ const stackConfig: DocsConfig = { repoUrl: "https://github.com/cipherstash/stack.git", tempDirName: ".tmp-stack", baseOutputDir: path.join(process.cwd(), "content/stack/reference/stack"), + // Stack 1.0 split the Drizzle and Supabase adapters into their own packages + // (@cipherstash/stack-drizzle, @cipherstash/stack-supabase) and removed the + // secrets module, so those three entry points no longer exist under + // packages/stack/src. Keep only the modules @cipherstash/stack still ships. entryPoints: [ "./packages/stack/src/encryption/index.ts", - "./packages/stack/src/secrets/index.ts", "./packages/stack/src/schema/index.ts", - "./packages/stack/src/drizzle/index.ts", "./packages/stack/src/dynamodb/index.ts", - "./packages/stack/src/supabase/index.ts", "./packages/stack/src/identity/index.ts", "./packages/stack/src/types-public.ts", "./packages/stack/src/client.ts", diff --git a/scripts/lib/docs-generator.ts b/scripts/lib/docs-generator.ts index d787979..b27c01a 100644 --- a/scripts/lib/docs-generator.ts +++ b/scripts/lib/docs-generator.ts @@ -142,9 +142,14 @@ export function getVersionsToGenerate( } } + // Only the latest major. The module layout diverged across majors — Stack 1.0 + // moved the Drizzle/Supabase adapters to their own packages and dropped + // secrets — so a single `entryPoints` config (which must match the layout it + // documents) can only correctly generate one line. The launch documents 1.0; + // older-major reference lives on the previous docs site. const majorVersions = Array.from(versionMap.keys()) .sort((a, b) => b - a) - .slice(0, 3); + .slice(0, 1); return majorVersions.map((major, index) => { const tag = versionMap.get(major); @@ -180,7 +185,11 @@ export async function generateDocsForTag( // Checkout the tag (skip if using local path) if (!localPath) { + // A prior tag's `bun install` rewrites the tracked package.json, which would + // block switching tags. Discard any working-tree changes first so the + // checkout is always clean (harmless on the first/only tag). console.log(`Checking out ${tag}...`); + execSync("git checkout -- .", { cwd: workingDir, stdio: "inherit" }); execSync(`git checkout ${tag}`, { cwd: workingDir, stdio: "inherit" }); console.log("Cleaning node_modules..."); @@ -314,7 +323,13 @@ export async function generateDocsForTag( sanitizeComments: true, fileExtension: ".mdx", entryFileName: "index", - skipErrorChecking: false, + // We document external source we don't control, installed here with a + // different package manager than the upstream monorepo uses. That can leave + // cross-package type references (e.g. @cipherstash/protect-ffi's ProtectError) + // unresolved for the isolated typecheck even though the source is correct, + // which would otherwise fail the whole build. TypeDoc still emits accurate + // signatures from the source AST, so tolerate type errors rather than block. + skipErrorChecking: true, sort: ["source-order"], kindSortOrder: [ "Interface", From 56fd18bcf54cc1ba884342d05b7f117a597e0931 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 14 Jul 2026 23:14:05 +1000 Subject: [PATCH 070/151] docs(eql): generate per-type function tables as included partials The "Functions available on this type" tables on the numbers, text, and dates-and-times reference pages were hand-maintained and had silently drifted from the EQL surface before. Generate them from the EQL manifest instead and embed them via Fumadocs' `<include>` directive, so the per-type operator-function matrix can't drift from the catalog it documents. - generate-eql-api-docs.ts emits content/partials/eql/functions-<page>.mdx from domains[].capabilities + variant, collapsing variants per capability (e.g. all `_ord` variants) and naming them concretely for single-type pages (text_eq) vs generically for type families (_eq). - Partials live outside the content collections so Fumadocs never routes them; they're included cwd-relative and committed so dev/types:check (which skip prebuild) resolve them. - Verified: output is byte-identical to the prior hand tables against the real EQL 3.0.0 manifest; full build produces no stray routes and inlines the tables into HTML, copy-markdown, and llms output. json (bespoke containment/path functions) and booleans (storage-only) are left as hand-written prose, not part of the per-type matrix. --- .../docs/reference/eql/dates-and-times.mdx | 8 +- content/docs/reference/eql/numbers.mdx | 8 +- content/docs/reference/eql/text.mdx | 9 +- .../eql/functions-dates-and-times.mdx | 9 ++ content/partials/eql/functions-numbers.mdx | 9 ++ content/partials/eql/functions-text.mdx | 10 ++ scripts/generate-eql-api-docs.ts | 132 ++++++++++++++++++ 7 files changed, 163 insertions(+), 22 deletions(-) create mode 100644 content/partials/eql/functions-dates-and-times.mdx create mode 100644 content/partials/eql/functions-numbers.mdx create mode 100644 content/partials/eql/functions-text.mdx diff --git a/content/docs/reference/eql/dates-and-times.mdx b/content/docs/reference/eql/dates-and-times.mdx index 659dce1..ef1d7f0 100644 --- a/content/docs/reference/eql/dates-and-times.mdx +++ b/content/docs/reference/eql/dates-and-times.mdx @@ -95,13 +95,7 @@ Blocked *operator* cells raise an `operator … is not supported` exception — ## Functions -Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: - -| Function | Equivalent | Available on | -| --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, all `_ord` variants | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `_ord` variants | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `_ord` variants | +<include cwd>content/partials/eql/functions-dates-and-times.mdx</include> ## Example queries diff --git a/content/docs/reference/eql/numbers.mdx b/content/docs/reference/eql/numbers.mdx index f0cdf81..2c6da9e 100644 --- a/content/docs/reference/eql/numbers.mdx +++ b/content/docs/reference/eql/numbers.mdx @@ -101,13 +101,7 @@ Blocked *operator* cells raise an `operator … is not supported` exception — ## Functions -Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: - -| Function | Equivalent | Available on | -| --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, all `_ord` variants | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `_ord` variants | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `_ord` variants | +<include cwd>content/partials/eql/functions-numbers.mdx</include> **`SUM`, `AVG`, and other arithmetic aggregates are not supported** on encrypted columns — they would require homomorphic encryption. `MIN` / `MAX` work because they only need comparison; for sums and averages, decrypt at the application boundary and aggregate client-side. diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index 810ff25..98c144d 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -101,14 +101,7 @@ Blocked *operator* cells raise an `operator … is not supported` exception — ## Functions -Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: - -| Function | Equivalent | Available on | -| --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `text_eq`, all `text_ord` variants, all `text_search` variants | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `text_ord` variants, all `text_search` variants | -| `eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)` | `@>` / `<@` | `text_match`, all `text_search` variants | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `text_ord` variants, all `text_search` variants | +<include cwd>content/partials/eql/functions-text.mdx</include> There are no `like` / `ilike` function forms — encrypted text matching is `eql_v3.contains` on a `text_match` value. diff --git a/content/partials/eql/functions-dates-and-times.mdx b/content/partials/eql/functions-dates-and-times.mdx new file mode 100644 index 0000000..8bb19bf --- /dev/null +++ b/content/partials/eql/functions-dates-and-times.mdx @@ -0,0 +1,9 @@ +{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */} + +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: + +| Function | Equivalent | Available on | +| --- | --- | --- | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, all `_ord` variants | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `_ord` variants | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `_ord` variants | diff --git a/content/partials/eql/functions-numbers.mdx b/content/partials/eql/functions-numbers.mdx new file mode 100644 index 0000000..8bb19bf --- /dev/null +++ b/content/partials/eql/functions-numbers.mdx @@ -0,0 +1,9 @@ +{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */} + +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: + +| Function | Equivalent | Available on | +| --- | --- | --- | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, all `_ord` variants | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `_ord` variants | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `_ord` variants | diff --git a/content/partials/eql/functions-text.mdx b/content/partials/eql/functions-text.mdx new file mode 100644 index 0000000..d500395 --- /dev/null +++ b/content/partials/eql/functions-text.mdx @@ -0,0 +1,10 @@ +{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */} + +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: + +| Function | Equivalent | Available on | +| --- | --- | --- | +| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `text_eq`, all `text_ord` variants, all `text_search` variants | +| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `text_ord` variants, all `text_search` variants | +| `eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)` | `@>` / `<@` | `text_match`, all `text_search` variants | +| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `text_ord` variants, all `text_search` variants | diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index 727e050..7b2ddfe 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -43,6 +43,12 @@ const MANIFEST_PATH = (fs.existsSync(RELEASE_MANIFEST) ? RELEASE_MANIFEST : SAMPLE_MANIFEST); const EQL_DIR = path.join(process.cwd(), "content/docs/reference/eql"); const OUT_FILE = path.join(EQL_DIR, "functions.mdx"); +// Per-type function fragments embedded into the hand-written type pages via +// Fumadocs' `<include>` directive. They live OUTSIDE the two content +// collections (content/docs, content/stack) so they never become routes, and +// are included cwd-relative (`<include cwd>content/partials/…`). Generated, so +// the per-type "which functions apply" tables can't drift from the manifest. +const FRAGMENT_DIR = path.join(process.cwd(), "content/partials/eql"); // Single source for the EQL version the whole reference is built against: the // release manifest's own `version`. Written here so the <EqlVersion> banner on // every EQL page reads the same release-derived value (no hardcoded constant). @@ -214,6 +220,129 @@ function render(manifest: Manifest): string { return `${body.join("\n").trimEnd()}\n`; } +// ── Per-type function fragments ────────────────────────────────────────────── +// Each hand-written type page (numbers, text, dates-and-times) carries a +// "Functions available on this type" table. Those tables are mechanical — one +// row per operator-function, and an "Available on" column listing the variants +// that expose it — so they're generated from the manifest and `<include>`d into +// the page rather than hand-maintained (where they silently drifted). +// +// json and booleans are intentionally NOT here: json's surface is containment / +// path functions (a bespoke story, not the eq/ord/min-max matrix), and booleans +// are storage-only with no query functions. +interface FragmentSpec { + page: string; + // Which manifest domain `type`s belong on this page. + match: (type: string) => boolean; + // Variant naming in the "Available on" column. A single-type page names the + // concrete domain (`text_eq`); a type-family page uses the generic suffix + // (`_eq`) that stands for the eq variant of whichever numeric/date type. + prefix: string; +} + +const FRAGMENT_SPECS: FragmentSpec[] = [ + { + page: "numbers", + prefix: "", + match: (t) => + /(^|\b)(small|big)?int|integer|numeric|decimal|real|double|float/.test(t), + }, + { page: "text", prefix: "text", match: (t) => t === "text" }, + { page: "dates-and-times", prefix: "", match: (t) => /date|time/.test(t) }, +]; + +// One row per operator-function, keyed by the domain capability that enables it. +// Order matches the hand-written tables (equality, range, containment, aggregate). +const FUNCTION_ROWS: { fns: string; equiv: string; capability: string }[] = [ + { + fns: "`eql_v3.eq(a, b)` / `eql_v3.neq(a, b)`", + equiv: "`=` / `<>`", + capability: "equality", + }, + { + fns: "`eql_v3.lt` / `lte` / `gt` / `gte`", + equiv: "`<` `<=` `>` `>=`", + capability: "order", + }, + { + fns: "`eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)`", + equiv: "`@>` / `<@`", + capability: "match", + }, + { + fns: "`eql_v3.min(col)` / `eql_v3.max(col)`", + equiv: "aggregate `MIN` / `MAX`", + capability: "order", + }, +]; + +// Collapse the variants that expose a capability into a readable "Available on" +// cell: variants sharing a base (`ord`, `ord_ope`, `ord_ore`) render as "all +// `_ord` variants"; a lone variant renders as its own token. +function availabilityCell( + domains: Domain[], + capability: string, + prefix: string, +): string { + const variants = new Set( + domains + .filter((d) => d.capabilities.includes(capability) && d.variant) + .map((d) => d.variant), + ); + const baseOf = (v: string) => + v === "eq" + ? "eq" + : v.startsWith("ord") + ? "ord" + : v.startsWith("search") + ? "search" + : v === "match" + ? "match" + : v; + const byBase = new Map<string, Set<string>>(); + for (const v of variants) { + const b = baseOf(v); + (byBase.get(b) ?? byBase.set(b, new Set()).get(b))?.add(v); + } + const parts: string[] = []; + for (const base of ["eq", "ord", "match", "search"]) { + const members = byBase.get(base); + if (!members) continue; + const token = prefix ? `${prefix}_${base}` : `_${base}`; + parts.push(members.size > 1 ? `all \`${token}\` variants` : `\`${token}\``); + } + return parts.join(", "); +} + +function renderFragment(domains: Domain[], spec: FragmentSpec): string { + const scoped = domains.filter((d) => spec.match(d.type)); + const header = `{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */}`; + const intro = + "Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions:"; + if (!scoped.length) { + return `${header}\n\n${intro}\n\n_No matching encrypted domains in this EQL manifest._\n`; + } + const rows = FUNCTION_ROWS.map((r) => ({ + ...r, + cell: availabilityCell(scoped, r.capability, spec.prefix), + })).filter((r) => r.cell); + const table = [ + "| Function | Equivalent | Available on |", + "| --- | --- | --- |", + ...rows.map((r) => `| ${r.fns} | ${r.equiv} | ${r.cell} |`), + ].join("\n"); + return `${header}\n\n${intro}\n\n${table}\n`; +} + +function writeFragments(manifest: Manifest): void { + fs.mkdirSync(FRAGMENT_DIR, { recursive: true }); + for (const spec of FRAGMENT_SPECS) { + const out = path.join(FRAGMENT_DIR, `functions-${spec.page}.mdx`); + fs.writeFileSync(out, renderFragment(manifest.domains ?? [], spec)); + console.log(`✓ Generated ${path.relative(process.cwd(), out)}`); + } +} + // ── Drift guard ────────────────────────────────────────────────────────────── // The known surface is fully schema-qualified: domains live in `public.`, // functions in `eql_v3.` (public) or `eql_v3_internal.` (private), and the @@ -285,6 +414,9 @@ function main() { fs.mkdirSync(EQL_DIR, { recursive: true }); fs.writeFileSync(OUT_FILE, render(manifest)); + // Per-type function fragments included into the hand-written type pages. + writeFragments(manifest); + // Emit the release version for the <EqlVersion> banner (shared by every EQL // reference page, hand-written and generated alike). fs.mkdirSync(path.dirname(VERSION_FILE), { recursive: true }); From 68eeb93237175178f8aa8135046db25bcc046197 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 09:32:19 +1000 Subject: [PATCH 071/151] docs(eql): per-function cards for the EQL function reference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the generated function table with a per-function layout: one card per function (lt/lte/gt/gte grouped into one), showing its operator equivalents, the domains it applies to, and a worked example. - New <EqlFn> client component renders the card, operator badges, and the applies-to domain list. The domain list shows the first two variants with a "Show all N variants" toggle, so the 24-domain numbers cases don't flood the page. Styled with Fumadocs fd-* tokens so it tracks the theme. - generate-eql-api-docs.ts emits <EqlFn> blocks into the partials, with the domain list pulled from the manifest (drift-proof). The example is passed as the code-fence child so it keeps the site's highlighting and copy button; examples are templated by capability — the one authored part. - Text ordering functions demonstrate ORDER BY (sorting is the point on text); numbers/dates keep the range form. contains/contained_by only render where a match-capable domain exists, so they're absent on numbers and dates. Verified: full build renders every card, operators, pills, and highlighted examples with no stray tags; types:check and lint pass. --- .../eql/functions-dates-and-times.mdx | 52 ++++- content/partials/eql/functions-numbers.mdx | 52 ++++- content/partials/eql/functions-text.mdx | 74 ++++++- scripts/generate-eql-api-docs.ts | 201 +++++++++++------- src/components/eql-fn.tsx | 107 ++++++++++ src/mdx-components.tsx | 2 + 6 files changed, 395 insertions(+), 93 deletions(-) create mode 100644 src/components/eql-fn.tsx diff --git a/content/partials/eql/functions-dates-and-times.mdx b/content/partials/eql/functions-dates-and-times.mdx index 8bb19bf..d56fdff 100644 --- a/content/partials/eql/functions-dates-and-times.mdx +++ b/content/partials/eql/functions-dates-and-times.mdx @@ -1,9 +1,49 @@ {/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */} -Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -| Function | Equivalent | Available on | -| --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, all `_ord` variants | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `_ord` variants | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `_ord` variants | +<EqlFn name="eql_v3.eq(a, b)" ops="=" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> + +```sql +SELECT * FROM events +WHERE eql_v3.eq(occurred_at, $1::public.eql_v3_timestamp_eq); +``` + +</EqlFn> + +<EqlFn name="eql_v3.neq(a, b)" ops="<>" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> + +```sql +SELECT * FROM events +WHERE eql_v3.neq(occurred_at, $1::public.eql_v3_timestamp_eq); +``` + +</EqlFn> + +<EqlFn name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" grouped domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> + +```sql +-- a range uses two of the four +SELECT * FROM events +WHERE eql_v3.gte(occurred_at, $1::public.eql_v3_timestamp_ord) + AND eql_v3.lt(occurred_at, $2::public.eql_v3_timestamp_ord); +``` + +</EqlFn> + +<EqlFn name="eql_v3.min(col)" ops="MIN" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> + +```sql +-- compares ordering terms; result decrypts client-side +SELECT eql_v3.min(occurred_at) FROM events; +``` + +</EqlFn> + +<EqlFn name="eql_v3.max(col)" ops="MAX" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> + +```sql +SELECT eql_v3.max(occurred_at) FROM events; +``` + +</EqlFn> diff --git a/content/partials/eql/functions-numbers.mdx b/content/partials/eql/functions-numbers.mdx index 8bb19bf..c6affda 100644 --- a/content/partials/eql/functions-numbers.mdx +++ b/content/partials/eql/functions-numbers.mdx @@ -1,9 +1,49 @@ {/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */} -Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -| Function | Equivalent | Available on | -| --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `_eq`, all `_ord` variants | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `_ord` variants | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `_ord` variants | +<EqlFn name="eql_v3.eq(a, b)" ops="=" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> + +```sql +SELECT * FROM payments +WHERE eql_v3.eq(amount, $1::public.eql_v3_bigint_eq); +``` + +</EqlFn> + +<EqlFn name="eql_v3.neq(a, b)" ops="<>" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> + +```sql +SELECT * FROM payments +WHERE eql_v3.neq(amount, $1::public.eql_v3_bigint_eq); +``` + +</EqlFn> + +<EqlFn name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" grouped domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> + +```sql +-- a range uses two of the four +SELECT * FROM payments +WHERE eql_v3.gte(amount, $1::public.eql_v3_bigint_ord) + AND eql_v3.lt(amount, $2::public.eql_v3_bigint_ord); +``` + +</EqlFn> + +<EqlFn name="eql_v3.min(col)" ops="MIN" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> + +```sql +-- compares ordering terms; result decrypts client-side +SELECT eql_v3.min(amount) FROM payments; +``` + +</EqlFn> + +<EqlFn name="eql_v3.max(col)" ops="MAX" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> + +```sql +SELECT eql_v3.max(amount) FROM payments; +``` + +</EqlFn> diff --git a/content/partials/eql/functions-text.mdx b/content/partials/eql/functions-text.mdx index d500395..c5439d8 100644 --- a/content/partials/eql/functions-text.mdx +++ b/content/partials/eql/functions-text.mdx @@ -1,10 +1,68 @@ {/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */} -Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions: - -| Function | Equivalent | Available on | -| --- | --- | --- | -| `eql_v3.eq(a, b)` / `eql_v3.neq(a, b)` | `=` / `<>` | `text_eq`, all `text_ord` variants, all `text_search` variants | -| `eql_v3.lt` / `lte` / `gt` / `gte` | `<` `<=` `>` `>=` | all `text_ord` variants, all `text_search` variants | -| `eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)` | `@>` / `<@` | `text_match`, all `text_search` variants | -| `eql_v3.min(col)` / `eql_v3.max(col)` | aggregate `MIN` / `MAX` | all `text_ord` variants, all `text_search` variants | +Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. + +<EqlFn name="eql_v3.eq(a, b)" ops="=" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> + +```sql +SELECT * FROM users +WHERE eql_v3.eq(email, $1::public.eql_v3_text_eq); +``` + +</EqlFn> + +<EqlFn name="eql_v3.neq(a, b)" ops="<>" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> + +```sql +SELECT * FROM users +WHERE eql_v3.neq(email, $1::public.eql_v3_text_eq); +``` + +</EqlFn> + +<EqlFn name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" grouped domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> + +```sql +-- any of the four; ordering is the usual reason to index text +SELECT id, email FROM users +WHERE eql_v3.gt(email, $1::public.eql_v3_text_ord) +ORDER BY eql_v3.ord_term(email); +``` + +</EqlFn> + +<EqlFn name="eql_v3.contains(a, b)" ops="@>" domains="text_match,text_search,text_search_ore"> + +```sql +-- token containment on the bloom-filter term +SELECT * FROM users +WHERE eql_v3.contains(email, $1::public.eql_v3_text_match); +``` + +</EqlFn> + +<EqlFn name="eql_v3.contained_by(a, b)" ops="<@" domains="text_match,text_search,text_search_ore"> + +```sql +SELECT * FROM users +WHERE eql_v3.contained_by(email, $1::public.eql_v3_text_match); +``` + +</EqlFn> + +<EqlFn name="eql_v3.min(col)" ops="MIN" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> + +```sql +-- compares ordering terms; result decrypts client-side +SELECT eql_v3.min(email) FROM users; +``` + +</EqlFn> + +<EqlFn name="eql_v3.max(col)" ops="MAX" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> + +```sql +SELECT eql_v3.max(email) FROM users; +``` + +</EqlFn> diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index 7b2ddfe..e1d7f4b 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -222,116 +222,171 @@ function render(manifest: Manifest): string { // ── Per-type function fragments ────────────────────────────────────────────── // Each hand-written type page (numbers, text, dates-and-times) carries a -// "Functions available on this type" table. Those tables are mechanical — one -// row per operator-function, and an "Available on" column listing the variants -// that expose it — so they're generated from the manifest and `<include>`d into -// the page rather than hand-maintained (where they silently drifted). +// per-function reference: one card per EQL function, listing its operator +// equivalents, the domains it applies to, and a worked example. These are +// generated from the manifest and `<include>`d into the page (via the `<EqlFn>` +// component) rather than hand-maintained, where the domain lists silently +// drifted. The example is the one authored part — templated by capability, not +// pulled from the manifest — and the domain list, the drift-prone part, is not. // // json and booleans are intentionally NOT here: json's surface is containment / -// path functions (a bespoke story, not the eq/ord/min-max matrix), and booleans +// path functions (a bespoke story, not the eq/ord/min-max set), and booleans // are storage-only with no query functions. interface FragmentSpec { page: string; // Which manifest domain `type`s belong on this page. match: (type: string) => boolean; - // Variant naming in the "Available on" column. A single-type page names the - // concrete domain (`text_eq`); a type-family page uses the generic suffix - // (`_eq`) that stands for the eq variant of whichever numeric/date type. - prefix: string; + // Illustrative context for the generated examples. + table: string; + col: string; + // Representative concrete type the example casts to, e.g. `bigint` → + // `public.eql_v3_bigint_ord`. One of the page's family, for a realistic cast. + castType: string; + // On text, ranges are unusual and sorting is the point, so the comparison + // example demonstrates ORDER BY. Elsewhere a range filter reads best. + orderByExample: boolean; } const FRAGMENT_SPECS: FragmentSpec[] = [ { page: "numbers", - prefix: "", match: (t) => /(^|\b)(small|big)?int|integer|numeric|decimal|real|double|float/.test(t), + table: "payments", + col: "amount", + castType: "bigint", + orderByExample: false, + }, + { + page: "text", + match: (t) => t === "text", + table: "users", + col: "email", + castType: "text", + orderByExample: true, + }, + { + page: "dates-and-times", + match: (t) => /date|time/.test(t), + table: "events", + col: "occurred_at", + castType: "timestamp", + orderByExample: false, }, - { page: "text", prefix: "text", match: (t) => t === "text" }, - { page: "dates-and-times", prefix: "", match: (t) => /date|time/.test(t) }, ]; -// One row per operator-function, keyed by the domain capability that enables it. -// Order matches the hand-written tables (equality, range, containment, aggregate). -const FUNCTION_ROWS: { fns: string; equiv: string; capability: string }[] = [ +// The EQL function set, in reading order. `cap` is the domain capability that +// exposes the function, so a function only renders when the page has a domain +// with that capability. `lt`/`lte`/`gt`/`gte` are one grouped card: same +// capability, same domains, same example shape. +interface FuncDef { + kind: string; + name: string; + ops: string[]; + cap: string; + agg?: boolean; + grouped?: boolean; +} +const FUNCS: FuncDef[] = [ + { kind: "eq", name: "eql_v3.eq(a, b)", ops: ["="], cap: "equality" }, + { kind: "neq", name: "eql_v3.neq(a, b)", ops: ["<>"], cap: "equality" }, + { + kind: "cmp", + name: "eql_v3.lt / lte / gt / gte", + ops: ["<", "<=", ">", ">="], + cap: "order", + grouped: true, + }, { - fns: "`eql_v3.eq(a, b)` / `eql_v3.neq(a, b)`", - equiv: "`=` / `<>`", - capability: "equality", + kind: "contains", + name: "eql_v3.contains(a, b)", + ops: ["@>"], + cap: "match", }, { - fns: "`eql_v3.lt` / `lte` / `gt` / `gte`", - equiv: "`<` `<=` `>` `>=`", - capability: "order", + kind: "contained_by", + name: "eql_v3.contained_by(a, b)", + ops: ["<@"], + cap: "match", }, { - fns: "`eql_v3.contains(a, b)` / `eql_v3.contained_by(a, b)`", - equiv: "`@>` / `<@`", - capability: "match", + kind: "min", + name: "eql_v3.min(col)", + ops: ["MIN"], + cap: "order", + agg: true, }, { - fns: "`eql_v3.min(col)` / `eql_v3.max(col)`", - equiv: "aggregate `MIN` / `MAX`", - capability: "order", + kind: "max", + name: "eql_v3.max(col)", + ops: ["MAX"], + cap: "order", + agg: true, }, ]; -// Collapse the variants that expose a capability into a readable "Available on" -// cell: variants sharing a base (`ord`, `ord_ope`, `ord_ore`) render as "all -// `_ord` variants"; a lone variant renders as its own token. -function availabilityCell( - domains: Domain[], - capability: string, - prefix: string, -): string { - const variants = new Set( - domains - .filter((d) => d.capabilities.includes(capability) && d.variant) - .map((d) => d.variant), - ); - const baseOf = (v: string) => - v === "eq" - ? "eq" - : v.startsWith("ord") - ? "ord" - : v.startsWith("search") - ? "search" - : v === "match" - ? "match" - : v; - const byBase = new Map<string, Set<string>>(); - for (const v of variants) { - const b = baseOf(v); - (byBase.get(b) ?? byBase.set(b, new Set()).get(b))?.add(v); - } - const parts: string[] = []; - for (const base of ["eq", "ord", "match", "search"]) { - const members = byBase.get(base); - if (!members) continue; - const token = prefix ? `${prefix}_${base}` : `_${base}`; - parts.push(members.size > 1 ? `all \`${token}\` variants` : `\`${token}\``); +// `public.eql_v3_text_eq` → `text_eq`. +const shortDomain = (name: string) => name.replace(/^public\.(eql_v3_)?/, ""); + +// The example for one function, templated from the page's illustrative context. +// The `::public.eql_v3_<type>_<variant>` casts use real domain names, so they +// stay correct; the table and column names are illustrative. +function exampleFor(kind: string, spec: FragmentSpec): string { + const { table, col, castType } = spec; + const dom = (variant: string) => `public.eql_v3_${castType}_${variant}`; + switch (kind) { + case "eq": + return `SELECT * FROM ${table}\nWHERE eql_v3.eq(${col}, $1::${dom("eq")});`; + case "neq": + return `SELECT * FROM ${table}\nWHERE eql_v3.neq(${col}, $1::${dom("eq")});`; + case "cmp": + return spec.orderByExample + ? `-- any of the four; ordering is the usual reason to index text\nSELECT id, ${col} FROM ${table}\nWHERE eql_v3.gt(${col}, $1::${dom("ord")})\nORDER BY eql_v3.ord_term(${col});` + : `-- a range uses two of the four\nSELECT * FROM ${table}\nWHERE eql_v3.gte(${col}, $1::${dom("ord")})\n AND eql_v3.lt(${col}, $2::${dom("ord")});`; + case "contains": + return `-- token containment on the bloom-filter term\nSELECT * FROM ${table}\nWHERE eql_v3.contains(${col}, $1::${dom("match")});`; + case "contained_by": + return `SELECT * FROM ${table}\nWHERE eql_v3.contained_by(${col}, $1::${dom("match")});`; + case "min": + return `-- compares ordering terms; result decrypts client-side\nSELECT eql_v3.min(${col}) FROM ${table};`; + case "max": + return `SELECT eql_v3.max(${col}) FROM ${table};`; + default: + return ""; } - return parts.join(", "); } function renderFragment(domains: Domain[], spec: FragmentSpec): string { const scoped = domains.filter((d) => spec.match(d.type)); const header = `{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */}`; const intro = - "Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. The `MIN` / `MAX` aggregates only exist as functions:"; + "Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions."; if (!scoped.length) { return `${header}\n\n${intro}\n\n_No matching encrypted domains in this EQL manifest._\n`; } - const rows = FUNCTION_ROWS.map((r) => ({ - ...r, - cell: availabilityCell(scoped, r.capability, spec.prefix), - })).filter((r) => r.cell); - const table = [ - "| Function | Equivalent | Available on |", - "| --- | --- | --- |", - ...rows.map((r) => `| ${r.fns} | ${r.equiv} | ${r.cell} |`), - ].join("\n"); - return `${header}\n\n${intro}\n\n${table}\n`; + + const blocks: string[] = []; + for (const fn of FUNCS) { + const applies = scoped + .filter((d) => d.capabilities.includes(fn.cap) && d.variant) + .map((d) => shortDomain(d.name)); + if (!applies.length) continue; + const attrs = [ + `name="${fn.name}"`, + `ops="${fn.ops.join(",")}"`, + fn.agg ? "agg" : "", + fn.grouped ? "grouped" : "", + `domains="${applies.join(",")}"`, + ] + .filter(Boolean) + .join(" "); + const example = exampleFor(fn.kind, spec); + blocks.push( + `<EqlFn ${attrs}>\n\n\`\`\`sql\n${example}\n\`\`\`\n\n</EqlFn>`, + ); + } + + return `${header}\n\n${intro}\n\n${blocks.join("\n\n")}\n`; } function writeFragments(manifest: Manifest): void { diff --git a/src/components/eql-fn.tsx b/src/components/eql-fn.tsx new file mode 100644 index 0000000..83b3d3c --- /dev/null +++ b/src/components/eql-fn.tsx @@ -0,0 +1,107 @@ +"use client"; + +import { useState } from "react"; + +interface EqlFnProps { + /** Function name or grouped signature, e.g. `eql_v3.eq(a, b)`. */ + name: string; + /** Comma-separated operator equivalents, e.g. `<,<=,>,>=`. */ + ops: string; + /** Comma-separated short domain names the function applies to. */ + domains?: string; + /** Aggregate function (MIN/MAX): renders an "aggregate" tag, no operator. */ + agg?: boolean; + /** One card standing in for several related functions (the comparison set). */ + grouped?: boolean; + /** How many domains to show before the "Show all" toggle. */ + initial?: number; + /** The example code block. */ + children: React.ReactNode; +} + +/** + * One entry in a generated EQL function reference (see the fragments under + * content/partials/eql, produced by scripts/generate-eql-api-docs.ts). + * + * Renders the function signature, its operator equivalents, and the domains it + * applies to as a card. The domain list is the drift-prone part, so it comes + * from the manifest via the `domains` prop; only the first few show, with the + * rest behind a reader-controlled toggle. The example is passed as children so + * it keeps the site's normal syntax highlighting and copy button. + */ +export function EqlFn({ + name, + ops, + domains, + agg, + grouped, + initial = 2, + children, +}: EqlFnProps) { + const opList = ops.split(",").filter(Boolean); + const domainList = domains ? domains.split(",").filter(Boolean) : []; + const [expanded, setExpanded] = useState(false); + const hidden = Math.max(0, domainList.length - initial); + const visible = expanded ? domainList : domainList.slice(0, initial); + + return ( + <div + className={`my-4 rounded-lg border p-4 ${ + grouped + ? "border-fd-primary/40 bg-fd-primary/5" + : "border-fd-border bg-fd-card" + }`} + > + <div className="flex flex-wrap items-center gap-x-3 gap-y-2"> + <span className="font-mono text-[0.95rem] font-semibold text-fd-primary"> + {name} + </span> + <span className="ml-auto flex flex-wrap gap-1.5"> + {agg ? ( + <span className="rounded-md border border-fd-border px-2 py-0.5 text-xs font-medium text-fd-muted-foreground"> + aggregate + </span> + ) : null} + {opList.map((op) => ( + <span + key={op} + className="rounded-md border border-fd-primary/30 bg-fd-primary/10 px-2 py-0.5 font-mono text-sm font-semibold text-fd-primary" + > + {op} + </span> + ))} + </span> + </div> + + {domainList.length > 0 ? ( + <div className="mt-3 flex flex-wrap items-center gap-1.5"> + <span className="mr-1 text-[11px] font-semibold uppercase tracking-wide text-fd-muted-foreground"> + On + </span> + {visible.map((d) => ( + <span + key={d} + className="rounded-md border border-fd-border bg-fd-secondary px-2 py-0.5 font-mono text-xs" + > + {d} + </span> + ))} + {hidden > 0 ? ( + <button + type="button" + onClick={() => setExpanded((v) => !v)} + aria-expanded={expanded} + className="rounded-md px-1.5 py-0.5 text-xs font-medium text-fd-primary hover:bg-fd-primary/10 focus-visible:outline-2 focus-visible:outline-fd-primary" + > + {expanded + ? "Show fewer" + : `Show all ${domainList.length} variants`} + </button> + ) : null} + </div> + ) : null} + + <div className="mt-3 [&>*]:!my-0">{children}</div> + </div> + ); +} diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index f05ae7c..17e7aa1 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -3,6 +3,7 @@ import { Step, Steps } from "fumadocs-ui/components/steps"; import defaultMdxComponents from "fumadocs-ui/mdx"; import type { MDXComponents } from "mdx/types"; import { TrackedCodeBlock } from "@/components/code-block"; +import { EqlFn } from "@/components/eql-fn"; import { EqlVersion } from "@/components/eql-version"; import { ZeroKmsRegions } from "@/components/zerokms-regions"; @@ -16,6 +17,7 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents { Steps, Step, EqlVersion, + EqlFn, ZeroKmsRegions, ...components, }; From 47a2cf70795039f3869fb602b5135c198480d32e Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 09:41:43 +1000 Subject: [PATCH 072/151] docs(eql): drop per-card examples, add deep-link anchors, flatten cards MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Remove the worked example from each function card; each page's own "Example queries" section already covers examples, so the per-card ones only duplicated them. <EqlFn> no longer takes children. - Add a stable anchor id per function (fn-eq, fn-comparison, …) with a hover link affordance, so individual functions are deep-linkable. - Drop the accent border/tint on the grouped comparison card; every card now uses the same neutral card styling. --- .../eql/functions-dates-and-times.mdx | 46 +-------- content/partials/eql/functions-numbers.mdx | 46 +-------- content/partials/eql/functions-text.mdx | 65 ++---------- scripts/generate-eql-api-docs.ts | 98 ++++--------------- src/components/eql-fn.tsx | 38 +++---- 5 files changed, 55 insertions(+), 238 deletions(-) diff --git a/content/partials/eql/functions-dates-and-times.mdx b/content/partials/eql/functions-dates-and-times.mdx index d56fdff..b61d70f 100644 --- a/content/partials/eql/functions-dates-and-times.mdx +++ b/content/partials/eql/functions-dates-and-times.mdx @@ -2,48 +2,12 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn name="eql_v3.eq(a, b)" ops="=" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> +<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> -```sql -SELECT * FROM events -WHERE eql_v3.eq(occurred_at, $1::public.eql_v3_timestamp_eq); -``` +<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> -</EqlFn> +<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> -<EqlFn name="eql_v3.neq(a, b)" ops="<>" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> +<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> -```sql -SELECT * FROM events -WHERE eql_v3.neq(occurred_at, $1::public.eql_v3_timestamp_eq); -``` - -</EqlFn> - -<EqlFn name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" grouped domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> - -```sql --- a range uses two of the four -SELECT * FROM events -WHERE eql_v3.gte(occurred_at, $1::public.eql_v3_timestamp_ord) - AND eql_v3.lt(occurred_at, $2::public.eql_v3_timestamp_ord); -``` - -</EqlFn> - -<EqlFn name="eql_v3.min(col)" ops="MIN" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> - -```sql --- compares ordering terms; result decrypts client-side -SELECT eql_v3.min(occurred_at) FROM events; -``` - -</EqlFn> - -<EqlFn name="eql_v3.max(col)" ops="MAX" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> - -```sql -SELECT eql_v3.max(occurred_at) FROM events; -``` - -</EqlFn> +<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> diff --git a/content/partials/eql/functions-numbers.mdx b/content/partials/eql/functions-numbers.mdx index c6affda..870cbc4 100644 --- a/content/partials/eql/functions-numbers.mdx +++ b/content/partials/eql/functions-numbers.mdx @@ -2,48 +2,12 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn name="eql_v3.eq(a, b)" ops="=" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> +<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> -```sql -SELECT * FROM payments -WHERE eql_v3.eq(amount, $1::public.eql_v3_bigint_eq); -``` +<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> -</EqlFn> +<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> -<EqlFn name="eql_v3.neq(a, b)" ops="<>" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> +<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> -```sql -SELECT * FROM payments -WHERE eql_v3.neq(amount, $1::public.eql_v3_bigint_eq); -``` - -</EqlFn> - -<EqlFn name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" grouped domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> - -```sql --- a range uses two of the four -SELECT * FROM payments -WHERE eql_v3.gte(amount, $1::public.eql_v3_bigint_ord) - AND eql_v3.lt(amount, $2::public.eql_v3_bigint_ord); -``` - -</EqlFn> - -<EqlFn name="eql_v3.min(col)" ops="MIN" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> - -```sql --- compares ordering terms; result decrypts client-side -SELECT eql_v3.min(amount) FROM payments; -``` - -</EqlFn> - -<EqlFn name="eql_v3.max(col)" ops="MAX" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> - -```sql -SELECT eql_v3.max(amount) FROM payments; -``` - -</EqlFn> +<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> diff --git a/content/partials/eql/functions-text.mdx b/content/partials/eql/functions-text.mdx index c5439d8..894c740 100644 --- a/content/partials/eql/functions-text.mdx +++ b/content/partials/eql/functions-text.mdx @@ -2,67 +2,16 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn name="eql_v3.eq(a, b)" ops="=" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> +<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> -```sql -SELECT * FROM users -WHERE eql_v3.eq(email, $1::public.eql_v3_text_eq); -``` +<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> -</EqlFn> +<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> -<EqlFn name="eql_v3.neq(a, b)" ops="<>" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> +<EqlFn id="fn-contains" name="eql_v3.contains(a, b)" ops="@>" domains="text_match,text_search,text_search_ore" /> -```sql -SELECT * FROM users -WHERE eql_v3.neq(email, $1::public.eql_v3_text_eq); -``` +<EqlFn id="fn-contained_by" name="eql_v3.contained_by(a, b)" ops="<@" domains="text_match,text_search,text_search_ore" /> -</EqlFn> +<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> -<EqlFn name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" grouped domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> - -```sql --- any of the four; ordering is the usual reason to index text -SELECT id, email FROM users -WHERE eql_v3.gt(email, $1::public.eql_v3_text_ord) -ORDER BY eql_v3.ord_term(email); -``` - -</EqlFn> - -<EqlFn name="eql_v3.contains(a, b)" ops="@>" domains="text_match,text_search,text_search_ore"> - -```sql --- token containment on the bloom-filter term -SELECT * FROM users -WHERE eql_v3.contains(email, $1::public.eql_v3_text_match); -``` - -</EqlFn> - -<EqlFn name="eql_v3.contained_by(a, b)" ops="<@" domains="text_match,text_search,text_search_ore"> - -```sql -SELECT * FROM users -WHERE eql_v3.contained_by(email, $1::public.eql_v3_text_match); -``` - -</EqlFn> - -<EqlFn name="eql_v3.min(col)" ops="MIN" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> - -```sql --- compares ordering terms; result decrypts client-side -SELECT eql_v3.min(email) FROM users; -``` - -</EqlFn> - -<EqlFn name="eql_v3.max(col)" ops="MAX" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> - -```sql -SELECT eql_v3.max(email) FROM users; -``` - -</EqlFn> +<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index e1d7f4b..addd7c7 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -223,11 +223,11 @@ function render(manifest: Manifest): string { // ── Per-type function fragments ────────────────────────────────────────────── // Each hand-written type page (numbers, text, dates-and-times) carries a // per-function reference: one card per EQL function, listing its operator -// equivalents, the domains it applies to, and a worked example. These are -// generated from the manifest and `<include>`d into the page (via the `<EqlFn>` -// component) rather than hand-maintained, where the domain lists silently -// drifted. The example is the one authored part — templated by capability, not -// pulled from the manifest — and the domain list, the drift-prone part, is not. +// equivalents and the domains it applies to. These are generated from the +// manifest and `<include>`d into the page (via the `<EqlFn>` component) rather +// than hand-maintained, where the domain lists silently drifted. Worked +// examples are NOT here — each page's own "Example queries" section covers +// those, so a per-card example would only duplicate them. // // json and booleans are intentionally NOT here: json's surface is containment / // path functions (a bespoke story, not the eq/ord/min-max set), and booleans @@ -236,15 +236,6 @@ interface FragmentSpec { page: string; // Which manifest domain `type`s belong on this page. match: (type: string) => boolean; - // Illustrative context for the generated examples. - table: string; - col: string; - // Representative concrete type the example casts to, e.g. `bigint` → - // `public.eql_v3_bigint_ord`. One of the page's family, for a realistic cast. - castType: string; - // On text, ranges are unusual and sorting is the point, so the comparison - // example demonstrates ORDER BY. Elsewhere a range filter reads best. - orderByExample: boolean; } const FRAGMENT_SPECS: FragmentSpec[] = [ @@ -252,72 +243,52 @@ const FRAGMENT_SPECS: FragmentSpec[] = [ page: "numbers", match: (t) => /(^|\b)(small|big)?int|integer|numeric|decimal|real|double|float/.test(t), - table: "payments", - col: "amount", - castType: "bigint", - orderByExample: false, - }, - { - page: "text", - match: (t) => t === "text", - table: "users", - col: "email", - castType: "text", - orderByExample: true, - }, - { - page: "dates-and-times", - match: (t) => /date|time/.test(t), - table: "events", - col: "occurred_at", - castType: "timestamp", - orderByExample: false, }, + { page: "text", match: (t) => t === "text" }, + { page: "dates-and-times", match: (t) => /date|time/.test(t) }, ]; // The EQL function set, in reading order. `cap` is the domain capability that // exposes the function, so a function only renders when the page has a domain -// with that capability. `lt`/`lte`/`gt`/`gte` are one grouped card: same -// capability, same domains, same example shape. +// with that capability. `lt`/`lte`/`gt`/`gte` are one card: same capability, +// same domains. `id` is the deep-link anchor. interface FuncDef { - kind: string; + id: string; name: string; ops: string[]; cap: string; agg?: boolean; - grouped?: boolean; } const FUNCS: FuncDef[] = [ - { kind: "eq", name: "eql_v3.eq(a, b)", ops: ["="], cap: "equality" }, - { kind: "neq", name: "eql_v3.neq(a, b)", ops: ["<>"], cap: "equality" }, + { id: "fn-eq", name: "eql_v3.eq(a, b)", ops: ["="], cap: "equality" }, + { id: "fn-neq", name: "eql_v3.neq(a, b)", ops: ["<>"], cap: "equality" }, { - kind: "cmp", + id: "fn-comparison", name: "eql_v3.lt / lte / gt / gte", ops: ["<", "<=", ">", ">="], cap: "order", - grouped: true, }, { - kind: "contains", + id: "fn-contains", name: "eql_v3.contains(a, b)", ops: ["@>"], cap: "match", }, { - kind: "contained_by", + id: "fn-contained_by", name: "eql_v3.contained_by(a, b)", ops: ["<@"], cap: "match", }, { - kind: "min", + id: "fn-min", name: "eql_v3.min(col)", ops: ["MIN"], cap: "order", agg: true, }, { - kind: "max", + id: "fn-max", name: "eql_v3.max(col)", ops: ["MAX"], cap: "order", @@ -328,34 +299,6 @@ const FUNCS: FuncDef[] = [ // `public.eql_v3_text_eq` → `text_eq`. const shortDomain = (name: string) => name.replace(/^public\.(eql_v3_)?/, ""); -// The example for one function, templated from the page's illustrative context. -// The `::public.eql_v3_<type>_<variant>` casts use real domain names, so they -// stay correct; the table and column names are illustrative. -function exampleFor(kind: string, spec: FragmentSpec): string { - const { table, col, castType } = spec; - const dom = (variant: string) => `public.eql_v3_${castType}_${variant}`; - switch (kind) { - case "eq": - return `SELECT * FROM ${table}\nWHERE eql_v3.eq(${col}, $1::${dom("eq")});`; - case "neq": - return `SELECT * FROM ${table}\nWHERE eql_v3.neq(${col}, $1::${dom("eq")});`; - case "cmp": - return spec.orderByExample - ? `-- any of the four; ordering is the usual reason to index text\nSELECT id, ${col} FROM ${table}\nWHERE eql_v3.gt(${col}, $1::${dom("ord")})\nORDER BY eql_v3.ord_term(${col});` - : `-- a range uses two of the four\nSELECT * FROM ${table}\nWHERE eql_v3.gte(${col}, $1::${dom("ord")})\n AND eql_v3.lt(${col}, $2::${dom("ord")});`; - case "contains": - return `-- token containment on the bloom-filter term\nSELECT * FROM ${table}\nWHERE eql_v3.contains(${col}, $1::${dom("match")});`; - case "contained_by": - return `SELECT * FROM ${table}\nWHERE eql_v3.contained_by(${col}, $1::${dom("match")});`; - case "min": - return `-- compares ordering terms; result decrypts client-side\nSELECT eql_v3.min(${col}) FROM ${table};`; - case "max": - return `SELECT eql_v3.max(${col}) FROM ${table};`; - default: - return ""; - } -} - function renderFragment(domains: Domain[], spec: FragmentSpec): string { const scoped = domains.filter((d) => spec.match(d.type)); const header = `{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */}`; @@ -372,18 +315,15 @@ function renderFragment(domains: Domain[], spec: FragmentSpec): string { .map((d) => shortDomain(d.name)); if (!applies.length) continue; const attrs = [ + `id="${fn.id}"`, `name="${fn.name}"`, `ops="${fn.ops.join(",")}"`, fn.agg ? "agg" : "", - fn.grouped ? "grouped" : "", `domains="${applies.join(",")}"`, ] .filter(Boolean) .join(" "); - const example = exampleFor(fn.kind, spec); - blocks.push( - `<EqlFn ${attrs}>\n\n\`\`\`sql\n${example}\n\`\`\`\n\n</EqlFn>`, - ); + blocks.push(`<EqlFn ${attrs} />`); } return `${header}\n\n${intro}\n\n${blocks.join("\n\n")}\n`; diff --git a/src/components/eql-fn.tsx b/src/components/eql-fn.tsx index 83b3d3c..d1d7d11 100644 --- a/src/components/eql-fn.tsx +++ b/src/components/eql-fn.tsx @@ -1,22 +1,21 @@ "use client"; +import { Link2 } from "lucide-react"; import { useState } from "react"; interface EqlFnProps { /** Function name or grouped signature, e.g. `eql_v3.eq(a, b)`. */ name: string; + /** Stable anchor id for deep linking, e.g. `fn-eq`. */ + id: string; /** Comma-separated operator equivalents, e.g. `<,<=,>,>=`. */ ops: string; /** Comma-separated short domain names the function applies to. */ domains?: string; /** Aggregate function (MIN/MAX): renders an "aggregate" tag, no operator. */ agg?: boolean; - /** One card standing in for several related functions (the comparison set). */ - grouped?: boolean; /** How many domains to show before the "Show all" toggle. */ initial?: number; - /** The example code block. */ - children: React.ReactNode; } /** @@ -24,19 +23,18 @@ interface EqlFnProps { * content/partials/eql, produced by scripts/generate-eql-api-docs.ts). * * Renders the function signature, its operator equivalents, and the domains it - * applies to as a card. The domain list is the drift-prone part, so it comes - * from the manifest via the `domains` prop; only the first few show, with the - * rest behind a reader-controlled toggle. The example is passed as children so - * it keeps the site's normal syntax highlighting and copy button. + * applies to. The domain list is the drift-prone part, so it comes from the + * manifest via the `domains` prop; only the first few show, with the rest + * behind a reader-controlled toggle. Worked examples live in each page's own + * "Example queries" section, not here. */ export function EqlFn({ name, + id, ops, domains, agg, - grouped, initial = 2, - children, }: EqlFnProps) { const opList = ops.split(",").filter(Boolean); const domainList = domains ? domains.split(",").filter(Boolean) : []; @@ -46,16 +44,20 @@ export function EqlFn({ return ( <div - className={`my-4 rounded-lg border p-4 ${ - grouped - ? "border-fd-primary/40 bg-fd-primary/5" - : "border-fd-border bg-fd-card" - }`} + id={id} + className="my-4 scroll-mt-24 rounded-lg border border-fd-border bg-fd-card p-4" > <div className="flex flex-wrap items-center gap-x-3 gap-y-2"> - <span className="font-mono text-[0.95rem] font-semibold text-fd-primary"> + <a + href={`#${id}`} + className="group/anchor inline-flex items-center gap-2 font-mono text-[0.95rem] font-semibold text-fd-primary no-underline" + > {name} - </span> + <Link2 + aria-hidden + className="size-3.5 opacity-0 transition-opacity group-hover/anchor:opacity-60" + /> + </a> <span className="ml-auto flex flex-wrap gap-1.5"> {agg ? ( <span className="rounded-md border border-fd-border px-2 py-0.5 text-xs font-medium text-fd-muted-foreground"> @@ -100,8 +102,6 @@ export function EqlFn({ ) : null} </div> ) : null} - - <div className="mt-3 [&>*]:!my-0">{children}</div> </div> ); } From b1f5b162088e2ae67d67d6d104471658ec6e900e Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 09:50:11 +1000 Subject: [PATCH 073/151] docs(eql): keep examples in the function cards, drop the page Examples section MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correcting the previous commit, which removed the examples from the wrong place. The per-function example belongs in each card; it's the page-level "## Example queries" section that was redundant with them. - Restore the worked example inside <EqlFn> (passed as children, so it keeps the site's highlighting and copy button); the generator templates it by capability again. - Remove the "## Example queries" section from the text, numbers, and dates-and-times pages — the per-function cards now carry the examples. --- .../docs/reference/eql/dates-and-times.mdx | 36 --------- content/docs/reference/eql/numbers.mdx | 39 ---------- content/docs/reference/eql/text.mdx | 52 ------------- .../eql/functions-dates-and-times.mdx | 46 ++++++++++-- content/partials/eql/functions-numbers.mdx | 46 ++++++++++-- content/partials/eql/functions-text.mdx | 65 ++++++++++++++-- scripts/generate-eql-api-docs.ts | 74 +++++++++++++++++-- src/components/eql-fn.tsx | 15 ++-- 8 files changed, 216 insertions(+), 157 deletions(-) diff --git a/content/docs/reference/eql/dates-and-times.mdx b/content/docs/reference/eql/dates-and-times.mdx index ef1d7f0..c8ffebf 100644 --- a/content/docs/reference/eql/dates-and-times.mdx +++ b/content/docs/reference/eql/dates-and-times.mdx @@ -97,42 +97,6 @@ Blocked *operator* cells raise an `operator … is not supported` exception — <include cwd>content/partials/eql/functions-dates-and-times.mdx</include> -## Example queries - -### Time window - -```sql -SELECT * FROM audit_events -WHERE occurred_at BETWEEN $1::public.eql_v3_timestamp_ord AND $2::public.eql_v3_timestamp_ord; - -SELECT * FROM audit_events -WHERE review_due BETWEEN $1::public.eql_v3_date_ord AND $2::public.eql_v3_date_ord; -``` - -### Retention cutoff - -```sql -SELECT id FROM audit_events -WHERE occurred_at < $1::public.eql_v3_timestamp_ord; -``` - -### Newest-first listing - -Write the sort key in extractor form to stream rows out of the index already ordered — at large row counts this is the difference between seconds and milliseconds (see [Sorting](/reference/eql/sorting)): - -```sql -SELECT * FROM audit_events -WHERE occurred_at >= $1::public.eql_v3_timestamp_ord -ORDER BY eql_v3.ord_term(occurred_at) DESC -LIMIT 10; -``` - -### First and last event - -```sql -SELECT eql_v3.min(occurred_at), eql_v3.max(occurred_at) FROM audit_events; -``` - ## Where to next <Cards> diff --git a/content/docs/reference/eql/numbers.mdx b/content/docs/reference/eql/numbers.mdx index 2c6da9e..b2f1cac 100644 --- a/content/docs/reference/eql/numbers.mdx +++ b/content/docs/reference/eql/numbers.mdx @@ -105,45 +105,6 @@ Blocked *operator* cells raise an `operator … is not supported` exception — **`SUM`, `AVG`, and other arithmetic aggregates are not supported** on encrypted columns — they would require homomorphic encryption. `MIN` / `MAX` work because they only need comparison; for sums and averages, decrypt at the application boundary and aggregate client-side. -## Example queries - -### Range filter - -```sql -SELECT * FROM employees -WHERE salary >= $1::public.eql_v3_bigint_ord; - -SELECT * FROM employees -WHERE salary BETWEEN $1::public.eql_v3_bigint_ord AND $2::public.eql_v3_bigint_ord; -``` - -### MIN and MAX - -`eql_v3.min` / `eql_v3.max` compare ordering terms — no decryption happens in the database, and the encrypted result decrypts in the client. `NULL` inputs are skipped; an all-`NULL` input set returns `NULL`: - -```sql -SELECT eql_v3.min(salary) FROM employees; -SELECT eql_v3.max(salary) FROM employees; -``` - -### Sorted listing - -Write the sort key in extractor form to stream rows out of the index already ordered (see [Sorting](/reference/eql/sorting) for why): - -```sql -SELECT * FROM employees -ORDER BY eql_v3.ord_term(salary) DESC -LIMIT 10; -``` - -### Cast at the call site - -On a generic `jsonb` column whose payloads already carry the `op` term, cast to the right domain in the query: - -```sql -SELECT eql_v3.min(salary_jsonb::public.eql_v3_bigint_ord) FROM employees; -``` - ## Where to next <Cards> diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index 98c144d..af48ec4 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -119,58 +119,6 @@ SELECT * FROM users WHERE email @> $1::public.eql_v3_text_match; `@>` / `<@` here is **probabilistic ngram-bloom containment** — it tests whether the encrypted text contains the (encrypted) search terms. It is not JSONB containment and not `LIKE`. The client encrypts the search term into a bloom-filter query value; false positives are possible, false negatives are not. There are no `like` / `ilike` function forms either — text matching is `eql_v3.contains` on a `text_match` value. -## Example queries - -### Exact lookup - -Equality on a `text_eq` column compares HMAC terms. `IN` desugars to `=`: - -```sql -SELECT * FROM users WHERE tax_id = $1::public.eql_v3_text_eq; - -SELECT * FROM users -WHERE tax_id IN ($1::public.eql_v3_text_eq, $2::public.eql_v3_text_eq); -``` - -### Free-text match - -The client encrypts the search term into the bloom-filter needle: - -```sql -SELECT * FROM users WHERE name @> $1::public.eql_v3_text_match; - --- Function form, for platforms without custom operators -SELECT * FROM users WHERE eql_v3.contains(name, $1::public.eql_v3_text_match); -``` - -### The works: `text_search` - -A `text_search` column answers exact lookup, free-text match, and ordering — here, all three in one query: - -```sql -SELECT id, email FROM users -WHERE email @> $1::public.eql_v3_text_match -- token containment on bf - AND email <> $2::public.eql_v3_text_eq -- exclude an exact value via hm -ORDER BY eql_v3.ord_term(email) -- sort on ob -LIMIT 20; -``` - -### Sorting text - -Ordering terms are order-preserving, so `ORDER BY` sorts encrypted text correctly. Write the sort key in extractor form so a btree index can do the ordering instead of a `Sort` node — see [Sorting](/reference/eql/sorting): - -```sql -SELECT * FROM users -ORDER BY eql_v3.ord_term(email) -LIMIT 50; -``` - -`MIN` / `MAX` work on any ord-capable text column too: - -```sql -SELECT eql_v3.min(email) FROM users; -``` - ## Where to next <Cards> diff --git a/content/partials/eql/functions-dates-and-times.mdx b/content/partials/eql/functions-dates-and-times.mdx index b61d70f..295c995 100644 --- a/content/partials/eql/functions-dates-and-times.mdx +++ b/content/partials/eql/functions-dates-and-times.mdx @@ -2,12 +2,48 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> +<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> -<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> +```sql +SELECT * FROM events +WHERE eql_v3.eq(occurred_at, $1::public.eql_v3_timestamp_eq); +``` -<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> +</EqlFn> -<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> +<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> -<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore" /> +```sql +SELECT * FROM events +WHERE eql_v3.neq(occurred_at, $1::public.eql_v3_timestamp_eq); +``` + +</EqlFn> + +<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> + +```sql +-- a range uses two of the four +SELECT * FROM events +WHERE eql_v3.gte(occurred_at, $1::public.eql_v3_timestamp_ord) + AND eql_v3.lt(occurred_at, $2::public.eql_v3_timestamp_ord); +``` + +</EqlFn> + +<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> + +```sql +-- compares ordering terms; result decrypts client-side +SELECT eql_v3.min(occurred_at) FROM events; +``` + +</EqlFn> + +<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> + +```sql +SELECT eql_v3.max(occurred_at) FROM events; +``` + +</EqlFn> diff --git a/content/partials/eql/functions-numbers.mdx b/content/partials/eql/functions-numbers.mdx index 870cbc4..89d9b24 100644 --- a/content/partials/eql/functions-numbers.mdx +++ b/content/partials/eql/functions-numbers.mdx @@ -2,12 +2,48 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> +<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> -<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> +```sql +SELECT * FROM payments +WHERE eql_v3.eq(amount, $1::public.eql_v3_bigint_eq); +``` -<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> +</EqlFn> -<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> +<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> -<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore" /> +```sql +SELECT * FROM payments +WHERE eql_v3.neq(amount, $1::public.eql_v3_bigint_eq); +``` + +</EqlFn> + +<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> + +```sql +-- a range uses two of the four +SELECT * FROM payments +WHERE eql_v3.gte(amount, $1::public.eql_v3_bigint_ord) + AND eql_v3.lt(amount, $2::public.eql_v3_bigint_ord); +``` + +</EqlFn> + +<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> + +```sql +-- compares ordering terms; result decrypts client-side +SELECT eql_v3.min(amount) FROM payments; +``` + +</EqlFn> + +<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> + +```sql +SELECT eql_v3.max(amount) FROM payments; +``` + +</EqlFn> diff --git a/content/partials/eql/functions-text.mdx b/content/partials/eql/functions-text.mdx index 894c740..6a50b0c 100644 --- a/content/partials/eql/functions-text.mdx +++ b/content/partials/eql/functions-text.mdx @@ -2,16 +2,67 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> +<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> -<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> +```sql +SELECT * FROM users +WHERE eql_v3.eq(email, $1::public.eql_v3_text_eq); +``` -<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> +</EqlFn> -<EqlFn id="fn-contains" name="eql_v3.contains(a, b)" ops="@>" domains="text_match,text_search,text_search_ore" /> +<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> -<EqlFn id="fn-contained_by" name="eql_v3.contained_by(a, b)" ops="<@" domains="text_match,text_search,text_search_ore" /> +```sql +SELECT * FROM users +WHERE eql_v3.neq(email, $1::public.eql_v3_text_eq); +``` -<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> +</EqlFn> -<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore" /> +<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> + +```sql +-- any of the four; ordering is the usual reason to index text +SELECT id, email FROM users +WHERE eql_v3.gt(email, $1::public.eql_v3_text_ord) +ORDER BY eql_v3.ord_term(email); +``` + +</EqlFn> + +<EqlFn id="fn-contains" name="eql_v3.contains(a, b)" ops="@>" domains="text_match,text_search,text_search_ore"> + +```sql +-- token containment on the bloom-filter term +SELECT * FROM users +WHERE eql_v3.contains(email, $1::public.eql_v3_text_match); +``` + +</EqlFn> + +<EqlFn id="fn-contained_by" name="eql_v3.contained_by(a, b)" ops="<@" domains="text_match,text_search,text_search_ore"> + +```sql +SELECT * FROM users +WHERE eql_v3.contained_by(email, $1::public.eql_v3_text_match); +``` + +</EqlFn> + +<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> + +```sql +-- compares ordering terms; result decrypts client-side +SELECT eql_v3.min(email) FROM users; +``` + +</EqlFn> + +<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> + +```sql +SELECT eql_v3.max(email) FROM users; +``` + +</EqlFn> diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index addd7c7..b6c5656 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -223,11 +223,11 @@ function render(manifest: Manifest): string { // ── Per-type function fragments ────────────────────────────────────────────── // Each hand-written type page (numbers, text, dates-and-times) carries a // per-function reference: one card per EQL function, listing its operator -// equivalents and the domains it applies to. These are generated from the -// manifest and `<include>`d into the page (via the `<EqlFn>` component) rather -// than hand-maintained, where the domain lists silently drifted. Worked -// examples are NOT here — each page's own "Example queries" section covers -// those, so a per-card example would only duplicate them. +// equivalents, the domains it applies to, and a worked example. These are +// generated from the manifest and `<include>`d into the page (via the `<EqlFn>` +// component) rather than hand-maintained, where the domain lists silently +// drifted. The example is the one authored part — templated by capability, not +// pulled from the manifest — and the domain list, the drift-prone part, is not. // // json and booleans are intentionally NOT here: json's surface is containment / // path functions (a bespoke story, not the eq/ord/min-max set), and booleans @@ -236,6 +236,15 @@ interface FragmentSpec { page: string; // Which manifest domain `type`s belong on this page. match: (type: string) => boolean; + // Illustrative context for the generated examples. + table: string; + col: string; + // Representative concrete type the example casts to, e.g. `bigint` → + // `public.eql_v3_bigint_ord`. One of the page's family, for a realistic cast. + castType: string; + // On text, ranges are unusual and sorting is the point, so the comparison + // example demonstrates ORDER BY. Elsewhere a range filter reads best. + orderByExample: boolean; } const FRAGMENT_SPECS: FragmentSpec[] = [ @@ -243,9 +252,27 @@ const FRAGMENT_SPECS: FragmentSpec[] = [ page: "numbers", match: (t) => /(^|\b)(small|big)?int|integer|numeric|decimal|real|double|float/.test(t), + table: "payments", + col: "amount", + castType: "bigint", + orderByExample: false, + }, + { + page: "text", + match: (t) => t === "text", + table: "users", + col: "email", + castType: "text", + orderByExample: true, + }, + { + page: "dates-and-times", + match: (t) => /date|time/.test(t), + table: "events", + col: "occurred_at", + castType: "timestamp", + orderByExample: false, }, - { page: "text", match: (t) => t === "text" }, - { page: "dates-and-times", match: (t) => /date|time/.test(t) }, ]; // The EQL function set, in reading order. `cap` is the domain capability that @@ -299,6 +326,34 @@ const FUNCS: FuncDef[] = [ // `public.eql_v3_text_eq` → `text_eq`. const shortDomain = (name: string) => name.replace(/^public\.(eql_v3_)?/, ""); +// The example for one function, keyed by its anchor id and templated from the +// page's illustrative context. The `::public.eql_v3_<type>_<variant>` casts use +// real domain names, so they stay correct; the table and column are illustrative. +function exampleFor(id: string, spec: FragmentSpec): string { + const { table, col, castType } = spec; + const dom = (variant: string) => `public.eql_v3_${castType}_${variant}`; + switch (id) { + case "fn-eq": + return `SELECT * FROM ${table}\nWHERE eql_v3.eq(${col}, $1::${dom("eq")});`; + case "fn-neq": + return `SELECT * FROM ${table}\nWHERE eql_v3.neq(${col}, $1::${dom("eq")});`; + case "fn-comparison": + return spec.orderByExample + ? `-- any of the four; ordering is the usual reason to index text\nSELECT id, ${col} FROM ${table}\nWHERE eql_v3.gt(${col}, $1::${dom("ord")})\nORDER BY eql_v3.ord_term(${col});` + : `-- a range uses two of the four\nSELECT * FROM ${table}\nWHERE eql_v3.gte(${col}, $1::${dom("ord")})\n AND eql_v3.lt(${col}, $2::${dom("ord")});`; + case "fn-contains": + return `-- token containment on the bloom-filter term\nSELECT * FROM ${table}\nWHERE eql_v3.contains(${col}, $1::${dom("match")});`; + case "fn-contained_by": + return `SELECT * FROM ${table}\nWHERE eql_v3.contained_by(${col}, $1::${dom("match")});`; + case "fn-min": + return `-- compares ordering terms; result decrypts client-side\nSELECT eql_v3.min(${col}) FROM ${table};`; + case "fn-max": + return `SELECT eql_v3.max(${col}) FROM ${table};`; + default: + return ""; + } +} + function renderFragment(domains: Domain[], spec: FragmentSpec): string { const scoped = domains.filter((d) => spec.match(d.type)); const header = `{/* GENERATED — do not edit. Produced by scripts/generate-eql-api-docs.ts from the EQL manifest. Edit the generator, not this file. */}`; @@ -323,7 +378,10 @@ function renderFragment(domains: Domain[], spec: FragmentSpec): string { ] .filter(Boolean) .join(" "); - blocks.push(`<EqlFn ${attrs} />`); + const example = exampleFor(fn.id, spec); + blocks.push( + `<EqlFn ${attrs}>\n\n\`\`\`sql\n${example}\n\`\`\`\n\n</EqlFn>`, + ); } return `${header}\n\n${intro}\n\n${blocks.join("\n\n")}\n`; diff --git a/src/components/eql-fn.tsx b/src/components/eql-fn.tsx index d1d7d11..d32c431 100644 --- a/src/components/eql-fn.tsx +++ b/src/components/eql-fn.tsx @@ -16,17 +16,19 @@ interface EqlFnProps { agg?: boolean; /** How many domains to show before the "Show all" toggle. */ initial?: number; + /** The worked example (a fenced code block). */ + children: React.ReactNode; } /** * One entry in a generated EQL function reference (see the fragments under * content/partials/eql, produced by scripts/generate-eql-api-docs.ts). * - * Renders the function signature, its operator equivalents, and the domains it - * applies to. The domain list is the drift-prone part, so it comes from the - * manifest via the `domains` prop; only the first few show, with the rest - * behind a reader-controlled toggle. Worked examples live in each page's own - * "Example queries" section, not here. + * Renders the function signature, its operator equivalents, the domains it + * applies to, and a worked example. The domain list is the drift-prone part, + * so it comes from the manifest via the `domains` prop; only the first few + * show, with the rest behind a reader-controlled toggle. The example is passed + * as children so it keeps the site's syntax highlighting and copy button. */ export function EqlFn({ name, @@ -35,6 +37,7 @@ export function EqlFn({ domains, agg, initial = 2, + children, }: EqlFnProps) { const opList = ops.split(",").filter(Boolean); const domainList = domains ? domains.split(",").filter(Boolean) : []; @@ -102,6 +105,8 @@ export function EqlFn({ ) : null} </div> ) : null} + + <div className="mt-3 [&>*]:!my-0">{children}</div> </div> ); } From f6a126521e181bc50deeb50d0bdfde4b032d1bdf Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 10:04:24 +1000 Subject: [PATCH 074/151] docs(eql): make each function a heading so it appears in the page nav MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Each function's name is now a real `###` heading (with an explicit `[#fn-*]` id) instead of text inside the card. The table of contents only sees Markdown headings, so this lists every function as a sub-item under "Functions" in the right-hand nav, and keeps the stable deep-link anchor. The <EqlFn> card renders everything below the heading — operator equivalents (now under an "Operators"/"Aggregate" label), the applies-to domains, and the example. It no longer takes name/id props or renders its own anchor, since the heading owns both. --- .../eql/functions-dates-and-times.mdx | 20 ++++-- content/partials/eql/functions-numbers.mdx | 20 ++++-- content/partials/eql/functions-text.mdx | 28 ++++++-- scripts/generate-eql-api-docs.ts | 7 +- src/components/eql-fn.tsx | 68 +++++++------------ 5 files changed, 79 insertions(+), 64 deletions(-) diff --git a/content/partials/eql/functions-dates-and-times.mdx b/content/partials/eql/functions-dates-and-times.mdx index 295c995..581efbf 100644 --- a/content/partials/eql/functions-dates-and-times.mdx +++ b/content/partials/eql/functions-dates-and-times.mdx @@ -2,7 +2,9 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> +### eql_v3.eq(a, b) [#fn-eq] + +<EqlFn ops="=" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> ```sql SELECT * FROM events @@ -11,7 +13,9 @@ WHERE eql_v3.eq(occurred_at, $1::public.eql_v3_timestamp_eq); </EqlFn> -<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> +### eql_v3.neq(a, b) [#fn-neq] + +<EqlFn ops="<>" domains="date_eq,date_ord,date_ord_ope,date_ord_ore,timestamp_eq,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> ```sql SELECT * FROM events @@ -20,7 +24,9 @@ WHERE eql_v3.neq(occurred_at, $1::public.eql_v3_timestamp_eq); </EqlFn> -<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> +### eql_v3.lt / lte / gt / gte [#fn-comparison] + +<EqlFn ops="<,<=,>,>=" domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> ```sql -- a range uses two of the four @@ -31,7 +37,9 @@ WHERE eql_v3.gte(occurred_at, $1::public.eql_v3_timestamp_ord) </EqlFn> -<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> +### eql_v3.min(col) [#fn-min] + +<EqlFn ops="MIN" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> ```sql -- compares ordering terms; result decrypts client-side @@ -40,7 +48,9 @@ SELECT eql_v3.min(occurred_at) FROM events; </EqlFn> -<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> +### eql_v3.max(col) [#fn-max] + +<EqlFn ops="MAX" agg domains="date_ord,date_ord_ope,date_ord_ore,timestamp_ord,timestamp_ord_ope,timestamp_ord_ore"> ```sql SELECT eql_v3.max(occurred_at) FROM events; diff --git a/content/partials/eql/functions-numbers.mdx b/content/partials/eql/functions-numbers.mdx index 89d9b24..357c8fa 100644 --- a/content/partials/eql/functions-numbers.mdx +++ b/content/partials/eql/functions-numbers.mdx @@ -2,7 +2,9 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> +### eql_v3.eq(a, b) [#fn-eq] + +<EqlFn ops="=" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> ```sql SELECT * FROM payments @@ -11,7 +13,9 @@ WHERE eql_v3.eq(amount, $1::public.eql_v3_bigint_eq); </EqlFn> -<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> +### eql_v3.neq(a, b) [#fn-neq] + +<EqlFn ops="<>" domains="bigint_eq,bigint_ord,bigint_ord_ope,bigint_ord_ore,double_eq,double_ord,double_ord_ope,double_ord_ore,integer_eq,integer_ord,integer_ord_ope,integer_ord_ore,numeric_eq,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_eq,real_ord,real_ord_ope,real_ord_ore,smallint_eq,smallint_ord,smallint_ord_ope,smallint_ord_ore"> ```sql SELECT * FROM payments @@ -20,7 +24,9 @@ WHERE eql_v3.neq(amount, $1::public.eql_v3_bigint_eq); </EqlFn> -<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> +### eql_v3.lt / lte / gt / gte [#fn-comparison] + +<EqlFn ops="<,<=,>,>=" domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> ```sql -- a range uses two of the four @@ -31,7 +37,9 @@ WHERE eql_v3.gte(amount, $1::public.eql_v3_bigint_ord) </EqlFn> -<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> +### eql_v3.min(col) [#fn-min] + +<EqlFn ops="MIN" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> ```sql -- compares ordering terms; result decrypts client-side @@ -40,7 +48,9 @@ SELECT eql_v3.min(amount) FROM payments; </EqlFn> -<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> +### eql_v3.max(col) [#fn-max] + +<EqlFn ops="MAX" agg domains="bigint_ord,bigint_ord_ope,bigint_ord_ore,double_ord,double_ord_ope,double_ord_ore,integer_ord,integer_ord_ope,integer_ord_ore,numeric_ord,numeric_ord_ope,numeric_ord_ore,real_ord,real_ord_ope,real_ord_ore,smallint_ord,smallint_ord_ope,smallint_ord_ore"> ```sql SELECT eql_v3.max(amount) FROM payments; diff --git a/content/partials/eql/functions-text.mdx b/content/partials/eql/functions-text.mdx index 6a50b0c..ff415c7 100644 --- a/content/partials/eql/functions-text.mdx +++ b/content/partials/eql/functions-text.mdx @@ -2,7 +2,9 @@ Every operator has a function form, for managed platforms that disallow custom operators — same typed arguments, identical resolution. Each lists the encrypted domains it applies to; the `MIN` / `MAX` aggregates only exist as functions. -<EqlFn id="fn-eq" name="eql_v3.eq(a, b)" ops="=" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> +### eql_v3.eq(a, b) [#fn-eq] + +<EqlFn ops="=" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> ```sql SELECT * FROM users @@ -11,7 +13,9 @@ WHERE eql_v3.eq(email, $1::public.eql_v3_text_eq); </EqlFn> -<EqlFn id="fn-neq" name="eql_v3.neq(a, b)" ops="<>" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> +### eql_v3.neq(a, b) [#fn-neq] + +<EqlFn ops="<>" domains="text_eq,text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> ```sql SELECT * FROM users @@ -20,7 +24,9 @@ WHERE eql_v3.neq(email, $1::public.eql_v3_text_eq); </EqlFn> -<EqlFn id="fn-comparison" name="eql_v3.lt / lte / gt / gte" ops="<,<=,>,>=" domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> +### eql_v3.lt / lte / gt / gte [#fn-comparison] + +<EqlFn ops="<,<=,>,>=" domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> ```sql -- any of the four; ordering is the usual reason to index text @@ -31,7 +37,9 @@ ORDER BY eql_v3.ord_term(email); </EqlFn> -<EqlFn id="fn-contains" name="eql_v3.contains(a, b)" ops="@>" domains="text_match,text_search,text_search_ore"> +### eql_v3.contains(a, b) [#fn-contains] + +<EqlFn ops="@>" domains="text_match,text_search,text_search_ore"> ```sql -- token containment on the bloom-filter term @@ -41,7 +49,9 @@ WHERE eql_v3.contains(email, $1::public.eql_v3_text_match); </EqlFn> -<EqlFn id="fn-contained_by" name="eql_v3.contained_by(a, b)" ops="<@" domains="text_match,text_search,text_search_ore"> +### eql_v3.contained_by(a, b) [#fn-contained_by] + +<EqlFn ops="<@" domains="text_match,text_search,text_search_ore"> ```sql SELECT * FROM users @@ -50,7 +60,9 @@ WHERE eql_v3.contained_by(email, $1::public.eql_v3_text_match); </EqlFn> -<EqlFn id="fn-min" name="eql_v3.min(col)" ops="MIN" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> +### eql_v3.min(col) [#fn-min] + +<EqlFn ops="MIN" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> ```sql -- compares ordering terms; result decrypts client-side @@ -59,7 +71,9 @@ SELECT eql_v3.min(email) FROM users; </EqlFn> -<EqlFn id="fn-max" name="eql_v3.max(col)" ops="MAX" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> +### eql_v3.max(col) [#fn-max] + +<EqlFn ops="MAX" agg domains="text_ord,text_ord_ope,text_ord_ore,text_search,text_search_ore"> ```sql SELECT eql_v3.max(email) FROM users; diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index b6c5656..609954d 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -370,8 +370,6 @@ function renderFragment(domains: Domain[], spec: FragmentSpec): string { .map((d) => shortDomain(d.name)); if (!applies.length) continue; const attrs = [ - `id="${fn.id}"`, - `name="${fn.name}"`, `ops="${fn.ops.join(",")}"`, fn.agg ? "agg" : "", `domains="${applies.join(",")}"`, @@ -379,8 +377,11 @@ function renderFragment(domains: Domain[], spec: FragmentSpec): string { .filter(Boolean) .join(" "); const example = exampleFor(fn.id, spec); + // The name is a real `###` heading with an explicit id, so each function + // gets a table-of-contents entry (nested under "Functions") and a stable + // deep-link anchor. The `<EqlFn>` card renders everything below it. blocks.push( - `<EqlFn ${attrs}>\n\n\`\`\`sql\n${example}\n\`\`\`\n\n</EqlFn>`, + `### ${fn.name} [#${fn.id}]\n\n<EqlFn ${attrs}>\n\n\`\`\`sql\n${example}\n\`\`\`\n\n</EqlFn>`, ); } diff --git a/src/components/eql-fn.tsx b/src/components/eql-fn.tsx index d32c431..98d5cd6 100644 --- a/src/components/eql-fn.tsx +++ b/src/components/eql-fn.tsx @@ -1,18 +1,13 @@ "use client"; -import { Link2 } from "lucide-react"; import { useState } from "react"; interface EqlFnProps { - /** Function name or grouped signature, e.g. `eql_v3.eq(a, b)`. */ - name: string; - /** Stable anchor id for deep linking, e.g. `fn-eq`. */ - id: string; /** Comma-separated operator equivalents, e.g. `<,<=,>,>=`. */ ops: string; /** Comma-separated short domain names the function applies to. */ domains?: string; - /** Aggregate function (MIN/MAX): renders an "aggregate" tag, no operator. */ + /** Aggregate function (MIN/MAX): labels the row "Aggregate". */ agg?: boolean; /** How many domains to show before the "Show all" toggle. */ initial?: number; @@ -21,18 +16,19 @@ interface EqlFnProps { } /** - * One entry in a generated EQL function reference (see the fragments under - * content/partials/eql, produced by scripts/generate-eql-api-docs.ts). + * The body of one entry in a generated EQL function reference (see the + * fragments under content/partials/eql, produced by + * scripts/generate-eql-api-docs.ts). * - * Renders the function signature, its operator equivalents, the domains it - * applies to, and a worked example. The domain list is the drift-prone part, - * so it comes from the manifest via the `domains` prop; only the first few - * show, with the rest behind a reader-controlled toggle. The example is passed - * as children so it keeps the site's syntax highlighting and copy button. + * The function name is a real Markdown heading in the fragment (so it appears + * in the page's table of contents and is deep-linkable); this component renders + * everything below it — the operator equivalents, the domains it applies to, + * and the example. The domain list is the drift-prone part, so it comes from + * the manifest via the `domains` prop; only the first few show, with the rest + * behind a reader-controlled toggle. The example is passed as children so it + * keeps the site's syntax highlighting and copy button. */ export function EqlFn({ - name, - id, ops, domains, agg, @@ -44,38 +40,22 @@ export function EqlFn({ const [expanded, setExpanded] = useState(false); const hidden = Math.max(0, domainList.length - initial); const visible = expanded ? domainList : domainList.slice(0, initial); + const label = agg ? "Aggregate" : "Operators"; return ( - <div - id={id} - className="my-4 scroll-mt-24 rounded-lg border border-fd-border bg-fd-card p-4" - > - <div className="flex flex-wrap items-center gap-x-3 gap-y-2"> - <a - href={`#${id}`} - className="group/anchor inline-flex items-center gap-2 font-mono text-[0.95rem] font-semibold text-fd-primary no-underline" - > - {name} - <Link2 - aria-hidden - className="size-3.5 opacity-0 transition-opacity group-hover/anchor:opacity-60" - /> - </a> - <span className="ml-auto flex flex-wrap gap-1.5"> - {agg ? ( - <span className="rounded-md border border-fd-border px-2 py-0.5 text-xs font-medium text-fd-muted-foreground"> - aggregate - </span> - ) : null} - {opList.map((op) => ( - <span - key={op} - className="rounded-md border border-fd-primary/30 bg-fd-primary/10 px-2 py-0.5 font-mono text-sm font-semibold text-fd-primary" - > - {op} - </span> - ))} + <div className="my-4 rounded-lg border border-fd-border bg-fd-card p-4"> + <div className="flex flex-wrap items-center gap-1.5"> + <span className="mr-1 text-[11px] font-semibold uppercase tracking-wide text-fd-muted-foreground"> + {label} </span> + {opList.map((op) => ( + <span + key={op} + className="rounded-md border border-fd-primary/30 bg-fd-primary/10 px-2 py-0.5 font-mono text-sm font-semibold text-fd-primary" + > + {op} + </span> + ))} </div> {domainList.length > 0 ? ( From f3af667ff8442152be9c09a4adf925805555d7c0 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 10:26:34 +1000 Subject: [PATCH 075/151] docs(eql): give the JSON page the per-function card treatment The JSON page's query surface (containment, field access, leaf comparisons, path queries, array helpers) was prose spread across three sections. Restructure it into a "## Functions" section of <EqlFn> cards under `###` headings, matching the scalar type pages: each function is now a TOC sub-item under Functions and a deep-link anchor. Unlike the scalar pages, JSON's functions aren't derivable from domain capabilities (the jsonb domains are storage-only), so these cards are authored directly in json.mdx rather than generated. json.mdx is scanned by the drift guard, so every eql_v3.* symbol referenced is still validated against the manifest. - Make <EqlFn>'s `ops` optional so pure functions (jsonb_path_query, the array helpers) render without an operator row. - Preserve the GIN containment index recipe and the selector-hash / typed-operand notes as prose within the new section. --- content/docs/reference/eql/json.mdx | 103 ++++++++++++++++++---------- src/components/eql-fn.tsx | 35 ++++++---- 2 files changed, 86 insertions(+), 52 deletions(-) diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index 7253a6f..d49cca2 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -111,85 +111,114 @@ Use containment (`@>` / `<@`), field access (`->` / `->>`), or the `eql_v3.jsonb **Operands must be typed** (`doc -> 'email'::text`, not `doc -> 'email'`) — an untyped operand resolves the native `jsonb` operator, bypassing both the encrypted operator and the blockers. See [Core concepts](/reference/eql/core-concepts). </Callout> -## Containment: `@>` and `<@` +## Functions -`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle with the client and cast it to `eql_v3.query_jsonb` (a typed `public.eql_v3_json` or `public.eql_v3_jsonb_entry` operand also works): +Every JSON query addresses paths by **selector hash** — the deterministic identifier the client emits for a JSON path during encryption, not a plaintext path like `$.customer.tier`. Operands must be typed, or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. + +### Containment [#fn-contains] + +`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle in the client and cast it to `eql_v3.query_jsonb`; `eql_v3.ste_vec_contains(a, b)` is the function form. + +<EqlFn ops="@>,<@" domains="eql_v3_json"> ```sql SELECT * FROM orders WHERE metadata @> $1::eql_v3.query_jsonb; ``` -This is the encrypted equivalent of the plaintext `metadata @> '{"customer": {"tier": "premium"}}'`: containment checks that every encrypted term in the needle exists in the document's `sv` vector. `eql_v3.to_ste_vec_query(doc)` converts a stored document into the needle shape, and `eql_v3.ste_vec_contains(a, b)` is the function form backing `@>`. +</EqlFn> -For large tables, back containment with a GIN index. The typed `@>` overload inlines to a native `jsonb @>` over `eql_v3.to_ste_vec_query(col)::jsonb`, so a GIN index on that same expression engages: +For large tables, back containment with a GIN index. The typed `@>` inlines to a native `jsonb @>` over `eql_v3.to_ste_vec_query(col)::jsonb`, so a GIN index on that same expression engages: ```sql CREATE INDEX orders_metadata_gin ON orders USING gin (eql_v3.to_ste_vec_query(metadata)::jsonb jsonb_path_ops); -ANALYZE orders; ``` -See [Indexes](/reference/eql/indexes) for the full recipes. +### Field access [#fn-field-access] -## Field access: `->` and `->>` +`->` returns a `public.eql_v3_jsonb_entry`; `->>` serializes that entry as ciphertext text. Fields are addressed by selector hash, and array elements by 0-based index. -Fields are addressed by **selector hash** — the deterministic identifier the client emits for a JSON path during encryption — not a plaintext path string like `$.customer.tier`. +<EqlFn ops="->,->>" domains="eql_v3_json"> ```sql --- Field access by selector (returns public.eql_v3_jsonb_entry) -SELECT metadata -> 'selector_hash'::text FROM orders; +SELECT metadata -> 'selector_hash'::text FROM orders; -- entry +SELECT metadata ->> 'selector_hash'::text FROM orders; -- entry as ciphertext text +SELECT metadata -> 0 FROM orders; -- array element by index +``` --- The entry serialized as text (ciphertext JSON, not decrypted plaintext) -SELECT metadata ->> 'selector_hash'::text FROM orders; +</EqlFn> --- Array element by 0-based index -SELECT metadata -> 0 FROM orders; -``` +The extracted `public.eql_v3_jsonb_entry` is itself comparable. -The extracted `public.eql_v3_jsonb_entry` is itself comparable: +### eql_v3.eq_term [#fn-eq-term] -- `=` / `<>` resolve via `eql_v3.eq_term` — works on every node type -- `<` / `<=` / `>` / `>=` resolve via `eql_v3.ord_term` — String and Number leaves only -- `MIN` / `MAX` over an extracted ordered leaf use the `eql_v3.min` / `eql_v3.max` aggregates +Equality on an extracted leaf, via `eql_v3.eq_term`. Works on every node type, and drives `GROUP BY` / `DISTINCT`. -```sql --- Equality on an extracted leaf -SELECT * FROM orders -WHERE metadata -> 'email_selector'::text = $1::public.eql_v3_jsonb_entry; +<EqlFn ops="=,<>" domains="eql_v3_jsonb_entry"> --- Group by an extracted leaf's equality term +```sql SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) FROM orders GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); ``` -A hash index on `eql_v3.eq_term(col -> '<selector>'::text)` engages the equality lookup; a btree on `eql_v3.ord_term(...)` engages range and `ORDER BY`. The OPE term is a `bytea` domain that orders under the default btree operator class, so this index needs no custom operator class. See [Indexes](/reference/eql/indexes). +</EqlFn> + +### eql_v3.ord_term [#fn-ord-term] + +Range comparisons and `ORDER BY` on an extracted **String or Number** leaf, via `eql_v3.ord_term`. + +<EqlFn ops="<,<=,>,>=" domains="eql_v3_jsonb_entry"> + +```sql +SELECT * FROM orders +WHERE (metadata -> 'total_selector'::text) > $1::public.eql_v3_jsonb_entry; +``` + +</EqlFn> + +A hash index on `eql_v3.eq_term(col -> '<selector>'::text)` engages the equality lookup; a btree on `eql_v3.ord_term(...)` engages range and `ORDER BY`. See [Indexes](/reference/eql/indexes). -## Path queries and array helpers +### eql_v3.min / max [#fn-min-max] -The function forms take the same selector hashes: +`MIN` / `MAX` over an extracted ordered leaf. + +<EqlFn agg ops="MIN,MAX" domains="eql_v3_jsonb_entry"> ```sql --- All entries matching a selector -SELECT eql_v3.jsonb_path_query(metadata, 'selector_hash') FROM orders; +SELECT eql_v3.min(metadata -> 'total_selector'::text) FROM orders; +``` + +</EqlFn> --- First match only -SELECT eql_v3.jsonb_path_query_first(metadata, 'selector_hash') FROM orders; +### eql_v3.jsonb_path_query [#fn-path-query] --- Does the selector exist in this document? -SELECT eql_v3.jsonb_path_exists(metadata, 'selector_hash') FROM orders; +Path queries take the same selector hashes. `jsonb_path_query` returns every matching entry, `jsonb_path_query_first` the first, and `jsonb_path_exists` a boolean. + +<EqlFn domains="eql_v3_json"> + +```sql +SELECT eql_v3.jsonb_path_query(metadata, 'selector_hash') FROM orders; -- all matches +SELECT eql_v3.jsonb_path_query_first(metadata, 'selector_hash') FROM orders; -- first match +SELECT eql_v3.jsonb_path_exists(metadata, 'selector_hash') FROM orders; -- boolean ``` -For encrypted array nodes: +</EqlFn> + +### eql_v3.jsonb_array_* [#fn-array] + +Helpers over an encrypted array node. `jsonb_array_elements` yields encrypted entries; `jsonb_array_elements_text` yields each element as ciphertext text. + +<EqlFn domains="eql_v3_json"> ```sql -SELECT eql_v3.jsonb_array_length(metadata -> 'items_selector'::text) FROM orders; -SELECT eql_v3.jsonb_array_elements(metadata -> 'items_selector'::text) FROM orders; +SELECT eql_v3.jsonb_array_length(metadata -> 'items_selector'::text) FROM orders; +SELECT eql_v3.jsonb_array_elements(metadata -> 'items_selector'::text) FROM orders; SELECT eql_v3.jsonb_array_elements_text(metadata -> 'items_selector'::text) FROM orders; ``` -`jsonb_array_elements` yields encrypted entries; `jsonb_array_elements_text` yields each element as ciphertext text. +</EqlFn> ## Worked example diff --git a/src/components/eql-fn.tsx b/src/components/eql-fn.tsx index 98d5cd6..5af3af7 100644 --- a/src/components/eql-fn.tsx +++ b/src/components/eql-fn.tsx @@ -3,8 +3,11 @@ import { useState } from "react"; interface EqlFnProps { - /** Comma-separated operator equivalents, e.g. `<,<=,>,>=`. */ - ops: string; + /** + * Comma-separated operator equivalents, e.g. `<,<=,>,>=`. Omit for pure + * functions with no operator form (e.g. `eql_v3.jsonb_path_query`). + */ + ops?: string; /** Comma-separated short domain names the function applies to. */ domains?: string; /** Aggregate function (MIN/MAX): labels the row "Aggregate". */ @@ -35,7 +38,7 @@ export function EqlFn({ initial = 2, children, }: EqlFnProps) { - const opList = ops.split(",").filter(Boolean); + const opList = ops ? ops.split(",").filter(Boolean) : []; const domainList = domains ? domains.split(",").filter(Boolean) : []; const [expanded, setExpanded] = useState(false); const hidden = Math.max(0, domainList.length - initial); @@ -44,19 +47,21 @@ export function EqlFn({ return ( <div className="my-4 rounded-lg border border-fd-border bg-fd-card p-4"> - <div className="flex flex-wrap items-center gap-1.5"> - <span className="mr-1 text-[11px] font-semibold uppercase tracking-wide text-fd-muted-foreground"> - {label} - </span> - {opList.map((op) => ( - <span - key={op} - className="rounded-md border border-fd-primary/30 bg-fd-primary/10 px-2 py-0.5 font-mono text-sm font-semibold text-fd-primary" - > - {op} + {opList.length > 0 ? ( + <div className="flex flex-wrap items-center gap-1.5"> + <span className="mr-1 text-[11px] font-semibold uppercase tracking-wide text-fd-muted-foreground"> + {label} </span> - ))} - </div> + {opList.map((op) => ( + <span + key={op} + className="rounded-md border border-fd-primary/30 bg-fd-primary/10 px-2 py-0.5 font-mono text-sm font-semibold text-fd-primary" + > + {op} + </span> + ))} + </div> + ) : null} {domainList.length > 0 ? ( <div className="mt-3 flex flex-wrap items-center gap-1.5"> From 36dcbedf5422acc2cd6881711387e024c302931c Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 11:01:49 +1000 Subject: [PATCH 076/151] docs(eql): add a shared plaintext document to the JSON functions section Show the plaintext JSON the function examples query against, right under the Functions heading, and map the `*_selector` placeholders to their paths. Readers can see what each function operates on instead of inferring it from the selector names. --- content/docs/reference/eql/json.mdx | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index d49cca2..e2aea00 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -115,6 +115,21 @@ Use containment (`@>` / `<@`), field access (`->` / `->>`), or the `eql_v3.jsonb Every JSON query addresses paths by **selector hash** — the deterministic identifier the client emits for a JSON path during encryption, not a plaintext path like `$.customer.tier`. Operands must be typed, or PostgreSQL resolves the native `jsonb` operator instead of the encrypted one. +The examples below all query one encrypted `metadata` document. In plaintext: + +```json +{ + "customer": { + "tier": "premium", + "region": "apac" + }, + "total": 149.95, + "items": ["sku-1042", "sku-2210"] +} +``` + +The `*_selector` placeholders stand for the selector hash of each path: `region_selector` for `$.customer.region`, `total_selector` for `$.total`, and `items_selector` for `$.items`. + ### Containment [#fn-contains] `@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle in the client and cast it to `eql_v3.query_jsonb`; `eql_v3.ste_vec_contains(a, b)` is the function form. From f2ec5c4e3a4f3701ac58c9f8c644dc176496315c Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 11:26:31 +1000 Subject: [PATCH 077/151] docs: brand the code syntax highlighting with a CipherStash theme MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace Shiki's default GitHub themes with two custom themes (light + dark) built from the site palette: the lime-green brand accent for keywords, warm neutrals for text and comments, and teal / gold / amber supporting hues tuned to the near-black and off-white grounds the docs already use. Shiki already runs in dual-theme mode, so this is purely a themes swap in rehypeCodeOptions — the copy button, line highlighting, diff/focus transformers, and Fira Code font are unchanged, and every code block picks it up. --- source.config.ts | 150 +++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 146 insertions(+), 4 deletions(-) diff --git a/source.config.ts b/source.config.ts index feeed91..cd460c5 100644 --- a/source.config.ts +++ b/source.config.ts @@ -76,6 +76,146 @@ export const v2docs = defineDocs({ }, }); +// ── Syntax highlighting: the CipherStash code theme ────────────────────────── +// Two custom Shiki themes (light + dark) built from the site palette instead of +// Fumadocs' default GitHub themes: the lime-green brand accent for keywords, +// warm neutrals for text and comments, and teal / gold / amber supporting hues +// tuned to the near-black and off-white grounds the docs already use. Shiki runs +// in dual-theme mode (see `defaultColor: false` in rehypeCodeDefaultOptions), so +// these switch with the site's light/dark toggle via CSS variables. +interface CodePalette { + bg: string; + fg: string; + com: string; + kw: string; + fn: string; + typ: string; + str: string; + num: string; + pun: string; +} + +function cipherstashTheme( + name: string, + type: "light" | "dark", + c: CodePalette, +) { + return { + name, + type, + colors: { + "editor.background": c.bg, + "editor.foreground": c.fg, + }, + settings: [ + { settings: { background: c.bg, foreground: c.fg } }, + { + scope: ["comment", "punctuation.definition.comment", "string.comment"], + settings: { foreground: c.com, fontStyle: "italic" }, + }, + { + scope: [ + "keyword", + "keyword.control", + "keyword.other", + "keyword.operator.new", + "keyword.operator.expression", + "keyword.operator.logical", + "storage", + "storage.type", + "storage.modifier", + "variable.language", + "entity.name.tag", + "punctuation.definition.tag", + ], + settings: { foreground: c.kw }, + }, + { + scope: [ + "entity.name.function", + "support.function", + "meta.function-call", + "meta.function-call.generic", + "variable.function", + ], + settings: { foreground: c.fn }, + }, + { + scope: [ + "entity.name.type", + "entity.name.class", + "support.type", + "support.class", + "entity.other.inherited-class", + "entity.name.namespace", + "support.type.property-name", + "meta.object-literal.key", + "entity.other.attribute-name", + ], + settings: { foreground: c.typ }, + }, + { + scope: [ + "string", + "string.quoted", + "string.template", + "string.regexp", + "punctuation.definition.string", + ], + settings: { foreground: c.str }, + }, + { + scope: [ + "constant.numeric", + "constant.language", + "constant.character", + "constant.other", + "support.constant", + ], + settings: { foreground: c.num }, + }, + { + scope: [ + "punctuation", + "keyword.operator", + "meta.brace", + "punctuation.separator", + "punctuation.terminator", + ], + settings: { foreground: c.pun }, + }, + { + scope: ["variable", "variable.other", "variable.parameter"], + settings: { foreground: c.fg }, + }, + ], + }; +} + +const cipherstashDark = cipherstashTheme("cipherstash-dark", "dark", { + bg: "#0b0b0a", + fg: "#e7e2d4", + com: "#6b6559", + kw: "#b7e64f", + fn: "#5ec8b8", + typ: "#7fd0c4", + str: "#d9b36a", + num: "#e0a35c", + pun: "#9a9486", +}); + +const cipherstashLight = cipherstashTheme("cipherstash-light", "light", { + bg: "#faf9f4", + fg: "#2b2822", + com: "#8b8676", + kw: "#567d0d", + fn: "#15776a", + typ: "#1c8577", + str: "#946618", + num: "#9a5f18", + pun: "#6b6559", +}); + // Parse the leftover code-fence meta string (what remains after Fumadocs // extracts `title`, `tab`, and line-number directives) for the analytics // attributes documented for authors: `example-id`, `cta`, and `cta-type`. @@ -152,11 +292,13 @@ const codeCopyTrackingTransformer: ShikiTransformer = { export default defineConfig({ mdxOptions: { rehypeCodeOptions: { - // Preserve Fumadocs' default Shiki config (themes, parseMetaString) and - // its default transformers (notation highlight, diff, focus, word - // highlight) — passing `transformers` alone would replace them entirely — - // then append our copy-tracking transformer. + // Preserve Fumadocs' default Shiki config (dual-theme mode, + // parseMetaString) and its default transformers (notation highlight, diff, + // focus, word highlight) — passing `transformers` alone would replace them + // entirely — then append our copy-tracking transformer. ...rehypeCodeDefaultOptions, + // Swap GitHub's themes for the CipherStash palette (defined above). + themes: { light: cipherstashLight, dark: cipherstashDark }, transformers: [ ...(rehypeCodeDefaultOptions.transformers ?? []), codeCopyTrackingTransformer, From e18c502247004a1e33e15ba8a4c270e35b130803 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 11:33:32 +1000 Subject: [PATCH 078/151] docs: use Geist Sans for H2+ headings, keep Fira Code for H1 Match the marketing site: H2 and below now render in Geist Sans (loaded via next/font/google), while H1 keeps its Fira Code monospace treatment. Body text and code are unchanged. --- src/app/global.css | 11 +++++++++-- src/app/layout.tsx | 10 ++++++++-- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/src/app/global.css b/src/app/global.css index 2d7a215..da83508 100644 --- a/src/app/global.css +++ b/src/app/global.css @@ -47,14 +47,21 @@ } } -/* ── Typography: Fira Code for headings, labels, code ── */ +/* ── Typography: Fira Code for H1 + code, Geist Sans for H2+ ── */ @layer base { - h1, h2, h3, h4 { + /* H1 keeps the Fira Code monospace treatment. */ + h1 { font-family: var(--font-fira-code), ui-monospace, monospace !important; letter-spacing: -0.02em; } + /* H2 and below use Geist Sans, matching the marketing site. */ + h2, h3, h4, h5, h6 { + font-family: var(--font-geist-sans), var(--font-inter), system-ui, sans-serif !important; + letter-spacing: -0.02em; + } + code, pre, kbd { font-family: var(--font-fira-code), ui-monospace, monospace !important; } diff --git a/src/app/layout.tsx b/src/app/layout.tsx index 33912be..fd09c99 100644 --- a/src/app/layout.tsx +++ b/src/app/layout.tsx @@ -2,7 +2,7 @@ import { RootProvider } from "fumadocs-ui/provider/next"; import { PostHogProvider } from "@/lib/posthog/provider"; import "./global.css"; import type { Metadata } from "next"; -import { Fira_Code, Inter } from "next/font/google"; +import { Fira_Code, Geist, Inter } from "next/font/google"; // Site-wide title template so every page gets a descriptive, branded // <title>. Per-page metadata returns a bare title (e.g. "Keysets") which @@ -27,11 +27,17 @@ const firaCode = Fira_Code({ variable: "--font-fira-code", }); +// Geist Sans for H2 and below, matching the marketing site. H1 stays Fira Code. +const geistSans = Geist({ + subsets: ["latin"], + variable: "--font-geist-sans", +}); + export default function Layout({ children }: LayoutProps<"/">) { return ( <html lang="en" - className={`${inter.variable} ${firaCode.variable} ${inter.className}`} + className={`${inter.variable} ${firaCode.variable} ${geistSans.variable} ${inter.className}`} suppressHydrationWarning > <body className="flex flex-col min-h-screen"> From 8e1f685d9578e46aa0b41728976bc49147f6c0d6 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 11:37:59 +1000 Subject: [PATCH 079/151] docs: relax H4-H6 heading tracking to -0.01em -0.02em reads too tight on the smaller Geist Sans headings; H2-H3 keep it. --- src/app/global.css | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/src/app/global.css b/src/app/global.css index da83508..79d1558 100644 --- a/src/app/global.css +++ b/src/app/global.css @@ -62,6 +62,11 @@ letter-spacing: -0.02em; } + /* Relax the tracking at smaller sizes, where -0.02em reads too tight. */ + h4, h5, h6 { + letter-spacing: -0.01em; + } + code, pre, kbd { font-family: var(--font-fira-code), ui-monospace, monospace !important; } From e9b0a021f23f0907a0d9d031f96d404643a0e7fd Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 15 Jul 2026 14:07:33 +1000 Subject: [PATCH 080/151] docs: retune the code theme to match the marketing site Backport the code syntax palette settled on the marketing site (js-suite #572): rose keywords, purple functions, aqua types, lime strings, a lighter yellow for numbers, and a neutral grey for comments. The dark theme takes those exact values; the light theme uses darkened, readable variants of the same hues so both modes share one hue assignment. --- source.config.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/source.config.ts b/source.config.ts index cd460c5..1239b51 100644 --- a/source.config.ts +++ b/source.config.ts @@ -194,25 +194,25 @@ function cipherstashTheme( const cipherstashDark = cipherstashTheme("cipherstash-dark", "dark", { bg: "#0b0b0a", - fg: "#e7e2d4", - com: "#6b6559", - kw: "#b7e64f", - fn: "#5ec8b8", + fg: "#eae8dd", + com: "#8f8f8f", + kw: "#d77595", + fn: "#d2a8ff", typ: "#7fd0c4", - str: "#d9b36a", - num: "#e0a35c", + str: "#c8f031", + num: "#f4dd63", pun: "#9a9486", }); const cipherstashLight = cipherstashTheme("cipherstash-light", "light", { bg: "#faf9f4", fg: "#2b2822", - com: "#8b8676", - kw: "#567d0d", - fn: "#15776a", + com: "#7a7a7a", + kw: "#a63057", + fn: "#8250df", typ: "#1c8577", - str: "#946618", - num: "#9a5f18", + str: "#567d0d", + num: "#977c11", pun: "#6b6559", }); From 8d267e8a54cf574fe9e4718b19d776aba340485e Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 27 Jul 2026 19:41:27 +1000 Subject: [PATCH 081/151] docs: document eql_v3.grouped_value and fix the GROUP BY / DISTINCT shapes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EQL #423 added `eql_v3.grouped_value`, the aggregate that lets a query project an encrypted column while grouping by that column's equality term. Documenting it exposed two wrong claims on the grouping page: that `GROUP BY email` and `SELECT DISTINCT email` work in natural form, and that grouping compares equality terms. Neither is true — an encrypted column is a domain over jsonb with no custom operator class, so Postgres compares the raw (randomised) ciphertext and never collapses two encryptions of the same value. - Group on `eql_v3.eq_term(col)` for correctness first, planner economics second; drop the "raise work_mem if an ORM forces the raw form" advice, which rescued the performance of a query that was already returning wrong answers. - New `grouped_value` section: the 42803 rejection it fixes, the shape that fixes it, and its semantics (first non-null per group, all-NULL group is NULL, parallel safe, returns its input unchanged). - Deduplication is `DISTINCT ON (eql_v3.eq_term(col)) col` with the matching leading ORDER BY. Plain DISTINCT is not supported; `DISTINCT ON` has no projection restriction, so `grouped_value` is not involved there. - Same correction to the Indexes page's GROUP BY section, and grouped_value in the MIN/MAX and JSON-leaf examples. grouped_value landed after eql-3.0.2, so the page carries a version callout (with the 3.0.x join-back workaround) and the drift check gets an UNRELEASED allowlist — reported on every run, and deleted when EQL_RELEASE_TAG is bumped to a release whose manifest covers it. --- .../reference/eql/grouping-and-aggregates.mdx | 76 ++++++++++++++----- content/docs/reference/eql/index.mdx | 2 +- content/docs/reference/eql/indexes.mdx | 10 ++- scripts/generate-eql-api-docs.ts | 21 +++++ 4 files changed, 88 insertions(+), 21 deletions(-) diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx index 8798d33..55c4785 100644 --- a/content/docs/reference/eql/grouping-and-aggregates.mdx +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -1,6 +1,6 @@ --- title: Grouping & aggregates -description: "GROUP BY, DISTINCT, COUNT, and eql_v3.min/max on encrypted columns — why to group on the extractor, and why SUM and AVG stay client-side." +description: "GROUP BY on the equality term, eql_v3.grouped_value, DISTINCT ON, COUNT, and eql_v3.min/max on encrypted columns — and why SUM and AVG stay client-side." type: reference components: [eql] verifiedAgainst: @@ -9,32 +9,71 @@ verifiedAgainst: <EqlVersion /> -Grouping and deduplication need an equality term, so they work on the same variants as `=`: `_eq`, every `_ord` variant, and the `text_search` variants. `MIN` / `MAX` need an ordering term (any `_ord` variant, or `text_search`). Arithmetic aggregates don't work at all — that's the last section. As everywhere, operands and call-site casts must be typed; see [Core concepts](/reference/eql/core-concepts). +Grouping and deduplication key on the **equality term**, never on the stored ciphertext, so they work on the same variants as `=`: `_eq`, every `_ord` variant, and the `text_search` variants. `MIN` / `MAX` need an ordering term (any `_ord` variant, or `text_search`). Arithmetic aggregates don't work at all — that's the last section. As everywhere, operands and call-site casts must be typed; see [Core concepts](/reference/eql/core-concepts). -## `GROUP BY` and `DISTINCT` +## Group on the equality term -Both work in natural form on equality-capable variants: +Encryption is non-deterministic: the same plaintext encrypts to a different ciphertext every time. An encrypted column is a domain over `jsonb`, and Postgres groups a domain using the *base type's* comparison — so `GROUP BY email` compares whole encrypted payloads and puts almost every row in a group of its own. There's no error, just wrong answers. + +Group on the equality term instead. It's a deterministic keyed hash, identical for equal plaintexts: ```sql -SELECT email, COUNT(*) FROM logins GROUP BY email; -SELECT DISTINCT email FROM logins; +SELECT COUNT(*) + FROM logins + GROUP BY eql_v3.eq_term(email); ``` -Grouping compares equality terms, so rows encrypting the same plaintext land in the same group — but the group key that comes back is ciphertext. Decrypt it in the client if you need to display it. +The term is an HMAC — opaque and one-way — so there's rarely a reason to select it. To get the encrypted value back alongside the aggregate, use [`eql_v3.grouped_value`](#grouped-value). -## Group on the extractor +Grouping on the extractor is also what makes the query fast. `GROUP BY email` would use the entire encrypted payload — 1–2 KB per row — as the hash key: Postgres estimates a hash table far larger than the default `work_mem` and falls back to a disk-spilling `GroupAggregate`. The extractor key is small, so the hash table fits in `work_mem` and the planner picks `HashAggregate` reliably. The same reasoning, from the index-tuning angle, is in [Indexes](/reference/eql/indexes). -For anything beyond small tables, group on the equality-term extractor instead of the raw column: +## Projecting the encrypted value: `eql_v3.grouped_value` [#grouped-value] + +Once you group by the term, Postgres rejects a bare reference to the column — it can't prove the column is constant within each group: ```sql -SELECT eql_v3.eq_term(email) AS email_term, COUNT(*) +SELECT email, COUNT(*) -- ERROR: column "logins.email" must appear in the + FROM logins -- GROUP BY clause or be used in an aggregate + GROUP BY eql_v3.eq_term(email); -- function (SQLSTATE 42803) +``` + +Every row in a group encrypts the same plaintext, so any one of them represents the group. `eql_v3.grouped_value` is the aggregate that hands one back: + +```sql +SELECT eql_v3.grouped_value(email) AS email, COUNT(*) FROM logins GROUP BY eql_v3.eq_term(email); ``` -The reason is planner economics. `GROUP BY email` uses the entire encrypted payload — 1–2 KB per row — as the hash key. Postgres estimates a hash table far larger than the default `work_mem` and falls back to a disk-spilling `GroupAggregate`. The extractor key is a small deterministic term: the hash table fits in `work_mem` and the planner picks `HashAggregate` reliably. If an ORM forces the raw-column form, raising `work_mem` is the rescue knob — but the extractor form is the design. The same reasoning, from the index-tuning angle, is in [Indexes](/reference/eql/indexes). +What comes back is a real encrypted payload, which the client decrypts as usual — unlike the group key itself, which is a term and can never be decrypted. + +```sql +eql_v3.grouped_value(jsonb) RETURNS jsonb +``` + +One aggregate covers every encrypted type: all the domains are jsonb-backed, and `grouped_value` returns its input unchanged — it never decrypts, inspects, or compares the value. Three details worth knowing: + +- It returns the **first non-`NULL`** value in each group. Which value is "first" is arbitrary without an intra-aggregate `ORDER BY`, and not deterministic under parallel aggregation — that's fine here, because every member of the group is an encryption of the same plaintext. +- A group of all-`NULL` values aggregates to `NULL`, matching native aggregate semantics. +- It's `PARALLEL SAFE` with a combine function, so it survives partial aggregation on large `GROUP BY` workloads. + +<Callout type="info"> +**Requires an EQL release later than 3.0.2.** `eql_v3.grouped_value` was added in [encrypt-query-language#423](https://github.com/cipherstash/encrypt-query-language/pull/423) and ships in the next EQL release; it re-creates the `grouped_value` aggregate the EQL v2 surface had. On 3.0.x, group by the term and join the grouped result back to the table on that term to recover a representative encrypted value, then decrypt that in the client. +</Callout> + +## Deduplicating: `DISTINCT ON` the equality term + +Plain `SELECT DISTINCT email` is not supported, for the same reason: it deduplicates raw ciphertext, so two encryptions of one value are never collapsed and you get every row back. + +Deduplicate on the term with `DISTINCT ON`. Unlike `GROUP BY`, it puts no restriction on the projection, so you select the encrypted column directly and no aggregate is involved: + +```sql +SELECT DISTINCT ON (eql_v3.eq_term(email)) email + FROM logins + ORDER BY eql_v3.eq_term(email); +``` -Note the trade-off: grouping on `eq_term` returns the *term*, not the encrypted value — fine for counting, but the term itself can't be decrypted. If you need the group key's plaintext, join the grouped result back to the table on the term to recover a representative encrypted value, then decrypt that in the client. +The leading `ORDER BY` expression has to match the `DISTINCT ON` expression — Postgres requires it — and the row that survives each group is the first one in that order, so add further sort keys after it to choose which. That's the no-aggregate path; reach for `grouped_value` when you also want a per-group aggregate like `COUNT(*)`. ## `COUNT` and `COUNT(DISTINCT)` @@ -44,7 +83,7 @@ Plain `COUNT(col)` counts non-`NULL` rows — it never compares values, so it wo SELECT COUNT(tax_id) FROM users; -- works even on bare public.eql_v3_text ``` -`COUNT(DISTINCT col)` deduplicates, so it needs an equality-capable variant — and the same extractor advice applies: +`COUNT(DISTINCT col)` deduplicates, so it has the ciphertext problem too: on the raw column it counts distinct ciphertexts, which is just the row count. Count distinct terms instead: ```sql SELECT COUNT(DISTINCT eql_v3.eq_term(email)) FROM logins; @@ -69,8 +108,10 @@ Comparison routes through the variant's `<` / `>` operator on the ordering term SELECT eql_v3.min(salary) FROM users; SELECT eql_v3.max(salary) FROM users WHERE department = 'engineering'; --- Combined with grouping -SELECT eql_v3.eq_term(department_code) AS dept, eql_v3.max(salary) +-- Combined with grouping: grouped_value returns the department code encrypted, +-- so the client can decrypt it to label the row. +SELECT eql_v3.grouped_value(department_code) AS department_code, + eql_v3.max(salary) FROM users GROUP BY eql_v3.eq_term(department_code); ``` @@ -94,12 +135,13 @@ A btree on `eql_v3.ord_term(col)` serves `MIN` / `MAX` — the [Indexes](/refere Leaves inside an encrypted JSON document group the same way — extract the entry by selector, then group on its equality term: ```sql -SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) +SELECT eql_v3.grouped_value(metadata -> 'region_selector'::text) AS region, + COUNT(*) FROM orders GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); ``` -`eql_v3.eq_term` reads whichever term the entry carries, so this works on every JSON node type. String and Number leaves also support `eql_v3.min` / `eql_v3.max` via their CLLW OPE term. Selectors and node capabilities are in [JSON](/reference/eql/json). +An extracted entry is a `public.eql_v3_jsonb_entry`, jsonb-backed like every other encrypted domain, so `grouped_value` and `DISTINCT ON (eql_v3.eq_term(...))` both apply unchanged. `eql_v3.eq_term` reads whichever term the entry carries, so this works on every JSON node type. String and Number leaves also support `eql_v3.min` / `eql_v3.max` via their CLLW OPE term. Selectors and node capabilities are in [JSON](/reference/eql/json). ## Where to go next diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index 693645a..92291db 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -173,7 +173,7 @@ EQL v3 is designed to install without superuser. There are no custom operator cl `ORDER BY` on encrypted columns, and how to keep the sort in the index. </Card> <Card title="Grouping and aggregates" href="/reference/eql/grouping-and-aggregates"> - `GROUP BY`, `DISTINCT`, `COUNT`, and the `MIN` / `MAX` aggregates. + `GROUP BY` on the equality term, `DISTINCT ON`, `COUNT`, and the `MIN` / `MAX` aggregates. </Card> <Card title="Joins" href="/reference/eql/joins"> Equijoins on encrypted columns and the same-keyset rule. diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index d518cbd..1074747 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -115,15 +115,19 @@ If you `SELECT col::jsonb ... ORDER BY col`, Postgres folds the cast into the sc ### GROUP BY and DISTINCT -Group on the extractor, not the raw column: +Group and deduplicate on the extractor, not the raw column: ```sql -SELECT eql_v3.eq_term(email), count(*) +SELECT eql_v3.grouped_value(email) AS email, count(*) FROM users GROUP BY eql_v3.eq_term(email); + +SELECT DISTINCT ON (eql_v3.eq_term(email)) email + FROM users + ORDER BY eql_v3.eq_term(email); ``` -`GROUP BY email` uses the entire encrypted payload (1–2 KB per row) as the hash key; Postgres estimates a hash table far larger than the default `work_mem` and falls back to a disk-spilling `GroupAggregate`. The extractor key is a small deterministic term, so the hash table fits in `work_mem` and the planner picks `HashAggregate` reliably. If an ORM forces the raw-column form, raising `work_mem` is the rescue knob — but the extractor form is the design. +The extractor form is a correctness requirement before it's a tuning one: encryption is non-deterministic and the column is a domain over `jsonb`, so `GROUP BY email` and `SELECT DISTINCT email` compare raw ciphertext and never collapse two encryptions of the same value. It's also the faster shape — `GROUP BY email` uses the entire encrypted payload (1–2 KB per row) as the hash key, so Postgres estimates a hash table far larger than the default `work_mem` and falls back to a disk-spilling `GroupAggregate`, while the small deterministic term fits in `work_mem` and gets a `HashAggregate`. Full treatment in [Grouping and aggregates](/reference/eql/grouping-and-aggregates). ## Encrypted JSON diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index 609954d..c895923 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -443,6 +443,7 @@ function driftCheck(manifest: Manifest): string[] { const unknown: string[] = []; for (const [fqn, pages] of referenced) { if (known.has(fqn) || MANIFEST_BLIND_SPOTS.has(fqn)) continue; + if (UNRELEASED.has(fqn)) continue; unknown.push(`${fqn} (in ${[...pages].join(", ")})`); } return unknown.sort(); @@ -461,6 +462,22 @@ function driftCheck(manifest: Manifest): string[] { // them. const MANIFEST_BLIND_SPOTS = new Set(["eql_v3.query_text_eq"]); +// Symbols merged into EQL but not yet in the pinned release, documented ahead of +// it because a page would otherwise teach a workaround for a solved problem. The +// manifest can't resolve them, so they're allowlisted here — and reported on +// every run, so the list stays visible rather than becoming a quiet exemption. +// +// The page documenting one MUST carry a version callout saying which release it +// needs. Delete the entry when EQL_RELEASE_TAG (scripts/generate-eql-docs.ts) is +// bumped to a release that ships it: the manifest covers it from then on, and +// the drift check goes back to being the authority. +const UNRELEASED = new Map([ + [ + "eql_v3.grouped_value", + "added after eql-3.0.2 in cipherstash/encrypt-query-language#423; documented in grouping-and-aggregates.mdx", + ], +]); + // ── Main ───────────────────────────────────────────────────────────────────── function main() { const manifest = loadManifest(); @@ -482,6 +499,10 @@ function main() { `✓ Generated ${path.relative(process.cwd(), OUT_FILE)} from EQL ${manifest.version} (${manifest.functions.length} functions)`, ); + for (const [fqn, why] of UNRELEASED) { + console.log(`• Drift check: ${fqn} allowlisted as unreleased — ${why}`); + } + const unknown = driftCheck(manifest); if (unknown.length) { const header = `⚠ ${unknown.length} schema-qualified symbol(s) referenced in hand-written pages are not in the manifest (domains or functions):`; From 2376fe973304dcbf5dfd71383a40d41395fc6f8b Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 27 Jul 2026 22:15:15 +1000 Subject: [PATCH 082/151] =?UTF-8?q?docs:=20address=20review=20=E2=80=94=20?= =?UTF-8?q?restore=20heading,=20flag=20broken=20examples,=20drop=20version?= =?UTF-8?q?=20note?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Restore the `GROUP BY` and `DISTINCT` heading, and fold deduplication back under it: one section for how both operators must be written, with the `grouped_value` projection following as its own section. - Add a `BadExample` component (rustdoc `compile_fail` styling: red frame, explicit label, verbatim error) so a broken example can't be mistaken for a working one while skimming, and use it for the two broken shapes here — the natural `GROUP BY` / `DISTINCT` forms, and the bare column under GROUP BY. - Drop the unreleased-version callout. --- .../reference/eql/grouping-and-aggregates.mdx | 60 ++++++++++--------- src/components/bad-example.tsx | 48 +++++++++++++++ src/mdx-components.tsx | 2 + 3 files changed, 83 insertions(+), 27 deletions(-) create mode 100644 src/components/bad-example.tsx diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx index 55c4785..8fa7ef2 100644 --- a/content/docs/reference/eql/grouping-and-aggregates.mdx +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -11,32 +11,54 @@ verifiedAgainst: Grouping and deduplication key on the **equality term**, never on the stored ciphertext, so they work on the same variants as `=`: `_eq`, every `_ord` variant, and the `text_search` variants. `MIN` / `MAX` need an ordering term (any `_ord` variant, or `text_search`). Arithmetic aggregates don't work at all — that's the last section. As everywhere, operands and call-site casts must be typed; see [Core concepts](/reference/eql/core-concepts). -## Group on the equality term +## `GROUP BY` and `DISTINCT` -Encryption is non-deterministic: the same plaintext encrypts to a different ciphertext every time. An encrypted column is a domain over `jsonb`, and Postgres groups a domain using the *base type's* comparison — so `GROUP BY email` compares whole encrypted payloads and puts almost every row in a group of its own. There's no error, just wrong answers. +Encryption is non-deterministic: the same plaintext encrypts to a different ciphertext every time. An encrypted column is a domain over `jsonb`, and Postgres compares a domain using the *base type's* comparison — so the natural forms compare whole encrypted payloads, never the plaintext behind them. They raise no error; they just answer wrongly. -Group on the equality term instead. It's a deterministic keyed hash, identical for equal plaintexts: +<BadExample label="Doesn't work — compares raw ciphertext"> + +```sql +SELECT email, COUNT(*) FROM logins GROUP BY email; -- one group per row +SELECT DISTINCT email FROM logins; -- every row comes back +``` + +</BadExample> + +Key on the equality term instead. It's a deterministic keyed hash, identical for equal plaintexts: ```sql SELECT COUNT(*) FROM logins GROUP BY eql_v3.eq_term(email); + +SELECT DISTINCT ON (eql_v3.eq_term(email)) email + FROM logins + ORDER BY eql_v3.eq_term(email); ``` -The term is an HMAC — opaque and one-way — so there's rarely a reason to select it. To get the encrypted value back alongside the aggregate, use [`eql_v3.grouped_value`](#grouped-value). +Plain `DISTINCT` has nowhere to put the term, so deduplication is `DISTINCT ON`. Postgres requires the leading `ORDER BY` expression to match the `DISTINCT ON` expression, and the row that survives each group is the first one in that order — add further sort keys after it to choose which. + +The term is an HMAC — opaque and one-way — so there's rarely a reason to select it. `DISTINCT ON` puts no restriction on the projection, so the encrypted column comes back alongside it for the client to decrypt; under `GROUP BY` that takes [`eql_v3.grouped_value`](#grouped-value). -Grouping on the extractor is also what makes the query fast. `GROUP BY email` would use the entire encrypted payload — 1–2 KB per row — as the hash key: Postgres estimates a hash table far larger than the default `work_mem` and falls back to a disk-spilling `GroupAggregate`. The extractor key is small, so the hash table fits in `work_mem` and the planner picks `HashAggregate` reliably. The same reasoning, from the index-tuning angle, is in [Indexes](/reference/eql/indexes). +Keying on the extractor is also what makes the query fast. `GROUP BY email` would use the entire encrypted payload — 1–2 KB per row — as the hash key: Postgres estimates a hash table far larger than the default `work_mem` and falls back to a disk-spilling `GroupAggregate`. The extractor key is small, so the hash table fits in `work_mem` and the planner picks `HashAggregate` reliably. The same reasoning, from the index-tuning angle, is in [Indexes](/reference/eql/indexes). -## Projecting the encrypted value: `eql_v3.grouped_value` [#grouped-value] +## `eql_v3.grouped_value` [#grouped-value] -Once you group by the term, Postgres rejects a bare reference to the column — it can't prove the column is constant within each group: +Grouping by the term costs you the column: Postgres rejects a bare reference to it, because it can't prove the column is constant within each group. + +<BadExample + label="Doesn't work — bare column under GROUP BY" + error={`ERROR: column "logins.email" must appear in the GROUP BY clause or be used in an aggregate function (SQLSTATE 42803)`} +> ```sql -SELECT email, COUNT(*) -- ERROR: column "logins.email" must appear in the - FROM logins -- GROUP BY clause or be used in an aggregate - GROUP BY eql_v3.eq_term(email); -- function (SQLSTATE 42803) +SELECT email, COUNT(*) + FROM logins + GROUP BY eql_v3.eq_term(email); ``` +</BadExample> + Every row in a group encrypts the same plaintext, so any one of them represents the group. `eql_v3.grouped_value` is the aggregate that hands one back: ```sql @@ -57,23 +79,7 @@ One aggregate covers every encrypted type: all the domains are jsonb-backed, and - A group of all-`NULL` values aggregates to `NULL`, matching native aggregate semantics. - It's `PARALLEL SAFE` with a combine function, so it survives partial aggregation on large `GROUP BY` workloads. -<Callout type="info"> -**Requires an EQL release later than 3.0.2.** `eql_v3.grouped_value` was added in [encrypt-query-language#423](https://github.com/cipherstash/encrypt-query-language/pull/423) and ships in the next EQL release; it re-creates the `grouped_value` aggregate the EQL v2 surface had. On 3.0.x, group by the term and join the grouped result back to the table on that term to recover a representative encrypted value, then decrypt that in the client. -</Callout> - -## Deduplicating: `DISTINCT ON` the equality term - -Plain `SELECT DISTINCT email` is not supported, for the same reason: it deduplicates raw ciphertext, so two encryptions of one value are never collapsed and you get every row back. - -Deduplicate on the term with `DISTINCT ON`. Unlike `GROUP BY`, it puts no restriction on the projection, so you select the encrypted column directly and no aggregate is involved: - -```sql -SELECT DISTINCT ON (eql_v3.eq_term(email)) email - FROM logins - ORDER BY eql_v3.eq_term(email); -``` - -The leading `ORDER BY` expression has to match the `DISTINCT ON` expression — Postgres requires it — and the row that survives each group is the first one in that order, so add further sort keys after it to choose which. That's the no-aggregate path; reach for `grouped_value` when you also want a per-group aggregate like `COUNT(*)`. +Deduplicating without a per-group aggregate needs none of this — that's `DISTINCT ON`, above. ## `COUNT` and `COUNT(DISTINCT)` diff --git a/src/components/bad-example.tsx b/src/components/bad-example.tsx new file mode 100644 index 0000000..4da2ca2 --- /dev/null +++ b/src/components/bad-example.tsx @@ -0,0 +1,48 @@ +import { CircleX } from "lucide-react"; + +interface BadExampleProps { + /** Short label for the header strip. */ + label?: string; + /** Verbatim error the example produces, rendered as a footer. */ + error?: string; + /** The example itself (a fenced code block). */ + children: React.ReactNode; +} + +/** + * A code example that does NOT work, styled so a reader skimming the page can + * never mistake it for one that does — the failure mode of showing broken SQL + * in the same grey box as the fix. + * + * Modelled on rustdoc's `compile_fail` blocks: red frame, an explicit label, + * and (optionally) the verbatim error underneath. The example keeps the site's + * syntax highlighting and copy button, because a reader reproducing the failure + * is a legitimate thing to want. + */ +export function BadExample({ + label = "Doesn't work", + error, + children, +}: BadExampleProps) { + return ( + <div className="my-4 overflow-hidden rounded-lg border border-red-500/40 bg-red-500/[0.04]"> + <div className="flex items-center gap-1.5 border-b border-red-500/30 bg-red-500/10 px-3 py-1.5"> + <CircleX + className="size-3.5 shrink-0 text-red-700 dark:text-red-400" + aria-hidden="true" + /> + <span className="text-[11px] font-semibold uppercase tracking-wide text-red-700 dark:text-red-400"> + {label} + </span> + </div> + + <div className="p-3 [&>*]:!my-0">{children}</div> + + {error ? ( + <p className="border-t border-red-500/20 px-3 py-2 font-mono text-xs leading-relaxed text-red-700 dark:text-red-400"> + {error} + </p> + ) : null} + </div> + ); +} diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index 17e7aa1..57411a1 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -2,6 +2,7 @@ import { Callout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; import defaultMdxComponents from "fumadocs-ui/mdx"; import type { MDXComponents } from "mdx/types"; +import { BadExample } from "@/components/bad-example"; import { TrackedCodeBlock } from "@/components/code-block"; import { EqlFn } from "@/components/eql-fn"; import { EqlVersion } from "@/components/eql-version"; @@ -16,6 +17,7 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents { Callout, Steps, Step, + BadExample, EqlVersion, EqlFn, ZeroKmsRegions, From cab3fc2d0be99639a187fb346815fe1019cbf8ca Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Mon, 27 Jul 2026 22:42:11 +1000 Subject: [PATCH 083/151] docs: pin EQL 3.0.3 and fix the fuzzy-match and encrypted-JSON surfaces MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Documenting U-011 (the empty-bloom fuzzy-match guard, shipped in 3.0.3) meant moving EQL_RELEASE_TAG off 3.0.0, and the strict drift check then reported what the pin had been hiding: 3.0.1 renamed the whole encrypted-JSON surface and replaced the text match operator, and the hand-written pages still taught the 3.0.0 spelling of both. Every customer on a released 3.0.x has been reading docs whose text-match and JSON examples raise. Text fuzzy match (U-008, U-011): - `@>` / `<@` and `eql_v3.contains` / `contained_by` on text_match, text_search and text_search_ore are now `@@` / `eql_v3.matches`; the old spellings raise, and the pages say so. - Document the empty-needle guard as a LIKE truth table: a sub-floor search term (no trigrams, `bf: []`) used to match every row and now matches only empty-bloom values. - Note the one regression it carries: `matches` is non-STRICT and names the needle twice, so a needle from an uncorrelated subquery stops inlining and loses the GIN index. Bind parameters and literals are unaffected. Encrypted JSON (U-007, U-010): - eql_v3_json → eql_v3_json_search, eql_v3_jsonb_entry → eql_v3_json_entry, query_jsonb → query_json; the bare eql_v3_json is now storage-only. - Field equality is value-selector containment, not `=` on an extracted leaf (which raises). `eq_term` on an entry is a deprecated alias for `ope_term` and is not an exact equality term — so JSON leaves can no longer be grouped by equality at all, which the grouping page now states outright. - Wire format: document-level key header `h`, no root `c`, selector-derived nonces, sentinel value entries, `hm` retired. - `jsonb_array_elements_text` was removed; entry ciphertext is not independently decryptable. Tooling: - The fragment generator keyed the match card off a `match` capability the 3.0.1 catalog no longer emits (text_match now reports `["storage"]` with `supportedOperators: ["@@"]`), so the text function catalog silently lost its match entry. It now keys off the operator and renders `eql_v3.matches`. - Drift check: exempt lines that name a symbol in order to say it is gone, so a rename note can name the old symbol — the same line-local exemption validate-content-api.ts makes. - Two more manifest blind spots, both verified present in the 3.0.3 install SQL: `eql_v3.grouped_value` (hand-written CREATE AGGREGATE; the catalog only contributes the 60 generated min/max aggregates) and `public.eql_v3_json` (created in a DO block, like the query-operand domains). Generated artifacts (functions.mdx, the partials, eql-version.ts, the stack EQL API page) are left alone: prebuild regenerates them from the pinned release, and the committed copies are placeholders — the stack one still says EQL 2.3.0-pre.3. --- content/docs/reference/eql/core-concepts.mdx | 30 ++-- content/docs/reference/eql/filtering.mdx | 27 ++-- .../reference/eql/grouping-and-aggregates.mdx | 19 ++- content/docs/reference/eql/indexes.mdx | 23 ++- content/docs/reference/eql/json.mdx | 145 ++++++++++-------- content/docs/reference/eql/text.mdx | 50 ++++-- scripts/generate-eql-api-docs.ts | 115 ++++++++------ scripts/generate-eql-docs.ts | 10 +- 8 files changed, 246 insertions(+), 173 deletions(-) diff --git a/content/docs/reference/eql/core-concepts.mdx b/content/docs/reference/eql/core-concepts.mdx index 2b6ada8..fb6a239 100644 --- a/content/docs/reference/eql/core-concepts.mdx +++ b/content/docs/reference/eql/core-concepts.mdx @@ -4,7 +4,7 @@ description: "The model behind every EQL page: domain variants that declare capa type: reference components: [eql] verifiedAgainst: - eql: "3.0.0" + eql: "3.0.3" --- <EqlVersion /> @@ -26,11 +26,11 @@ For any scalar type `<T>`, the family looks like this: | `public.eql_v3_<T>_ord` | Comparisons (`<` … `>=`), `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | | `public.eql_v3_<T>_ord_ope` | The byte-identical twin of `_ord`, with OPE pinned. See [SEM specifiers](#sem-specifiers). | | `public.eql_v3_<T>_ord_ore` | As `_ord`, with block-ORE pinned. | -| `public.eql_v3_text_match` (text only) | Free-text token containment: `@>` / `<@`. | -| `public.eql_v3_text_search` (text only) | Equality + ordering + token containment. | +| `public.eql_v3_text_match` (text only) | Free-text fuzzy match: `@@`. | +| `public.eql_v3_text_search` (text only) | Equality + ordering + fuzzy match. | | `public.eql_v3_text_search_ore` (text only) | As `text_search`, with block-ORE pinned. | -Every public domain name carries the `eql_v3_` prefix. It keeps EQL's types from shadowing built-in Postgres type names such as `text` and `json`, and gives each EQL version its own column-type namespace so two versions can coexist. Query-operand domains live in the versioned `eql_v3` schema already, so they are unprefixed: `eql_v3.query_text_eq`, `eql_v3.query_jsonb`. +Every public domain name carries the `eql_v3_` prefix. It keeps EQL's types from shadowing built-in Postgres type names such as `text` and `json`, and gives each EQL version its own column-type namespace so two versions can coexist. Query-operand domains live in the versioned `eql_v3` schema already, so they are unprefixed: `eql_v3.query_text_eq`, `eql_v3.query_json`. Two things worth calling out: @@ -70,7 +70,7 @@ CREATE TABLE users ( ); ``` -Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.0 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use a separate domain, `public.eql_v3_json`, with its own operator surface — see [JSON](/reference/eql/json). +Every scalar type — `int2`, `int4`, `int8`, `numeric`, `float4`, `float8`, `date`, `timestamp`, `text`, and `bool` in EQL 3.0.3 — ships some subset of this family. The per-category pages list exactly which variants each type has and how to choose between them: [Numbers](/reference/eql/numbers), [Dates & times](/reference/eql/dates-and-times), [Text](/reference/eql/text), and [Booleans](/reference/eql/booleans). Encrypted JSON documents use separate domains — `public.eql_v3_json_search` for searchable documents, `public.eql_v3_json` for storage-only ones — with their own operator surface; see [JSON](/reference/eql/json). ## The three schemas @@ -117,9 +117,9 @@ Alongside the envelope, a payload carries the index terms for its column's capab | Key | SEM type | Wire shape | Enables | Reveals | | --- | --- | --- | --- | --- | | `hm` | `eql_v3_internal.hmac_256` (domain over `text`) | Hex string (HMAC-SHA-256) | `=`, `<>` on `_eq` and `text_search` domains | Whether two values are equal — nothing else | -| `op` | `eql_v3_internal.ope_cllw` (domain over `bytea`) | Hex-encoded CLLW OPE ciphertext | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ope` domains and `text_search`, and on String / Number leaves of `public.eql_v3_json` | The relative order of two values | +| `op` | `eql_v3_internal.ope_cllw` (domain over `bytea`) | Hex-encoded CLLW OPE ciphertext | `<`, `<=`, `>`, `>=`, `ORDER BY` on `_ord` / `_ord_ope` domains and `text_search`, and on String / Number leaves of `public.eql_v3_json_search` | The relative order of two values | | `ob` | `eql_v3_internal.ore_block_256` (composite: array of `bytea` block terms) | Array of hex-encoded ORE blocks (block count varies by scalar width) | The same comparisons on the pinned `_ord_ore` and `text_search_ore` domains — and `=` / `<>`, since ORE comparison collapses to equality | The relative order of two values | -| `bf` | `eql_v3_internal.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit — large filters emit negative positions) | `@>` / `<@` token containment on `_match` domains | Probabilistic token overlap between values | +| `bf` | `eql_v3_internal.bloom_filter` (domain over `smallint[]`) | Array of set bit positions (**signed** 16-bit — large filters emit negative positions) | `@@` fuzzy match on `_match` and `text_search` domains | Probabilistic token overlap between values | The capability is encoded as **required keys**: the payload for a `public.eql_v3_text_eq` column must carry `hm`; a `public.eql_v3_integer_ord` payload must carry `op` (and only `op`); a `text_match` payload must carry `bf`; a `text_search` payload carries `hm`, `op`, and `bf`. A payload missing its term key fails the domain `CHECK` — and fails to deserialize in the client bindings. @@ -139,9 +139,9 @@ A scalar payload for a `public.eql_v3_text_search` column (lookup + ordering + f - `v`, `i`, `c` — the envelope - `hm` — equality term: `WHERE email = $1` compares this - `ob` — ordering term: `ORDER BY` and range comparisons walk these blocks -- `bf` — bloom-filter term: `@>` token containment tests these bit positions +- `bf` — bloom-filter term: `@@` fuzzy match tests these bit positions -Encrypted JSON documents use a different payload shape — an `sv` array with one encrypted entry per path in the document instead of a root ciphertext — defined in [JSON](/reference/eql/json). +Encrypted JSON documents use a different payload shape — a document-level key header `h` and an `sv` array with one encrypted entry per path, instead of a root ciphertext — defined in [JSON](/reference/eql/json). ### Machine-readable schemas @@ -154,12 +154,16 @@ The [EQL repository](https://github.com/cipherstash/encrypt-query-language) publ The `eql_v3` domains are backed by `jsonb`. When an operand has no known type — a bare string literal, an untyped parameter — PostgreSQL reduces the domain to its `jsonb` base type and resolves the **native `jsonb` operator** instead of the encrypted one. The query doesn't fail; it silently returns native `jsonb` semantics, which are meaningless for encrypted payloads. +<BadExample label="Silently wrong — untyped parameter resolves the native jsonb operator"> + ```sql --- ❌ Wrong: untyped parameter. PostgreSQL falls back to the native jsonb `=`, --- which compares raw payloads — syntactically valid, semantically meaningless. SELECT * FROM users WHERE email = $1; +``` --- ✅ Right: typed operand — the encrypted `=` resolves. +</BadExample> + +```sql +-- Typed operand — the encrypted `=` resolves. SELECT * FROM users WHERE email = $1::public.eql_v3_text_eq; ``` @@ -179,7 +183,7 @@ SELECT * FROM users WHERE salary > $1::public.eql_v3_bigint_eq; A `NULL` operand still raises — the blockers are deliberately not `STRICT`, so PostgreSQL can't skip the check. (A SQL `NULL` column value is not encrypted, so `IS NULL` / `IS NOT NULL` themselves always work, on every variant.) -`LIKE` and `ILIKE` are blocked on **every** encrypted variant — pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter token containment instead; [Text](/reference/eql/text) covers it. +`LIKE` and `ILIKE` are blocked on **every** encrypted variant — pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter fuzzy match (`@@`) instead; [Text](/reference/eql/text) covers it. One equality subtlety follows from the term table above, and it splits on whether the column is text. diff --git a/content/docs/reference/eql/filtering.mdx b/content/docs/reference/eql/filtering.mdx index f81a6bf..b7f282b 100644 --- a/content/docs/reference/eql/filtering.mdx +++ b/content/docs/reference/eql/filtering.mdx @@ -4,7 +4,7 @@ description: "WHERE-clause patterns on encrypted columns: equality, IN lists, ra type: reference components: [eql] verifiedAgainst: - eql: "3.0.0" + eql: "3.0.3" --- <EqlVersion /> @@ -60,33 +60,32 @@ WHERE occurred_at >= $1::public.eql_v3_timestamp_ord AND occurred_at < $2::public.eql_v3_timestamp_ord; ``` -## Text token matching: `@>` +## Text fuzzy matching: `@@` -There is no `LIKE` on encrypted columns — encrypted free-text matching is bloom-filter token containment via `@>` on a `text_match` or `text_search` column: +There is no `LIKE` on encrypted columns — encrypted free-text matching is bloom-filter fuzzy match via `@@` on a `text_match` or `text_search` column: ```sql -SELECT * FROM users WHERE name @> $1::public.eql_v3_text_match; +SELECT * FROM users WHERE name @@ $1::public.eql_v3_text_match; ``` -The client encrypts the search term into a bloom-filter query value; matching is probabilistic (false positives possible, false negatives not). For the full no-`LIKE` story and match-term tuning, see [Text](/reference/eql/text). +The client encrypts the search term into a bloom-filter query value; matching is probabilistic (false positives possible, false negatives not). `@>` / `<@` raise on these domains — they were the old spelling of this match and are now blockers. For the full no-`LIKE` story, short-term behaviour, and match-term tuning, see [Text](/reference/eql/text). ## JSON containment and path filters -Encrypted JSON documents (`public.eql_v3_json`) filter by containment and path existence: +Encrypted JSON documents (`public.eql_v3_json_search`) filter by containment and path existence: ```sql -- Does the document contain this (encrypted) structure? -SELECT * FROM orders WHERE metadata @> $1::eql_v3.query_jsonb; +SELECT * FROM orders WHERE metadata @> $1::eql_v3.query_json; -- Does this path exist in the document? SELECT * FROM orders WHERE eql_v3.jsonb_path_exists(metadata, 'region_selector'); --- Equality on an extracted leaf -SELECT * FROM orders -WHERE metadata -> 'email_selector'::text = $1::public.eql_v3_jsonb_entry; +-- Exact match on a field: containment on a value selector, built by the client +SELECT * FROM orders WHERE metadata @> $1::eql_v3.query_json; ``` -Field access is by selector hash, not plaintext path. The full JSON surface — containment, field access, path queries, and range filters on extracted leaves — is in [JSON](/reference/eql/json). +Field access is by selector hash, not plaintext path — and exact field matching is containment on a **value selector**, not `=` on an extracted leaf, which raises. The full JSON surface — containment, field access, path queries, and range filters on extracted leaves — is in [JSON](/reference/eql/json). ## Combining predicates @@ -97,7 +96,7 @@ SELECT * FROM users WHERE status = 'active' -- plaintext column, native operator AND created_at >= $1::public.eql_v3_timestamp_ord -- encrypted range AND (email = $2::public.eql_v3_text_eq -- encrypted equality - OR name @> $3::public.eql_v3_text_match); -- encrypted token match + OR name @@ $3::public.eql_v3_text_match); -- encrypted fuzzy match ``` The planner treats each encrypted predicate independently, so it can combine an index on a plaintext column with a functional index on an encrypted one (bitmap-AND, or whichever plan is cheapest). @@ -119,8 +118,8 @@ Don't confuse this with a JSON `null` *inside* an encrypted document, which is a | --- | --- | --- | --- | | Equality | `=` `<>` `IN` | `_eq`, all `_ord` variants, `text_search` variants | hash (or btree) on `eql_v3.eq_term` — btree on `eql_v3.ord_term` for the non-text `_ord` variants | | Range | `<` `<=` `>` `>=` `BETWEEN` | all `_ord` variants, `text_search` variants | btree on `eql_v3.ord_term` (`eql_v3.ord_term_ore` on `_ord_ore`) | -| Text token match | `@>` `<@` | `text_match`, `text_search` variants | GIN on `eql_v3.match_term` | -| JSON containment | `@>` `<@` | `public.eql_v3_json` | GIN on `eql_v3.to_ste_vec_query(col)::jsonb` | +| Text fuzzy match | `@@` | `text_match`, `text_search` variants | GIN on `eql_v3.match_term` | +| JSON containment | `@>` `<@` | `public.eql_v3_json_search` | GIN on `eql_v3.to_ste_vec_query(col)::jsonb` | | Null check | `IS NULL` / `IS NOT NULL` | every variant | — | Every one of these has a full index recipe — which method, which extractor, and how to confirm the index engages with `EXPLAIN` — in [Indexes](/reference/eql/indexes). diff --git a/content/docs/reference/eql/grouping-and-aggregates.mdx b/content/docs/reference/eql/grouping-and-aggregates.mdx index 8fa7ef2..809a689 100644 --- a/content/docs/reference/eql/grouping-and-aggregates.mdx +++ b/content/docs/reference/eql/grouping-and-aggregates.mdx @@ -4,7 +4,7 @@ description: "GROUP BY on the equality term, eql_v3.grouped_value, DISTINCT ON, type: reference components: [eql] verifiedAgainst: - eql: "3.0.0" + eql: "3.0.3" --- <EqlVersion /> @@ -15,7 +15,7 @@ Grouping and deduplication key on the **equality term**, never on the stored cip Encryption is non-deterministic: the same plaintext encrypts to a different ciphertext every time. An encrypted column is a domain over `jsonb`, and Postgres compares a domain using the *base type's* comparison — so the natural forms compare whole encrypted payloads, never the plaintext behind them. They raise no error; they just answer wrongly. -<BadExample label="Doesn't work — compares raw ciphertext"> +<BadExample label="Silently wrong — compares raw ciphertext"> ```sql SELECT email, COUNT(*) FROM logins GROUP BY email; -- one group per row @@ -47,7 +47,7 @@ Keying on the extractor is also what makes the query fast. `GROUP BY email` woul Grouping by the term costs you the column: Postgres rejects a bare reference to it, because it can't prove the column is constant within each group. <BadExample - label="Doesn't work — bare column under GROUP BY" + label="Raises — bare column under GROUP BY" error={`ERROR: column "logins.email" must appear in the GROUP BY clause or be used in an aggregate function (SQLSTATE 42803)`} > @@ -136,18 +136,17 @@ A btree on `eql_v3.ord_term(col)` serves `MIN` / `MAX` — the [Indexes](/refere **`SUM`, `AVG`, and every other arithmetic aggregate are unsupported** on encrypted columns — they would require homomorphic encryption, which EQL does not do. `MIN` / `MAX` work because they only need *comparison*, which the ordering term provides. For sums and averages, select the rows (or `MIN`/`MAX`/`COUNT` server-side to narrow them) and aggregate client-side after decryption. </Callout> -## Grouping on extracted JSON leaves +## Leaves inside encrypted JSON -Leaves inside an encrypted JSON document group the same way — extract the entry by selector, then group on its equality term: +Leaves extracted from an encrypted JSON document (`metadata -> 'region_selector'::text`, a `public.eql_v3_json_entry`) **cannot be grouped by equality**. Entries stopped carrying an equality term in EQL 3.0.1: exact matching on a JSON field became presence of a value selector, which containment answers as a filter — there is no per-field key to hash rows into groups with. + +What still works on an extracted leaf is ordering: `eql_v3.min` / `eql_v3.max` on String and Number leaves, via their CLLW OPE term. ```sql -SELECT eql_v3.grouped_value(metadata -> 'region_selector'::text) AS region, - COUNT(*) - FROM orders - GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); +SELECT eql_v3.min(metadata -> 'total_selector'::text) FROM orders; ``` -An extracted entry is a `public.eql_v3_jsonb_entry`, jsonb-backed like every other encrypted domain, so `grouped_value` and `DISTINCT ON (eql_v3.eq_term(...))` both apply unchanged. `eql_v3.eq_term` reads whichever term the entry carries, so this works on every JSON node type. String and Number leaves also support `eql_v3.min` / `eql_v3.max` via their CLLW OPE term. Selectors and node capabilities are in [JSON](/reference/eql/json). +To group by a field, promote it to its own encrypted column — a `text_eq` (or any `_ord`) column alongside the document — and group on that column's equality term as above. Selectors, value selectors, and node capabilities are in [JSON](/reference/eql/json). ## Where to go next diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index 1074747..6313b49 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -4,7 +4,7 @@ description: "Create Postgres indexes on encrypted columns using functional inde type: reference components: [eql] verifiedAgainst: - eql: "3.0.0" + eql: "3.0.3" --- <EqlVersion /> @@ -16,7 +16,7 @@ EQL indexes are ordinary PostgreSQL functional indexes over **term-extractor fun | `eql_v3.eq_term(col)` | `hash` (or `btree`) | `hm` (HMAC-256) | equality | | `eql_v3.ord_term(col)` | `btree` | `op` (CLLW OPE) | range, `ORDER BY`, `MIN` / `MAX` | | `eql_v3.ord_term_ore(col)` | `btree` | `ob` (ORE block) | the same, on pinned `_ord_ore` / `text_search_ore` columns | -| `eql_v3.match_term(col)` | `gin` | `bf` (bloom filter) | text containment | +| `eql_v3.match_term(col)` | `gin` | `bf` (bloom filter) | text fuzzy match (`@@`) | The extractors are inlinable SQL functions, so the planner rewrites a bare-form predicate into the same expression the index was built on. You don't rewrite queries to use the index: @@ -51,7 +51,7 @@ CREATE INDEX users_created_at_ord CREATE INDEX users_created_at_ord_ore ON users USING btree (eql_v3.ord_term_ore(created_at_ore)); --- Text match: GIN index on match_term +-- Text fuzzy match (`@@`): GIN index on match_term -- (columns typed public.eql_v3_text_match or text_search) CREATE INDEX users_name_match ON users USING gin (eql_v3.match_term(name)); @@ -67,7 +67,7 @@ Create indexes when the table has a significant number of rows (typically more t All three must hold: -1. **The value carries the required term.** Range needs `op` (or `ob` on the pinned block-ORE variants), containment needs `bf`, and equality needs `hm`, except on the non-text `_ord` variants, where equality resolves against the ordering term instead. Which terms travel in a value's payload is decided by the encryption client — a value with only a bloom term will not drive an equality index. +1. **The value carries the required term.** Range needs `op` (or `ob` on the pinned block-ORE variants), fuzzy match needs `bf`, and equality needs `hm`, except on the non-text `_ord` variants, where equality resolves against the ordering term instead. Which terms travel in a value's payload is decided by the encryption client — a value with only a bloom term will not drive an equality index. 2. **The index was built after the data carried the term.** If you change which terms a column's values carry, recreate the index. 3. **The query operand is typed.** A typed parameter (`$1`, which CipherStash Proxy supplies) or an explicit cast resolves the encrypted operator; a bare `jsonb` literal falls through to native `jsonb` semantics and skips the index entirely: @@ -90,6 +90,19 @@ SELECT * FROM users WHERE email = $1::public.eql_v3_text_eq; -- Index Cond: (eql_v3.eq_term(email) = eql_v3.eq_term($1)) ``` +### Fuzzy match + +`col @@ $1` inlines to bloom array containment over `eql_v3.match_term(col)`, so the GIN index engages: + +```sql +SELECT * FROM users WHERE name @@ $1::public.eql_v3_text_match; +-- Bitmap Index Scan on users_name_match +``` + +<Callout type="warn"> +**Supply the needle as a bind parameter or a literal.** Since EQL 3.0.3 the match carries an empty-needle guard (see [Text](/reference/eql/text)), which makes `eql_v3.matches` non-`STRICT` and references the needle twice. A needle supplied as an *uncorrelated subquery* — `WHERE name @@ (SELECT …)` — therefore no longer inlines, and the query falls back to a sequential scan. The result is still correct; only the index acceleration is lost. +</Callout> + ### Range and ORDER BY The `<`, `<=`, `>`, `>=` operators inline to comparisons on `eql_v3.ord_term`, so natural-form range predicates match the btree: @@ -131,7 +144,7 @@ The extractor form is a correctness requirement before it's a tuning one: encryp ## Encrypted JSON -Containment (`@>` / `<@`) on `public.eql_v3_json` document columns uses a GIN index over `eql_v3.to_ste_vec_query(col)::jsonb`, and field-level equality and ordering have their own extractor recipes. See [JSON](/reference/eql/json). +Containment (`@>` / `<@`) on `public.eql_v3_json_search` document columns uses a GIN index over `eql_v3.to_ste_vec_query(col)::jsonb` — the same index that serves exact field matching, which is containment on a value selector. Field-level ordering has its own extractor recipe. See [JSON](/reference/eql/json). ## Verify with EXPLAIN diff --git a/content/docs/reference/eql/json.mdx b/content/docs/reference/eql/json.mdx index e2aea00..0db66b0 100644 --- a/content/docs/reference/eql/json.mdx +++ b/content/docs/reference/eql/json.mdx @@ -1,61 +1,78 @@ --- title: JSON -description: "The complete reference for encrypted JSON documents with public.eql_v3_json — the ste_vec payload shape, containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." +description: "The complete reference for encrypted JSON documents with public.eql_v3_json_search — the ste_vec payload shape, value-selector containment, field access, and path queries over ciphertext, with the native jsonb operators that don't apply blocked outright." type: reference components: [eql] verifiedAgainst: - eql: "3.0.0" + eql: "3.0.3" --- <EqlVersion /> -`public.eql_v3_json` is EQL's encrypted JSON document type, built on structured encryption (**ste_vec**). The document is encrypted as a vector of encrypted entries — one entry per path inside the document — and every path is queryable without decryption: containment, field and array access, and equality or range comparisons on extracted leaves. +`public.eql_v3_json_search` is EQL's searchable encrypted JSON document type, built on structured encryption (**ste_vec**). The document is encrypted as a vector of encrypted entries — one entry per path inside the document — and every path is queryable without decryption: containment, field and array access, exact field matching, and range comparisons on extracted leaves. -Like every EQL type, `public.eql_v3_json` holds ciphertext the database can't read. Encryption, decryption, and selector generation happen in the client — the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). See [Searchable encryption](/concepts/searchable-encryption) for how querying ciphertext works at all. +Like every EQL type, it holds ciphertext the database can't read. Encryption, decryption, and selector generation happen in the client — the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy). See [Searchable encryption](/concepts/searchable-encryption) for how querying ciphertext works at all. ## The types -Three `jsonb`-backed domains make up the encrypted JSON surface: +Four `jsonb`-backed domains make up the encrypted JSON surface. The family follows the same convention as the scalars: the bare name is storage-only, and a suffix adds capability. | Type | What it is | | --- | --- | -| `public.eql_v3_json` | The column type. An encrypted document envelope carrying an `sv` array — one encrypted entry per path in the document. | -| `public.eql_v3_jsonb_entry` | A single entry from the vector: a selector, a ciphertext, and exactly one index term. This is what `->` returns. | -| `eql_v3.query_jsonb` | A containment needle: entries with selectors and index terms but **no ciphertext**. This is what you cast a `@>` operand to. | +| `public.eql_v3_json_search` | The searchable column type. An encrypted document envelope carrying an `sv` array — one encrypted entry per path in the document. | +| `public.eql_v3_json` | Storage-only encrypted JSON: one opaque ciphertext (`{v, i, c}`), no index terms, no server-side searchability. Every comparison and containment operator is blocked on it. | +| `public.eql_v3_json_entry` | A single entry from the vector: a selector, a ciphertext, and an optional ordering term. This is what `->` returns. | +| `eql_v3.query_json` | A containment needle: entries with selectors but **no ciphertext**. This is what you cast a `@>` operand to. | + +<Callout type="info"> +These domains were renamed in EQL 3.0.1: the searchable document was `public.eql_v3_json`, the entry was `public.eql_v3_jsonb_entry`, and the needle was `eql_v3.query_jsonb`. The bare `public.eql_v3_json` name now means the storage-only domain, which rejects a ste_vec document, so retype searchable columns: `ALTER TABLE t ALTER COLUMN doc TYPE public.eql_v3_json_search`. +</Callout> ## Payload shape -An encrypted JSON document uses a different payload shape from the scalar types: the standard envelope keys are present (`v`, `i`, plus the `k: "sv"` discriminator — envelope anatomy is covered in [Core concepts](/reference/eql/core-concepts)), but there is no root ciphertext. Instead, an `sv` array carries one encrypted entry per path in the document. Each entry has: +An encrypted JSON document uses a different payload shape from the scalar types: the standard envelope keys are present (`v`, `i`, plus the `k: "sv"` discriminator — envelope anatomy is covered in [Core concepts](/reference/eql/core-concepts)), but there is no root ciphertext — the root document's ciphertext is the root `sv` entry. Two document-level keys plus the vector: | Key | Contents | | --- | --- | -| `s` | Selector — a deterministic hash of the JSON path. Required; entry matching compares selectors first. | -| `c` | Ciphertext for the node at that path. | -| `hm` **or** `op` | Exactly one, never both — the domain `CHECK` enforces the exclusivity. `hm` (HMAC-256) on Boolean/`null` leaves and Object/Array roots; `op` (CLLW OPE, backed by `eql_v3_internal.ope_cllw`) on String/Number leaves. | +| `h` | Key header — the key-retrieval material (IV, tag, descriptor, keyset) for the whole document. Required. Hoisted here once rather than repeated in every entry, which shrinks a document by roughly 30%. | +| `sv` | The vector: one encrypted entry per path in the document. | + +Each entry has: + +| Key | Contents | +| --- | --- | +| `s` | Selector — a deterministic hash. On a **path entry** it covers the JSON path; on a **value entry** it covers the path *and* the canonical value, which is what makes exact matching work. Required; entry matching compares selectors first. | +| `c` | Ciphertext for the node at that path — raw AEAD output, with the nonce derived from the entry's own selector rather than a shared per-document IV. A value entry encrypts a fixed versioned sentinel, so it stays distinguishable from a genuine `""` leaf. | +| `op` | Optional ordering term (CLLW OPE, backed by `eql_v3_internal.ope_cllw`) on String and Number path entries. | | `a` | Optional array marker — `true` when the selector points at an array context. | -The decoded `op` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Pre-release payloads named this key `oc` and backed it with CLLW ORE, and older ones split it further, into `ocf` (fixed-width, numeric) and `ocv` (variable-width, string). EQL 3.0.0 ships `op`, backed by CLLW OPE, whose term orders under the default btree operator class. +The decoded `op` value starts with a domain-tag byte (`0x00` numeric, `0x01` string) followed by the CLLW ciphertext, so numeric and string values in one column keep a consistent total order. Pre-release payloads named this key `oc` and backed it with CLLW ORE, and older ones split it further, into `ocf` (fixed-width, numeric) and `ocv` (variable-width, string). -A document payload for a `public.eql_v3_json` column: +<Callout type="warn"> +**Entries no longer carry `hm`.** The per-value HMAC equality term was retired in EQL 3.0.1 in favour of value-inclusive selectors, and an `hm`-bearing entry now fails the domain `CHECK`. Along with the key header and the selector-derived nonces, that makes this a wire-format change: stored documents need re-encrypting by a current client, and there is no mechanical conversion. +</Callout> + +A document payload for a `public.eql_v3_json_search` column: ```json { "v": 3, "k": "sv", "i": { "t": "orders", "c": "metadata" }, + "h": "a4f1c2...", "sv": [ - { "s": "2517068c0d1f9d4d41d2c666211f785e", "c": "mBbKmM...", "hm": "b0e0..." }, + { "s": "2517068c0d1f9d4d41d2c666211f785e", "c": "mBbKmM..." }, { "s": "f510853a4ab9d4f75f51a533ac264c5d", "c": "mBbKmQ...", "op": "01a3f2..." }, { "s": "33743aed3ae636f6bf05cff11ac4b519", "c": "mBbKmR...", "op": "004e19..." } ] } ``` -- First entry: an object root — `hm` only, equality/containment +- First entry: an object root — no ordering term - Second entry: a string leaf — `op` starting with tag `01` - Third entry: a numeric leaf — `op` starting with tag `00` -A containment **query** payload (`eql_v3.query_jsonb`) has the same `sv` shape but its entries carry no `c` — containment matches selectors and index terms, never ciphertexts. This is the needle the client builds for a `@>` query: +A containment **query** payload (`eql_v3.query_json`) has the same `sv` shape but its entries carry no `c` — containment matches selectors, never ciphertexts. This is the needle the client builds for a `@>` query: ```json { @@ -67,44 +84,52 @@ A containment **query** payload (`eql_v3.query_jsonb`) has the same `sv` shape b ## Storing encrypted JSON -Type the column as `public.eql_v3_json`: +Type the column as `public.eql_v3_json_search`: ```sql CREATE TABLE orders ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - metadata public.eql_v3_json + metadata public.eql_v3_json_search ); ``` -There is no database-side configuration step. Which index terms a document carries is decided by the encryption client; typing the column as `public.eql_v3_json` is what makes the encrypted operators and functions resolve. The domain's `CHECK` constraint validates the payload shape on insert, so malformed values are rejected at write time. +There is no database-side configuration step. Which selectors and terms a document carries is decided by the encryption client; typing the column as `public.eql_v3_json_search` is what makes the encrypted operators and functions resolve. The domain's `CHECK` constraint validates the payload shape on insert, so malformed values are rejected at write time. + +For a document you never search, type the column as the storage-only `public.eql_v3_json` instead: it takes the plain `{v, i, c}` envelope, rejects a ste_vec document, and blocks every comparison operator — the JSON analogue of `public.eql_v3_boolean`. Insert and read through the Stack SDK or Proxy, which encrypt the document into the ste_vec payload on write and decrypt it on read. ## What each node type supports -During encryption, the client flattens the document: each unique path gets a deterministic **selector** hash, and each node gets an entry in the `sv` vector carrying index terms for its JSON type: +During encryption, the client flattens the document: each unique path gets a deterministic **selector** hash. Each node then emits a **path entry** (selector over the path, carrying the ordering term where the type has one) and a **value entry**, whose selector covers the path *and* the canonical value: -| JSON node type | Index term | Equality (`=`, `<>`, `GROUP BY`) | Ordering (`<` … `>=`, `MIN`/`MAX`) | -| --- | --- | --- | --- | -| Object | `hm` (HMAC-256) | Yes | No | -| Array | `hm` (HMAC-256) | Yes | No | -| Boolean / JSON `null` | `hm` (HMAC-256) | Yes | No | +| JSON node type | Ordering term | Exact match (`@>` on the value selector) | Ordering (`<` … `>=`, `MIN`/`MAX`) | +| --- | --- | :---: | :---: | +| Object | — | Yes | No | +| Array | — | Yes | No | +| Boolean / JSON `null` | — | Yes | No | | String | `op` (CLLW OPE, string domain) | Yes | Yes | | Number | `op` (CLLW OPE, numeric domain) | Yes | Yes | -Each entry carries exactly one of `hm` or `op` — the domain `CHECK` enforces the exclusivity. `hm` is a deterministic hash, so it supports equality only. `op` is a CLLW OPE term that reveals ordering and, being deterministic, collapses to equality on matching selectors — `eql_v3.eq_term` reads whichever term an entry carries, so equality works uniformly across all node types. +Exact matching is the *presence* of a value selector in the stored document, which makes it injective and loss-free for every type — including `text`, `bigint` and `numeric`, where the old ordering-term comparison collided (`"café"` with `"cafe"`, `9007199254740993` with `…992`). It is expressed as document containment, not as `=` on an extracted leaf: + +```sql +SELECT * FROM orders WHERE metadata @> $1::eql_v3.query_json; +``` JSON `null` here means a `null` literal *inside* the document. A SQL `NULL` column value is not encrypted at all. ## Blocked native jsonb operators -These native PostgreSQL `jsonb` operators are **blocked** on `public.eql_v3_json`. They raise an error rather than silently running plaintext-jsonb semantics against the encrypted payload: +These native PostgreSQL `jsonb` operators are **blocked** on `public.eql_v3_json_search`. They raise an error rather than silently running plaintext-jsonb semantics against the encrypted payload: - Key/path existence: `?`, `?|`, `?&`, `@?`, `@@` - Path extraction: `#>`, `#>>` - Mutation: `-`, `#-`, `||` - Root-document comparison: `=`, `<>`, `<`, `<=`, `>`, `>=` +Equality on the **extract surface** raises too: `col -> 'sel'::text = $1::…` is a blocker for every family, because an extracted path entry carries no value selector and so cannot answer an exact match. Use value-selector containment for that. + Use containment (`@>` / `<@`), field access (`->` / `->>`), or the `eql_v3.jsonb_path_*` functions instead. There is no server-side mutation of an encrypted document — updates re-encrypt in the client. <Callout type="warn"> @@ -130,15 +155,15 @@ The examples below all query one encrypted `metadata` document. In plaintext: The `*_selector` placeholders stand for the selector hash of each path: `region_selector` for `$.customer.region`, `total_selector` for `$.total`, and `items_selector` for `$.items`. -### Containment [#fn-contains] +### Containment and exact matching [#fn-contains] -`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle in the client and cast it to `eql_v3.query_jsonb`; `eql_v3.ste_vec_contains(a, b)` is the function form. +`@>` tests whether the encrypted document contains a structure; `<@` is the reverse. Build the needle in the client and cast it to `eql_v3.query_json`; `eql_v3.ste_vec_contains(a, b)` is the function form. This is both the structural-containment operator and the way to match a field exactly — the client emits a value-selector needle for the field and value you're matching. -<EqlFn ops="@>,<@" domains="eql_v3_json"> +<EqlFn ops="@>,<@" domains="eql_v3_json_search"> ```sql SELECT * FROM orders -WHERE metadata @> $1::eql_v3.query_jsonb; +WHERE metadata @> $1::eql_v3.query_json; ``` </EqlFn> @@ -152,9 +177,9 @@ CREATE INDEX orders_metadata_gin ### Field access [#fn-field-access] -`->` returns a `public.eql_v3_jsonb_entry`; `->>` serializes that entry as ciphertext text. Fields are addressed by selector hash, and array elements by 0-based index. +`->` returns a `public.eql_v3_json_entry`; `->>` serializes that entry as ciphertext text. Fields are addressed by selector hash, and array elements by 0-based index. -<EqlFn ops="->,->>" domains="eql_v3_json"> +<EqlFn ops="->,->>" domains="eql_v3_json_entry"> ```sql SELECT metadata -> 'selector_hash'::text FROM orders; -- entry @@ -164,42 +189,32 @@ SELECT metadata -> 0 FROM orders; -- array element by inde </EqlFn> -The extracted `public.eql_v3_jsonb_entry` is itself comparable. - -### eql_v3.eq_term [#fn-eq-term] - -Equality on an extracted leaf, via `eql_v3.eq_term`. Works on every node type, and drives `GROUP BY` / `DISTINCT`. - -<EqlFn ops="=,<>" domains="eql_v3_jsonb_entry"> - -```sql -SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) -FROM orders -GROUP BY eql_v3.eq_term(metadata -> 'region_selector'::text); -``` +An extracted `public.eql_v3_json_entry` is ordered-comparable, but not equality-comparable: `=` / `<>` on it raise. -</EqlFn> +<Callout type="warn"> +`eql_v3.eq_term` has a `public.eql_v3_json_entry` overload, but it is **deprecated** — it is an alias for `eql_v3.ope_term`, returning raw OPE bytes rather than an exact equality term, so it inherits the ordering term's encoding collisions (float rounding on large integers, collation on text). Exact field matching is value-selector containment, above. +</Callout> ### eql_v3.ord_term [#fn-ord-term] Range comparisons and `ORDER BY` on an extracted **String or Number** leaf, via `eql_v3.ord_term`. -<EqlFn ops="<,<=,>,>=" domains="eql_v3_jsonb_entry"> +<EqlFn ops="<,<=,>,>=" domains="eql_v3_json_entry"> ```sql SELECT * FROM orders -WHERE (metadata -> 'total_selector'::text) > $1::public.eql_v3_jsonb_entry; +WHERE (metadata -> 'total_selector'::text) > $1::public.eql_v3_json_entry; ``` </EqlFn> -A hash index on `eql_v3.eq_term(col -> '<selector>'::text)` engages the equality lookup; a btree on `eql_v3.ord_term(...)` engages range and `ORDER BY`. See [Indexes](/reference/eql/indexes). +A btree on `eql_v3.ord_term(col -> '<selector>'::text)` engages range and `ORDER BY`; the GIN index on `eql_v3.to_ste_vec_query(col)::jsonb` engages exact matching. See [Indexes](/reference/eql/indexes). ### eql_v3.min / max [#fn-min-max] `MIN` / `MAX` over an extracted ordered leaf. -<EqlFn agg ops="MIN,MAX" domains="eql_v3_jsonb_entry"> +<EqlFn agg ops="MIN,MAX" domains="eql_v3_json_entry"> ```sql SELECT eql_v3.min(metadata -> 'total_selector'::text) FROM orders; @@ -211,7 +226,7 @@ SELECT eql_v3.min(metadata -> 'total_selector'::text) FROM orders; Path queries take the same selector hashes. `jsonb_path_query` returns every matching entry, `jsonb_path_query_first` the first, and `jsonb_path_exists` a boolean. -<EqlFn domains="eql_v3_json"> +<EqlFn domains="eql_v3_json_search"> ```sql SELECT eql_v3.jsonb_path_query(metadata, 'selector_hash') FROM orders; -- all matches @@ -223,18 +238,19 @@ SELECT eql_v3.jsonb_path_exists(metadata, 'selector_hash') FROM orders; -- ### eql_v3.jsonb_array_* [#fn-array] -Helpers over an encrypted array node. `jsonb_array_elements` yields encrypted entries; `jsonb_array_elements_text` yields each element as ciphertext text. +Helpers over an encrypted array node. `jsonb_array_elements` yields encrypted entries — each carrying the grafted key header, which makes it the decryptable unit. -<EqlFn domains="eql_v3_json"> +<EqlFn domains="eql_v3_json_search"> ```sql -SELECT eql_v3.jsonb_array_length(metadata -> 'items_selector'::text) FROM orders; -SELECT eql_v3.jsonb_array_elements(metadata -> 'items_selector'::text) FROM orders; -SELECT eql_v3.jsonb_array_elements_text(metadata -> 'items_selector'::text) FROM orders; +SELECT eql_v3.jsonb_array_length(metadata -> 'items_selector'::text) FROM orders; +SELECT eql_v3.jsonb_array_elements(metadata -> 'items_selector'::text) FROM orders; ``` </EqlFn> +`eql_v3.jsonb_array_elements_text`, which streamed each element as bare ciphertext text, was **removed** in EQL 3.0.1: an entry's ciphertext is no longer independently decryptable, so the rows it produced were useless. Use `eql_v3.jsonb_array_elements`. + ## Worked example An `orders` table with an encrypted `metadata` document. The plaintext your application works with: @@ -259,7 +275,7 @@ The client encrypts this into a ste_vec payload with selectors for `$`, `$.custo ```sql CREATE TABLE orders ( id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - metadata public.eql_v3_json + metadata public.eql_v3_json_search ); INSERT INTO orders (metadata) VALUES ($1); @@ -271,11 +287,11 @@ INSERT INTO orders (metadata) VALUES ($1); ### Query by containment -Find premium orders. The client encrypts the needle `{"customer": {"tier": "premium"}}` into a `ste_vec_query`: +Find premium orders. The client encrypts the needle `{"customer": {"tier": "premium"}}` into a `ste_vec_query` — a value-selector needle, so this is an exact match on the field, not a fuzzy one: ```sql SELECT id FROM orders -WHERE metadata @> $1::eql_v3.query_jsonb; +WHERE metadata @> $1::eql_v3.query_json; ``` Add the GIN index from above once the table grows. @@ -285,13 +301,12 @@ Add the GIN index from above once the table grows. ### Query by path -Count orders per region, grouping on the encrypted leaf — the database never sees `"apac"`: +Path existence and range comparisons work on the extract surface — the database never sees `"apac"` or `149.95`: ```sql -SELECT eql_v3.eq_term(metadata -> 'region_selector'::text) AS region, COUNT(*) -FROM orders +SELECT id FROM orders WHERE eql_v3.jsonb_path_exists(metadata, 'region_selector') -GROUP BY 1; + AND (metadata -> 'total_selector'::text) > $1::public.eql_v3_json_entry; ``` The rows come back as ciphertext; decrypt them in the client. diff --git a/content/docs/reference/eql/text.mdx b/content/docs/reference/eql/text.mdx index af48ec4..c82edb9 100644 --- a/content/docs/reference/eql/text.mdx +++ b/content/docs/reference/eql/text.mdx @@ -1,10 +1,10 @@ --- title: Text -description: "The complete reference for encrypted text columns: every text domain variant, the multi-term payload, why LIKE is gone everywhere, and bloom-filter token containment as the encrypted free-text match." +description: "The complete reference for encrypted text columns: every text domain variant, the multi-term payload, why LIKE is gone everywhere, and @@ bloom-filter fuzzy match as the encrypted free-text search." type: reference components: [eql] verifiedAgainst: - eql: "3.0.0" + eql: "3.0.3" --- <EqlVersion /> @@ -22,8 +22,8 @@ All of these are `jsonb`-backed domains. Which one you declare fixes the column' | `public.eql_v3_text_ord` | Comparisons, `BETWEEN`, `ORDER BY`, `MIN` / `MAX` — plus equality. | | `public.eql_v3_text_ord_ope` | The byte-identical twin of `text_ord`, with OPE pinned. See [SEM specifiers](#sem-specifiers). | | `public.eql_v3_text_ord_ore` | As `text_ord`, with the ORE mechanism pinned. | -| `public.eql_v3_text_match` | Free-text token containment: `@>` / `<@`. | -| `public.eql_v3_text_search` | Equality + ordering + token containment. | +| `public.eql_v3_text_match` | Free-text fuzzy match: `@@`. | +| `public.eql_v3_text_search` | Equality + ordering + fuzzy match. | | `public.eql_v3_text_search_ore` | As `text_search`, with the ORE mechanism pinned. | Declare only the capabilities you query on — each capability stores extra searchable material with defined leakage (see [Searchable encryption](/concepts/searchable-encryption)). @@ -77,7 +77,7 @@ A value for a `text_search` column carries the shared envelope keys (`v`, `i`, ` - `hm` — equality term: `WHERE email = $1` compares this - `op` — ordering term: a hex-encoded CLLW OPE ciphertext, which `ORDER BY` and range comparisons sort by native `bytea` comparison -- `bf` — bloom-filter term: `@>` token containment tests these bit positions +- `bf` — bloom-filter term: `@@` fuzzy match tests these bit positions A `text_search_ore` payload carries `ob` in place of `op`: an array of block-ORE ciphertexts rather than a single string. @@ -91,7 +91,8 @@ The narrower variants carry only their own terms. A `text_eq` payload carries `h | --- | :---: | :---: | :---: | :---: | :---: | | `=` / `<>` | ❌ | ✅ | ✅ | ❌ | ✅ | | `<` `<=` `>` `>=` | ❌ | ❌ | ✅ | ❌ | ✅ | -| `@>` / `<@` | ❌ | ❌ | ❌ | ✅ | ✅ | +| `@@` (fuzzy match) | ❌ | ❌ | ❌ | ✅ | ✅ | +| `@>` / `<@` | ❌ | ❌ | ❌ | ❌ | ❌ | | `LIKE` / `ILIKE` (`~~` / `~~*`) | ❌ | ❌ | ❌ | ❌ | ❌ | | `IN` / `GROUP BY` / `DISTINCT` | ❌ | ✅ | ✅ | ❌ | ✅ | | `ORDER BY` | ❌ | ❌ | ✅ | ❌ | ✅ | @@ -103,21 +104,46 @@ Blocked *operator* cells raise an `operator … is not supported` exception — <include cwd>content/partials/eql/functions-text.mdx</include> -There are no `like` / `ilike` function forms — encrypted text matching is `eql_v3.contains` on a `text_match` value. +There are no `like` / `ilike` function forms — encrypted text matching is `eql_v3.matches` on a `text_match` value. ## There is no `LIKE` -`LIKE` and `ILIKE` (`~~` / `~~*`) raise on **every** encrypted-domain variant — including `text_match` and `text_search`. SQL pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter token containment — `@>` on a `text_match` or `text_search` column: +`LIKE` and `ILIKE` (`~~` / `~~*`) raise on **every** encrypted-domain variant — including `text_match` and `text_search`. SQL pattern matching is meaningless on ciphertext. Encrypted text matching is bloom-filter fuzzy match — `@@` on a `text_match` or `text_search` column: + +<BadExample label="Raises — LIKE is blocked on every encrypted variant"> ```sql --- ❌ Raises: operator not supported SELECT * FROM users WHERE email LIKE '%alice%'; +``` + +</BadExample> --- ✅ Encrypted free-text match -SELECT * FROM users WHERE email @> $1::public.eql_v3_text_match; +```sql +-- Encrypted free-text match +SELECT * FROM users WHERE email @@ $1::public.eql_v3_text_match; + +-- Function form +SELECT * FROM users WHERE eql_v3.matches(email, $1::public.eql_v3_text_match); ``` -`@>` / `<@` here is **probabilistic ngram-bloom containment** — it tests whether the encrypted text contains the (encrypted) search terms. It is not JSONB containment and not `LIKE`. The client encrypts the search term into a bloom-filter query value; false positives are possible, false negatives are not. There are no `like` / `ilike` function forms either — text matching is `eql_v3.contains` on a `text_match` value. +`@@` is **probabilistic ngram-bloom matching** — it reduces to array containment over two bloom filters built from the downcased 3-gram token sets, so a `true` may be a false positive and a `false` never is. It is not `LIKE`, and it is not containment: it is order- and multiplicity-insensitive. The client encrypts the search term into a bloom-filter query value. + +<Callout type="warn"> +**`@>` / `<@` raise on the match variants.** The fuzzy match was renamed in EQL 3.0.1: it used to be spelled `@>` / `<@`, backed by `eql_v3.contains` / `eql_v3.contained_by`, which are no longer public functions on these domains. That naming promised containment semantics it never had, so the operator became the directional `@@` and the old spellings are now blockers that raise `operator … is not supported`. Genuine containment on encrypted JSON is unaffected and keeps `@>` / `<@`; see [JSON](/reference/eql/json). Repoint any query, view, or adapter still emitting the old form, and coordinate with the client: an SDK emitting `eql_v3.contains(` for text match must move to `eql_v3.matches(` in the same release. +</Callout> + +### Search terms too short to tokenise + +A search string below the tokeniser's floor — a 2-character term, say — produces no 3-grams and encrypts to an empty bloom (`bf: []`). Because an empty array is contained by every array, such a needle once matched **every row in the table**, silently. Since EQL 3.0.3 the match is guarded, giving `LIKE ''`-shaped semantics: + +| Stored value's bloom | Needle's bloom | `LIKE` analogue | Result | +| --- | --- | --- | :---: | +| empty | empty | `'' LIKE ''` | ✅ | +| non-empty | empty | `'catty' LIKE ''` | ❌ (was ✅) | +| empty | non-empty | `'' LIKE 'cat'` | ❌ | +| non-empty | non-empty | — | bloom match | + +Only the second row changed: an empty needle now matches only a value whose own bloom is also empty. Nothing to rewrite, and values legitimately stored with an empty bloom are unaffected. On EQL 3.0.2 and earlier, reject sub-floor search terms client-side — the SDK already does. ## Where to next diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index c895923..70fb045 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -283,7 +283,16 @@ interface FuncDef { id: string; name: string; ops: string[]; - cap: string; + /** Domain capability that exposes the function. */ + cap?: string; + /** + * Operator that exposes the function, for surfaces the catalog does not model + * as a capability. Fuzzy match is the case: 3.0.1 dropped the `match` + * capability from the catalog, and `public.eql_v3_text_match` now reports + * `capabilities: ["storage"]` with `supportedOperators: ["@@"]`, so the + * operator list is the only reliable signal that a domain can be matched on. + */ + op?: string; agg?: boolean; } const FUNCS: FuncDef[] = [ @@ -296,16 +305,10 @@ const FUNCS: FuncDef[] = [ cap: "order", }, { - id: "fn-contains", - name: "eql_v3.contains(a, b)", - ops: ["@>"], - cap: "match", - }, - { - id: "fn-contained_by", - name: "eql_v3.contained_by(a, b)", - ops: ["<@"], - cap: "match", + id: "fn-matches", + name: "eql_v3.matches(a, b)", + ops: ["@@"], + op: "@@", }, { id: "fn-min", @@ -341,10 +344,8 @@ function exampleFor(id: string, spec: FragmentSpec): string { return spec.orderByExample ? `-- any of the four; ordering is the usual reason to index text\nSELECT id, ${col} FROM ${table}\nWHERE eql_v3.gt(${col}, $1::${dom("ord")})\nORDER BY eql_v3.ord_term(${col});` : `-- a range uses two of the four\nSELECT * FROM ${table}\nWHERE eql_v3.gte(${col}, $1::${dom("ord")})\n AND eql_v3.lt(${col}, $2::${dom("ord")});`; - case "fn-contains": - return `-- token containment on the bloom-filter term\nSELECT * FROM ${table}\nWHERE eql_v3.contains(${col}, $1::${dom("match")});`; - case "fn-contained_by": - return `SELECT * FROM ${table}\nWHERE eql_v3.contained_by(${col}, $1::${dom("match")});`; + case "fn-matches": + return `-- probabilistic fuzzy match on the bloom-filter term\nSELECT * FROM ${table}\nWHERE eql_v3.matches(${col}, $1::${dom("match")});`; case "fn-min": return `-- compares ordering terms; result decrypts client-side\nSELECT eql_v3.min(${col}) FROM ${table};`; case "fn-max": @@ -366,7 +367,12 @@ function renderFragment(domains: Domain[], spec: FragmentSpec): string { const blocks: string[] = []; for (const fn of FUNCS) { const applies = scoped - .filter((d) => d.capabilities.includes(fn.cap) && d.variant) + .filter((d) => { + if (!d.variant) return false; + return fn.op + ? (d.supportedOperators ?? []).includes(fn.op) + : !!fn.cap && d.capabilities.includes(fn.cap); + }) .map((d) => shortDomain(d.name)); if (!applies.length) continue; const attrs = [ @@ -417,6 +423,11 @@ function knownSymbols(manifest: Manifest): Set<string> { return known; } +// Prose that names a symbol in order to say it no longer exists (or no longer +// means what it used to). Kept narrow — these are the words the upgrade notes +// and rename callouts actually use, not a general escape hatch. +const RETIRED_MARKER = /\b(removed|renamed|retired|deprecated|no longer)\b/i; + function driftCheck(manifest: Manifest): string[] { const known = knownSymbols(manifest); const referenced = new Map<string, Set<string>>(); // fqn -> pages @@ -424,26 +435,33 @@ function driftCheck(manifest: Manifest): string[] { for (const file of fs.readdirSync(EQL_DIR)) { if (!file.endsWith(".mdx") || file === "functions.mdx") continue; const text = fs.readFileSync(path.join(EQL_DIR, file), "utf8"); - // Any schema-qualified reference — function call, domain cast, or type. - // A trailing `*` marks a prose family (e.g. `eql_v3.jsonb_path_*`), which - // names a set rather than one symbol, so it's skipped. So is a trailing - // `<T>` placeholder (e.g. `public.eql_v3_<T>_ord`). - for (const m of text.matchAll( - /\b(public|eql_v3_internal|eql_v3)\.([a-z0-9_]+)(\*?)/g, - )) { - if (m[3] === "*") continue; - if (text[(m.index ?? 0) + m[0].length] === "<") continue; - const fqn = `${m[1]}.${m[2]}`; - const pages = referenced.get(fqn) ?? new Set<string>(); - pages.add(file); - referenced.set(fqn, pages); + for (const line of text.split("\n")) { + // A line that names a symbol in order to say it is gone is documenting + // history, not teaching an API — an upgrade note has to be able to write + // "`eql_v3.jsonb_array_elements_text` was removed". Same line-local + // exemption validate-content-api.ts makes, and the same trade: naming a + // dead symbol WITHOUT saying it is dead is the bug being caught. + if (RETIRED_MARKER.test(line)) continue; + // Any schema-qualified reference — function call, domain cast, or type. + // A trailing `*` marks a prose family (e.g. `eql_v3.jsonb_path_*`), which + // names a set rather than one symbol, so it's skipped. So is a trailing + // `<T>` placeholder (e.g. `public.eql_v3_<T>_ord`). + for (const m of line.matchAll( + /\b(public|eql_v3_internal|eql_v3)\.([a-z0-9_]+)(\*?)/g, + )) { + if (m[3] === "*") continue; + if (line[(m.index ?? 0) + m[0].length] === "<") continue; + const fqn = `${m[1]}.${m[2]}`; + const pages = referenced.get(fqn) ?? new Set<string>(); + pages.add(file); + referenced.set(fqn, pages); + } } } const unknown: string[] = []; for (const [fqn, pages] of referenced) { if (known.has(fqn) || MANIFEST_BLIND_SPOTS.has(fqn)) continue; - if (UNRELEASED.has(fqn)) continue; unknown.push(`${fqn} (in ${[...pages].join(", ")})`); } return unknown.sort(); @@ -460,22 +478,23 @@ function driftCheck(manifest: Manifest): string[] { // // Keep this list minimal, and delete entries as the manifest grows to cover // them. -const MANIFEST_BLIND_SPOTS = new Set(["eql_v3.query_text_eq"]); - -// Symbols merged into EQL but not yet in the pinned release, documented ahead of -// it because a page would otherwise teach a workaround for a solved problem. The -// manifest can't resolve them, so they're allowlisted here — and reported on -// every run, so the list stays visible rather than becoming a quiet exemption. -// -// The page documenting one MUST carry a version callout saying which release it -// needs. Delete the entry when EQL_RELEASE_TAG (scripts/generate-eql-docs.ts) is -// bumped to a release that ships it: the manifest covers it from then on, and -// the drift check goes back to being the authority. -const UNRELEASED = new Map([ - [ - "eql_v3.grouped_value", - "added after eql-3.0.2 in cipherstash/encrypt-query-language#423; documented in grouping-and-aggregates.mdx", - ], +// `eql_v3.grouped_value` is the second blind spot, with a different cause: the +// manifest lists aggregates from the codegen catalog, so the 60 generated +// `min`/`max` aggregates are there but the one hand-written `CREATE AGGREGATE` +// is not. Verified present in the 3.0.3 install SQL: +// grep -c "CREATE AGGREGATE" cipherstash-encrypt.sql # => 61 +// grep -c "CREATE AGGREGATE eql_v3.grouped_value" cipherstash-encrypt.sql # => 1 +// Its state function (`eql_v3_internal.grouped_value_sfunc`) IS in the manifest, +// which is what makes the gap easy to miss. +// `public.eql_v3_json` — the storage-only JSON domain added in 3.0.1 — has the +// same cause as the query-operand domains: created in a `DO` block, so the +// catalog the manifest is built from never sees it (its searchable sibling +// `public.eql_v3_json_search` IS in the manifest). Verified in the 3.0.3 SQL: +// grep -c "CREATE DOMAIN public.eql_v3_json AS jsonb" cipherstash-encrypt.sql # => 1 +const MANIFEST_BLIND_SPOTS = new Set([ + "eql_v3.query_text_eq", + "eql_v3.grouped_value", + "public.eql_v3_json", ]); // ── Main ───────────────────────────────────────────────────────────────────── @@ -499,10 +518,6 @@ function main() { `✓ Generated ${path.relative(process.cwd(), OUT_FILE)} from EQL ${manifest.version} (${manifest.functions.length} functions)`, ); - for (const [fqn, why] of UNRELEASED) { - console.log(`• Drift check: ${fqn} allowlisted as unreleased — ${why}`); - } - const unknown = driftCheck(manifest); if (unknown.length) { const header = `⚠ ${unknown.length} schema-qualified symbol(s) referenced in hand-written pages are not in the manifest (domains or functions):`; diff --git a/scripts/generate-eql-docs.ts b/scripts/generate-eql-docs.ts index 3b72377..d934247 100644 --- a/scripts/generate-eql-docs.ts +++ b/scripts/generate-eql-docs.ts @@ -24,11 +24,13 @@ import path from "node:path"; import GithubSlugger from "github-slugger"; /** - * The EQL release the docs are written against. EQL 3.0.0 is still in - * prerelease and churning (alpha.3 and alpha.4 shipped a day apart), so this - * tracks an alpha deliberately rather than by accident. + * The EQL release the docs are written against. + * + * 3.0.x is still moving: 3.0.1 renamed the encrypted-JSON domains and replaced + * the text fuzzy-match operator, 3.0.3 guarded the empty-bloom needle. Each bump + * is a deliberate commit that fixes whatever the drift check reports. */ -const EQL_RELEASE_TAG = process.env.EQL_RELEASE_TAG ?? "eql-3.0.0"; +const EQL_RELEASE_TAG = process.env.EQL_RELEASE_TAG ?? "eql-3.0.3"; const GITHUB_RELEASE_DOWNLOAD = "https://github.com/cipherstash/encrypt-query-language/releases/download"; From a1538d3c5a2e1c0d923962a4404f47e8a64d0bbb Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 09:49:53 +1000 Subject: [PATCH 084/151] docs: escape manifest prose before it reaches MDX MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EQL 3.0.3's ope_term brief contains "= / <> are blocked". Doxygen comments are written for a plain-text renderer, so bare SQL operators are normal in them — but the generator dropped them into functions.mdx verbatim, where MDX read `<>` as an unclosed JSX fragment and failed the build on the generated content file rather than at the source. Escape `<` and `{` in every prose string the manifest supplies (brief, description, param and return descriptions), skipping inline-code spans so the descriptions that already write `<>` in backticks keep rendering as code. --- scripts/generate-eql-api-docs.ts | 27 +++++++++++++++++++++++---- 1 file changed, 23 insertions(+), 4 deletions(-) diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index 70fb045..e78e60e 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -93,12 +93,31 @@ function loadManifest(): Manifest { } // ── Render the generated catalog ───────────────────────────────────────────── +/** + * Make a manifest prose string safe to drop into MDX. + * + * Doxygen comments are written for a plain-text renderer, so they contain bare + * `<` and `{` — SQL operators especially (`<>`, `<=`). MDX reads those as JSX + * and the build dies on the *content* file, far from the cause: EQL 3.0.3's + * `ope_term` brief says "= / <> are blocked", which parses as an unclosed + * fragment. Escape both, but only outside inline-code spans, so the many + * descriptions that already write `` `<>` `` keep rendering as code. + */ +function mdxProse(s: string): string { + return s + .split(/(`+[^`]*`+)/g) + .map((seg, i) => + i % 2 === 1 ? seg : seg.replace(/</g, "<").replace(/\{/g, "{"), + ) + .join(""); +} + function paramsTable(params: Param[]): string { if (!params.length) return ""; const rows = params .map( (p) => - `| \`${p.name}\` | ${p.type ? `\`${p.type}\`` : ""} | ${(p.description ?? "").replace(/\|/g, "\\|")} |`, + `| \`${p.name}\` | ${p.type ? `\`${p.type}\`` : ""} | ${mdxProse(p.description ?? "").replace(/\|/g, "\\|")} |`, ) .join("\n"); return `\n| Parameter | Type | Description |\n| --- | --- | --- |\n${rows}\n`; @@ -123,9 +142,9 @@ function renderPublicFunctions(fns: Fn[]): string { const rep = overloads.find((o) => o.params.length || o.brief) ?? overloads[0]; const sigs = [...new Set(overloads.map((o) => o.signature))].sort(); - const parts = [`### \`${name}\``, "", rep.brief]; + const parts = [`### \`${name}\``, "", mdxProse(rep.brief)]; if (rep.description && rep.description !== rep.brief) - parts.push("", rep.description); + parts.push("", mdxProse(rep.description)); parts.push( "", sigs.length > 1 @@ -141,7 +160,7 @@ function renderPublicFunctions(fns: Fn[]): string { const t = rep.returns.type ? `\`${rep.returns.type}\`` : ""; parts.push( "", - `**Returns:** ${t}${rep.returns.description ? ` — ${rep.returns.description}` : ""}`, + `**Returns:** ${t}${rep.returns.description ? ` — ${mdxProse(rep.returns.description)}` : ""}`, ); } sections.push(parts.join("\n")); From e304ff1e2fec91a4bbd71b12f0b69d7b9b14753b Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 14:26:08 +1000 Subject: [PATCH 085/151] docs: add an EQL pin resolver so patch bumps stop relying on memory MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reports whether a newer EQL release exists for the pinned minor, and with --apply rewrites the pin. The companion workflow calls this on a schedule and opens a PR, so a new EQL release surfaces as a reviewable PR instead of something someone has to remember to check. It deliberately does NOT float the pin. The drift check validates every schema-qualified symbol in the hand-written pages against the pinned release's manifest and FAILS THE BUILD on a mismatch, so an auto-following pin would turn an unrelated PR red with no commit of its author's to explain it — which is what eql-3.0.0-alpha.4 did when it replaced eql_v3.ore_cllw. Scope is the pinned minor, and even that goes through review: EQL patch releases are not additive-only ahead of Stack 1.0. Between 3.0.0 and 3.0.1 — a patch — eql_v3.contains went 15 occurrences to 0, eql_v3.matches 0 to 15, and eql_v3_json_search 0 to 162. A newer minor or major is reported but never proposed, since those carry migration work beyond a pin change. Prereleases and the sibling tags cut by the same release (eql-bindings-v3.0.3, @cipherstash/eql@3.0.3) are excluded by matching eql-X.Y.Z exactly and honouring the API's prerelease flag. Note the release bodies claim "Preview (prerelease)" on stable releases; that text is stale boilerplate and contradicts the flag, so the flag is what this trusts. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- package.json | 1 + scripts/check-eql-pin.ts | 171 +++++++++++++++++++++++++++++++++++++++ 2 files changed, 172 insertions(+) create mode 100644 scripts/check-eql-pin.ts diff --git a/package.json b/package.json index b727a79..f763a54 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "generate-docs:eql": "tsx scripts/generate-eql-docs.ts", "generate-docs:eql-api": "tsx scripts/generate-eql-api-docs.ts", "generate-docs:cli": "tsx scripts/generate-cli-docs.ts", + "check-eql-pin": "tsx scripts/check-eql-pin.ts", "validate-links": "tsx scripts/validate-links.ts", "validate-redirects": "tsx scripts/validate-v2-redirects.ts", "validate-content": "tsx scripts/validate-content-api.ts", diff --git a/scripts/check-eql-pin.ts b/scripts/check-eql-pin.ts new file mode 100644 index 0000000..bb05235 --- /dev/null +++ b/scripts/check-eql-pin.ts @@ -0,0 +1,171 @@ +#!/usr/bin/env tsx +/** + * Resolves whether a newer EQL release is available for the pinned minor. + * + * The EQL release is PINNED in `generate-eql-docs.ts` on purpose — see the + * header there. This script does not change that: it only reports (and with + * `--apply`, stages) the bump, so the upgrade still lands as a reviewable + * commit whose drift check has already run. + * + * Scope is deliberately the pinned MINOR. Patch releases in this project are + * not additive-only — 3.0.1 removed `eql_v3.contains`, added `eql_v3.matches`, + * and renamed the whole encrypted-JSON domain surface — so even a patch bump + * has to go through review. A newer minor or major is reported but never + * proposed, because those carry migration work beyond a pin change. + * + * Usage: + * tsx scripts/check-eql-pin.ts # report only, exit 0 + * tsx scripts/check-eql-pin.ts --apply # also rewrite the pin + */ +import fs from "node:fs"; +import path from "node:path"; + +const PIN_FILE = path.join(process.cwd(), "scripts/generate-eql-docs.ts"); +// Matches the pin's fallback literal, leaving the env-var override intact. +const PIN_RE = + /(EQL_RELEASE_TAG\s*=\s*process\.env\.EQL_RELEASE_TAG\s*\?\?\s*")(eql-[^"]+)(")/; +const RELEASES_API = + "https://api.github.com/repos/cipherstash/encrypt-query-language/releases"; +// Stable EQL SQL releases only. Excludes the sibling tags cut by the same +// release (`eql-bindings-v3.0.3`, `@cipherstash/eql@3.0.3`) and prereleases +// like `eql-3.0.0-alpha.4`, which must never be proposed automatically. +const TAG_RE = /^eql-(\d+)\.(\d+)\.(\d+)$/; + +interface Version { + tag: string; + major: number; + minor: number; + patch: number; +} + +function parseTag(tag: string): Version | null { + const m = TAG_RE.exec(tag); + if (!m) return null; + return { + tag, + major: Number(m[1]), + minor: Number(m[2]), + patch: Number(m[3]), + }; +} + +function compare(a: Version, b: Version): number { + return a.major - b.major || a.minor - b.minor || a.patch - b.patch; +} + +function readPin(): Version { + const source = fs.readFileSync(PIN_FILE, "utf8"); + const m = PIN_RE.exec(source); + if (!m) { + throw new Error( + `Could not find the EQL_RELEASE_TAG pin in ${PIN_FILE}. ` + + "If the declaration was reformatted, update PIN_RE in this script.", + ); + } + const version = parseTag(m[2]); + if (!version) { + throw new Error( + `Pinned tag "${m[2]}" is not a stable eql-X.Y.Z release; refusing to compare.`, + ); + } + return version; +} + +async function fetchReleases(): Promise<Version[]> { + const headers: Record<string, string> = { + accept: "application/vnd.github+json", + }; + // Authenticated in CI purely for the rate limit; the repo is public. + const token = process.env.GITHUB_TOKEN ?? process.env.GH_TOKEN; + if (token) headers.authorization = `Bearer ${token}`; + + const found: Version[] = []; + // Each EQL release cuts three tags, so paginate rather than assume one page + // covers enough history. + for (let page = 1; page <= 3; page++) { + const res = await fetch(`${RELEASES_API}?per_page=100&page=${page}`, { + headers, + }); + if (!res.ok) { + throw new Error( + `GitHub releases API returned ${res.status} ${res.statusText}`, + ); + } + const batch = (await res.json()) as { + tag_name: string; + draft: boolean; + prerelease: boolean; + }[]; + if (!batch.length) break; + for (const r of batch) { + if (r.draft || r.prerelease) continue; + const v = parseTag(r.tag_name); + if (v) found.push(v); + } + if (batch.length < 100) break; + } + return found.sort(compare); +} + +function emit(name: string, value: string): void { + const out = process.env.GITHUB_OUTPUT; + if (out) fs.appendFileSync(out, `${name}=${value}\n`); +} + +async function main(): Promise<void> { + const apply = process.argv.includes("--apply"); + const pinned = readPin(); + const releases = await fetchReleases(); + + if (!releases.length) { + throw new Error( + "No stable eql-X.Y.Z releases found — refusing to proceed.", + ); + } + + const sameMinor = releases.filter( + (r) => r.major === pinned.major && r.minor === pinned.minor, + ); + const latestPatch = sameMinor[sameMinor.length - 1]; + const latestOverall = releases[releases.length - 1]; + + console.log(`Pinned: ${pinned.tag}`); + console.log( + `Latest in ${pinned.major}.${pinned.minor}.x: ${latestPatch?.tag ?? "(none)"}`, + ); + console.log(`Latest overall: ${latestOverall.tag}`); + + // A newer minor/major is surfaced but never proposed: it means migration + // work, not a pin bump, and deciding when to take it is a human call. + const newerLine = + compare(latestOverall, latestPatch ?? pinned) > 0 + ? `${latestOverall.tag} is available but is a minor/major bump — not proposed automatically.` + : ""; + if (newerLine) console.log(`\nNote: ${newerLine}`); + emit("newer_minor", newerLine); + + if (!latestPatch || compare(latestPatch, pinned) <= 0) { + console.log("\n✓ Pin is current for this minor. Nothing to do."); + emit("bump", "false"); + return; + } + + console.log(`\n→ Patch bump available: ${pinned.tag} → ${latestPatch.tag}`); + emit("bump", "true"); + emit("from", pinned.tag); + emit("to", latestPatch.tag); + + if (apply) { + const source = fs.readFileSync(PIN_FILE, "utf8"); + fs.writeFileSync( + PIN_FILE, + source.replace(PIN_RE, `$1${latestPatch.tag}$3`), + ); + console.log(` Applied to ${path.relative(process.cwd(), PIN_FILE)}`); + } +} + +main().catch((err) => { + console.error(`✗ ${err.message}`); + process.exit(1); +}); From 95e90e4e30fb2c7069794e7715db3f42e610d156 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 16:30:04 +1000 Subject: [PATCH 086/151] docs: resolve protect-ffi's real types so the Stack reference stops saying `any` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The generated Stack API reference documents 13 types as `any` and gives AuthStrategy the wrong description entirely. Both come from one missing compiler option. @cipherstash/protect-ffi's `exports` map routes the `node` condition to lib/index.d.cts (the real type surface) and everything else to `default: ./dist/wasm/protect_ffi.js`, which ships no `types`. TypeScript therefore falls through to the sibling dist/wasm/protect_ffi.d.ts — raw wasm-bindgen output — where none of the hand-written types exist. `moduleResolution: "bundler"` does not imply the `node` condition; packages/stack/tsconfig.json adds `customConditions: ["node"]`, which is why the stack team never sees this. But typedoc.tsconfig.json extends stack's ROOT tsconfig, which does not set it. Set it on the generated config. Confirmed with a minimal repro against protect-ffi 0.30.0 (the version stack 1.0.0-rc.4 pins exactly): `moduleResolution: bundler` alone yields "has no exported member 'ProtectError'. Did you mean 'encryptQuery'?"; adding customConditions typechecks clean. Also turns error checking back on. It was disabled to tolerate this, on the theory that the references were "unresolved even though the source is correct" and TypeDoc would still emit accurate signatures. It does not — an unresolved import becomes `any` in the output, so the workaround converted a loud failure into a silently wrong reference. With the condition fixed the surface typechecks with 0 errors, so the next resolution break fails the build instead. Generating with and without the fix, back to back against the same stack tag, changes 23 pages. Representative: EncryptionError.code any -> ProtectErrorCode EncryptQueryOperation.execute() Promise<Result<any, ...>> -> Promise<Result<EncryptedQueryResult, ...>> encryptQuery plaintext param any -> Plaintext | null | undefined AuthStrategy description the module's blurb -> the type's own docs Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- scripts/lib/docs-generator.ts | 28 +++++++++++++++++++++------- 1 file changed, 21 insertions(+), 7 deletions(-) diff --git a/scripts/lib/docs-generator.ts b/scripts/lib/docs-generator.ts index b27c01a..e5c7579 100644 --- a/scripts/lib/docs-generator.ts +++ b/scripts/lib/docs-generator.ts @@ -213,6 +213,18 @@ export async function generateDocsForTag( include: config.tsconfigInclude, exclude: ["node_modules", "examples", "dist", "__tests__"], compilerOptions: { + // The stack repo's ROOT tsconfig (which this extends) sets + // `moduleResolution: "bundler"` but no `customConditions`; + // `packages/stack/tsconfig.json` — the config the stack team actually + // builds with — adds `customConditions: ["node"]`. That matters here: + // @cipherstash/protect-ffi's `exports` map routes the `node` condition to + // `lib/index.d.cts` (the real type surface) and everything else to + // `default: ./dist/wasm/protect_ffi.js`, which ships NO `types`. Without + // the condition, TypeScript falls through to the sibling + // `dist/wasm/protect_ffi.d.ts` — raw wasm-bindgen output — and every + // hand-written type resolves to nothing ("has no exported member + // 'ProtectError'. Did you mean 'encryptQuery'?"). + customConditions: ["node"], paths: { "@/*": ["./packages/stack/src/*"], "@cipherstash/schema": ["./packages/schema/src/index.ts"], @@ -323,13 +335,15 @@ export async function generateDocsForTag( sanitizeComments: true, fileExtension: ".mdx", entryFileName: "index", - // We document external source we don't control, installed here with a - // different package manager than the upstream monorepo uses. That can leave - // cross-package type references (e.g. @cipherstash/protect-ffi's ProtectError) - // unresolved for the isolated typecheck even though the source is correct, - // which would otherwise fail the whole build. TypeDoc still emits accurate - // signatures from the source AST, so tolerate type errors rather than block. - skipErrorChecking: true, + // Type errors fail the build, deliberately. This was `true` to tolerate + // "cross-package type references unresolved even though the source is + // correct" — but that diagnosis was wrong, and tolerating it was not free: + // an unresolved import does not just warn, it makes TypeDoc emit `any`. + // The cause was the missing `customConditions` above, and with that fixed + // the whole surface typechecks cleanly. Leaving this off means the next + // resolution break surfaces as a failed build instead of a reference page + // that quietly documents `any`. + skipErrorChecking: false, sort: ["source-order"], kindSortOrder: [ "Interface", From 90916c45bec17e64e830d0a9d08db7f6eb141708 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 17:34:46 +1000 Subject: [PATCH 087/151] docs: pin EQL 3.0.4 and drop the two manifest blind spots it fixed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit EQL 3.0.4 ships the manifest-extraction fixes from cipherstash/encrypt-query-language#427, so `eql_v3.grouped_value` and `public.eql_v3_json` now resolve from the catalog and no longer need drift-check exemptions. Verified against the released manifest: grouped_value(jsonb) and lints() present, 53 domains (was 52) including public.eql_v3_json, and the `match` capability restored to text_match and both text_search variants. Only `eql_v3.query_text_eq` stays on the allowlist — the 40 scalar query-operand domains created in a `DO ... EXECUTE` block are a separate gap that 3.0.4 does not address. Removing the other two means a regression in either now fails the drift check instead of staying quiet. Also always stamp the pinned tag as the manifest's version rather than only substituting when it reads "DEV". EQL's release workflow derives that field from a tag input that can arrive empty, in which case json.sh falls back to "DEV" — which 3.0.4 shipped, and which would otherwise render as "EQL DEV" in the banner on every reference page. The existing guard already covered that case; this extends it to warn when a manifest is stamped with a DIFFERENT release, which would be a packaging mix-up worth seeing rather than a cosmetic default worth silencing. bun run build passes: drift check clean against 3.0.4, 1990 functions, banner reads EQL 3.0.4. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- scripts/generate-eql-api-docs.ts | 28 ++++++++++------------------ scripts/generate-eql-docs.ts | 30 ++++++++++++++++++++++-------- 2 files changed, 32 insertions(+), 26 deletions(-) diff --git a/scripts/generate-eql-api-docs.ts b/scripts/generate-eql-api-docs.ts index e78e60e..5bcc536 100644 --- a/scripts/generate-eql-api-docs.ts +++ b/scripts/generate-eql-api-docs.ts @@ -497,24 +497,16 @@ function driftCheck(manifest: Manifest): string[] { // // Keep this list minimal, and delete entries as the manifest grows to cover // them. -// `eql_v3.grouped_value` is the second blind spot, with a different cause: the -// manifest lists aggregates from the codegen catalog, so the 60 generated -// `min`/`max` aggregates are there but the one hand-written `CREATE AGGREGATE` -// is not. Verified present in the 3.0.3 install SQL: -// grep -c "CREATE AGGREGATE" cipherstash-encrypt.sql # => 61 -// grep -c "CREATE AGGREGATE eql_v3.grouped_value" cipherstash-encrypt.sql # => 1 -// Its state function (`eql_v3_internal.grouped_value_sfunc`) IS in the manifest, -// which is what makes the gap easy to miss. -// `public.eql_v3_json` — the storage-only JSON domain added in 3.0.1 — has the -// same cause as the query-operand domains: created in a `DO` block, so the -// catalog the manifest is built from never sees it (its searchable sibling -// `public.eql_v3_json_search` IS in the manifest). Verified in the 3.0.3 SQL: -// grep -c "CREATE DOMAIN public.eql_v3_json AS jsonb" cipherstash-encrypt.sql # => 1 -const MANIFEST_BLIND_SPOTS = new Set([ - "eql_v3.query_text_eq", - "eql_v3.grouped_value", - "public.eql_v3_json", -]); +// +// `eql_v3.grouped_value` and `public.eql_v3_json` used to be listed here too. +// Both were fixed upstream in EQL 3.0.4 +// (cipherstash/encrypt-query-language#427): the aggregate was lost because +// Doxygen misread `CREATE AGGREGATE`'s definition body and named the member +// after its argument type, and the storage-only JSON domain was filtered out of +// the catalog dump as scalar while the scalar path skipped its mixed family +// wholesale. Both now resolve from the manifest, so the exemptions are gone — +// and if either regresses, the drift check says so instead of staying quiet. +const MANIFEST_BLIND_SPOTS = new Set(["eql_v3.query_text_eq"]); // ── Main ───────────────────────────────────────────────────────────────────── function main() { diff --git a/scripts/generate-eql-docs.ts b/scripts/generate-eql-docs.ts index d934247..6f9b171 100644 --- a/scripts/generate-eql-docs.ts +++ b/scripts/generate-eql-docs.ts @@ -27,10 +27,13 @@ import GithubSlugger from "github-slugger"; * The EQL release the docs are written against. * * 3.0.x is still moving: 3.0.1 renamed the encrypted-JSON domains and replaced - * the text fuzzy-match operator, 3.0.3 guarded the empty-bloom needle. Each bump - * is a deliberate commit that fixes whatever the drift check reports. + * the text fuzzy-match operator, 3.0.3 guarded the empty-bloom needle, and + * 3.0.4 fixed the manifest extraction that had been dropping + * `eql_v3.grouped_value` and `public.eql_v3_json` from the catalog entirely + * (cipherstash/encrypt-query-language#427). Each bump is a deliberate commit + * that fixes whatever the drift check reports. */ -const EQL_RELEASE_TAG = process.env.EQL_RELEASE_TAG ?? "eql-3.0.3"; +const EQL_RELEASE_TAG = process.env.EQL_RELEASE_TAG ?? "eql-3.0.4"; const GITHUB_RELEASE_DOWNLOAD = "https://github.com/cipherstash/encrypt-query-language/releases/download"; @@ -278,13 +281,24 @@ async function main() { // this is best-effort and the generator falls back to the committed sample. const manifestSrc = path.join(extractPath, "json", "eql-manifest.json"); try { - // Prerelease manifests report `"version": "DEV"`, which would surface as - // "generated and validated against EQL DEV" in the banner on every - // reference page. We know which release we pinned, so say so. + // The pinned tag is the authoritative version, so always stamp it rather + // than trusting the manifest's own field. EQL's release workflow derives + // that field from a tag input that can arrive empty, in which case + // `json.sh` silently falls back to `"DEV"` — which eql-3.0.4 shipped, and + // which would otherwise surface as "EQL DEV" in the banner on every + // reference page. Report a disagreement rather than papering over it: a + // manifest stamped with a DIFFERENT release is a packaging mix-up worth + // seeing, not a cosmetic default. const manifest = JSON.parse(await fs.readFile(manifestSrc, "utf8")); - if (!manifest.version || manifest.version === "DEV") { - manifest.version = tag.replace(/^eql-/, ""); + const expected = tag.replace(/^eql-/, ""); + if (manifest.version && manifest.version !== "DEV") { + if (manifest.version !== expected) { + console.warn( + `⚠ ${tag} ships a manifest stamped "${manifest.version}", not "${expected}". Using the pinned tag; check the release.`, + ); + } } + manifest.version = expected; await fs.writeFile(RELEASE_MANIFEST, JSON.stringify(manifest, null, 2)); console.log( `✓ Extracted eql-manifest.json → ${path.basename(RELEASE_MANIFEST)} (version: ${manifest.version})`, From 8107f7a66dee711825d47bdea6e212c329aafeb2 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 19:06:00 +1000 Subject: [PATCH 088/151] docs: generate the stack-supabase reference, and stop overstating the API gate MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Three changes, all about the docs telling the truth about the SDK. 1. Add @cipherstash/stack-supabase to the TypeDoc entry points. Stack 1.0 split the Supabase adapter into its own package, and the entry points were never updated, so NOTHING in it reached the generated reference — encryptedSupabaseV3, the query builder, and the EQL-version constraints on its encrypted operators were all absent. 19 pages now generate (763 total, up from 706), including the constraint that free-text and JSON operators are "unavailable with EQL 3.0.2+" because PostgREST cannot express the required eql_v3.query_* cast. That is now published automatically instead of relying on someone reading the source. 2. Resolve a workspace package's subpath imports to source. stack-supabase imports its sibling by package name (@cipherstash/stack, /schema, /adapter-kit, ...), which resolves through that package's exports map to ./dist — and the clone is never built, so all 42 imports were TS2307 and every cross-package type would have documented as `any`. Derive the tsconfig `paths` from the sibling's own exports map, rewriting ./dist/x.js to ./packages/<pkg>/src/x.ts, rather than hardcoding twelve subpaths that would rot the next time Stack adds one. Two of them are not guessable (`/types` -> types-public.ts, `/v3` -> encryption/v3.ts), which is the argument for deriving rather than transcribing. 3. Say what the content API gate actually checks. It printed "no deprecated or non-existent API found in documentation" while the Supabase page taught `.contains()` for encrypted free-text, which raises. It is a denylist of 7 patterns, not verification, so it now reports the rule count and files scanned and states the limitation outright. Deliberately NOT adding the version-diff denylist discussed: `contains()` was repurposed rather than removed, so it is present in every tag and no symbol-presence or signature diff fires on it. Catching that class needs the examples typechecked against the SDK; the header now records that. Also removes CLAUDE.md's "Required Skills" section. All six skills it mandated (encryption, secrets, drizzle, supabase, dynamodb, update-docs) do not exist, and its validation checklist was stale too — `switcher` appears in 0 files and the "Good to know" callout in 1, versus <Callout> in 37. Its accurate items are already covered by the Frontmatter, Code Blocks, and Formatting sections above. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- CLAUDE.md | 43 ---------------------------- scripts/generate-docs.ts | 16 +++++++++-- scripts/lib/docs-generator.ts | 50 +++++++++++++++++++++++++++++++++ scripts/validate-content-api.ts | 43 +++++++++++++++++++++++----- 4 files changed, 99 insertions(+), 53 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index c827c47..761d148 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -102,46 +102,3 @@ Fumadocs UI theme with custom purple primary color (`hsl(269, 70%, 45%)`). Dark ## Formatting Biome handles both linting and formatting. 2-space indentation. Biome organizes imports automatically. Run `bun run format` before committing. - -## Required Skills - -Always use the following agent skills when working in this repository. These skills contain the canonical API references and must be consulted to ensure documentation accuracy. - -### CipherStash Product Skills - -Use these skills whenever writing or editing documentation about the corresponding product area. They contain the complete, up-to-date API surface, code examples, and type signatures. - -| Skill | Use when editing docs in | -|---|---| -| `encryption` | `content/docs/encryption/` — Schema definition, encrypt/decrypt, searchable encryption, bulk operations, identity-aware encryption, error handling, migration | -| `secrets` | `content/docs/secrets/` — Secrets SDK (`set`/`get`/`getMany`/`list`/`delete`), `stash` CLI usage, environment isolation | -| `drizzle` | `content/docs/encryption/drizzle.mdx` — `encryptedType` column, `extractEncryptionSchema`, `createEncryptionOperators`, encrypted query operators, batched and/or, EQL migrations | -| `supabase` | `content/docs/encryption/supabase.mdx` — `encryptedSupabase` wrapper, transparent encrypt/decrypt on insert/update/select, query filters (eq, like, gt, in, or, match), identity-aware encryption | -| `dynamodb` | `content/docs/encryption/dynamodb.mdx` — `encryptedDynamoDB` helper, `__source`/`__hmac` attribute naming, encrypted partition/sort keys, bulk operations, audit logging | - -### Documentation Update Skill - -Use the `update-docs` skill whenever: -- Creating new documentation pages -- Updating existing documentation based on code changes -- Reviewing documentation completeness for a PR -- Scaffolding docs for a new feature - -The `update-docs` skill enforces the following workflow: - -1. **Analyze changes** — Diff the branch to identify affected files -2. **Map to docs** — Use the code-to-docs mapping to find which MDX files need updates -3. **Review each doc** — Walk through updates with user confirmation before editing -4. **Validate** — Run `bun run lint` to check formatting -5. **Commit** — Stage documentation changes - -#### Documentation Validation Checklist - -Before committing documentation changes, verify: - -- Frontmatter has `title` and `description` -- Code blocks have `filename` attribute -- TypeScript examples come first, with `switcher` and a JS variant where appropriate -- Props/options tables are properly formatted -- Notes use the `> **Good to know**:` callout pattern -- `bun run lint` passes diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 3ba8391..697624c 100644 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -19,8 +19,14 @@ const stackConfig: DocsConfig = { baseOutputDir: path.join(process.cwd(), "content/stack/reference/stack"), // Stack 1.0 split the Drizzle and Supabase adapters into their own packages // (@cipherstash/stack-drizzle, @cipherstash/stack-supabase) and removed the - // secrets module, so those three entry points no longer exist under - // packages/stack/src. Keep only the modules @cipherstash/stack still ships. + // secrets module, so those entry points no longer exist under + // packages/stack/src. + // + // `stack-supabase` is documented from its new home. It is a separate npm + // package but the same reference surface to a reader, and without it nothing + // in the Supabase adapter — `encryptedSupabaseV3`, the query builder, the + // EQL-version constraints on its encrypted operators — reaches the generated + // reference at all. entryPoints: [ "./packages/stack/src/encryption/index.ts", "./packages/stack/src/schema/index.ts", @@ -29,8 +35,12 @@ const stackConfig: DocsConfig = { "./packages/stack/src/types-public.ts", "./packages/stack/src/client.ts", "./packages/stack/src/errors/index.ts", + "./packages/stack-supabase/src/index.ts", + ], + tsconfigInclude: [ + "packages/stack/src/**/*", + "packages/stack-supabase/src/**/*", ], - tsconfigInclude: ["packages/stack/src/**/*"], tagFilter: (tag: string) => tag.includes("@cipherstash/stack@") && !tag.includes("stack-"), referencePathSegment: "stack", diff --git a/scripts/lib/docs-generator.ts b/scripts/lib/docs-generator.ts index e5c7579..92cc52b 100644 --- a/scripts/lib/docs-generator.ts +++ b/scripts/lib/docs-generator.ts @@ -160,6 +160,55 @@ export function getVersionsToGenerate( }); } +/** + * TypeScript `paths` that resolve a workspace package to its SOURCE. + * + * An adapter package (`stack-supabase`) imports its sibling by package name — + * `@cipherstash/stack`, `@cipherstash/stack/schema`, `.../adapter-kit` — which + * resolves through that package's `exports` map to `./dist/*`. The clone is + * never built, so there is no `dist` and every such import is TS2307. TypeDoc + * then documents the adapter with all its cross-package types missing. + * + * Derive the mapping from the sibling's own `exports` map rather than hardcoding + * it: rewrite each subpath's `./dist/x.js` target to `./packages/<pkg>/src/x.ts`. + * A hand-written list would silently rot the next time Stack adds a subpath, and + * the failure mode is exactly the one this is fixing — a missing type quietly + * becoming `any` in the published reference. + */ +async function workspaceSourcePaths( + workingDir: string, + packageName: string, +): Promise<Record<string, string[]>> { + const dir = packageName.split("/").pop(); + const manifest = path.join(workingDir, "packages", dir ?? "", "package.json"); + + let exportsMap: Record<string, unknown>; + try { + const pkg = JSON.parse(await fs.readFile(manifest, "utf8")); + exportsMap = pkg.exports ?? {}; + } catch { + // The layout moved. Better to emit nothing and let TS2307 name the missing + // module than to invent paths that point at files which do not exist. + console.warn(` ! no exports map at ${manifest}; skipping source paths`); + return {}; + } + + const paths: Record<string, string[]> = {}; + for (const [subpath, target] of Object.entries(exportsMap)) { + if (subpath.endsWith("package.json")) continue; + // Any condition will do — every branch points at the same module, and only + // the path shape matters here. + const dist = JSON.stringify(target).match(/\.\/dist\/[^"]+\.js/)?.[0]; + if (!dist) continue; + + const stem = dist.replace(/^\.\/dist\//, "").replace(/\.js$/, ""); + const specifier = + subpath === "." ? packageName : `${packageName}/${subpath.slice(2)}`; + paths[specifier] = [`./packages/${dir}/src/${stem}.ts`]; + } + return paths; +} + /** * Generate documentation for a specific tag */ @@ -229,6 +278,7 @@ export async function generateDocsForTag( "@/*": ["./packages/stack/src/*"], "@cipherstash/schema": ["./packages/schema/src/index.ts"], "@cipherstash/schema/*": ["./packages/schema/src/*"], + ...(await workspaceSourcePaths(workingDir, "@cipherstash/stack")), }, }, }; diff --git a/scripts/validate-content-api.ts b/scripts/validate-content-api.ts index 30d0b61..c6c0df2 100644 --- a/scripts/validate-content-api.ts +++ b/scripts/validate-content-api.ts @@ -2,11 +2,22 @@ /** * Content API gate. * - * Fails the build when documentation teaches an API that is deprecated, was - * removed, or never existed. Two long-lived content branches plus a fast-moving - * SDK means a page fixed on one branch can be silently reintroduced by a port - * from the other — which is exactly how the deprecated `LockContext.identify()` - * flow survived a fix and came back in a comparison-page port. + * Fails the build when documentation teaches one of the specific APIs listed in + * RULES below. Two long-lived content branches plus a fast-moving SDK means a + * page fixed on one branch can be silently reintroduced by a port from the + * other — which is exactly how the deprecated `LockContext.identify()` flow + * survived a fix and came back in a comparison-page port. + * + * ── What this does NOT do ────────────────────────────────────────────────── + * This is a DENYLIST, not verification. It catches only what someone thought to + * add, and cannot see an API that changed MEANING rather than name. Stack's + * `contains()` → `matches()` rename is the worked example: `contains()` still + * exists, so nothing here (or in any symbol-presence diff) fires, yet calling it + * on an encrypted text column now raises. That shipped in the docs. + * + * Catching that class needs the examples themselves typechecked against the + * installed SDK, the way Rust doctests are compiled. Until then, treat a pass + * as "none of the known-bad patterns appeared", which is what it prints. * * Run via `bun run validate-content`; wired into prebuild. * @@ -138,11 +149,17 @@ function inScope(relative: string, rule: Rule): boolean { const root = process.cwd(); const findings: Finding[] = []; +let filesScanned = 0; +let filesSkipped = 0; for (const dir of ["content/docs", "content/stack"]) { for (const file of collectFiles(path.join(root, dir))) { const relative = path.relative(root, file).split(path.sep).join("/"); - if (isSkipped(relative)) continue; + if (isSkipped(relative)) { + filesSkipped++; + continue; + } + filesScanned++; const lines = fs.readFileSync(file, "utf8").split("\n"); lines.forEach((text, i) => { @@ -192,4 +209,16 @@ if (findings.length > 0) { process.exit(1); } -console.log("✓ no deprecated or non-existent API found in documentation"); +// Say what was actually checked. This gate is a DENYLIST: it can only catch the +// APIs listed in RULES, so an unqualified "no non-existent API found" overstates +// it — and did, while `content/docs/reference/stack/supabase.mdx` taught +// `.contains()` for encrypted free-text, which raises. Reporting the rule count +// makes the coverage legible at a glance, so the next reader can tell the +// difference between "verified" and "matched nothing on a short list". +console.log( + `✓ content API gate: no occurrences of ${RULES.length} known-retired API pattern(s) ` + + `in ${filesScanned} file(s) (${filesSkipped} generated/pinned file(s) skipped).`, +); +console.log( + " Denylist only: it does not verify that the APIs the docs DO name still exist.", +); From 642cc94115215ea4619ef815b80d31a73a613155 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 11:03:36 +1000 Subject: [PATCH 089/151] fix(ci): validate links across both content trees, and check anchors MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `validate-links` only ever looked at `content/stack`, and only at markdown link syntax. That left the entire v2 tree unchecked, plus every `<Card href=…>` in both trees — so a v2 page could be renamed or merged away and every link to it would 404 against a green build. It also never checked `#fragments` at all, in either tree. It now walks both collections with their real base URLs (content/docs at the root, content/stack under /stack), reads JSX href attributes as well as markdown links, and resolves each `#fragment` against the target page's headings. Getting anchors right needed care: - Headings are slugged with `github-slugger`, the same one Fumadocs uses, one instance per page so repeated headings get the same -1/-2 suffixes the renderer emits. Hand-rolled slugification is wrong in ways that matter here — "Sorting & range" is `sorting--range`, not `sorting-range`. - Fumadocs' explicit `## Heading [#custom-id]` syntax is honoured. - `<include cwd>` partials are inlined first, since their headings become anchors on the including page. - Fenced code blocks are blanked (line numbers preserved), so a `#` in a bash sample isn't mistaken for a heading. Non-page targets are resolved rather than skipped: static files under public/ and static route handlers under src/app. Previously anything not starting with /stack/ was waved through, which is precisely how the v2 tree escaped checking. This surfaced 14 genuine breakages, all fixed here: - 13 links to `searchable-encryption#exact-match`, `#match-pattern` and `#range--order` across 6 files. Those headings were renamed at some point to "Exact matching", "Free-text search" and "Sorting and range queries"; the links have been landing at the top of the page ever since, silently. - `reference/drizzle.mdx` pointed at `/integrations/drizzle`, which does not exist on v2 yet — it arrives with #39. Dropped the forward reference; the API list under it already covers the surface. TypeDoc output is gitignored and produced by `generate-docs`, so run standalone on a fresh checkout every link into it looks broken. The script now says so instead of emitting a wall of spurious errors — `prebuild` generates before validating, which is why CI never sees it. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- content/docs/reference/eql/v2/index.mdx | 6 +- content/docs/reference/eql/v2/payload.mdx | 6 +- content/stack/reference/cipher-cell.mdx | 6 +- content/stack/reference/drizzle.mdx | 2 +- content/stack/reference/eql-guide.mdx | 6 +- content/stack/reference/glossary.mdx | 2 +- scripts/validate-links.ts | 411 ++++++++++++++-------- 7 files changed, 278 insertions(+), 161 deletions(-) diff --git a/content/docs/reference/eql/v2/index.mdx b/content/docs/reference/eql/v2/index.mdx index d25131a..9095659 100644 --- a/content/docs/reference/eql/v2/index.mdx +++ b/content/docs/reference/eql/v2/index.mdx @@ -76,19 +76,19 @@ EQL supports multiple searchable encryption index types. Each index type enables Enables exact equality queries and unique constraints using HMAC-SHA256. -[Learn more about exact indexes](/stack/cipherstash/encryption/searchable-encryption#exact-match) +[Learn more about exact indexes](/stack/cipherstash/encryption/searchable-encryption#exact-matching) ### `ore`: Range queries Enables range comparisons (`<`, `>`, `BETWEEN`) and ordering (`ORDER BY`) using Order Revealing Encryption. -[Learn more about range indexes](/stack/cipherstash/encryption/searchable-encryption#range--order) +[Learn more about range indexes](/stack/cipherstash/encryption/searchable-encryption#sorting-and-range-queries) ### `match`: Pattern matching Enables substring and full-text search (`LIKE`, `ILIKE`) using encrypted Bloom filters with trigrams. -[Learn more about match indexes](/stack/cipherstash/encryption/searchable-encryption#match-pattern) +[Learn more about match indexes](/stack/cipherstash/encryption/searchable-encryption#free-text-search) ### `ste_vec`: Structured data diff --git a/content/docs/reference/eql/v2/payload.mdx b/content/docs/reference/eql/v2/payload.mdx index 953264d..3e7503a 100644 --- a/content/docs/reference/eql/v2/payload.mdx +++ b/content/docs/reference/eql/v2/payload.mdx @@ -157,7 +157,7 @@ Enables exact match queries using HMAC-SHA256. **Type**: Hex-encoded string (64 characters) -**Index Type**: [Exact](/stack/cipherstash/encryption/searchable-encryption#exact-match) +**Index Type**: [Exact](/stack/cipherstash/encryption/searchable-encryption#exact-matching) ```json { @@ -171,7 +171,7 @@ Enables range queries and ordering using Order Revealing Encryption. **Type**: Array of strings -**Index Type**: [Order / Range](/stack/cipherstash/encryption/searchable-encryption#range--order) +**Index Type**: [Order / Range](/stack/cipherstash/encryption/searchable-encryption#sorting-and-range-queries) ```json { @@ -188,7 +188,7 @@ Enables substring and pattern matching queries using encrypted Bloom filters wit **Type**: Array of integers -**Index Type**: [Match](/stack/cipherstash/encryption/searchable-encryption#match-pattern) +**Index Type**: [Match](/stack/cipherstash/encryption/searchable-encryption#free-text-search) ```json { diff --git a/content/stack/reference/cipher-cell.mdx b/content/stack/reference/cipher-cell.mdx index 078c4ea..a9f60e5 100644 --- a/content/stack/reference/cipher-cell.mdx +++ b/content/stack/reference/cipher-cell.mdx @@ -149,7 +149,7 @@ Enables exact match queries using HMAC-SHA256. **Type**: Hex-encoded string (64 characters) -**Index Type**: [Exact](/stack/cipherstash/encryption/searchable-encryption#exact-match) +**Index Type**: [Exact](/stack/cipherstash/encryption/searchable-encryption#exact-matching) ```json { @@ -163,7 +163,7 @@ Enables range queries and ordering using Order Revealing Encryption. **Type**: Array of strings -**Index Type**: [Order / Range](/stack/cipherstash/encryption/searchable-encryption#range--order) +**Index Type**: [Order / Range](/stack/cipherstash/encryption/searchable-encryption#sorting-and-range-queries) ```json { @@ -180,7 +180,7 @@ Enables substring and pattern matching queries using encrypted Bloom filters wit **Type**: Array of integers -**Index Type**: [Match](/stack/cipherstash/encryption/searchable-encryption#match-pattern) +**Index Type**: [Match](/stack/cipherstash/encryption/searchable-encryption#free-text-search) ```json { diff --git a/content/stack/reference/drizzle.mdx b/content/stack/reference/drizzle.mdx index a19ef0f..c69a68f 100644 --- a/content/stack/reference/drizzle.mdx +++ b/content/stack/reference/drizzle.mdx @@ -131,7 +131,7 @@ See the [CipherStash CLI reference](/stack/cipherstash/cli) for all `db install` ## Full API surface -The Drizzle adapter now ships as its own package, `@cipherstash/stack-drizzle`. The EQL v3 dialect is on `@cipherstash/stack-drizzle/v3`. See the [Drizzle integration](/integrations/drizzle) for the current, EQL v3 surface: +The Drizzle adapter now ships as its own package, `@cipherstash/stack-drizzle`. The EQL v3 dialect is on `@cipherstash/stack-drizzle/v3`. Its surface: - `encryptedType` — column builder - `extractEncryptionSchema` — schema conversion diff --git a/content/stack/reference/eql-guide.mdx b/content/stack/reference/eql-guide.mdx index 9dfa917..3649d17 100644 --- a/content/stack/reference/eql-guide.mdx +++ b/content/stack/reference/eql-guide.mdx @@ -87,19 +87,19 @@ EQL supports multiple searchable encryption index types. Each index type enables Enables exact equality queries and unique constraints using HMAC-SHA256. -[Learn more about exact indexes](/stack/cipherstash/encryption/searchable-encryption#exact-match) +[Learn more about exact indexes](/stack/cipherstash/encryption/searchable-encryption#exact-matching) ### `ore`: Range queries Enables range comparisons (`<`, `>`, `BETWEEN`) and ordering (`ORDER BY`) using Order Revealing Encryption. -[Learn more about range indexes](/stack/cipherstash/encryption/searchable-encryption#range--order) +[Learn more about range indexes](/stack/cipherstash/encryption/searchable-encryption#sorting-and-range-queries) ### `match`: Pattern matching Enables substring and full-text search (`LIKE`, `ILIKE`) using encrypted Bloom filters with trigrams. -[Learn more about match indexes](/stack/cipherstash/encryption/searchable-encryption#match-pattern) +[Learn more about match indexes](/stack/cipherstash/encryption/searchable-encryption#free-text-search) ### `ste_vec`: Structured data diff --git a/content/stack/reference/glossary.mdx b/content/stack/reference/glossary.mdx index d52d0c6..559e5b0 100644 --- a/content/stack/reference/glossary.mdx +++ b/content/stack/reference/glossary.mdx @@ -131,7 +131,7 @@ It facilitates secure single sign-on (SSO) and simplifies the authentication pro ### ORE (Order Revealing Encryption) A searchable encryption technique allowing for search, comparison, and sorting of encrypted data without decryption. -See [Range queries](/stack/cipherstash/encryption/searchable-encryption#range--order) for details. +See [Range queries](/stack/cipherstash/encryption/searchable-encryption#sorting-and-range-queries) for details. ## P diff --git a/scripts/validate-links.ts b/scripts/validate-links.ts index 6e38477..0bd0349 100644 --- a/scripts/validate-links.ts +++ b/scripts/validate-links.ts @@ -1,210 +1,327 @@ +/** + * Internal-link validation across every MDX page the site serves. + * + * Both content collections are covered: `content/docs` (the v2 IA, served from + * the site root) and `content/stack` (the legacy tree, served under /stack). + * This script used to know only about content/stack and only about markdown + * link syntax, which left the entire v2 tree — and every `<Card href=…>` in + * both trees — unchecked. A page could be renamed or merged away and every + * link to it would 404 against a green build. + * + * For markdown links (`[text](/url)`) and JSX href attributes (`href="/url"`) + * alike, it checks that: + * + * - the target page exists, in either collection; + * - a `#fragment` matches a heading on that page; + * - the link carries no `/docs/` prefix (Next's basePath prepends it), no + * `/index` suffix, and no `.mdx` extension — each of which 404s. + * + * Non-page targets are resolved rather than waved through: static files under + * `public/`, and static route handlers under `src/app` (`/llms.txt` and + * friends). Anything genuinely unresolvable is an error, so the exceptions + * stay honest. + * + * Anchors are slugged with the same `github-slugger` Fumadocs uses, one + * slugger per page so repeated headings get the `-1`/`-2` suffixes the + * renderer produces. Hand-rolled slugification gets this wrong in ways that + * matter: "Range & order" is `range--order`, not `range-order`. + */ import fs from "node:fs"; import path from "node:path"; +import GithubSlugger from "github-slugger"; -const CONTENT_DIR = path.join(process.cwd(), "content/stack"); +const ROOT = process.cwd(); /** - * Recursively collect all .mdx files in a directory. + * Content collections and the URL prefix each is served under. Mirrors the + * `loader({ baseUrl })` calls in src/lib/source.ts — keep them in step. */ +const COLLECTIONS = [ + { dir: "content/docs", baseUrl: "" }, + { dir: "content/stack", baseUrl: "/stack" }, +]; + +interface Page { + /** Repo-relative path of the .mdx file, for error messages. */ + file: string; + /** Heading ids usable as #fragments on this page. */ + anchors: Set<string>; +} + +interface BrokenLink { + file: string; + line: number; + url: string; + reason: string; +} + function collectMdxFiles(dir: string): string[] { const results: string[] = []; + if (!fs.existsSync(dir)) return results; for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { const fullPath = path.join(dir, entry.name); - if (entry.isDirectory()) { - results.push(...collectMdxFiles(fullPath)); - } else if (entry.isFile() && entry.name.endsWith(".mdx")) { + if (entry.isDirectory()) results.push(...collectMdxFiles(fullPath)); + else if (entry.isFile() && entry.name.endsWith(".mdx")) results.push(fullPath); - } } return results; } /** - * Convert a file path to its corresponding URL. - * content/stack/cipherstash/encryption/getting-started.mdx → /stack/cipherstash/encryption/getting-started - * content/stack/reference/stack/latest/schema/index.mdx → /stack/reference/stack/latest/schema + * Blank out fenced code blocks, preserving line count so reported line numbers + * still point at the right source line. Headings and links inside a code + * sample are illustrative, not real. */ -function filePathToUrl(filePath: string): string { - let rel = path.relative(CONTENT_DIR, filePath); - // Remove .mdx extension - rel = rel.replace(/\.mdx$/, ""); - // Remove trailing /index - rel = rel.replace(/\/index$/, ""); - return `/stack/${rel}`; +function blankCodeFences(content: string): string[] { + let fence: string | null = null; + return content.split("\n").map((line) => { + const open = /^\s*(`{3,}|~{3,})/.exec(line); + if (fence) { + if (open && open[1][0] === fence[0] && open[1].length >= fence.length) + fence = null; + return ""; + } + if (open) { + fence = open[1]; + return ""; + } + return line; + }); } /** - * Check if a URL has a /index suffix that would 404 at runtime. - * Fumadocs serves index.mdx at the directory URL, so /path/index is not a valid route. + * Fumadocs' `<include cwd>path</include>` inlines a partial at build time, so + * the partial's headings become anchors on the including page and its links + * are rendered by it. One level deep — partials don't nest today. */ -function hasIndexSuffix(url: string): boolean { - return /\/index$/.test(url); +function inlineIncludes(lines: string[]): string[] { + const out: string[] = []; + for (const line of lines) { + const match = /<include\s+cwd\s*>([^<]+)<\/include>/.exec(line); + if (!match) { + out.push(line); + continue; + } + const partial = path.join(ROOT, match[1].trim()); + if (!fs.existsSync(partial)) { + out.push(line); + continue; + } + // Keep the directive's own line so numbering above it is unchanged; + // appended partial lines report against the end of the file, which is + // close enough to find them. + out.push(line, ...blankCodeFences(fs.readFileSync(partial, "utf8"))); + } + return out; } -/** - * Check if a URL has a .mdx extension that should have been stripped. - */ -function hasMdxExtension(url: string): boolean { - return /\.mdx$/.test(url); +/** Reduce inline markdown to the plain text the slugger would see. */ +function headingText(raw: string): string { + return raw + .replace(/\[#[^\]]+\]\s*$/, "") // explicit anchor suffix + .replace(/`([^`]*)`/g, "$1") + .replace(/\[([^\]]*)\]\([^)]*\)/g, "$1") + .replace(/\*\*([^*]*)\*\*/g, "$1") + .replace(/\*([^*]*)\*/g, "$1") + .replace(/<[^>]+>/g, "") + .trim(); } -/** - * Build set of all valid internal URLs from MDX files. - */ -function buildValidUrls(mdxFiles: string[]): Set<string> { - const urls = new Set<string>(); - for (const file of mdxFiles) { - urls.add(filePathToUrl(file)); +function collectAnchors(lines: string[]): Set<string> { + const slugger = new GithubSlugger(); + const anchors = new Set<string>(); + for (const line of lines) { + const match = /^#{1,6}\s+(.+?)\s*$/.exec(line); + if (!match) continue; + const explicit = /\[#([^\]]+)\]\s*$/.exec(match[1]); + if (explicit) { + anchors.add(explicit[1]); + continue; + } + anchors.add(slugger.slug(headingText(match[1]))); } - return urls; + return anchors; } -interface BrokenLink { - file: string; - line: number; - url: string; - reason: string; +/** content/docs/a/b.mdx → /a/b ; content/stack/a/index.mdx → /stack/a */ +function fileToUrl(file: string, dir: string, baseUrl: string): string { + const rel = path + .relative(path.join(ROOT, dir), file) + .replace(/\.mdx$/, "") + .replace(/(^|\/)index$/, ""); + return `${baseUrl}/${rel}`.replace(/\/+$/, "") || "/"; } -/** - * Resolve a relative link to an absolute URL path using the file's actual location. - * Does NOT strip /index or .mdx — the caller should detect and report those as errors. - */ -function resolveRelativeLink(link: string, currentFilePath: string): string { - const currentDir = path.dirname(currentFilePath); - const resolvedPath = path.join(currentDir, link); - const rel = path.relative(CONTENT_DIR, resolvedPath); - return `/stack/${rel}`; +/** Resolve a relative link against the linking file's collection directory. */ +function resolveRelative(file: string, link: string): string | null { + for (const { dir, baseUrl } of COLLECTIONS) { + const base = path.join(ROOT, dir); + if (!file.startsWith(base + path.sep)) continue; + const resolved = path.resolve(path.dirname(file), link); + if (!resolved.startsWith(base)) return null; + return `${baseUrl}/${path.relative(base, resolved)}`.replace(/\/+$/, ""); + } + return null; } -/** - * Scan an MDX file for broken internal links. - */ -function scanFile(filePath: string, validUrls: Set<string>): BrokenLink[] { - const broken: BrokenLink[] = []; - const content = fs.readFileSync(filePath, "utf8"); - const lines = content.split("\n"); +// --- Build the set of things a link may legitimately point at --------------- - // Match markdown links: [text](url) - const linkRegex = /\[([^\]]*)\]\(([^)]+)\)/g; +const pages = new Map<string, Page>(); +/** Per-file line arrays, so each file is read and de-fenced exactly once. */ +const fileLines = new Map<string, string[]>(); - for (let i = 0; i < lines.length; i++) { - const line = lines[i]; +for (const { dir, baseUrl } of COLLECTIONS) { + for (const file of collectMdxFiles(path.join(ROOT, dir))) { + const lines = inlineIncludes( + blankCodeFences(fs.readFileSync(file, "utf8")), + ); + fileLines.set(file, lines); + pages.set(fileToUrl(file, dir, baseUrl), { + file: path.relative(ROOT, file), + anchors: collectAnchors(lines), + }); + } +} - for (const match of line.matchAll(linkRegex)) { - const url = match[2]; +/** Static files under public/ are served at the site root. */ +const assets = new Set<string>(); +const walkAssets = (dir: string, prefix = "") => { + if (!fs.existsSync(dir)) return; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + if (entry.isDirectory()) + walkAssets(path.join(dir, entry.name), `${prefix}/${entry.name}`); + else assets.add(`${prefix}/${entry.name}`); + } +}; +walkAssets(path.join(ROOT, "public")); - // Skip external links - if (url.startsWith("http://") || url.startsWith("https://")) continue; +/** + * Static route handlers (src/app/llms.txt/route.ts → /llms.txt). Dynamic and + * group segments are skipped: their paths can't be enumerated statically, and + * no documentation link targets one. + */ +const routes = new Set<string>(); +const walkRoutes = (dir: string, prefix = "") => { + if (!fs.existsSync(dir)) return; + for (const entry of fs.readdirSync(dir, { withFileTypes: true })) { + if (entry.isDirectory()) { + if (entry.name.startsWith("[") || entry.name.startsWith("(")) continue; + walkRoutes(path.join(dir, entry.name), `${prefix}/${entry.name}`); + } else if (/^route\.tsx?$/.test(entry.name) && prefix) { + routes.add(prefix); + } + } +}; +walkRoutes(path.join(ROOT, "src/app")); - // Skip anchor-only links - if (url.startsWith("#")) continue; +// --- Scan ------------------------------------------------------------------ - // Skip mailto links - if (url.startsWith("mailto:")) continue; +const LINK_PATTERNS = [ + /\[[^\]]*\]\(([^)\s]+)(?:\s+"[^"]*")?\)/g, // [text](/url "title") + /href="([^"]+)"/g, // <Card href="/url"> +]; - // Strip anchor from URL for validation - const urlWithoutAnchor = url.split("#")[0]; +function scanFile(file: string, lines: string[]): BrokenLink[] { + const broken: BrokenLink[] = []; + const rel = path.relative(ROOT, file); + const report = (line: number, url: string, reason: string) => + broken.push({ file: rel, line, url, reason }); - // Check for wrong /docs/ prefix - if (urlWithoutAnchor.startsWith("/docs/")) { - broken.push({ - file: path.relative(process.cwd(), filePath), - line: i + 1, - url, - reason: - "Uses /docs/ prefix — Next.js basePath prepends this automatically. Use /stack/ instead.", - }); - continue; - } + for (let i = 0; i < lines.length; i++) { + for (const pattern of LINK_PATTERNS) { + for (const match of lines[i].matchAll(pattern)) { + const url = match[1]; + // External, protocol-relative, anchor-only, or a JSX expression. + if (/^(https?:|mailto:|tel:|\/\/|#|\{)/.test(url)) continue; - // Internal absolute links (start with /stack/) - if (urlWithoutAnchor.startsWith("/stack/")) { - if (hasIndexSuffix(urlWithoutAnchor)) { - broken.push({ - file: path.relative(process.cwd(), filePath), - line: i + 1, + const [targetRaw, fragment] = url.split("#"); + if (!targetRaw) continue; + + const target = targetRaw.startsWith("/") + ? targetRaw + : resolveRelative(file, targetRaw); + if (target === null) continue; + + if (target.startsWith("/docs/")) { + report( + i + 1, url, - reason: - "Link ends with /index which will 404. Remove /index — Fumadocs serves index.mdx at the directory URL.", - }); - } else if (hasMdxExtension(urlWithoutAnchor)) { - broken.push({ - file: path.relative(process.cwd(), filePath), - line: i + 1, + "Uses a /docs/ prefix — Next's basePath prepends it automatically, so this resolves to /docs/docs/… and 404s.", + ); + continue; + } + if (/\/index$/.test(target)) { + report( + i + 1, url, - reason: - "Link has .mdx extension which will 404. Remove the .mdx extension.", - }); - } else if (!validUrls.has(urlWithoutAnchor)) { - broken.push({ - file: path.relative(process.cwd(), filePath), - line: i + 1, + "Ends with /index, which 404s — Fumadocs serves index.mdx at the directory URL.", + ); + continue; + } + if (/\.mdx$/.test(target)) { + report( + i + 1, url, - reason: "Page not found", - }); + "Has a .mdx extension, which 404s as a page link.", + ); + continue; } - continue; - } - // Skip other absolute links (e.g., /api/, external paths) - if (urlWithoutAnchor.startsWith("/")) continue; + const normalized = target.replace(/\/+$/, "") || "/"; + const page = pages.get(normalized); - // Relative links — resolve against current file's directory - const resolved = resolveRelativeLink(urlWithoutAnchor, filePath); - if (resolved.startsWith("/stack/")) { - if (hasIndexSuffix(resolved)) { - broken.push({ - file: path.relative(process.cwd(), filePath), - line: i + 1, - url, - reason: `Link resolves to ${resolved} which ends with /index and will 404. Remove /index from the link target.`, - }); - } else if (hasMdxExtension(resolved)) { - broken.push({ - file: path.relative(process.cwd(), filePath), - line: i + 1, - url, - reason: `Link resolves to ${resolved} which has .mdx extension and will 404. Remove the .mdx extension.`, - }); - } else if (!validUrls.has(resolved)) { - broken.push({ - file: path.relative(process.cwd(), filePath), - line: i + 1, + if (!page) { + if (assets.has(normalized) || routes.has(normalized)) continue; + report(i + 1, url, "No such page, static asset, or route."); + continue; + } + if (fragment && !page.anchors.has(fragment)) { + report( + i + 1, url, - reason: `Page not found (resolved to ${resolved})`, - }); + `No heading on ${normalized} (${page.file}) produces the anchor #${fragment}.`, + ); } } } } - return broken; } -// Main -const mdxFiles = collectMdxFiles(CONTENT_DIR); -console.log(`Found ${mdxFiles.length} MDX files in content/stack/`); +const allBroken: BrokenLink[] = []; +for (const [file, lines] of fileLines) allBroken.push(...scanFile(file, lines)); -const validUrls = buildValidUrls(mdxFiles); -console.log(`Built ${validUrls.size} valid URLs\n`); +/** + * TypeDoc output is gitignored and produced by `generate-docs`, which + * `prebuild` runs before this script. Run standalone on a fresh checkout, + * every link into those pages looks broken — say so rather than let a hundred + * spurious errors imply the docs are falling apart. + */ +const GENERATED = ["content/stack/reference/stack/latest"]; +const missing = GENERATED.filter((d) => !fs.existsSync(path.join(ROOT, d))); -const allBroken: BrokenLink[] = []; +console.log( + `Checked ${fileLines.size} MDX file(s) across ${COLLECTIONS.map((c) => c.dir).join(" + ")} ` + + `→ ${pages.size} page(s), ${assets.size} static asset(s), ${routes.size} route(s).`, +); -for (const file of mdxFiles) { - const broken = scanFile(file, validUrls); - allBroken.push(...broken); +if (missing.length > 0) { + console.log( + `\n! Generated API pages are absent (${missing.join(", ")}), so links into\n` + + " them will be reported as missing. Run `bun run generate-docs` first —\n" + + " `prebuild` does, which is why CI does not hit this.", + ); } if (allBroken.length === 0) { - console.log("No broken links found!"); + console.log("✓ every internal link and anchor resolves."); process.exit(0); -} else { - console.log(`Found ${allBroken.length} broken link(s):\n`); - for (const { file, line, url, reason } of allBroken) { - console.log(` ${file}:${line}`); - console.log(` Link: ${url}`); - console.log(` ${reason}\n`); - } - process.exit(1); } + +console.log(`\n✗ ${allBroken.length} broken link(s):\n`); +for (const { file, line, url, reason } of allBroken) { + console.log(` ${file}:${line}`); + console.log(` Link: ${url}`); + console.log(` ${reason}\n`); +} +process.exit(1); From 543f2a81d8873ef63d9103789e333e584ec8bcb4 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 11:20:35 +1000 Subject: [PATCH 090/151] ci: run the link check on pull requests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Adds a `Docs / Internal links` job so a broken link is a named, blocking status check rather than a failure buried in a Vercel deploy log. Worth being precise about what this does and does not add: `validate-links` already runs inside `prebuild`, and bun runs `prebuild` before `build`, so broken links have always failed the Vercel build. What was missing is a check that branch protection can require — which is the point of this job, not new coverage. It runs `generate-docs` first. The TypeDoc reference under content/stack/reference/stack/latest/ is gitignored and built from a clone of cipherstash/stack; roughly 18 links point into it, so skipping that step would report them all as missing. All three repos involved are public, so no secrets are needed. On a cold clone the whole job is install 4s + generate 16s + validate 1s. Scoped to `v2` only. `main` trails it by ~100 commits and its bun.lock is out of sync with its package.json, so `bun install --frozen-lockfile` fails there for reasons unrelated to links — verified, not assumed. Add `main` to the trigger once #37 lands and makes it current. Verified end to end against a pristine clone: the steps as written pass (exit 0), and a deliberately broken link fails the job (exit 1). Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- .github/workflows/docs.yml | 53 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 53 insertions(+) create mode 100644 .github/workflows/docs.yml diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml new file mode 100644 index 0000000..f30a96f --- /dev/null +++ b/.github/workflows/docs.yml @@ -0,0 +1,53 @@ +# Blocking documentation checks for pull requests. +# +# `validate-links` also runs inside `prebuild`, so a broken link already fails +# the Vercel build. This job exists to make that a fast, named status check +# that branch protection can require, rather than a failure buried in a +# deploy log. +name: Docs + +on: + pull_request: + # v2 is the live documentation line. `main` is deliberately excluded: it + # trails v2 by ~100 commits and its bun.lock is out of sync with its + # package.json, so `--frozen-lockfile` fails there for reasons that have + # nothing to do with links. Add `main` here once #37 lands and makes it + # current. + branches: [v2] + push: + branches: [v2] + workflow_dispatch: + +# A PR that gets pushed to twice shouldn't queue behind its own stale run. +concurrency: + group: docs-${{ github.workflow }}-${{ github.ref }} + cancel-in-progress: true + +permissions: + contents: read + +jobs: + links: + name: Internal links + runs-on: ubuntu-latest + timeout-minutes: 15 + steps: + - uses: actions/checkout@v5 + + - uses: oven-sh/setup-bun@v2 + with: + # Pinned rather than `latest` so a bun release can't turn a + # required check red on its own. + bun-version: 1.3.13 + + - run: bun install --frozen-lockfile + + # The TypeDoc reference under content/stack/reference/stack/latest/ is + # gitignored and built from a clone of cipherstash/stack. Roughly 18 + # links point into it, so without this step they all report as missing. + # `prebuild` generates before validating for the same reason. + - name: Generate the SDK reference + run: bun run generate-docs + + - name: Validate internal links and anchors + run: bun run validate-links From 904198d46b6ef682e9fe02fa23cd22897b8f445d Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 11:41:56 +1000 Subject: [PATCH 091/151] style: mute body copy, and let the standfirst lead MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Fumadocs ships the inverse of what we want: prose body text is `--color-fd-foreground` at 90%, while DocsDescription — the standfirst directly under the H1 — renders `text-fd-muted-foreground`. So the lead line was the quietest text on the page and the body the loudest. Swaps the two: - `.prose` sets `--tw-prose-body` to `--color-fd-muted-foreground`. Only that one variable moves; headings, links, bold, code, quotes and captions each have their own, so they keep full contrast and now read as more distinct against the softer paragraph text. - Both page routes pass `text-fd-foreground` to DocsDescription. Both sides reference theme tokens, so light and dark follow the same rule with no per-mode override. The `.prose` rule is deliberately **unlayered**. Fumadocs declares `.prose` in `@layer utilities`, and layer order beats both specificity and source order — the same declaration inside the `@layer components` block further down this file compiles fine and is silently ignored. Verified against the built CSS rather than assumed: the shipped rule lands unlayered, after fumadocs' own, and unlayered declarations outrank every layer without needing `!important`. Also verified in the built HTML that tailwind-merge resolves the class conflict rather than emitting both — the description renders as `text-lg mb-0 text-fd-foreground`, with the default muted class dropped. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- src/app/[[...slug]]/page.tsx | 2 +- src/app/global.css | 21 +++++++++++++++++++++ src/app/stack/[[...slug]]/page.tsx | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/app/[[...slug]]/page.tsx b/src/app/[[...slug]]/page.tsx index 5efba49..7f029e7 100644 --- a/src/app/[[...slug]]/page.tsx +++ b/src/app/[[...slug]]/page.tsx @@ -33,7 +33,7 @@ export default async function Page(props: PageProps<"/[[...slug]]">) { return ( <DocsPage toc={page.data.toc} full={page.data.full}> <DocsTitle>{page.data.title}</DocsTitle> - <DocsDescription className="mb-0"> + <DocsDescription className="mb-0 text-fd-foreground"> {page.data.description} </DocsDescription> <div className="flex flex-row gap-2 items-center border-b pb-6"> diff --git a/src/app/global.css b/src/app/global.css index 79d1558..aab25f2 100644 --- a/src/app/global.css +++ b/src/app/global.css @@ -72,6 +72,27 @@ } } +/* ── Body copy ── */ + +/* Fumadocs sets prose body text to `--color-fd-foreground` at 90%, and renders + the page description (DocsDescription, the standfirst under the H1) muted. + We want the reverse: the standfirst leads at full contrast, and the body + copy sits back. Only `--tw-prose-body` moves — headings, links, bold, code, + quotes and captions keep their own variables, so they stay prominent + against the softer paragraph text. + + Both values are theme tokens, so light and dark follow the same rule with + no per-mode override. The description's colour is set at the call site in + the two page routes. + + Deliberately unlayered. Fumadocs declares `.prose` in `@layer utilities`, + and layer order beats both specificity and source order — the same rule + inside `@layer components` below is silently ignored. Unlayered + declarations outrank every layer, so this wins without `!important`. */ +.prose { + --tw-prose-body: var(--color-fd-muted-foreground); +} + /* ── Fumadocs component overrides ── */ @layer components { diff --git a/src/app/stack/[[...slug]]/page.tsx b/src/app/stack/[[...slug]]/page.tsx index ef050ee..992bf75 100644 --- a/src/app/stack/[[...slug]]/page.tsx +++ b/src/app/stack/[[...slug]]/page.tsx @@ -22,7 +22,7 @@ export default async function Page(props: PageProps<"/stack/[[...slug]]">) { return ( <DocsPage toc={page.data.toc} full={page.data.full}> <DocsTitle>{page.data.title}</DocsTitle> - <DocsDescription className="mb-0"> + <DocsDescription className="mb-0 text-fd-foreground"> {page.data.description} </DocsDescription> <div className="flex flex-row gap-2 items-center border-b pb-6"> From 33bec227dbdadf5ab48f33a5d774c755b643266f Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 11:51:25 +1000 Subject: [PATCH 092/151] =?UTF-8?q?fix(ci):=20address=20review=20=E2=80=94?= =?UTF-8?q?=20line=20numbers,=20escaping=20links,=20path=20guards?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit All four of Copilot's findings were real. Each was reproduced against the corpus before fixing, and re-run after. 1. Includes renumbered the rest of the file. `inlineIncludes()` spliced a partial's lines into the including page, shifting every position below the directive by the partial's length. A broken link on line 110 of reference/eql/text.mdx was reported as line 193 — 83 lines out. The comment claiming positions above the directive were unaffected was right but useless; the damage was all below it. Lines now carry their own origin (`SourceLine { text, file, line }`), so a link inside a partial is reported against the partial's own path and line rather than an offset position in whichever page pulled it in. 2. Relative links escaping a collection were skipped silently. `resolveRelative()` returned null and the caller `continue`d, so `[x](../../../etc/passwd)` produced no output at all. Escapes are now reported, as are relative links inside shared partials — those have no single base to resolve against, so they need an absolute path. 3. `resolved.startsWith(base)` matched sibling directories with a shared prefix: content/docs-other satisfied the content/docs guard. Replaced with an `isInside()` helper requiring an exact match or a path separator. Impact was diagnostic rather than missed errors — the link still failed, but as "No such page" instead of "resolves outside content/docs". 4. Trailing slashes defeated the shape checks. `/a/index/` and `/a.mdx/` fell through to the generic "no such page" instead of their precise diagnosis, and a bare `/docs` missed the basePath check entirely. Normalising the trailing slash before the checks fixes all three. Also de-duplicates reports, since a partial is scanned once per including page. Defensive today — each partial has exactly one includer. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- scripts/validate-links.ts | 209 ++++++++++++++++++++++++-------------- 1 file changed, 135 insertions(+), 74 deletions(-) diff --git a/scripts/validate-links.ts b/scripts/validate-links.ts index 0bd0349..5f1dc8b 100644 --- a/scripts/validate-links.ts +++ b/scripts/validate-links.ts @@ -13,7 +13,7 @@ * * - the target page exists, in either collection; * - a `#fragment` matches a heading on that page; - * - the link carries no `/docs/` prefix (Next's basePath prepends it), no + * - the link carries no `/docs` prefix (Next's basePath prepends it), no * `/index` suffix, and no `.mdx` extension — each of which 404s. * * Non-page targets are resolved rather than waved through: static files under @@ -25,6 +25,10 @@ * slugger per page so repeated headings get the `-1`/`-2` suffixes the * renderer produces. Hand-rolled slugification gets this wrong in ways that * matter: "Range & order" is `range--order`, not `range-order`. + * + * Every line carries its true origin (see `SourceLine`), so a broken link + * inside an `<include>`d partial is reported against the partial's own path + * and line rather than an offset position in whichever page pulled it in. */ import fs from "node:fs"; import path from "node:path"; @@ -41,6 +45,22 @@ const COLLECTIONS = [ { dir: "content/stack", baseUrl: "/stack" }, ]; +/** Shared MDX fragments, pulled into pages by `<include cwd>`. Not routable. */ +const PARTIALS_DIR = "content/partials"; + +/** + * A line of MDX plus where it actually came from. Inlining a partial would + * otherwise renumber every line below the `<include>` directive, silently + * shifting reported positions by the length of the partial. + */ +interface SourceLine { + text: string; + /** Repo-relative path of the file this line is really in. */ + file: string; + /** 1-indexed line number within that file. */ + line: number; +} + interface Page { /** Repo-relative path of the .mdx file, for error messages. */ file: string; @@ -68,49 +88,47 @@ function collectMdxFiles(dir: string): string[] { } /** - * Blank out fenced code blocks, preserving line count so reported line numbers - * still point at the right source line. Headings and links inside a code - * sample are illustrative, not real. + * Read a file into `SourceLine`s with fenced code blocks blanked out. Blanking + * rather than dropping keeps every line's index aligned with the file on disk. + * Headings and links inside a code sample are illustrative, not real. */ -function blankCodeFences(content: string): string[] { +function readLines(file: string): SourceLine[] { + const rel = path.relative(ROOT, file); let fence: string | null = null; - return content.split("\n").map((line) => { - const open = /^\s*(`{3,}|~{3,})/.exec(line); - if (fence) { - if (open && open[1][0] === fence[0] && open[1].length >= fence.length) - fence = null; - return ""; - } - if (open) { - fence = open[1]; - return ""; - } - return line; - }); + return fs + .readFileSync(file, "utf8") + .split("\n") + .map((text, i) => { + const open = /^\s*(`{3,}|~{3,})/.exec(text); + let out = text; + if (fence) { + if (open && open[1][0] === fence[0] && open[1].length >= fence.length) + fence = null; + out = ""; + } else if (open) { + fence = open[1]; + out = ""; + } + return { text: out, file: rel, line: i + 1 }; + }); } /** * Fumadocs' `<include cwd>path</include>` inlines a partial at build time, so * the partial's headings become anchors on the including page and its links * are rendered by it. One level deep — partials don't nest today. + * + * The inlined lines keep the partial's own file and line numbers, so positions + * below the directive stay correct in the including page. */ -function inlineIncludes(lines: string[]): string[] { - const out: string[] = []; +function inlineIncludes(lines: SourceLine[]): SourceLine[] { + const out: SourceLine[] = []; for (const line of lines) { - const match = /<include\s+cwd\s*>([^<]+)<\/include>/.exec(line); - if (!match) { - out.push(line); - continue; - } + out.push(line); + const match = /<include\s+cwd\s*>([^<]+)<\/include>/.exec(line.text); + if (!match) continue; const partial = path.join(ROOT, match[1].trim()); - if (!fs.existsSync(partial)) { - out.push(line); - continue; - } - // Keep the directive's own line so numbering above it is unchanged; - // appended partial lines report against the end of the file, which is - // close enough to find them. - out.push(line, ...blankCodeFences(fs.readFileSync(partial, "utf8"))); + if (fs.existsSync(partial)) out.push(...readLines(partial)); } return out; } @@ -127,11 +145,11 @@ function headingText(raw: string): string { .trim(); } -function collectAnchors(lines: string[]): Set<string> { +function collectAnchors(lines: SourceLine[]): Set<string> { const slugger = new GithubSlugger(); const anchors = new Set<string>(); - for (const line of lines) { - const match = /^#{1,6}\s+(.+?)\s*$/.exec(line); + for (const { text } of lines) { + const match = /^#{1,6}\s+(.+?)\s*$/.exec(text); if (!match) continue; const explicit = /\[#([^\]]+)\]\s*$/.exec(match[1]); if (explicit) { @@ -152,29 +170,54 @@ function fileToUrl(file: string, dir: string, baseUrl: string): string { return `${baseUrl}/${rel}`.replace(/\/+$/, "") || "/"; } -/** Resolve a relative link against the linking file's collection directory. */ -function resolveRelative(file: string, link: string): string | null { +/** True when `child` is `parent` itself or sits underneath it. */ +function isInside(child: string, parent: string): boolean { + return child === parent || child.startsWith(parent + path.sep); +} + +type Resolution = + | { url: string } + | { error: string } + // Not a link we can or should resolve (external, anchor-only, expression). + | null; + +/** + * Resolve a relative link against the collection directory of the file it + * appears in. Relative links that escape the collection, or that live in a + * shared partial where there is no single base to resolve against, are + * reported rather than skipped — a silent skip is how a typo gets through. + */ +function resolveRelative(file: string, link: string): Resolution { + const abs = path.join(ROOT, file); + if (isInside(abs, path.join(ROOT, PARTIALS_DIR))) { + return { + error: + "Relative link inside a shared partial — it would resolve differently " + + "per including page. Use an absolute path.", + }; + } for (const { dir, baseUrl } of COLLECTIONS) { const base = path.join(ROOT, dir); - if (!file.startsWith(base + path.sep)) continue; - const resolved = path.resolve(path.dirname(file), link); - if (!resolved.startsWith(base)) return null; - return `${baseUrl}/${path.relative(base, resolved)}`.replace(/\/+$/, ""); + if (!isInside(abs, base)) continue; + const resolved = path.resolve(path.dirname(abs), link); + if (!isInside(resolved, base)) + return { error: `Relative link resolves outside ${dir}.` }; + return { + url: `${baseUrl}/${path.relative(base, resolved)}`.replace(/\/+$/, ""), + }; } - return null; + return { error: "Relative link in a file outside every content collection." }; } // --- Build the set of things a link may legitimately point at --------------- const pages = new Map<string, Page>(); -/** Per-file line arrays, so each file is read and de-fenced exactly once. */ -const fileLines = new Map<string, string[]>(); +/** Per-page line arrays, so each file is read and de-fenced exactly once. */ +const fileLines = new Map<string, SourceLine[]>(); for (const { dir, baseUrl } of COLLECTIONS) { for (const file of collectMdxFiles(path.join(ROOT, dir))) { - const lines = inlineIncludes( - blankCodeFences(fs.readFileSync(file, "utf8")), - ); + const lines = inlineIncludes(readLines(file)); fileLines.set(file, lines); pages.set(fileToUrl(file, dir, baseUrl), { file: path.relative(ROOT, file), @@ -221,15 +264,15 @@ const LINK_PATTERNS = [ /href="([^"]+)"/g, // <Card href="/url"> ]; -function scanFile(file: string, lines: string[]): BrokenLink[] { +function scanLines(lines: SourceLine[]): BrokenLink[] { const broken: BrokenLink[] = []; - const rel = path.relative(ROOT, file); - const report = (line: number, url: string, reason: string) => - broken.push({ file: rel, line, url, reason }); - for (let i = 0; i < lines.length; i++) { + for (const { text, file, line } of lines) { + const report = (url: string, reason: string) => + broken.push({ file, line, url, reason }); + for (const pattern of LINK_PATTERNS) { - for (const match of lines[i].matchAll(pattern)) { + for (const match of text.matchAll(pattern)) { const url = match[1]; // External, protocol-relative, anchor-only, or a JSX expression. if (/^(https?:|mailto:|tel:|\/\/|#|\{)/.test(url)) continue; @@ -237,47 +280,51 @@ function scanFile(file: string, lines: string[]): BrokenLink[] { const [targetRaw, fragment] = url.split("#"); if (!targetRaw) continue; - const target = targetRaw.startsWith("/") - ? targetRaw - : resolveRelative(file, targetRaw); - if (target === null) continue; + let target: string; + if (targetRaw.startsWith("/")) { + target = targetRaw; + } else { + const resolved = resolveRelative(file, targetRaw); + if (resolved === null) continue; + if ("error" in resolved) { + report(url, resolved.error); + continue; + } + target = resolved.url; + } + + // Normalise a trailing slash before the shape checks, so `/a/index/` + // and `/a.mdx/` get their precise diagnosis rather than falling + // through to a generic "no such page". + const normalized = target.replace(/\/+$/, "") || "/"; - if (target.startsWith("/docs/")) { + if (normalized === "/docs" || normalized.startsWith("/docs/")) { report( - i + 1, url, - "Uses a /docs/ prefix — Next's basePath prepends it automatically, so this resolves to /docs/docs/… and 404s.", + "Uses a /docs prefix — Next's basePath prepends it automatically, so this resolves to /docs/docs/… and 404s.", ); continue; } - if (/\/index$/.test(target)) { + if (/\/index$/.test(normalized)) { report( - i + 1, url, "Ends with /index, which 404s — Fumadocs serves index.mdx at the directory URL.", ); continue; } - if (/\.mdx$/.test(target)) { - report( - i + 1, - url, - "Has a .mdx extension, which 404s as a page link.", - ); + if (/\.mdx$/.test(normalized)) { + report(url, "Has a .mdx extension, which 404s as a page link."); continue; } - const normalized = target.replace(/\/+$/, "") || "/"; const page = pages.get(normalized); - if (!page) { if (assets.has(normalized) || routes.has(normalized)) continue; - report(i + 1, url, "No such page, static asset, or route."); + report(url, "No such page, static asset, or route."); continue; } if (fragment && !page.anchors.has(fragment)) { report( - i + 1, url, `No heading on ${normalized} (${page.file}) produces the anchor #${fragment}.`, ); @@ -288,8 +335,22 @@ function scanFile(file: string, lines: string[]): BrokenLink[] { return broken; } +/** + * A partial included by several pages is scanned once per including page, so + * de-duplicate before reporting — otherwise one typo in a shared fragment + * shows up three times. + */ +const seen = new Set<string>(); const allBroken: BrokenLink[] = []; -for (const [file, lines] of fileLines) allBroken.push(...scanFile(file, lines)); +for (const lines of fileLines.values()) { + for (const b of scanLines(lines)) { + const key = `${b.file}:${b.line}:${b.url}`; + if (seen.has(key)) continue; + seen.add(key); + allBroken.push(b); + } +} +allBroken.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line); /** * TypeDoc output is gitignored and produced by `generate-docs`, which From 308f0821e99a9b57b3cf1bd39b7e67a9f6d6693e Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 12:03:35 +1000 Subject: [PATCH 093/151] style(callout): un-mute callout body text, and double the padding MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two changes to Callout, plus a correction. **The correction.** I claimed in #82's description that muting `.prose` body text also muted callouts. That was wrong: Fumadocs hard-codes `text-fd-muted-foreground` on `CalloutDescription`, set directly on that div, so it overrides any inherited prose colour — and only `.prose` itself consumes `--tw-prose-body`. Callout text has always been muted; the body change did not touch it. The fix is the same either way, but the reasoning in that description was not. **Body text** now uses `text-fd-foreground`, matching the title (the container is `text-fd-card-foreground`, which resolves to the same value in both themes). A callout reads as one block instead of a heading over greyed-out copy, and stands out from the surrounding muted body copy, which is the point of a callout. **Padding** doubles, `p-3 ps-1` → `p-6 ps-2`. `ps` stays proportionally small because the accent bar is the container's first child and sits near the edge. Both need reaching the description, which Fumadocs' `Callout` does not expose, so we compose `CalloutContainer` / `CalloutTitle` / `CalloutDescription` — its exported primitives — instead. The container still resolves the `warn`/`tip` aliases and picks the icon, so only the trivial wrapper is reimplemented. The wrapper also emits `data-callout`, which Fumadocs does not. global.css has had a `[data-callout]` rule since the theme work that consequently matched nothing; it now applies (its `border-radius: 2px` was already coming from the `[class*="rounded-xl"]` rule above it, so nothing moves). Verified in the built HTML rather than assumed — tailwind-merge collapses both conflicts, leaving `p-6 ps-2` on the container and `prose-no-margin empty:hidden text-fd-foreground` on the description, with no muted class left anywhere in the callout subtree. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- src/mdx-components.tsx | 47 +++++++++++++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index 57411a1..a3280b5 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -1,13 +1,58 @@ -import { Callout } from "fumadocs-ui/components/callout"; +import { + CalloutContainer, + CalloutDescription, + CalloutTitle, +} from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; import defaultMdxComponents from "fumadocs-ui/mdx"; import type { MDXComponents } from "mdx/types"; +import type { ComponentProps, ReactNode } from "react"; import { BadExample } from "@/components/bad-example"; import { TrackedCodeBlock } from "@/components/code-block"; import { EqlFn } from "@/components/eql-fn"; import { EqlVersion } from "@/components/eql-version"; import { ZeroKmsRegions } from "@/components/zerokms-regions"; +/** + * Fumadocs' own `Callout` is a thin wrapper over these three primitives, but it + * gives no way to reach the description, which it hard-codes to + * `text-fd-muted-foreground`. Callouts are the one place on the page that + * should not recede, so we compose the primitives ourselves to: + * + * - set the body text to `text-fd-foreground`, matching the title (the + * container is `text-fd-card-foreground`, which resolves to the same value + * in both themes) so a callout reads as one block rather than a heading + * over greyed-out copy; + * - double the padding, `p-3 ps-1` → `p-6 ps-2` (`ps` stays small because + * the accent bar is the first child and sits near the edge); + * - add a `data-callout` attribute, which Fumadocs does not emit. global.css + * already had a `[data-callout]` rule that consequently matched nothing. + * + * `CalloutContainer` still resolves the `warn`/`tip` aliases and picks the + * icon, so only the trivial wrapper is reimplemented. + */ +function Callout({ + title, + children, + className, + ...props +}: ComponentProps<typeof CalloutContainer> & { title?: ReactNode }) { + return ( + // CalloutContainer runs its own `cn`, so it merges these against its + // defaults; a caller's className comes last and still wins. + <CalloutContainer + data-callout + className={`p-6 ps-2 ${className ?? ""}`} + {...props} + > + {title && <CalloutTitle>{title}</CalloutTitle>} + <CalloutDescription className="text-fd-foreground"> + {children} + </CalloutDescription> + </CalloutContainer> + ); +} + export function getMDXComponents(components?: MDXComponents): MDXComponents { return { ...defaultMdxComponents, From fc360ff45dcf82938da58c781d9433a1e8d9a219 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 12:09:44 +1000 Subject: [PATCH 094/151] style(callout): keep Fumadocs' body colour, matching the sidebar MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reverts the `text-fd-foreground` from 308f082. `text-fd-muted-foreground` — Fumadocs' default for CalloutDescription — is the same token the sidebar's resting nav items use, so callouts sit at the weight of the surrounding chrome instead of shouting. That means the colour lands back where it started, and the net effect of the callout work is the doubled padding plus the `data-callout` hook. Dropping the colour override also drops the reason for composing CalloutContainer / CalloutTitle / CalloutDescription by hand: reaching the description was the only thing Fumadocs' `Callout` wrapper could not do. It spreads unknown props onto the container, so the wrapper is now four lines over the public component, with no copy of its alias resolution, icon selection or title rendering to drift out of step. Verified in the built HTML that the callout body and a resting sidebar item carry the same class, and that the padding survived the simplification: container: … bg-fd-card text-sm text-fd-card-foreground shadow-md p-6 ps-2 body: text-fd-muted-foreground prose-no-margin empty:hidden sidebar: … rounded-lg p-2 text-start text-fd-muted-foreground … Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- src/mdx-components.tsx | 54 +++++++++++++++--------------------------- 1 file changed, 19 insertions(+), 35 deletions(-) diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index a3280b5..622c2e3 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -1,12 +1,8 @@ -import { - CalloutContainer, - CalloutDescription, - CalloutTitle, -} from "fumadocs-ui/components/callout"; +import { Callout as FumaCallout } from "fumadocs-ui/components/callout"; import { Step, Steps } from "fumadocs-ui/components/steps"; import defaultMdxComponents from "fumadocs-ui/mdx"; import type { MDXComponents } from "mdx/types"; -import type { ComponentProps, ReactNode } from "react"; +import type { ComponentProps } from "react"; import { BadExample } from "@/components/bad-example"; import { TrackedCodeBlock } from "@/components/code-block"; import { EqlFn } from "@/components/eql-fn"; @@ -14,42 +10,30 @@ import { EqlVersion } from "@/components/eql-version"; import { ZeroKmsRegions } from "@/components/zerokms-regions"; /** - * Fumadocs' own `Callout` is a thin wrapper over these three primitives, but it - * gives no way to reach the description, which it hard-codes to - * `text-fd-muted-foreground`. Callouts are the one place on the page that - * should not recede, so we compose the primitives ourselves to: + * Callouts keep Fumadocs' own body colour — `text-fd-muted-foreground`, the + * same token the sidebar's resting nav items use — so they sit at the same + * weight as the rest of the chrome rather than shouting. This wrapper only: * - * - set the body text to `text-fd-foreground`, matching the title (the - * container is `text-fd-card-foreground`, which resolves to the same value - * in both themes) so a callout reads as one block rather than a heading - * over greyed-out copy; - * - double the padding, `p-3 ps-1` → `p-6 ps-2` (`ps` stays small because - * the accent bar is the first child and sits near the edge); - * - add a `data-callout` attribute, which Fumadocs does not emit. global.css - * already had a `[data-callout]` rule that consequently matched nothing. + * - doubles the padding, `p-3 ps-1` → `p-6 ps-2`. `ps` stays proportionally + * small because the accent bar is the container's first child and sits + * near the edge; + * - adds a `data-callout` attribute, which Fumadocs does not emit. global.css + * has had a `[data-callout]` rule since the theme work that consequently + * matched nothing. * - * `CalloutContainer` still resolves the `warn`/`tip` aliases and picks the - * icon, so only the trivial wrapper is reimplemented. + * Fumadocs' `Callout` still resolves the `warn`/`tip` aliases, picks the icon + * and renders the title, and it spreads unknown props onto the container, so + * there is nothing here to reimplement. */ -function Callout({ - title, - children, - className, - ...props -}: ComponentProps<typeof CalloutContainer> & { title?: ReactNode }) { +function Callout({ className, ...props }: ComponentProps<typeof FumaCallout>) { + // CalloutContainer runs its own `cn`, so these merge against its defaults; + // a caller's className comes last and still wins. return ( - // CalloutContainer runs its own `cn`, so it merges these against its - // defaults; a caller's className comes last and still wins. - <CalloutContainer + <FumaCallout data-callout className={`p-6 ps-2 ${className ?? ""}`} {...props} - > - {title && <CalloutTitle>{title}</CalloutTitle>} - <CalloutDescription className="text-fd-foreground"> - {children} - </CalloutDescription> - </CalloutContainer> + /> ); } From 818db4527687f396a98f7ca341f7bb6acdccf27a Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 12:14:49 +1000 Subject: [PATCH 095/151] style(callout): sit callout body one step above the page copy MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Third setting for callout text, and the one between the two already tried: the colour prose body copy had before this branch muted it, `color-mix(in oklab, var(--color-fd-foreground) 90%, transparent)`. `text-fd-foreground` read as shouting; `text-fd-muted-foreground` matched the surrounding paragraphs exactly, leaving the callout to carry its distinction entirely on card background, border, accent bar and icon. This keeps it a step above the page copy without competing with headings. Done in CSS rather than by threading a class through the component, because Fumadocs puts `text-fd-muted-foreground` directly on the description div — inheritance from the container cannot reach it, so the element has to be selected either way. Doing it here keeps the wrapper in mdx-components.tsx at four lines over the public `Callout`, with nothing of its internals duplicated. The selector leans on `data-callout` (ours, from that wrapper) and `prose-no-margin` (Fumadocs' marker on the description's prose block). Unlayered, for the same reason as the `.prose` rule above it: the utility class being overridden lives in `@layer utilities`, and layer order beats specificity. Verified in the built CSS that the rule ships unlayered with both the srgb fallback and the themed `color-mix`, and in the built HTML that the selector matches the rendered description and the doubled padding survived. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- src/app/global.css | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/src/app/global.css b/src/app/global.css index aab25f2..3ebd230 100644 --- a/src/app/global.css +++ b/src/app/global.css @@ -93,6 +93,20 @@ --tw-prose-body: var(--color-fd-muted-foreground); } +/* Callout body sits one step above the muted paragraphs around it: the colour + prose body copy had before the rule above. A callout is already set apart by + its card background, border, accent bar and icon; matching the body copy + exactly made it read flat, and full foreground read as shouting. + + Fumadocs puts `text-fd-muted-foreground` directly on the description div, so + inheritance can't reach it — this has to select the element. `data-callout` + is ours (see mdx-components.tsx); `prose-no-margin` is what Fumadocs marks + the description's prose block with. Unlayered for the same reason as the + rule above: the utility class it overrides lives in `@layer utilities`. */ +[data-callout] .prose-no-margin { + color: color-mix(in oklab, var(--color-fd-foreground) 90%, transparent); +} + /* ── Fumadocs component overrides ── */ @layer components { From 7675b52d7beb928df6f69444c8748d661104f22c Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 12:23:22 +1000 Subject: [PATCH 096/151] style(callout): adjust padding for callout component --- src/mdx-components.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index 622c2e3..e8b9bd4 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -31,7 +31,7 @@ function Callout({ className, ...props }: ComponentProps<typeof FumaCallout>) { return ( <FumaCallout data-callout - className={`p-6 ps-2 ${className ?? ""}`} + className={`p-6 ps-4 ${className ?? ""}`} {...props} /> ); From 0361cf751a0de8186a816c46ef5360878225f9f7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 2 Jul 2026 22:55:22 +1000 Subject: [PATCH 097/151] docs(v2): Supabase integration section + canonical encryptedSupabase reference (CIP-3328) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - /reference/stack/supabase: THE canonical encryptedSupabase page — one signature ({encryptionClient, supabaseClient}, .from(table, schema)), full query-builder surface, schema-capability → EQL-term mapping, response/error shapes, deferred-execution model - /integrations/supabase: flagship tutorial rewritten on EQL v3 (install script → eql_v3 typed columns → wrapper → queries incl. ORDER BY on _ord; free-text as token containment, no LIKE) - /integrations/supabase/{database,auth,dashboard-experience}: migrations-vs-SQL-Editor install, grants, indexes, RLS composition; Supabase Auth JWT → LockContext; Table Editor expectations + OAuth integration flow - placeholder pages for 6 forward-linked IA URLs (identity-aware- encryption, schema-design, encrypt-existing-data, drizzle, audit-logging, cts) so no internal link 404s - IA.md: tick CIP-3328 items; add CIP-3355 SDK-alignment gate (wrapper wire behaviour is still EQL v2 — blocks final merge) --- IA.md | 16 +- .../concepts/identity-aware-encryption.mdx | 9 + .../docs/guides/development/schema-design.mdx | 9 + .../migration/encrypt-existing-data.mdx | 9 + content/docs/integrations/drizzle.mdx | 13 + content/docs/integrations/supabase/auth.mdx | 100 ++++++++ .../supabase/dashboard-experience.mdx | 96 ++++++++ .../docs/integrations/supabase/database.mdx | 106 ++++++++ content/docs/integrations/supabase/index.mdx | 191 ++++++++++++++- content/docs/integrations/supabase/meta.json | 2 +- content/docs/reference/stack/supabase.mdx | 228 ++++++++++++++++++ content/docs/security/audit-logging.mdx | 9 + content/docs/security/cts.mdx | 9 + 13 files changed, 782 insertions(+), 15 deletions(-) create mode 100644 content/docs/concepts/identity-aware-encryption.mdx create mode 100644 content/docs/guides/development/schema-design.mdx create mode 100644 content/docs/guides/migration/encrypt-existing-data.mdx create mode 100644 content/docs/integrations/drizzle.mdx create mode 100644 content/docs/integrations/supabase/auth.mdx create mode 100644 content/docs/integrations/supabase/dashboard-experience.mdx create mode 100644 content/docs/integrations/supabase/database.mdx create mode 100644 content/docs/reference/stack/supabase.mdx create mode 100644 content/docs/security/audit-logging.mdx create mode 100644 content/docs/security/cts.mdx diff --git a/IA.md b/IA.md index 7aad829..3986f09 100644 --- a/IA.md +++ b/IA.md @@ -303,13 +303,13 @@ Two notes: - [x] Section scaffold 🚧 (index + supabase stub with facet exemplar) - [ ] `/integrations` index — category grid w/ setup badges -- [ ] `/integrations/supabase` — flagship tutorial (CIP-3328) -- [ ] `/integrations/supabase/database` -- [ ] `/integrations/supabase/auth` -- [ ] `/integrations/supabase/dashboard-experience` — Table Editor, expose eql schema +- [x] `/integrations/supabase` — flagship tutorial (CIP-3328) +- [x] `/integrations/supabase/database` +- [x] `/integrations/supabase/auth` +- [x] `/integrations/supabase/dashboard-experience` — Table Editor, expose eql schema - [ ] ⛔ `/integrations/supabase/edge-functions` — pending Deno/FFI answer - [ ] ⛔ `/integrations/supabase/realtime` — pending product verification -- [ ] `/integrations/drizzle` — merge the two divergent Drizzle pages +- [ ] `/integrations/drizzle` 🚧 — merge the two divergent Drizzle pages - [ ] `/integrations/prisma-next` - [ ] `/integrations/aws/rds-aurora` — Proxy path - [ ] `/integrations/aws/dynamodb` @@ -420,7 +420,7 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). - [ ] `/reference/stack` — client + configuration (port encryption/* pages) - [ ] `/reference/stack/schema` - [ ] `/reference/stack/encrypt-decrypt` (+ bulk, models) -- [ ] `/reference/stack/supabase` — THE canonical `encryptedSupabase` page, ONE signature (CIP-3328) +- [x] `/reference/stack/supabase` — THE canonical `encryptedSupabase` page, ONE signature (CIP-3328) - [ ] `/reference/stack/drizzle-operators` - [ ] `/reference/stack/errors` — port error-handling; miette catalog later (CIP-3338) - [ ] `/reference/stack/upgrading-from-protect` (retitled package-rename guide) @@ -453,5 +453,9 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). documents the release as decided, ahead of the eql_v3 branch: payload `v: 3`, OPE SEM specifier, Docker tag `:17-3.0.0`, `version()` output, schema files. Each must land upstream or be walked back in the docs before merge +- [ ] ⛔ Stack SDK Supabase-wrapper v3 alignment (CIP-3355, blocks CIP-3335) — the + Supabase section documents the 0.18 wrapper API with v3 wire semantics; the + wrapper itself is still v2 (composite type, `like` wire op, v2 payloads) and + the SDK's v3 branches don't touch `src/supabase/` yet - [ ] Flip `ENABLE_V2_REDIRECTS=1`, delete `content/stack` + `/stack` routes + legacy loader (CIP-3335) - [ ] Consistency sweep + Supabase listing v3 revision (CIP-3335) diff --git a/content/docs/concepts/identity-aware-encryption.mdx b/content/docs/concepts/identity-aware-encryption.mdx new file mode 100644 index 0000000..3f11530 --- /dev/null +++ b/content/docs/concepts/identity-aware-encryption.mdx @@ -0,0 +1,9 @@ +--- +title: Identity-aware encryption +description: "Lock contexts and CTS: binding encrypted values to a user identity so only that identity can decrypt them." +type: concept +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3330](https://linear.app/cipherstash/issue/CIP-3330)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, the current version lives in the [existing docs](/stack/cipherstash/encryption/identity). diff --git a/content/docs/guides/development/schema-design.mdx b/content/docs/guides/development/schema-design.mdx new file mode 100644 index 0000000..b11397f --- /dev/null +++ b/content/docs/guides/development/schema-design.mdx @@ -0,0 +1,9 @@ +--- +title: Schema design +description: "Choosing the right encrypted type and capability for each column." +type: guide +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3327](https://linear.app/cipherstash/issue/CIP-3327)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, [EQL core concepts](/reference/eql/core-concepts) covers the capability model, and the per-type pages ([numbers](/reference/eql/numbers), [dates & times](/reference/eql/dates-and-times), [text](/reference/eql/text), [JSON](/reference/eql/json)) cover choosing variants. diff --git a/content/docs/guides/migration/encrypt-existing-data.mdx b/content/docs/guides/migration/encrypt-existing-data.mdx new file mode 100644 index 0000000..df00457 --- /dev/null +++ b/content/docs/guides/migration/encrypt-existing-data.mdx @@ -0,0 +1,9 @@ +--- +title: Encrypt existing data +description: "Backfilling encryption onto live tables, column by column." +type: guide +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3329](https://linear.app/cipherstash/issue/CIP-3329)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, the current version lives in the [existing docs](/stack/cipherstash/proxy/encrypt-tool). diff --git a/content/docs/integrations/drizzle.mdx b/content/docs/integrations/drizzle.mdx new file mode 100644 index 0000000..ccaad4f --- /dev/null +++ b/content/docs/integrations/drizzle.mdx @@ -0,0 +1,13 @@ +--- +title: Drizzle +description: "Encrypted columns with Drizzle ORM." +type: tutorial +integration: + category: orm + setup: code-only + pairsWith: [supabase, nextjs] +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3336](https://linear.app/cipherstash/issue/CIP-3336)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, the current version lives in the [existing docs](/stack/cipherstash/encryption/drizzle). diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx new file mode 100644 index 0000000..fd4b455 --- /dev/null +++ b/content/docs/integrations/supabase/auth.mdx @@ -0,0 +1,100 @@ +--- +title: Supabase Auth +description: "Lock decryption to the authenticated user: use the Supabase Auth session JWT as a lock context so encrypted data only decrypts for the identity it belongs to." +type: guide +components: [encryption, platform] +audience: [developer] +verifiedAgainst: + stack: "0.18.0" +--- + +Row Level Security scopes *queries* to the logged-in user. Identity-aware encryption goes one layer deeper: values encrypted with a **lock context** can only be *decrypted* by presenting the same user's identity — enforced by [CTS](/security/cts), CipherStash's token service, not by your application code. Even your own backend, holding valid workspace credentials, cannot decrypt another user's locked values without that user's session. + +With Supabase Auth, the identity is the session JWT you already have. + +<Callout type="warn"> +Lock contexts require a Business or Enterprise workspace plan. +</Callout> + +## Register Supabase Auth with your workspace + +CTS needs to trust your Supabase project as an OIDC issuer — that's what lets it exchange a Supabase session JWT for a CipherStash identity token. The issuer for a Supabase project is: + +``` +https://<project-ref>.supabase.co/auth/v1 +``` + +The easiest path is the CipherStash dashboard's [Supabase integration](/integrations/supabase/dashboard-experience), which configures this during setup. Manual OIDC configuration is covered in the [auth reference](/reference/auth). + +## Lock queries to the session user + +Identify the user with their Supabase session token, then attach the lock context to any [`encryptedSupabase`](/reference/stack/supabase) query: + +```typescript +import { LockContext } from "@cipherstash/stack/identity" +import { db } from "./lib/db" +import { patients } from "./lib/schema" + +// 1. The Supabase session you already have +const { data: { session } } = await supabaseClient.auth.getSession() + +// 2. Identify: exchanges the Supabase JWT for a CTS identity token +const lc = new LockContext() +const identified = await lc.identify(session.access_token) + +if (identified.failure) { + throw new Error(identified.failure.message) +} +const lockContext = identified.data + +// 3. Encrypt and decrypt under that identity +await db.from("patients", patients) + .insert({ email: "alice@example.com", name: "Alice Chen" }) + .withLockContext(lockContext) + +const { data } = await db.from("patients", patients) + .select("id, email, name") + .eq("email", "alice@example.com") + .withLockContext(lockContext) +``` + +A value written with `.withLockContext()` can only be decrypted with a lock context for the **same identity**. Reading it without one — or as a different user — fails with an encryption error, regardless of what RLS allows. + +By default the identity is the JWT's `sub` claim, which for Supabase Auth is the user's UUID. You can widen or change that: + +```typescript +const lc = new LockContext({ + context: { identityClaim: ["sub"] }, // default; add "scopes" to bind permissions too +}) +``` + +## Where it fits + +- **Per-user data** (a user's own medical history, messages, documents): lock to `sub`. The row is useless to anyone but its owner — including operators with database access and your own service role. +- **Shared/tenant data** (a support queue, org-wide records): don't lock it, or you'll be unable to decrypt it outside a user session. Plain encryption already protects it from the database side; RLS scopes who can query it. +- **Server-side jobs** that must read locked data need the owning user's session — by design. If a background job must read a field, that field shouldn't be identity-locked. + +## Errors + +`identify()` returns a result, not a throw. The common failures: + +| Scenario | What you see | +| --- | --- | +| Expired or invalid Supabase JWT | `CtsTokenError` from `identify()` | +| Issuer not registered with the workspace | `CtsTokenError` — register the OIDC issuer first | +| Expired CTS token at query time | `LockContextError` — call `identify()` again | +| Decrypting another user's locked value | `encryptionError` on the [query response](/reference/stack/supabase#responses-and-errors) | + +## Where to next + +<Cards> + <Card title="Identity-aware encryption" href="/concepts/identity-aware-encryption"> + The concept: lock contexts, CTS, and what identity binding proves. + </Card> + <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> + `.withLockContext()` and `.audit()` on the query builder. + </Card> + <Card title="Auth reference" href="/reference/auth"> + OIDC configuration, access keys, and clients. + </Card> +</Cards> diff --git a/content/docs/integrations/supabase/dashboard-experience.mdx b/content/docs/integrations/supabase/dashboard-experience.mdx new file mode 100644 index 0000000..df4fb0f --- /dev/null +++ b/content/docs/integrations/supabase/dashboard-experience.mdx @@ -0,0 +1,96 @@ +--- +title: Dashboard experience +description: "What encrypted columns look like across the Supabase dashboard — Table Editor, SQL Editor, API settings — and how to connect your project to CipherStash via OAuth." +type: guide +components: [eql] +audience: [developer] +verifiedAgainst: + eql: "3.0.0" +--- + +Encrypted columns live inside your normal Supabase dashboard — no separate tool. This page sets expectations for what you'll see in each part of the dashboard, and covers the CipherStash-side integration that connects your project. + +## Table Editor + +Encrypted columns show **ciphertext payloads**, not plaintext. A `patients` row looks like: + +| id | email | name | plan | +| --- | --- | --- | --- | +| 1 | `{"v": 3, "i": {"t": "patients", "c": "email"}, "c": "mBbKmsMM%bK#…", "hm": "9c8ec1d2…"}` | `{"v": 3, "i": …, "c": "x7Qq…", "bf": [42, 1290, …]}` | `standard` | + +This is the point, not a limitation: what the Table Editor shows is exactly what a backup, a replication stream, a leaked `service_role` key, or a curious operator sees. The payload structure (`v`, `i`, `c`, and the index terms) is documented in [EQL core concepts](/reference/eql/core-concepts) — none of it reveals the plaintext. + +Practical consequences: + +- **Reading data** happens through your app (or any client using the [Stack SDK](/reference/stack)); the dashboard can't decrypt, because the keys never go near it. +- **Hand-editing an encrypted cell** in the Table Editor will produce a value that fails the column's `CHECK` constraint or fails to decrypt — treat encrypted columns as read-only in the dashboard. +- **Filtering and sorting** on encrypted columns in the Table Editor UI operates on the raw payloads, so it won't return meaningful results. Query through your app instead. + +## Creating encrypted columns + +Use the **SQL Editor** for schema work on encrypted columns: + +```sql +ALTER TABLE patients ADD COLUMN tax_id eql_v3.text_eq; +``` + +The `eql_v3` domain types are user-defined types, and the Table Editor's column-type picker doesn't reliably surface custom domains — SQL is the dependable path, and it's what your migrations should contain anyway (see [Database setup](/integrations/supabase/database)). + +## SQL Editor + +Everything in the [EQL reference](/reference/eql) can be run from the SQL Editor — installing EQL, creating indexes, `EXPLAIN`-ing query plans. Two checks worth knowing: + +```sql +-- Is EQL installed, and which version? +SELECT eql_v3.version(); + +-- Which columns are encrypted? +SELECT table_name, column_name, udt_name +FROM information_schema.columns +WHERE udt_schema = 'eql_v3'; +``` + +## API settings + +Normal operation needs **no** API-settings changes: your tables are in the `public` schema, and the wrapper's queries are ordinary PostgREST calls. The `eql_v3` schema needs role *grants* (covered in [Database setup](/integrations/supabase/database#grants)), but does **not** need to be in the *Exposed schemas* list unless you want to call EQL functions directly over REST. + +## Connecting your project to CipherStash + +The CipherStash dashboard has a first-class Supabase integration at [dashboard.cipherstash.com](https://dashboard.cipherstash.com): + +<Steps> +<Step> +### Connect via OAuth + +Authorize CipherStash against your Supabase organization. The integration requests read-only scopes (`projects:read`, `database:read`) — it never sees your database secrets. +</Step> +<Step> +### Pick a project and run the readiness checks + +The setup hub verifies EQL is installed (`eql_v3.version()`), checks for encrypted columns, and flags anything missing. +</Step> +<Step> +### Configure identity (optional) + +One click registers your project's Supabase Auth issuer (`https://<project-ref>.supabase.co/auth/v1`) with your workspace, enabling [identity-locked encryption](/integrations/supabase/auth). +</Step> +<Step> +### Copy your environment + +The hub emits the `CS_*` credentials block for your app's environment, ready to pair with your existing `SUPABASE_URL` and keys. +</Step> +</Steps> + +## Where to next + +<Cards> + <Card title="Supabase tutorial" href="/integrations/supabase"> + The end-to-end setup this page supports. + </Card> + <Card title="Database setup" href="/integrations/supabase/database"> + Grants, migrations, and indexes in detail. + </Card> + <Card title="EQL core concepts" href="/reference/eql/core-concepts"> + What's actually inside those ciphertext payloads. + </Card> +</Cards> diff --git a/content/docs/integrations/supabase/database.mdx b/content/docs/integrations/supabase/database.mdx new file mode 100644 index 0000000..128b24e --- /dev/null +++ b/content/docs/integrations/supabase/database.mdx @@ -0,0 +1,106 @@ +--- +title: Database setup +description: "Installing and operating EQL on Supabase Postgres: migrations vs the SQL Editor, role grants, functional indexes, and how encryption composes with RLS." +type: guide +components: [eql] +audience: [developer] +verifiedAgainst: + eql: "3.0.0" +--- + +EQL installs into Supabase Postgres as plain SQL — no extension packaging, no superuser, no separate Supabase build. This page covers the database-side setup in full: how to install so it survives `supabase db reset`, the grants Supabase's roles need, indexing, and how encrypted columns interact with Row Level Security. + +## Installing EQL + +Both paths install the same artefact — the versioned `cipherstash-encrypt.sql` from the [EQL releases page](https://github.com/cipherstash/encrypt-query-language/releases). The script is idempotent: re-running a newer version upgrades the `eql_v3` schema in place. + +### Path 1: SQL Editor (fastest) + +Paste the script into the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new) and run it. Good for a first look or a hosted-only project. + +<Callout type="warn"> +If you use the Supabase CLI locally, `supabase db reset` rebuilds your database *from your migrations directory* — anything installed directly through the SQL Editor is wiped. If you run local resets, use the migration path. +</Callout> + +### Path 2: As a migration (recommended for teams) + +Commit the install script as your **earliest** migration, so EQL exists before any migration that references its types: + +```sh +curl -sLo supabase/migrations/00000000000000_install-eql.sql \ + https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql + +supabase db push +``` + +The all-zero timestamp prefix sorts it before every real migration. From then on, EQL is part of your schema history: local resets, preview branches, and fresh environments all get it automatically. + +## Grants + +Supabase's API roles need access to the `eql_v3` schema, because your table columns are typed with its domains and your queries resolve its operators and functions: + +```sql +GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; +GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; +``` + +Run this once after install (and after upgrades that add functions). Without `USAGE`, PostgREST queries against tables with encrypted columns fail with a permission error on the schema. + +You do **not** need to add `eql_v3` to the *Exposed schemas* list in the [API settings](https://supabase.com/dashboard/project/_/settings/api) for normal queries — your tables live in `public`. Expose it only if you want to call EQL functions directly over the REST API. + +## Choosing column types + +The column's domain type fixes what it can do, and the [Stack SDK schema](/reference/stack/supabase#declaring-the-schema) must declare the matching capability. The full type catalogue lives in the EQL reference — [numbers](/reference/eql/numbers), [dates & times](/reference/eql/dates-and-times), [text](/reference/eql/text), [JSON](/reference/eql/json), [booleans](/reference/eql/booleans) — but the shape is always the same: + +| You query it with | Type the column as | SDK schema capability | +| --- | --- | --- | +| Nothing (store/decrypt only) | `eql_v3.<T>` | none | +| `.eq()` / `.in()` | `eql_v3.<T>_eq` | `.equality()` | +| Ranges, `.order()` | `eql_v3.<T>_ord` | `.orderAndRange()` | +| Free-text match | `eql_v3.text_match` | `.freeTextSearch()` | +| All three (text) | `eql_v3.text_search` | all three | +| Encrypted JSON | `eql_v3.json` | `.searchableJson()` | + +Declare only the capabilities you use: every extra capability stores extra searchable material with defined leakage — see [Searchable encryption](/concepts/searchable-encryption). + +## Indexes + +Encrypted columns index through **ordinary functional indexes** over EQL's term-extractor functions. This is why EQL works on Supabase unchanged: no custom operator classes (which managed platforms block), just `CREATE INDEX`, which any migration can run: + +```sql +CREATE INDEX patients_email_eq ON patients USING hash (eql_v3.eq_term(email)); +CREATE INDEX patients_dob_ord ON patients USING btree (eql_v3.ord_term(date_of_birth)); +CREATE INDEX patients_name_match ON patients USING gin (eql_v3.match_term(name)); +ANALYZE patients; +``` + +Add them once a table has real row counts (thousands, not dozens). Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes) — all of it applies to Supabase verbatim. + +## Row Level Security + +Encrypted columns and RLS compose — they solve different problems: + +- **RLS** decides *which rows* a role may query. It's enforced in the database, on whatever the database stores. +- **Encryption** decides *whether a value can be read at all*. Keys stay outside the database, so anything that bypasses RLS — a leaked `service_role` key, an over-broad policy, a stolen backup, direct disk access — yields ciphertext, not plaintext. + +Keep writing policies exactly as before; the `encryptedSupabase` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. + +One practical pattern: leave your row-ownership predicate on a plaintext `user_id uuid` column, and encrypt the *contents* of the row. RLS scopes the rows to `auth.uid()`; CipherStash makes their contents unreadable to everything except your app. + +## Connections and pooling + +The `encryptedSupabase` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. + +## Where to next + +<Cards> + <Card title="Supabase tutorial" href="/integrations/supabase"> + The end-to-end walkthrough this page backs. + </Card> + <Card title="EQL indexes" href="/reference/eql/indexes"> + Full indexing recipes and EXPLAIN verification. + </Card> + <Card title="Encrypt existing data" href="/guides/migration/encrypt-existing-data"> + Adopt encryption column-by-column on a live table. + </Card> +</Cards> diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 5ce53db..88102fb 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -1,6 +1,6 @@ --- title: Supabase -description: "Searchable, application-level encryption for your Supabase project — encrypt in your app, query in Postgres." +description: "Add searchable, application-level encryption to a Supabase project: install EQL, declare encrypted columns, and query them with the Supabase.js calls you already use." type: tutorial components: [encryption, eql, platform] audience: [developer] @@ -8,13 +8,188 @@ integration: category: platform setup: dashboard-required pairsWith: [drizzle, prisma-next, clerk, nextjs] +verifiedAgainst: + eql: "3.0.0" + stack: "0.18.0" --- -CipherStash adds application-level encryption to your Supabase project: -sensitive fields are encrypted in your application before they reach Postgres, -and stay queryable with the same Supabase.js calls you already use. +CipherStash adds application-level encryption to your Supabase project. Sensitive fields are encrypted in your application before they reach Postgres — plaintext never touches your database, its backups, or its replication streams — and the ciphertext stays queryable through the same Supabase.js calls you already use. CipherStash never sees your data or your keys. -This page is being rebuilt as part of the docs V2 overhaul -([CIP-3328](https://linear.app/cipherstash/issue/CIP-3328)). Until it lands, -the current Supabase integration guide lives at -[CipherStash + Supabase](/stack/cipherstash/supabase). +This tutorial takes an empty Supabase project to an encrypted, searchable table. It takes about fifteen minutes. + +## How it fits together + +Two pieces, one on each side of your Supabase connection: + +- **[EQL](/reference/eql)** installs into your Supabase Postgres as plain SQL. It provides encrypted column types — `eql_v3.text_eq`, `eql_v3.date_ord`, `eql_v3.text_match` — where the type name declares what queries the column supports. +- **[`@cipherstash/stack`](/reference/stack)** runs in your application. Its [`encryptedSupabase` wrapper](/reference/stack/supabase) encrypts values before they're written, encrypts filter terms before they're compared, and decrypts results — around your existing supabase-js client, so Supabase Auth and Row Level Security apply unchanged. + +<Steps> +<Step> + +### Install EQL on your database + +Download the latest EQL install script and run it in the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new): + +```sh +curl -sLo cipherstash-encrypt.sql https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql +``` + +Paste and run it — it needs no superuser and completes in seconds, creating the `eql_v3` schema. Then grant your Supabase roles access to it: + +```sql +GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; +GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; +``` + +If you manage your database with `supabase migrations` instead, commit the script as your earliest migration — the [database guide](/integrations/supabase/database) covers that path and why it survives `supabase db reset`. + +</Step> +<Step> + +### Create a table with encrypted columns + +The column type declares what each column can do. Equality lookups, free-text matching, and range/ordering are different capabilities — declare only what you query: + +```sql +CREATE TABLE patients ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email eql_v3.text_eq NOT NULL, -- exact lookup + name eql_v3.text_match, -- free-text match + date_of_birth eql_v3.date_ord, -- ranges and ORDER BY + plan text -- not sensitive: ordinary column +); +``` + +Which type fits which column — and what each stores — is covered by the [EQL type pages](/reference/eql/core-concepts). + +</Step> +<Step> + +### Install the SDK and connect your workspace + +```sh +npm install @cipherstash/stack @supabase/supabase-js +``` + +Sign up at [dashboard.cipherstash.com](https://dashboard.cipherstash.com), create a workspace, and set its credentials alongside your Supabase keys: + +```sh +CS_WORKSPACE_CRN=... +CS_CLIENT_ID=... +CS_CLIENT_KEY=... +CS_CLIENT_ACCESS_KEY=... +SUPABASE_URL=https://<project-ref>.supabase.co +SUPABASE_ANON_KEY=... +``` + +The CipherStash dashboard's [Supabase integration](/integrations/supabase/dashboard-experience) can generate all of this against your project via OAuth. + +</Step> +<Step> + +### Declare the encrypted schema in your app + +Mirror the table's encrypted columns, with the capability matching each column type: + +```typescript title="lib/schema.ts" +import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" + +export const patients = encryptedTable("patients", { + email: encryptedColumn("email").equality(), + name: encryptedColumn("name").freeTextSearch(), + date_of_birth: encryptedColumn("date_of_birth").dataType("date").orderAndRange(), +}) +``` + +</Step> +<Step> + +### Wrap your Supabase client + +```typescript title="lib/db.ts" +import { createClient } from "@supabase/supabase-js" +import { Encryption } from "@cipherstash/stack" +import { encryptedSupabase } from "@cipherstash/stack/supabase" +import { patients } from "./schema" + +const encryptionClient = await Encryption({ schemas: [patients] }) + +const supabaseClient = createClient( + process.env.SUPABASE_URL!, + process.env.SUPABASE_ANON_KEY!, +) + +export const db = encryptedSupabase({ encryptionClient, supabaseClient }) +``` + +</Step> +<Step> + +### Write and query encrypted data + +```typescript +import { db } from "./lib/db" +import { patients } from "./lib/schema" + +// Insert — encrypted columns are encrypted before the request leaves your app +await db.from("patients", patients).insert({ + email: "alice@example.com", + name: "Alice Chen", + date_of_birth: "1987-04-12", + plan: "standard", +}) + +// Exact lookup on an encrypted column +const { data } = await db.from("patients", patients) + .select("id, email, name") + .eq("email", "alice@example.com") + +// Free-text match (encrypted token containment — not SQL LIKE) +await db.from("patients", patients) + .select("id, name") + .ilike("name", "ali") + +// Range + newest-first on an encrypted date +await db.from("patients", patients) + .select("id, name, date_of_birth") + .gt("date_of_birth", "1980-01-01") + .order("date_of_birth", { ascending: false }) + .limit(20) +``` + +The full method surface — filters, upserts, error shapes, identity-locked queries — is in the [`encryptedSupabase` reference](/reference/stack/supabase). + +</Step> +<Step> + +### See what the database sees + +Open the Table Editor and look at the `patients` rows: every encrypted cell is a ciphertext payload, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees — including a leaked `service_role` key. The [dashboard experience guide](/integrations/supabase/dashboard-experience) walks through what encrypted data looks like across the Supabase dashboard. + +</Step> +</Steps> + +## Production checklist + +- **Indexes** — at real row counts, add functional indexes for the capabilities you query. Two lines of SQL per column: [EQL indexes](/reference/eql/indexes). +- **RLS** — keep your Row Level Security policies; they compose. RLS controls *who can query* rows, encryption controls *whether their contents can be read at all* — a bypassed policy or leaked key yields only ciphertext. +- **Identity-locked decryption** — tie decryption to the logged-in Supabase Auth user: [Supabase Auth integration](/integrations/supabase/auth). +- **Adopt incrementally** — you can encrypt one column at a time; nothing requires a big-bang migration. See [encrypting existing data](/guides/migration/encrypt-existing-data). + +## Go deeper + +<Cards> + <Card title="Database setup" href="/integrations/supabase/database"> + Migrations vs SQL Editor, grants, indexes, and RLS interaction in detail. + </Card> + <Card title="Supabase Auth" href="/integrations/supabase/auth"> + Lock decryption to the authenticated user with identity-aware encryption. + </Card> + <Card title="Dashboard experience" href="/integrations/supabase/dashboard-experience"> + What encrypted columns look like in the Table Editor and API settings. + </Card> + <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> + The complete wrapper API: every filter, response shapes, and how it works. + </Card> +</Cards> diff --git a/content/docs/integrations/supabase/meta.json b/content/docs/integrations/supabase/meta.json index b4690bf..e1a7455 100644 --- a/content/docs/integrations/supabase/meta.json +++ b/content/docs/integrations/supabase/meta.json @@ -1,5 +1,5 @@ { "title": "Supabase", "icon": "Supabase", - "pages": ["..."] + "pages": ["database", "auth", "dashboard-experience"] } diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx new file mode 100644 index 0000000..d0a7b8a --- /dev/null +++ b/content/docs/reference/stack/supabase.mdx @@ -0,0 +1,228 @@ +--- +title: Supabase wrapper +description: "The canonical encryptedSupabase reference: one signature, the full query-builder surface, and how each filter maps to an encrypted index term." +type: reference +components: [encryption, eql] +audience: [developer] +verifiedAgainst: + stack: "0.18.0" + eql: "3.0.0" +--- + +`encryptedSupabase` wraps a `@supabase/supabase-js` client so that queries on encrypted columns work like queries on plaintext ones: mutations are encrypted before they leave your app, filter values are encrypted into the matching index term, and results are decrypted on the way back. You keep writing `.eq()`, `.gt()`, `.order()` — the wrapper handles the encryption on both sides of every call. + +This page is the single source of truth for the wrapper's API. The [Supabase integration](/integrations/supabase) shows it in context; the [EQL reference](/reference/eql) covers the database side it queries against. + +## Setup + +There is one signature: `encryptedSupabase` takes a config object with an encryption client and a Supabase client, and `.from()` takes the table name **and its encrypted schema**. + +```typescript +import { createClient } from "@supabase/supabase-js" +import { Encryption } from "@cipherstash/stack" +import { encryptedSupabase } from "@cipherstash/stack/supabase" +import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" + +// 1. Declare which columns are encrypted, and with which capabilities +const users = encryptedTable("users", { + email: encryptedColumn("email").equality(), + name: encryptedColumn("name").freeTextSearch(), +}) + +// 2. Create the encryption client and the ordinary Supabase client +const encryptionClient = await Encryption({ schemas: [users] }) +const supabaseClient = createClient( + process.env.SUPABASE_URL!, + process.env.SUPABASE_ANON_KEY!, +) + +// 3. Wrap +const db = encryptedSupabase({ encryptionClient, supabaseClient }) + +// 4. Query — .from() takes the table name AND the schema +const { data, error } = await db + .from("users", users) + .select("id, email, name") + .eq("email", "alice@example.com") +``` + +<Callout type="warn"> +Older examples show `encryptedSupabase(url, key)` and `.from("users")` with a single argument. Neither has ever been the shipped API: the config is one object with `encryptionClient` and `supabaseClient`, and `.from(tableName, schema)` always takes the schema as its second argument — that's how the wrapper knows which columns to encrypt and decrypt. +</Callout> + +### `encryptedSupabase(config)` + +| Config key | Type | Purpose | +| --- | --- | --- | +| `encryptionClient` | `EncryptionClient` | The client from `Encryption({ schemas: [...] })` — does all encrypt/decrypt work | +| `supabaseClient` | `SupabaseClient` | Your existing `createClient(...)` instance — auth, RLS, and connection settings all apply unchanged | + +Returns an `EncryptedSupabaseInstance` with a single method: + +### `.from(tableName, schema)` + +`tableName` is the database table; `schema` is the `encryptedTable(...)` definition for it (the two names should match). Returns an `EncryptedQueryBuilder` that mirrors the supabase-js builder. Columns *not* declared in the schema pass through untouched — mixed plaintext/encrypted tables are the normal case. + +## Declaring the schema + +Each capability you declare on a column determines the encrypted index terms its values carry, and therefore which filters work — the same capability model the database enforces through [EQL's domain variants](/reference/eql/core-concepts): + +| Schema builder | Enables | Column type | EQL term | +| --- | --- | --- | --- | +| `encryptedColumn(name)` | Store and decrypt only | `eql_v3.<T>` | — | +| `.equality(tokenFilters?)` | `.eq()`, `.neq()`, `.in()` | `eql_v3.<T>_eq` | `hm` | +| `.orderAndRange()` | `.gt()`, `.gte()`, `.lt()`, `.lte()`, `.order()` | `eql_v3.<T>_ord` | `ob` | +| `.freeTextSearch(opts?)` | `.like()`, `.ilike()` — encrypted token match | `eql_v3.text_match` | `bf` | +| `.equality().orderAndRange().freeTextSearch()` | All of the above (text) | `eql_v3.text_search` | all three | +| `.searchableJson()` | Encrypted JSON documents | `eql_v3.json` | `sv` | + +Use `.dataType()` for non-string columns — `"number"`, `"bigint"`, `"boolean"`, `"date"`, `"json"` (default is `"string"`). The declared capabilities must match the column's declared database type; [Schema design](/guides/development/schema-design) covers choosing them. + +```typescript +const patients = encryptedTable("patients", { + email: encryptedColumn("email").equality(), + name: encryptedColumn("name").freeTextSearch(), + date_of_birth: encryptedColumn("date_of_birth").dataType("date").orderAndRange(), + history: encryptedColumn("history").searchableJson(), +}) +``` + +## Writing data + +`insert`, `update`, and `upsert` encrypt every schema-declared column before the request leaves your process. All values in a batch are encrypted in a single ZeroKMS round trip, so large inserts don't multiply key-service calls. + +```typescript +await db.from("users", users).insert({ + email: "alice@example.com", // encrypted + name: "Alice Chen", // encrypted + plan: "free", // not in schema — passes through as plaintext +}) + +await db.from("users", users) + .update({ name: "Alice Nakamura" }) + .eq("email", "alice@example.com") + +await db.from("users", users).delete().eq("email", "alice@example.com") +``` + +`insert` and `upsert` accept a single row or an array. `upsert` supports `onConflict` and `ignoreDuplicates` as in supabase-js. + +## Reading data + +`select` takes an explicit column list. Encrypted columns in the result are decrypted before `data` is returned to you. + +```typescript +const { data, error } = await db + .from("users", users) + .select("id, email, name") + .eq("email", "alice@example.com") +``` + +<Callout type="warn"> +`select('*')` throws. The wrapper needs to know which columns to cast and decrypt, so list columns explicitly. Aliases (`email as contact`) and non-encrypted columns are fine. +</Callout> + +## Filters + +Every filter value on an encrypted column is encrypted client-side into the term that capability queries, then sent in place of the plaintext — the database only ever compares ciphertext. Filters on columns outside the schema pass through to supabase-js unchanged. + +| Method | Requires capability | What the database compares | +| --- | --- | --- | +| `.eq(col, value)` / `.neq(col, value)` | `.equality()` | Equality (`hm`) terms | +| `.in(col, values)` | `.equality()` | Each element encrypted as an equality term | +| `.gt()` `.gte()` `.lt()` `.lte()` | `.orderAndRange()` | ORE (`ob`) terms | +| `.like(col, pattern)` / `.ilike(col, pattern)` | `.freeTextSearch()` | Bloom-filter (`bf`) token containment | +| `.is(col, value)` | — | Passed through — SQL `NULL` is never encrypted, so `is` works on every column | +| `.match({ col: value, ... })` | per column | Each pair applied as `.eq()` | +| `.filter(col, op, value)` / `.not(col, op, value)` | per operator | Escape hatch: value is encrypted, operator string passes through | +| `.or(filters)` | per column | Encrypted-column values inside the OR string are encrypted in place | + +```typescript +// Range on an orderAndRange column +await db.from("patients", patients) + .select("id, name, date_of_birth") + .gt("date_of_birth", "1980-01-01") + +// Combine encrypted and plaintext filters freely +await db.from("users", users) + .select("id, email") + .eq("email", "alice@example.com") // encrypted comparison + .eq("plan", "free") // ordinary supabase-js filter +``` + +### Free-text matching is not `LIKE` + +`.like()` and `.ilike()` on a `.freeTextSearch()` column perform **encrypted token containment**: the pattern is tokenized and encrypted into a bloom-filter query, and the database tests whether the stored value contains those (encrypted) tokens. It is a probabilistic n-gram match, not SQL pattern matching — `%` wildcards and positional anchors have no effect, and matching is case-insensitive by default (the `downcase` token filter). SQL `LIKE` itself is meaningless on ciphertext and [raises on every encrypted column](/reference/eql/text). + +```typescript +// Matches rows whose name contains the tokens of "ali" +await db.from("users", users).select("id, name").ilike("name", "ali") +``` + +Tokenizer, filter, and filter-size options are set on `.freeTextSearch()` in the schema — they're properties of how values were encrypted, not of the query. + +## Ordering and pagination + +`.order()` on an `.orderAndRange()` column sorts correctly on the encrypted ORE terms — [ordering encrypted values](/reference/eql/sorting) is exactly what that capability exists for. `.limit()`, `.range()`, `.single()`, `.maybeSingle()`, and `.csv()` behave as in supabase-js. + +```typescript +await db.from("patients", patients) + .select("id, name, date_of_birth") + .order("date_of_birth", { ascending: false }) + .limit(20) +``` + +Ordering a column *without* `.orderAndRange()` doesn't error — it sorts on the raw stored payload, which is meaningless. Declare the capability if you sort on it. + +## Identity and audit + +Two methods have no supabase-js equivalent: + +```typescript +await db.from("users", users) + .select("id, email") + .eq("email", "alice@example.com") + .withLockContext(lockContext) // decryption requires this user's identity + .audit({ metadata: { reason: "support-lookup" } }) +``` + +- `.withLockContext(lockContext)` scopes every encrypt/decrypt in the query to an identity-locked context — see [Supabase Auth integration](/integrations/supabase/auth) for wiring it to Supabase Auth sessions. +- `.audit(config)` attaches metadata to the query's decryption events in the [audit log](/security/audit-logging). + +`.abortSignal()`, `.throwOnError()`, and `.returns<T>()` pass through as in supabase-js. + +## Responses and errors + +Awaiting the builder resolves to the supabase-js response shape, extended with encryption context: + +```typescript +type EncryptedSupabaseResponse<T> = { + data: T | null + error: EncryptedSupabaseError | null + count: number | null + status: number + statusText: string +} + +type EncryptedSupabaseError = { + message: string + details?: string + hint?: string + code?: string + encryptionError?: EncryptionError // set when encrypt/decrypt failed, not the query +} +``` + +Check `error.encryptionError` to distinguish an encryption failure (bad workspace credentials, unreachable ZeroKMS, a payload that fails validation) from an ordinary PostgREST error. + +## How it works + +The builder is deferred: method calls record intent, and nothing executes until you `await`. At that point the wrapper, in order: + +1. Encrypts mutation payloads (all rows, one ZeroKMS call) +2. Encrypts every filter value on an encrypted column into its index term +3. Adds `::jsonb` casts to encrypted columns in the `select` list +4. Replays the recorded calls onto the real supabase-js builder +5. Decrypts encrypted columns in the response + +Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged** — RLS decides which rows come back; encryption decides whether what's in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in the [Supabase database guide](/integrations/supabase/database). diff --git a/content/docs/security/audit-logging.mdx b/content/docs/security/audit-logging.mdx new file mode 100644 index 0000000..ae1bba0 --- /dev/null +++ b/content/docs/security/audit-logging.mdx @@ -0,0 +1,9 @@ +--- +title: Audit logging +description: "Decryption-event logging: what's recorded, and how to attach query metadata." +type: concept +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3331](https://linear.app/cipherstash/issue/CIP-3331)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, the current version lives in the [existing docs](/stack/cipherstash/proxy/audit). diff --git a/content/docs/security/cts.mdx b/content/docs/security/cts.mdx new file mode 100644 index 0000000..23e541d --- /dev/null +++ b/content/docs/security/cts.mdx @@ -0,0 +1,9 @@ +--- +title: CTS +description: "The CipherStash Token Service: exchanging identity-provider JWTs for tokens that gate decryption." +type: concept +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3330](https://linear.app/cipherstash/issue/CIP-3330)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, the current version lives in the [existing docs](/stack/cipherstash/kms/cts). From 3924f7cbf4dd6df700a4f7d934ec0763ed9a2f0b Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 7 Jul 2026 13:35:45 +1000 Subject: [PATCH 098/151] docs(v2): restructure Supabase section into a 6-page journey MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Reorganize /integrations/supabase from 4 pages into: Overview (front door from the marketplace listing), Quickstart (the tutorial, OAuth folded in as optional), Fundamentals (database.mdx + dashboard- experience.mdx merged), Data layer (ORM/framework router), Auth (rebuilt on OIDC federation), and Edge Functions (new). - Auth: replace the deprecated LockContext.identify() flow with OidcFederationStrategy as config.authStrategy, then .withLockContext({ identityClaim }) — lock context now correctly documented as requiring federation. - Data layer: document the PostgREST vs direct-Postgres fork and Supabase pooler/connection glue; link out to canonical ORM pages rather than duplicating them. - Edge Functions: written on the @cipherstash/stack/wasm-inline surface; wrapper-on-edge question gated behind a callout. - Add Prisma + Next.js integration placeholders so Data-layer links resolve; fix stale /supabase/database link in the stack reference. - Reorder meta.json; remove merged pages. --- content/docs/integrations/nextjs.mdx | 13 ++ content/docs/integrations/prisma.mdx | 13 ++ content/docs/integrations/supabase/auth.mdx | 115 ++++++---- .../supabase/dashboard-experience.mdx | 96 --------- .../integrations/supabase/edge-functions.mdx | 127 +++++++++++ .../{database.mdx => fundamentals.mdx} | 98 ++++++++- content/docs/integrations/supabase/index.mdx | 202 +++++------------- content/docs/integrations/supabase/meta.json | 9 +- content/docs/integrations/supabase/orms.mdx | 74 +++++++ .../docs/integrations/supabase/quickstart.mdx | 193 +++++++++++++++++ content/docs/reference/stack/supabase.mdx | 2 +- 11 files changed, 643 insertions(+), 299 deletions(-) create mode 100644 content/docs/integrations/nextjs.mdx create mode 100644 content/docs/integrations/prisma.mdx delete mode 100644 content/docs/integrations/supabase/dashboard-experience.mdx create mode 100644 content/docs/integrations/supabase/edge-functions.mdx rename content/docs/integrations/supabase/{database.mdx => fundamentals.mdx} (51%) create mode 100644 content/docs/integrations/supabase/orms.mdx create mode 100644 content/docs/integrations/supabase/quickstart.mdx diff --git a/content/docs/integrations/nextjs.mdx b/content/docs/integrations/nextjs.mdx new file mode 100644 index 0000000..18ef87d --- /dev/null +++ b/content/docs/integrations/nextjs.mdx @@ -0,0 +1,13 @@ +--- +title: Next.js +description: "Application-level encryption in a Next.js app: where encryption runs across Server Components, Route Handlers, and Server Actions." +type: tutorial +integration: + category: framework + setup: code-only + pairsWith: [supabase, drizzle, prisma] +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/integrations/prisma.mdx b/content/docs/integrations/prisma.mdx new file mode 100644 index 0000000..f23a5c0 --- /dev/null +++ b/content/docs/integrations/prisma.mdx @@ -0,0 +1,13 @@ +--- +title: Prisma +description: "Encrypted columns with Prisma ORM." +type: tutorial +integration: + category: orm + setup: code-only + pairsWith: [supabase, nextjs] +--- + +This page is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). + +Until it lands, the current version lives in the [existing docs](/stack/cipherstash/encryption/prisma-next). diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index fd4b455..e4b79a9 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -1,100 +1,131 @@ --- title: Supabase Auth -description: "Lock decryption to the authenticated user: use the Supabase Auth session JWT as a lock context so encrypted data only decrypts for the identity it belongs to." +description: "Federate the Supabase Auth session into CipherStash so encryption authenticates as the signed-in user — then, optionally, lock decryption to that user's identity." type: guide components: [encryption, platform] audience: [developer] verifiedAgainst: stack: "0.18.0" + auth: "0.41.0" --- -Row Level Security scopes *queries* to the logged-in user. Identity-aware encryption goes one layer deeper: values encrypted with a **lock context** can only be *decrypted* by presenting the same user's identity — enforced by [CTS](/security/cts), CipherStash's token service, not by your application code. Even your own backend, holding valid workspace credentials, cannot decrypt another user's locked values without that user's session. +Supabase Auth already knows who your user is. This page connects that identity to CipherStash in two layers you can adopt independently: -With Supabase Auth, the identity is the session JWT you already have. +1. **Federation** — exchange the user's Supabase session for a CipherStash token, so every encryption and decryption request authenticates *as that user* instead of as a shared service credential. This is the foundation. +2. **Identity-bound encryption (lock context)** — an optional layer on top of federation that binds a value to the user's identity claim, so only that user can decrypt it — enforced by ZeroKMS, not by your application code. -<Callout type="warn"> -Lock contexts require a Business or Enterprise workspace plan. -</Callout> +Federation is useful on its own. Lock context requires it. Start with federation; add lock context where per-user secrecy matters. -## Register Supabase Auth with your workspace +## Register Supabase as an OIDC provider -CTS needs to trust your Supabase project as an OIDC issuer — that's what lets it exchange a Supabase session JWT for a CipherStash identity token. The issuer for a Supabase project is: +CipherStash needs to trust your Supabase project as an OIDC issuer before it will accept a Supabase session token. Add the provider once, in the CipherStash dashboard at [dashboard.cipherstash.com/workspaces/_/oidc-providers](https://dashboard.cipherstash.com/workspaces/_/oidc-providers) (the `_` resolves to whichever workspace you select). A Supabase project's issuer is: ``` https://<project-ref>.supabase.co/auth/v1 ``` -The easiest path is the CipherStash dashboard's [Supabase integration](/integrations/supabase/dashboard-experience), which configures this during setup. Manual OIDC configuration is covered in the [auth reference](/reference/auth). +> **Good to know**: the dashboard's [Supabase integration](/integrations/supabase/fundamentals#connecting-your-project-to-cipherstash) can register this for you in one click while it's connected to your project over OAuth. Manual OIDC configuration is covered in the [auth reference](/reference/auth). -## Lock queries to the session user +## Federate the Supabase session -Identify the user with their Supabase session token, then attach the lock context to any [`encryptedSupabase`](/reference/stack/supabase) query: - -```typescript -import { LockContext } from "@cipherstash/stack/identity" -import { db } from "./lib/db" -import { patients } from "./lib/schema" +Authenticate the `Encryption` client with an `OidcFederationStrategy`. It takes your workspace CRN and a `getJwt` callback that returns the user's **current** Supabase access token — the strategy calls it on first use and again on every re-federation, so return a fresh token each time rather than capturing one: -// 1. The Supabase session you already have -const { data: { session } } = await supabaseClient.auth.getSession() +```typescript title="lib/db.ts" +import { createClient } from "@supabase/supabase-js" +import { Encryption, OidcFederationStrategy } from "@cipherstash/stack" +import { encryptedSupabase } from "@cipherstash/stack/supabase" +import { patients } from "./schema" -// 2. Identify: exchanges the Supabase JWT for a CTS identity token -const lc = new LockContext() -const identified = await lc.identify(session.access_token) +const supabaseClient = createClient( + process.env.SUPABASE_URL!, + process.env.SUPABASE_ANON_KEY!, +) -if (identified.failure) { - throw new Error(identified.failure.message) +// Return the current Supabase session token — re-invoked on every re-federation. +const getJwt = async () => { + const { data: { session } } = await supabaseClient.auth.getSession() + if (!session) throw new Error("No active Supabase session") + return session.access_token } -const lockContext = identified.data -// 3. Encrypt and decrypt under that identity +const encryptionClient = await Encryption({ + schemas: [patients], + config: { + authStrategy: OidcFederationStrategy.create(process.env.CS_WORKSPACE_CRN!, getJwt), + }, +}) + +export const db = encryptedSupabase({ encryptionClient, supabaseClient }) +``` + +That's the whole integration. Every `db.from(...)` query now encrypts and decrypts under the signed-in user's identity, and your Supabase Auth session and RLS policies apply to the underlying request exactly as before. + +> **Good to know**: the federation endpoint issues no refresh token — when the CipherStash token expires, the strategy re-federates by calling `getJwt` again. Because `getJwt` reads from `supabaseClient.auth.getSession()`, supabase-js's own token refresh keeps it valid. This is also why the strategy runs **server-side only** (a Next.js Route Handler / Server Action, an Edge Function) — never in the browser, where it would expose the session token. For the Edge runtime, see [Edge Functions](/integrations/supabase/edge-functions). + +## Identity-bound encryption (lock context) + +Federation authenticates *as* the user. **Lock context** goes further: it bakes a claim from the user's JWT (by default `sub`, which for Supabase Auth is the user's UUID) into the data key, so a value can only be decrypted by presenting the same identity. Even your own backend — holding valid workspace credentials — cannot decrypt another user's locked values. + +<Callout type="warn"> +Lock context requires the client to be authenticated with `OidcFederationStrategy` (above). It cannot be used with `AccessKeyStrategy`, which authenticates a *service*, not a user — there is no user `sub` claim to bind to. Lock context also requires a Business or Enterprise workspace plan. +</Callout> + +Attach a lock context to any [`encryptedSupabase`](/reference/stack/supabase) query with `.withLockContext()`, passing the identity claim to bind: + +```typescript +import { db } from "./lib/db" +import { patients } from "./lib/schema" + +// Insert — the value is bound to the signed-in user's `sub` claim await db.from("patients", patients) .insert({ email: "alice@example.com", name: "Alice Chen" }) - .withLockContext(lockContext) + .withLockContext({ identityClaim: ["sub"] }) +// Read — the same claim must be supplied, and the same user must be authenticated const { data } = await db.from("patients", patients) .select("id, email, name") .eq("email", "alice@example.com") - .withLockContext(lockContext) + .withLockContext({ identityClaim: ["sub"] }) ``` -A value written with `.withLockContext()` can only be decrypted with a lock context for the **same identity**. Reading it without one — or as a different user — fails with an encryption error, regardless of what RLS allows. +ZeroKMS resolves the claim's *value* from the token that authenticated the request — the federated Supabase identity — so no separate identify step or per-operation token is needed. Reading a locked value without a matching context, or as a different user, fails with an encryption error regardless of what RLS allows. -By default the identity is the JWT's `sub` claim, which for Supabase Auth is the user's UUID. You can widen or change that: - -```typescript -const lc = new LockContext({ - context: { identityClaim: ["sub"] }, // default; add "scopes" to bind permissions too -}) -``` +<Callout type="info"> +Earlier releases used `new LockContext().identify(jwt)` to fetch a per-operation token. That flow is **deprecated** — per-operation CTS tokens were removed in protect-ffi 0.25. Authenticate the client with `OidcFederationStrategy` and pass the claim directly to `.withLockContext()`, as above. +</Callout> ## Where it fits - **Per-user data** (a user's own medical history, messages, documents): lock to `sub`. The row is useless to anyone but its owner — including operators with database access and your own service role. -- **Shared/tenant data** (a support queue, org-wide records): don't lock it, or you'll be unable to decrypt it outside a user session. Plain encryption already protects it from the database side; RLS scopes who can query it. +- **Shared / tenant data** (a support queue, org-wide records): don't lock it, or you'll be unable to decrypt it outside a user session. Federation alone still authenticates access as the user; RLS scopes which rows they see. - **Server-side jobs** that must read locked data need the owning user's session — by design. If a background job must read a field, that field shouldn't be identity-locked. ## Errors -`identify()` returns a result, not a throw. The common failures: +Both federation and lock context surface failures as values, not throws. | Scenario | What you see | | --- | --- | -| Expired or invalid Supabase JWT | `CtsTokenError` from `identify()` | -| Issuer not registered with the workspace | `CtsTokenError` — register the OIDC issuer first | -| Expired CTS token at query time | `LockContextError` — call `identify()` again | +| Provider not registered with the workspace | Federation fails — register the Supabase OIDC issuer first | +| Expired or invalid Supabase session | `getJwt` throws / returns no session; federation cannot proceed | +| CipherStash token expired mid-request | Strategy re-federates automatically via `getJwt` | | Decrypting another user's locked value | `encryptionError` on the [query response](/reference/stack/supabase#responses-and-errors) | +The strategy's own factory and token errors follow the `@cipherstash/auth` `Result` shape (`failure.type`); see the [auth reference](/reference/auth). + ## Where to next <Cards> <Card title="Identity-aware encryption" href="/concepts/identity-aware-encryption"> - The concept: lock contexts, CTS, and what identity binding proves. + The concept: federation, lock contexts, and what identity binding proves. + </Card> + <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> + Run the federation strategy server-side in Supabase Edge Functions. </Card> <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> `.withLockContext()` and `.audit()` on the query builder. </Card> <Card title="Auth reference" href="/reference/auth"> - OIDC configuration, access keys, and clients. + OIDC providers, federation strategies, and access keys. </Card> </Cards> diff --git a/content/docs/integrations/supabase/dashboard-experience.mdx b/content/docs/integrations/supabase/dashboard-experience.mdx deleted file mode 100644 index df4fb0f..0000000 --- a/content/docs/integrations/supabase/dashboard-experience.mdx +++ /dev/null @@ -1,96 +0,0 @@ ---- -title: Dashboard experience -description: "What encrypted columns look like across the Supabase dashboard — Table Editor, SQL Editor, API settings — and how to connect your project to CipherStash via OAuth." -type: guide -components: [eql] -audience: [developer] -verifiedAgainst: - eql: "3.0.0" ---- - -Encrypted columns live inside your normal Supabase dashboard — no separate tool. This page sets expectations for what you'll see in each part of the dashboard, and covers the CipherStash-side integration that connects your project. - -## Table Editor - -Encrypted columns show **ciphertext payloads**, not plaintext. A `patients` row looks like: - -| id | email | name | plan | -| --- | --- | --- | --- | -| 1 | `{"v": 3, "i": {"t": "patients", "c": "email"}, "c": "mBbKmsMM%bK#…", "hm": "9c8ec1d2…"}` | `{"v": 3, "i": …, "c": "x7Qq…", "bf": [42, 1290, …]}` | `standard` | - -This is the point, not a limitation: what the Table Editor shows is exactly what a backup, a replication stream, a leaked `service_role` key, or a curious operator sees. The payload structure (`v`, `i`, `c`, and the index terms) is documented in [EQL core concepts](/reference/eql/core-concepts) — none of it reveals the plaintext. - -Practical consequences: - -- **Reading data** happens through your app (or any client using the [Stack SDK](/reference/stack)); the dashboard can't decrypt, because the keys never go near it. -- **Hand-editing an encrypted cell** in the Table Editor will produce a value that fails the column's `CHECK` constraint or fails to decrypt — treat encrypted columns as read-only in the dashboard. -- **Filtering and sorting** on encrypted columns in the Table Editor UI operates on the raw payloads, so it won't return meaningful results. Query through your app instead. - -## Creating encrypted columns - -Use the **SQL Editor** for schema work on encrypted columns: - -```sql -ALTER TABLE patients ADD COLUMN tax_id eql_v3.text_eq; -``` - -The `eql_v3` domain types are user-defined types, and the Table Editor's column-type picker doesn't reliably surface custom domains — SQL is the dependable path, and it's what your migrations should contain anyway (see [Database setup](/integrations/supabase/database)). - -## SQL Editor - -Everything in the [EQL reference](/reference/eql) can be run from the SQL Editor — installing EQL, creating indexes, `EXPLAIN`-ing query plans. Two checks worth knowing: - -```sql --- Is EQL installed, and which version? -SELECT eql_v3.version(); - --- Which columns are encrypted? -SELECT table_name, column_name, udt_name -FROM information_schema.columns -WHERE udt_schema = 'eql_v3'; -``` - -## API settings - -Normal operation needs **no** API-settings changes: your tables are in the `public` schema, and the wrapper's queries are ordinary PostgREST calls. The `eql_v3` schema needs role *grants* (covered in [Database setup](/integrations/supabase/database#grants)), but does **not** need to be in the *Exposed schemas* list unless you want to call EQL functions directly over REST. - -## Connecting your project to CipherStash - -The CipherStash dashboard has a first-class Supabase integration at [dashboard.cipherstash.com](https://dashboard.cipherstash.com): - -<Steps> -<Step> -### Connect via OAuth - -Authorize CipherStash against your Supabase organization. The integration requests read-only scopes (`projects:read`, `database:read`) — it never sees your database secrets. -</Step> -<Step> -### Pick a project and run the readiness checks - -The setup hub verifies EQL is installed (`eql_v3.version()`), checks for encrypted columns, and flags anything missing. -</Step> -<Step> -### Configure identity (optional) - -One click registers your project's Supabase Auth issuer (`https://<project-ref>.supabase.co/auth/v1`) with your workspace, enabling [identity-locked encryption](/integrations/supabase/auth). -</Step> -<Step> -### Copy your environment - -The hub emits the `CS_*` credentials block for your app's environment, ready to pair with your existing `SUPABASE_URL` and keys. -</Step> -</Steps> - -## Where to next - -<Cards> - <Card title="Supabase tutorial" href="/integrations/supabase"> - The end-to-end setup this page supports. - </Card> - <Card title="Database setup" href="/integrations/supabase/database"> - Grants, migrations, and indexes in detail. - </Card> - <Card title="EQL core concepts" href="/reference/eql/core-concepts"> - What's actually inside those ciphertext payloads. - </Card> -</Cards> diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx new file mode 100644 index 0000000..49ce8a2 --- /dev/null +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -0,0 +1,127 @@ +--- +title: Edge Functions +description: "Run CipherStash encryption inside Supabase Edge Functions using the @cipherstash/stack WebAssembly build, with the CipherStash token cached across invocations in an HTTP-only cookie." +type: guide +components: [encryption, platform] +audience: [developer] +verifiedAgainst: + stack: "0.18.0" + auth: "0.41.0" +--- + +Encryption and decryption must run somewhere your keys and credentials are safe — never in the browser. Supabase Edge Functions are that place: server-side compute next to your database. CipherStash ships a **WebAssembly build** of the SDK for exactly this runtime, so the same encrypt/decrypt code runs in Deno with no native bindings. + +<Callout type="info"> +**Verifying the Supabase wrapper on the edge.** The `@cipherstash/stack/wasm-inline` entry exports the core `Encryption` client (`client.encrypt` / `client.decrypt`), which this page uses. Whether the higher-level [`encryptedSupabase`](/reference/stack/supabase) wrapper is available on the edge build is being confirmed — this page will be updated with the wrapper pattern once verified. Until then, use the core client shown below inside your Edge Function. +</Callout> + +## Why the wasm build + +Supabase Edge Functions run on Deno, which loads npm packages through the `node` compatibility layer. The SDK's default entry resolves to native NAPI bindings that don't exist in that runtime, so the edge uses a dedicated entry: `@cipherstash/stack/wasm-inline`. It embeds the WebAssembly module as base64 inside the JS bundle — no separate `.wasm` fetch, no bundler plugins, no `static_files` config. The same applies to the auth package (`@cipherstash/auth/wasm-inline`). + +## Set up the function + +Map the `wasm-inline` entries in your function's `deno.json`: + +```jsonc title="supabase/functions/encrypt/deno.json" +{ + "imports": { + "@cipherstash/stack/wasm-inline": "npm:@cipherstash/stack@^0.18/wasm-inline", + "@cipherstash/auth/wasm-inline": "npm:@cipherstash/auth@^0.41/wasm-inline", + "@cipherstash/auth/cookies": "npm:@cipherstash/auth@^0.41/cookies" + } +} +``` + +Provide the `CS_*` credentials when you serve the function — locally via an env file: + +```bash +supabase functions serve --env-file ./supabase/functions/.env.local +``` + +```sh title="supabase/functions/.env.local" +CS_WORKSPACE_CRN=crn:ap-southeast-2.aws:<workspace-id> +CS_CLIENT_ID=... +CS_CLIENT_KEY=... +CS_CLIENT_ACCESS_KEY=... +``` + +For deployed functions, set the same values as [Edge Function secrets](https://supabase.com/dashboard/project/_/settings/functions). + +## Encrypt and decrypt in a function + +Each invocation builds a fresh client, but the CipherStash service token is cached in an HTTP-only cookie via `cookieStore`, so only the first request per session pays the full round-trip to CipherStash: + +```typescript title="supabase/functions/encrypt/index.ts" +import { Encryption, AccessKeyStrategy, encryptedTable, encryptedColumn } from "@cipherstash/stack/wasm-inline" +import { cookieStore } from "@cipherstash/auth/cookies" + +const patients = encryptedTable("patients", { + email: encryptedColumn("email").equality(), +}) + +Deno.serve(async (req) => { + const responseHeaders = new Headers({ "content-type": "application/json" }) + + // Cache the CipherStash token across invocations in an HTTP-only cookie + const authStrategy = AccessKeyStrategy.create( + Deno.env.get("CS_WORKSPACE_CRN")!, + Deno.env.get("CS_CLIENT_ACCESS_KEY")!, + { store: cookieStore({ request: req, responseHeaders }) }, + ) + if (authStrategy.failure) { + return Response.json({ error: authStrategy.failure.type }, { status: 500, headers: responseHeaders }) + } + + const client = await Encryption({ + schemas: [patients], + config: { + authStrategy: authStrategy.data, + clientId: Deno.env.get("CS_CLIENT_ID")!, + clientKey: Deno.env.get("CS_CLIENT_KEY")!, + }, + }) + + const encrypted = await client.encrypt("alice@example.com", { column: patients.email, table: patients }) + const decrypted = await client.decrypt(encrypted.data) + + return Response.json({ ok: decrypted.data === "alice@example.com" }, { headers: responseHeaders }) +}) +``` + +Note the `.failure` / `.data` result shape: on the wasm entry, `AccessKeyStrategy.create` returns a `Result` you unwrap (unlike the Node build, where it returns the strategy directly). + +## Per-user identity on the edge + +To encrypt as the signed-in Supabase user rather than a service credential, swap `AccessKeyStrategy` for `OidcFederationStrategy` — its `getJwt` callback returns the current Supabase session token. The mechanics and the identity-lock layer are covered in [Supabase Auth](/integrations/supabase/auth); the only edge-specific difference is the `wasm-inline` import and the `Result` unwrap: + +```typescript +import { OidcFederationStrategy } from "@cipherstash/stack/wasm-inline" +import { cookieStore } from "@cipherstash/auth/cookies" + +const authStrategy = OidcFederationStrategy.create( + Deno.env.get("CS_WORKSPACE_CRN")!, + () => getSupabaseSessionToken(req), // return the current session JWT + { store: cookieStore({ request: req, responseHeaders }) }, +) +``` + +## Caveats + +- **Cold start.** The first request pays the full path: WebAssembly compile, auth round-trip to CipherStash, and ZeroKMS dataset-key initialization. Subsequent requests reuse the cookie-cached token and only pay for the encrypt/decrypt work. +- **Bundle size.** The inline wasm build is larger than a native binding (the module ships as base64 in the JS). That's the trade for zero runtime config — acceptable for an edge function that boots once per worker. +- **Server-side only.** These credentials and the session token must never reach the browser. Keep this code in the Edge Function. + +## Where to next + +<Cards> + <Card title="Supabase Auth" href="/integrations/supabase/auth"> + Federation and identity-locked encryption — the full identity story. + </Card> + <Card title="Quickstart" href="/integrations/supabase/quickstart"> + The standard (Node) setup with the encryptedSupabase wrapper. + </Card> + <Card title="Stack reference" href="/reference/stack"> + The core Encryption client API used here. + </Card> +</Cards> diff --git a/content/docs/integrations/supabase/database.mdx b/content/docs/integrations/supabase/fundamentals.mdx similarity index 51% rename from content/docs/integrations/supabase/database.mdx rename to content/docs/integrations/supabase/fundamentals.mdx index 128b24e..3209491 100644 --- a/content/docs/integrations/supabase/database.mdx +++ b/content/docs/integrations/supabase/fundamentals.mdx @@ -1,6 +1,6 @@ --- -title: Database setup -description: "Installing and operating EQL on Supabase Postgres: migrations vs the SQL Editor, role grants, functional indexes, and how encryption composes with RLS." +title: Fundamentals +description: "Install and operate EQL on Supabase Postgres — migrations vs the SQL Editor, role grants, column types, functional indexes, RLS — and work with encrypted columns across the Supabase dashboard." type: guide components: [eql] audience: [developer] @@ -8,7 +8,9 @@ verifiedAgainst: eql: "3.0.0" --- -EQL installs into Supabase Postgres as plain SQL — no extension packaging, no superuser, no separate Supabase build. This page covers the database-side setup in full: how to install so it survives `supabase db reset`, the grants Supabase's roles need, indexing, and how encrypted columns interact with Row Level Security. +EQL installs into Supabase Postgres as plain SQL — no extension packaging, no superuser, no separate Supabase build. This page covers the database side in full — how to install so it survives `supabase db reset`, the grants Supabase's roles need, choosing column types, indexing, and how encryption composes with Row Level Security — then walks through what encrypted columns look like across the Supabase dashboard. + +If you just want the fastest path from empty project to encrypted table, start with the [Quickstart](/integrations/supabase/quickstart); this page is the reference behind it. ## Installing EQL @@ -68,9 +70,9 @@ Declare only the capabilities you use: every extra capability stores extra searc Encrypted columns index through **ordinary functional indexes** over EQL's term-extractor functions. This is why EQL works on Supabase unchanged: no custom operator classes (which managed platforms block), just `CREATE INDEX`, which any migration can run: ```sql -CREATE INDEX patients_email_eq ON patients USING hash (eql_v3.eq_term(email)); -CREATE INDEX patients_dob_ord ON patients USING btree (eql_v3.ord_term(date_of_birth)); -CREATE INDEX patients_name_match ON patients USING gin (eql_v3.match_term(name)); +CREATE INDEX patients_email_eq ON patients USING hash (eql_v3.eq_term(email)); +CREATE INDEX patients_dob_ord ON patients USING btree (eql_v3.ord_term(date_of_birth)); +CREATE INDEX patients_name_match ON patients USING gin (eql_v3.match_term(name)); ANALYZE patients; ``` @@ -85,21 +87,99 @@ Encrypted columns and RLS compose — they solve different problems: Keep writing policies exactly as before; the `encryptedSupabase` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. -One practical pattern: leave your row-ownership predicate on a plaintext `user_id uuid` column, and encrypt the *contents* of the row. RLS scopes the rows to `auth.uid()`; CipherStash makes their contents unreadable to everything except your app. +One practical pattern: leave your row-ownership predicate on a plaintext `user_id uuid` column, and encrypt the *contents* of the row. RLS scopes the rows to `auth.uid()`; CipherStash makes their contents unreadable to everything except your app. To go one step further and make a row's contents decryptable *only* by its owner — even to your own service role — see [Supabase Auth](/integrations/supabase/auth). ## Connections and pooling -The `encryptedSupabase` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. +The `encryptedSupabase` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), or an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. The direct-connection path is covered in [Data layer](/integrations/supabase/orms). + +## Working in the dashboard + +Encrypted columns live inside your normal Supabase dashboard — no separate tool. Here's what to expect in each part of it. + +### Table Editor + +Encrypted columns show **ciphertext payloads**, not plaintext. A `patients` row looks like: + +| id | email | name | plan | +| --- | --- | --- | --- | +| 1 | `{"v": 3, "i": {"t": "patients", "c": "email"}, "c": "mBbKmsMM%bK#…", "hm": "9c8ec1d2…"}` | `{"v": 3, "i": …, "c": "x7Qq…", "bf": [42, 1290, …]}` | `standard` | + +This is the point, not a limitation: what the Table Editor shows is exactly what a backup, a replication stream, a leaked `service_role` key, or a curious operator sees. The payload structure (`v`, `i`, `c`, and the index terms) is documented in [EQL core concepts](/reference/eql/core-concepts) — none of it reveals the plaintext. + +Practical consequences: + +- **Reading data** happens through your app (or any client using the [Stack SDK](/reference/stack)); the dashboard can't decrypt, because the keys never go near it. +- **Hand-editing an encrypted cell** in the Table Editor will produce a value that fails the column's `CHECK` constraint or fails to decrypt — treat encrypted columns as read-only in the dashboard. +- **Filtering and sorting** on encrypted columns in the Table Editor UI operates on the raw payloads, so it won't return meaningful results. Query through your app instead. + +### Creating encrypted columns + +Use the **SQL Editor** for schema work on encrypted columns: + +```sql +ALTER TABLE patients ADD COLUMN tax_id eql_v3.text_eq; +``` + +The `eql_v3` domain types are user-defined types, and the Table Editor's column-type picker doesn't reliably surface custom domains — SQL is the dependable path, and it's what your migrations should contain anyway. + +### SQL Editor + +Everything in the [EQL reference](/reference/eql) can be run from the SQL Editor — installing EQL, creating indexes, `EXPLAIN`-ing query plans. Two checks worth knowing: + +```sql +-- Is EQL installed, and which version? +SELECT eql_v3.version(); + +-- Which columns are encrypted? +SELECT table_name, column_name, udt_name +FROM information_schema.columns +WHERE udt_schema = 'eql_v3'; +``` + +### API settings + +Normal operation needs **no** API-settings changes: your tables are in the `public` schema, and the wrapper's queries are ordinary PostgREST calls. The `eql_v3` schema needs role *grants* (see [Grants](#grants) above), but does **not** need to be in the *Exposed schemas* list unless you want to call EQL functions directly over REST. + +## Connecting your project to CipherStash + +Connecting is optional — you can set the `CS_*` credentials by hand ([Quickstart](/integrations/supabase/quickstart#install-the-sdk-and-connect-your-workspace)). The CipherStash dashboard's first-class Supabase integration at [dashboard.cipherstash.com](https://dashboard.cipherstash.com) automates it: + +<Steps> +<Step> +### Connect via OAuth + +Authorize CipherStash against your Supabase organization. The integration requests read-only scopes (`projects:read`, `database:read`) — it never sees your database secrets. +</Step> +<Step> +### Pick a project and run the readiness checks + +The setup hub verifies EQL is installed (`eql_v3.version()`), checks for encrypted columns, and flags anything missing. +</Step> +<Step> +### Configure identity (optional) + +One click registers your project's Supabase Auth issuer (`https://<project-ref>.supabase.co/auth/v1`) with your workspace, enabling [identity-aware encryption](/integrations/supabase/auth). +</Step> +<Step> +### Copy your environment + +The hub emits the `CS_*` credentials block for your app's environment, ready to pair with your existing `SUPABASE_URL` and keys. +</Step> +</Steps> ## Where to next <Cards> - <Card title="Supabase tutorial" href="/integrations/supabase"> + <Card title="Quickstart" href="/integrations/supabase/quickstart"> The end-to-end walkthrough this page backs. </Card> <Card title="EQL indexes" href="/reference/eql/indexes"> Full indexing recipes and EXPLAIN verification. </Card> + <Card title="Supabase Auth" href="/integrations/supabase/auth"> + Federate the session and lock decryption to the authenticated user. + </Card> <Card title="Encrypt existing data" href="/guides/migration/encrypt-existing-data"> Adopt encryption column-by-column on a live table. </Card> diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 88102fb..045e302 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -1,9 +1,9 @@ --- title: Supabase -description: "Add searchable, application-level encryption to a Supabase project: install EQL, declare encrypted columns, and query them with the Supabase.js calls you already use." -type: tutorial +description: "Searchable, application-level encryption for your Supabase project: encrypt sensitive fields in your app before they reach Postgres, and keep them queryable with the Supabase.js calls you already use." +type: concept components: [encryption, eql, platform] -audience: [developer] +audience: [developer, ciso] integration: category: platform setup: dashboard-required @@ -13,181 +13,83 @@ verifiedAgainst: stack: "0.18.0" --- -CipherStash adds application-level encryption to your Supabase project. Sensitive fields are encrypted in your application before they reach Postgres — plaintext never touches your database, its backups, or its replication streams — and the ciphertext stays queryable through the same Supabase.js calls you already use. CipherStash never sees your data or your keys. +CipherStash adds application-level encryption to your Supabase project. Sensitive fields — names, emails, health records, anything you choose — are encrypted inside your application before they ever reach Postgres, so plaintext never touches your database, its backups, or its replication streams. CipherStash never sees your data or your keys. -This tutorial takes an empty Supabase project to an encrypted, searchable table. It takes about fifteen minutes. +Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, then declare each protected column with the encrypted type that matches the operations you need — and query it with the same `.eq()`, `.order()`, and text-search calls you use today. + +<Cards> + <Card title="Quickstart" href="/integrations/supabase/quickstart"> + Empty project to an encrypted, searchable table in about fifteen minutes. + </Card> + <Card title="Fundamentals" href="/integrations/supabase/fundamentals"> + Install and operate EQL on Supabase Postgres, and work with encrypted columns in the dashboard. + </Card> +</Cards> ## How it fits together Two pieces, one on each side of your Supabase connection: -- **[EQL](/reference/eql)** installs into your Supabase Postgres as plain SQL. It provides encrypted column types — `eql_v3.text_eq`, `eql_v3.date_ord`, `eql_v3.text_match` — where the type name declares what queries the column supports. -- **[`@cipherstash/stack`](/reference/stack)** runs in your application. Its [`encryptedSupabase` wrapper](/reference/stack/supabase) encrypts values before they're written, encrypts filter terms before they're compared, and decrypts results — around your existing supabase-js client, so Supabase Auth and Row Level Security apply unchanged. - -<Steps> -<Step> - -### Install EQL on your database - -Download the latest EQL install script and run it in the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new): - -```sh -curl -sLo cipherstash-encrypt.sql https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql -``` - -Paste and run it — it needs no superuser and completes in seconds, creating the `eql_v3` schema. Then grant your Supabase roles access to it: - -```sql -GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; -GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; -``` - -If you manage your database with `supabase migrations` instead, commit the script as your earliest migration — the [database guide](/integrations/supabase/database) covers that path and why it survives `supabase db reset`. - -</Step> -<Step> - -### Create a table with encrypted columns - -The column type declares what each column can do. Equality lookups, free-text matching, and range/ordering are different capabilities — declare only what you query: - -```sql -CREATE TABLE patients ( - id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email eql_v3.text_eq NOT NULL, -- exact lookup - name eql_v3.text_match, -- free-text match - date_of_birth eql_v3.date_ord, -- ranges and ORDER BY - plan text -- not sensitive: ordinary column -); -``` - -Which type fits which column — and what each stores — is covered by the [EQL type pages](/reference/eql/core-concepts). - -</Step> -<Step> - -### Install the SDK and connect your workspace - -```sh -npm install @cipherstash/stack @supabase/supabase-js -``` - -Sign up at [dashboard.cipherstash.com](https://dashboard.cipherstash.com), create a workspace, and set its credentials alongside your Supabase keys: - -```sh -CS_WORKSPACE_CRN=... -CS_CLIENT_ID=... -CS_CLIENT_KEY=... -CS_CLIENT_ACCESS_KEY=... -SUPABASE_URL=https://<project-ref>.supabase.co -SUPABASE_ANON_KEY=... -``` - -The CipherStash dashboard's [Supabase integration](/integrations/supabase/dashboard-experience) can generate all of this against your project via OAuth. - -</Step> -<Step> - -### Declare the encrypted schema in your app - -Mirror the table's encrypted columns, with the capability matching each column type: - -```typescript title="lib/schema.ts" -import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" - -export const patients = encryptedTable("patients", { - email: encryptedColumn("email").equality(), - name: encryptedColumn("name").freeTextSearch(), - date_of_birth: encryptedColumn("date_of_birth").dataType("date").orderAndRange(), -}) -``` - -</Step> -<Step> - -### Wrap your Supabase client - -```typescript title="lib/db.ts" -import { createClient } from "@supabase/supabase-js" -import { Encryption } from "@cipherstash/stack" -import { encryptedSupabase } from "@cipherstash/stack/supabase" -import { patients } from "./schema" - -const encryptionClient = await Encryption({ schemas: [patients] }) +- **[EQL](/reference/eql)** installs into your Supabase Postgres as plain SQL. It provides encrypted column types — the type name declares what a column can do: + - `eql_v3.text_eq` — encrypted text with equality (`=`) + - `eql_v3.text_match` — encrypted text with free-text search (token match) + - `eql_v3.int4_ord` — encrypted integers with range (`<`, `>`) and `ORDER BY` + - `eql_v3.timestamp_ord` — encrypted timestamps with range and ordering + - `eql_v3.json` — encrypted JSON with field access (`->`) and containment (`@>`) +- **[`@cipherstash/stack`](/reference/stack)** runs in your application. Its [`encryptedSupabase` wrapper](/reference/stack/supabase) encrypts values before they're written, encrypts filter terms before they're compared, and decrypts results — around your existing supabase-js client, so Supabase Auth and RLS apply unchanged. -const supabaseClient = createClient( - process.env.SUPABASE_URL!, - process.env.SUPABASE_ANON_KEY!, -) +There are encrypted types for text, integers, floats, numerics, dates, timestamps, booleans, and JSON — so your schema declares intent, queries run with no decryption at the database, and encrypted columns still **index using standard Postgres indexes** ([EQL indexes](/reference/eql/indexes)). -export const db = encryptedSupabase({ encryptionClient, supabaseClient }) -``` +## RLS is not encryption -</Step> -<Step> +Row Level Security controls *who can query* your data; CipherStash controls *whether it can be read at all*. RLS is enforced inside the database on plaintext, so its protection ends the moment that layer is bypassed — a leaked `service_role` key, an over-broad policy, a stolen backup, or direct disk access all expose data in the clear. Because CipherStash encrypts values in your app and keeps the keys outside the database, every one of those cases yields only ciphertext. -### Write and query encrypted data +> **RLS keeps the wrong user out. CipherStash keeps your data safe even when the wrong user gets in.** -```typescript -import { db } from "./lib/db" -import { patients } from "./lib/schema" +Use both: RLS to authorize access, CipherStash so a bypass never turns into a data breach. How the two compose on Supabase — including where RLS predicates can and can't reference encrypted columns — is covered in [Fundamentals → Row Level Security](/integrations/supabase/fundamentals#row-level-security). -// Insert — encrypted columns are encrypted before the request leaves your app -await db.from("patients", patients).insert({ - email: "alice@example.com", - name: "Alice Chen", - date_of_birth: "1987-04-12", - plan: "standard", -}) +## Built for the Supabase stack -// Exact lookup on an encrypted column -const { data } = await db.from("patients", patients) - .select("id, email, name") - .eq("email", "alice@example.com") +- **Native Supabase.js** — encrypt in your app, then store and query through the same client with the same `.eq()`, `.order()`, and text-search calls. See the [Quickstart](/integrations/supabase/quickstart). +- **Supabase Auth** — federate the signed-in user's session so encryption authenticates as them, and optionally lock decryption to their identity. See [Supabase Auth](/integrations/supabase/auth). +- **Edge Functions** — the SDK runs in Supabase Edge Functions via a WebAssembly build. See [Edge Functions](/integrations/supabase/edge-functions). +- **Row Level Security** — layers on top of your RLS policies rather than replacing them. +- **Your ORM or framework** — first-class support for Prisma and Drizzle, and frameworks like Next.js, alongside Supabase. See [Data layer](/integrations/supabase/orms). -// Free-text match (encrypted token containment — not SQL LIKE) -await db.from("patients", patients) - .select("id, name") - .ilike("name", "ali") +## Key management and auditing, built in -// Range + newest-first on an encrypted date -await db.from("patients", patients) - .select("id, name, date_of_birth") - .gt("date_of_birth", "1980-01-01") - .order("date_of_birth", { ascending: false }) - .limit(20) -``` +There's no key vault to run and no KMS to wire up. Every value is encrypted with its own key through CipherStash ZeroKMS, and key rotation is handled for you. Decryption events are logged, so you get an [access trail](/security/audit-logging) out of the box. Prefer to hold the root key yourself? Bring Your Own Key roots it in your own KMS. -The full method surface — filters, upserts, error shapes, identity-locked queries — is in the [`encryptedSupabase` reference](/reference/stack/supabase). +## Performance -</Step> -<Step> +Measured on the [`cipherstash/benches`](https://github.com/cipherstash/benches) suite, up to 10M rows: -### See what the database sees +- **~0.1 ms** median for exact-match lookups +- **~0.5 ms** median for encrypted range queries +- Latency stays flat as row counts scale from 10k to 10M -Open the Table Editor and look at the `patients` rows: every encrypted cell is a ciphertext payload, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees — including a leaked `service_role` key. The [dashboard experience guide](/integrations/supabase/dashboard-experience) walks through what encrypted data looks like across the Supabase dashboard. +Key operations run through ZeroKMS at **up to 14× the throughput of AWS KMS** (≈615 requests/sec peak), generating up to 10,000 data keys in a single operation — so key handling never becomes the bottleneck. -</Step> -</Steps> +## For your security team -## Production checklist +- **Audit logging** of decryption events +- **Bring Your Own Key (BYOK)** +- **FIPS compliance** and **SOC 2 compliance** +- **Zero plaintext exposure** — CipherStash never sees your data or your keys -- **Indexes** — at real row counts, add functional indexes for the capabilities you query. Two lines of SQL per column: [EQL indexes](/reference/eql/indexes). -- **RLS** — keep your Row Level Security policies; they compose. RLS controls *who can query* rows, encryption controls *whether their contents can be read at all* — a bypassed policy or leaked key yields only ciphertext. -- **Identity-locked decryption** — tie decryption to the logged-in Supabase Auth user: [Supabase Auth integration](/integrations/supabase/auth). -- **Adopt incrementally** — you can encrypt one column at a time; nothing requires a big-bang migration. See [encrypting existing data](/guides/migration/encrypt-existing-data). +There's a free developer tier, so you can add encryption from your very first migration. Encryption is far cheaper to design in than to retrofit — building it in now saves re-architecting your data layer later. -## Go deeper +## Where to next <Cards> - <Card title="Database setup" href="/integrations/supabase/database"> - Migrations vs SQL Editor, grants, indexes, and RLS interaction in detail. + <Card title="Quickstart" href="/integrations/supabase/quickstart"> + The end-to-end walkthrough: install EQL, wrap your client, query encrypted data. </Card> <Card title="Supabase Auth" href="/integrations/supabase/auth"> - Lock decryption to the authenticated user with identity-aware encryption. + Federate the Supabase session and lock decryption to the authenticated user. </Card> - <Card title="Dashboard experience" href="/integrations/supabase/dashboard-experience"> - What encrypted columns look like in the Table Editor and API settings. + <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> + Run encryption server-side in Supabase Edge Functions. </Card> <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> The complete wrapper API: every filter, response shapes, and how it works. diff --git a/content/docs/integrations/supabase/meta.json b/content/docs/integrations/supabase/meta.json index e1a7455..02d5b3e 100644 --- a/content/docs/integrations/supabase/meta.json +++ b/content/docs/integrations/supabase/meta.json @@ -1,5 +1,12 @@ { "title": "Supabase", "icon": "Supabase", - "pages": ["database", "auth", "dashboard-experience"] + "pages": [ + "index", + "quickstart", + "fundamentals", + "orms", + "auth", + "edge-functions" + ] } diff --git a/content/docs/integrations/supabase/orms.mdx b/content/docs/integrations/supabase/orms.mdx new file mode 100644 index 0000000..e6e0fe0 --- /dev/null +++ b/content/docs/integrations/supabase/orms.mdx @@ -0,0 +1,74 @@ +--- +title: Data layer +description: "Two ways to reach your Supabase data with CipherStash: the encryptedSupabase wrapper over PostgREST, or a direct Postgres connection through an ORM like Drizzle or Prisma." +type: guide +components: [encryption, eql] +audience: [developer] +--- + +There are two ways an application talks to a Supabase database, and CipherStash rides along on both. Which one you use decides where encryption plugs in — so start here before reaching for the ORM-specific guide. + +## Two paths to your data + +| | PostgREST path | Direct-connection path | +| --- | --- | --- | +| **Client** | `supabase-js` (+ `encryptedSupabase`) | Drizzle, Prisma, or raw `pg` | +| **Transport** | Supabase's REST API (PostgREST) | A Postgres connection (pooler or direct) | +| **How encryption plugs in** | The [`encryptedSupabase`](/reference/stack/supabase) wrapper encrypts/decrypts around each request | The [Stack SDK](/reference/stack) encrypts values in your app; EQL-typed columns store and search them | +| **Best for** | Supabase-native apps, Edge Functions, RLS via the user's JWT | Existing ORM codebases, migrations, complex joins | + +Both write the **same ciphertext into the same `eql_v3` columns** — the [Fundamentals](/integrations/supabase/fundamentals) database setup is identical either way. The difference is only in how your app connects and where the encrypt/decrypt step lives. You can even mix them: an `encryptedSupabase` client for app queries and Drizzle for migrations against the same tables. + +The [Quickstart](/integrations/supabase/quickstart) covers the PostgREST path end-to-end. This page covers the direct-connection path and the Supabase-specific glue it needs. + +## Using an ORM + +The ORM integrations are **database-agnostic** — Supabase is Postgres, so the encryption mechanics are the same as anywhere else. Follow the canonical guide for your ORM, then apply the Supabase connection notes below: + +<Cards> + <Card title="Drizzle" href="/integrations/drizzle"> + Encrypted column types, query operators, and EQL migrations with Drizzle. + </Card> + <Card title="Prisma" href="/integrations/prisma"> + Encrypted fields and searchable queries with Prisma. + </Card> + <Card title="Next.js" href="/integrations/nextjs"> + Where encryption runs across Server Components, Route Handlers, and Server Actions. + </Card> +</Cards> + +## Connecting to Supabase Postgres + +An ORM connects over a Postgres connection string, not the REST API. Supabase gives you two, and the choice matters for a serverless or edge deployment: + +- **Direct connection** (port `5432`) — one long-lived connection to the database. Use it for migrations and for long-running servers. Not suitable for serverless functions, which open a connection per invocation. +- **Supavisor pooler** — a connection pooler in front of Postgres: + - **Transaction mode** (port `6543`) — a pooled connection per transaction. Use this for serverless / edge / Next.js Route Handlers, where connections are short-lived and numerous. + - **Session mode** (port `5432` via the pooler) — pooled but session-scoped, for clients that need session features. + +Nothing about encryption changes the connection layer: EQL is passive SQL and the Stack SDK encrypts in your app, so use the **same connection string you'd use without CipherStash**. Point your migration tooling at the direct connection and your app at the transaction pooler, exactly as Supabase recommends. + +> **Good to know**: run EQL migrations through the direct connection (or Supabase's migrations directory), not the transaction pooler — DDL and the EQL install script want a real session. See [Fundamentals → Installing EQL](/integrations/supabase/fundamentals#installing-eql). + +## Row Level Security on the direct path + +RLS composes differently depending on which connection role you use: + +- The **`encryptedSupabase` / PostgREST path** carries the end user's JWT, so `auth.uid()` and your policies apply automatically. +- The **direct-connection path** typically authenticates as a privileged role (a pooler connection string for `postgres` or `service_role`), which **bypasses RLS**. If you rely on RLS for row scoping, either connect as the `authenticated` role with the user's JWT (setting `request.jwt.claims`), or enforce that scoping in your ORM query. + +Either way, encryption is unaffected: values are ciphertext regardless of which role reads them. RLS decides *which rows* are returned; CipherStash decides *whether their contents can be read at all* — see [Fundamentals → Row Level Security](/integrations/supabase/fundamentals#row-level-security). + +## Where to next + +<Cards> + <Card title="Quickstart" href="/integrations/supabase/quickstart"> + The PostgREST path end-to-end with encryptedSupabase. + </Card> + <Card title="Fundamentals" href="/integrations/supabase/fundamentals"> + Database setup, grants, indexes, and RLS — shared by both paths. + </Card> + <Card title="CipherStash Proxy" href="/reference/proxy"> + Encrypt at the connection layer instead of in the app — an option for some ORM setups. + </Card> +</Cards> diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx new file mode 100644 index 0000000..3af2558 --- /dev/null +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -0,0 +1,193 @@ +--- +title: Quickstart +description: "Take an empty Supabase project to an encrypted, searchable table: install EQL, declare encrypted columns, wrap your Supabase client, and query with the calls you already use." +type: tutorial +components: [encryption, eql, platform] +audience: [developer] +integration: + category: platform + setup: dashboard-required + pairsWith: [drizzle, prisma-next, clerk, nextjs] +verifiedAgainst: + eql: "3.0.0" + stack: "0.18.0" +--- + +This tutorial takes an empty Supabase project to an encrypted, searchable table. It takes about fifteen minutes. For what CipherStash is and why you'd add it, start with the [overview](/integrations/supabase). + +## How it fits together + +Two pieces, one on each side of your Supabase connection: + +- **[EQL](/reference/eql)** installs into your Supabase Postgres as plain SQL. It provides encrypted column types — `eql_v3.text_eq`, `eql_v3.date_ord`, `eql_v3.text_match` — where the type name declares what queries the column supports. +- **[`@cipherstash/stack`](/reference/stack)** runs in your application. Its [`encryptedSupabase` wrapper](/reference/stack/supabase) encrypts values before they're written, encrypts filter terms before they're compared, and decrypts results — around your existing supabase-js client, so Supabase Auth and Row Level Security apply unchanged. + +<Steps> +<Step> + +### Install EQL on your database + +Download the latest EQL install script and run it in the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new): + +```sh +curl -sLo cipherstash-encrypt.sql https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql +``` + +Paste and run it — it needs no superuser and completes in seconds, creating the `eql_v3` schema. Then grant your Supabase roles access to it: + +```sql +GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; +GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; +``` + +If you manage your database with `supabase migrations` instead, commit the script as your earliest migration — [Fundamentals](/integrations/supabase/fundamentals#installing-eql) covers that path and why it survives `supabase db reset`. + +</Step> +<Step> + +### Create a table with encrypted columns + +The column type declares what each column can do. Equality lookups, free-text matching, and range/ordering are different capabilities — declare only what you query: + +```sql +CREATE TABLE patients ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email eql_v3.text_eq NOT NULL, -- exact lookup + name eql_v3.text_match, -- free-text match + date_of_birth eql_v3.date_ord, -- ranges and ORDER BY + plan text -- not sensitive: ordinary column +); +``` + +Which type fits which column — and what each stores — is covered by the [EQL type pages](/reference/eql/core-concepts). + +</Step> +<Step> + +### Install the SDK and connect your workspace + +```sh +npm install @cipherstash/stack @supabase/supabase-js +``` + +Sign up at [dashboard.cipherstash.com](https://dashboard.cipherstash.com), create a workspace, and set its credentials alongside your Supabase keys: + +```sh +CS_WORKSPACE_CRN=... +CS_CLIENT_ID=... +CS_CLIENT_KEY=... +CS_CLIENT_ACCESS_KEY=... +SUPABASE_URL=https://<project-ref>.supabase.co +SUPABASE_ANON_KEY=... +``` + +> **Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you — it connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Fundamentals → Connecting your project](/integrations/supabase/fundamentals#connecting-your-project-to-cipherstash). + +</Step> +<Step> + +### Declare the encrypted schema in your app + +Mirror the table's encrypted columns, with the capability matching each column type: + +```typescript title="lib/schema.ts" +import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" + +export const patients = encryptedTable("patients", { + email: encryptedColumn("email").equality(), + name: encryptedColumn("name").freeTextSearch(), + date_of_birth: encryptedColumn("date_of_birth").dataType("date").orderAndRange(), +}) +``` + +</Step> +<Step> + +### Wrap your Supabase client + +```typescript title="lib/db.ts" +import { createClient } from "@supabase/supabase-js" +import { Encryption } from "@cipherstash/stack" +import { encryptedSupabase } from "@cipherstash/stack/supabase" +import { patients } from "./schema" + +const encryptionClient = await Encryption({ schemas: [patients] }) + +const supabaseClient = createClient( + process.env.SUPABASE_URL!, + process.env.SUPABASE_ANON_KEY!, +) + +export const db = encryptedSupabase({ encryptionClient, supabaseClient }) +``` + +</Step> +<Step> + +### Write and query encrypted data + +```typescript +import { db } from "./lib/db" +import { patients } from "./lib/schema" + +// Insert — encrypted columns are encrypted before the request leaves your app +await db.from("patients", patients).insert({ + email: "alice@example.com", + name: "Alice Chen", + date_of_birth: "1987-04-12", + plan: "standard", +}) + +// Exact lookup on an encrypted column +const { data } = await db.from("patients", patients) + .select("id, email, name") + .eq("email", "alice@example.com") + +// Free-text match (encrypted token containment — not SQL LIKE) +await db.from("patients", patients) + .select("id, name") + .ilike("name", "ali") + +// Range + newest-first on an encrypted date +await db.from("patients", patients) + .select("id, name, date_of_birth") + .gt("date_of_birth", "1980-01-01") + .order("date_of_birth", { ascending: false }) + .limit(20) +``` + +The full method surface — filters, upserts, error shapes, identity-locked queries — is in the [`encryptedSupabase` reference](/reference/stack/supabase). + +</Step> +<Step> + +### See what the database sees + +Open the Table Editor and look at the `patients` rows: every encrypted cell is a ciphertext payload, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees — including a leaked `service_role` key. [Fundamentals → Working in the dashboard](/integrations/supabase/fundamentals#working-in-the-dashboard) walks through what encrypted data looks like across the Supabase dashboard. + +</Step> +</Steps> + +## Production checklist + +- **Indexes** — at real row counts, add functional indexes for the capabilities you query. Two lines of SQL per column: [EQL indexes](/reference/eql/indexes). +- **RLS** — keep your Row Level Security policies; they compose. RLS controls *who can query* rows, encryption controls *whether their contents can be read at all* — a bypassed policy or leaked key yields only ciphertext. +- **Identity-locked decryption** — tie decryption to the logged-in Supabase Auth user: [Supabase Auth integration](/integrations/supabase/auth). +- **Adopt incrementally** — you can encrypt one column at a time; nothing requires a big-bang migration. See [encrypting existing data](/guides/migration/encrypt-existing-data). + +## Go deeper + +<Cards> + <Card title="Fundamentals" href="/integrations/supabase/fundamentals"> + Migrations vs SQL Editor, grants, indexes, RLS, and the dashboard experience in detail. + </Card> + <Card title="Supabase Auth" href="/integrations/supabase/auth"> + Federate the Supabase session and lock decryption to the authenticated user. + </Card> + <Card title="Data layer (ORMs)" href="/integrations/supabase/orms"> + Using Drizzle, Prisma, or a framework against Supabase with CipherStash. + </Card> + <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> + The complete wrapper API: every filter, response shapes, and how it works. + </Card> +</Cards> diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index d0a7b8a..c183c56 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -225,4 +225,4 @@ The builder is deferred: method calls record intent, and nothing executes until 4. Replays the recorded calls onto the real supabase-js builder 5. Decrypts encrypted columns in the response -Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged** — RLS decides which rows come back; encryption decides whether what's in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in the [Supabase database guide](/integrations/supabase/database). +Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged** — RLS decides which rows come back; encryption decides whether what's in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in [Supabase Fundamentals](/integrations/supabase/fundamentals). From 83540372811ef3542a260ef8064137647e2c7831 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 7 Jul 2026 13:57:11 +1000 Subject: [PATCH 099/151] docs(v2): rename Supabase index page title to Overview MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Addresses Vercel preview comment: the section folder and the index page were both labelled 'Supabase', so the sidebar read 'Supabase › Supabase'. Title the index page 'Overview' to remove the repeat. --- content/docs/integrations/supabase/index.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 045e302..14dac0a 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -1,5 +1,5 @@ --- -title: Supabase +title: Overview description: "Searchable, application-level encryption for your Supabase project: encrypt sensitive fields in your app before they reach Postgres, and keep them queryable with the Supabase.js calls you already use." type: concept components: [encryption, eql, platform] From 4574fa854e43870db4cf62d221e765ae4cccc70d Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 14:44:54 +1000 Subject: [PATCH 100/151] docs(supabase): rework "How it works" with corrected EQL type names Replace the "How it fits together" section on the Supabase overview with launch-article "How it works" copy. Fix EQL domain names against eql_v3 (int_ord -> integer_ord) and reframe text_search match as containment matching (like LIKE '%term%'), with a caveat callout. Add Table Editor screenshot. --- content/docs/integrations/supabase/index.mdx | 34 ++++++++++++------ .../supabase-table-editor-eql-columns.png | Bin 0 -> 852188 bytes 2 files changed, 24 insertions(+), 10 deletions(-) create mode 100644 public/images/integrations/supabase-table-editor-eql-columns.png diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 14dac0a..1868f58 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -26,19 +26,33 @@ Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You </Card> </Cards> -## How it fits together +## How it works -Two pieces, one on each side of your Supabase connection: +CipherStash encrypted search is built on the [Encrypted Query Language (EQL)](/reference/eql), which can be installed into any Supabase database. Like regular Postgres, EQL provides a set of common data types and functions, but is designed for working with encrypted data. -- **[EQL](/reference/eql)** installs into your Supabase Postgres as plain SQL. It provides encrypted column types — the type name declares what a column can do: - - `eql_v3.text_eq` — encrypted text with equality (`=`) - - `eql_v3.text_match` — encrypted text with free-text search (token match) - - `eql_v3.int4_ord` — encrypted integers with range (`<`, `>`) and `ORDER BY` - - `eql_v3.timestamp_ord` — encrypted timestamps with range and ordering - - `eql_v3.json` — encrypted JSON with field access (`->`) and containment (`@>`) -- **[`@cipherstash/stack`](/reference/stack)** runs in your application. Its [`encryptedSupabase` wrapper](/reference/stack/supabase) encrypts values before they're written, encrypts filter terms before they're compared, and decrypts results — around your existing supabase-js client, so Supabase Auth and RLS apply unchanged. +Use EQL base types to encrypt table columns containing dates, numbers, text, or JSON. Type modifiers let you specify how you want to query data stored in a column of that type: -There are encrypted types for text, integers, floats, numerics, dates, timestamps, booleans, and JSON — so your schema declares intent, queries run with no decryption at the database, and encrypted columns still **index using standard Postgres indexes** ([EQL indexes](/reference/eql/indexes)). +- Use `date_eq` to filter encrypted dates with `WHERE` +- Use `integer_ord` to filter and sort encrypted integers with `WHERE` and `ORDER BY` +- Use `text_search` for encrypted text search — containment matching (like `LIKE '%term%'`), `WHERE` clauses, and `ORDER BY` + +Most types also support `JOIN`, `GROUP BY`, and `UNION` queries. See the [EQL reference](/reference/eql) for a full list. + +> **Good to know**: `text_search` containment matching approximates `LIKE '%term%'` — it finds rows whose encrypted text *contains* your search term. It isn't full SQL `LIKE`: there are no wildcards or anchoring (only "contains", not a `term%` prefix or `%term` suffix), it matches substrings above a minimum length rather than arbitrarily short fragments, and it's a probabilistic filter that can occasionally return a false-positive row. Use `text_eq` (`=`) when you need exact matching. + +Add EQL columns using the Table Editor in Supabase Studio: + +![Supabase Studio Table Editor with EQL column types selected for the name, email, ssn, and medications columns](/images/integrations/supabase-table-editor-eql-columns.png) + +Or by specifying an EQL column type in SQL statements or migrations: + +```sql filename="migration.sql" +CREATE TABLE users ( + id serial, + email text_search, + dob date_ord +) +``` ## RLS is not encryption diff --git a/public/images/integrations/supabase-table-editor-eql-columns.png b/public/images/integrations/supabase-table-editor-eql-columns.png new file mode 100644 index 0000000000000000000000000000000000000000..5f50c446b65399cd2eac31966c5f4121e2171697 GIT binary patch literal 852188 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€BX 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�vN1fqy{K;edZu)TzA!Mk4) zEA`t#t-qhNAR`4h=kWao$`p+1hpaCTb7n$CFVP1-EVvexFm5Gpz$AmC8yuw~-tYKH zN44iR2&o0y=lhQkO?RImTw42~M^TsKpME&i4SYkW6b=#;G(ylhPf8xPUt{k^UX0hc zm9lJJ-2t{~@e~&;8tv~>wndXx<7A>|g5bOm4njiGa%gq1j94$~iq5P;QWvX=7~^o< zjho389XnOZ=$-jw;#w5v9L8#U>=>qez)&3s7494%6aq;Wlk5DAIhg=XAu$yAijJ4q z$M6Fg2>CeaW7u7ZdC{KyJrnJ&&hrhcl`pH>LU1mQ6>a>z9G=|Zg?Mm0<xe$~1I>%? zF(ks2iSK1-L(!Q~HV%sRYV<hf!8)9Y(f2UY2F@J24hE5TKA!d0i1Kl-?p?tB@fB;h zsN!FN4%n8lZ5Qu6B8PTSNHqjJwe^hyiv^MzX3$(bODwUz?P=teF^Jr96zVlSt9IVZ zrlfDU{9!p{MacCW7Mw35F&}mNZ?;X+MQ39F6V^vewgC%4A%0r86dDMvU}ID<8#uj8 zYGwEm?!(31CqZ|1%>dwuk4nN<VgBvcFM#s`L7^8f0*QhICgJGA{%9%lDh-etc?VIR zOCr|VSiiU{-6w220SG!2t@%(H=yTEj#(?XZ;wDI0B_Qz6&3A%J-67>uiz0RYAPXxC z)F%%oBdefW{*AMV{)jxL?BHAnQ-s5Q;hm~VABPR%bGkr->_$Q@)yLrq3=cboLvmZg zR2F)?ufD1n^0~3y5`ybimoblgANFenqLPL_tat}b*|KPLdt9Y5oNAHYFzgUk0gf#~ zEAl^9dw$xY#;j}ul&g9ea7>+1sH#8hI(hm+IWy@APhy=-yKSka!z6Fi6E-n)F_WXd zP#cE;F*EfFXSCLkaq#4;5;gX<KoUM;<@&O=*=od^7<H)hAon6Cd!Dw_afCcGf`yK~ zbyH@UiG5k%Ud7f&-lWU)fnm6|gAP7_UP>MQT_9G`KUQ=i7R85vZBb#MIC)7vWzHyi zCeGok&WY)95;KqKLU@>**hjQfuey|f@G%FpTy+a(-U#PnUqX^@M?^^oK0Z5)(NOeX zyk|*yf+M*hhXK2vIHSH}7wtArRP7X${Yym|6Cx`+k`q7ISdJ7JOK^+=Vgz=n^)$Ab zk5^}b3k<p0Zbq!#PMBHxSp9~A69odm8qMtNn;!K1(lK;|DO|`2&c=7Q2C`e5JMj7e z&Y0CV61vaC7>K(x7=VnILw1w<IN+6#qlw%X@F1dsR}*2qMxCOIOTZ349=Wrk2MAd3 z(!%=VDt*No*Vit67Wrj-W^w6t*A>d8`PW(<@9Bvm1~*nESraHV;#LEJjH=uKNc+W0 zUVX~Gc`~i{A$lfGb|K8A+0VL|t!m>a>xXZc#TGGyZJerKr>@!&^Y0s*jfWE#xyk#= z2Ls50#k|Zj(dMoyKS-bC&ZNN0Y5|J$+RT2Y^gOcZ4P|^_|8G_5;^&fukSjj<DwJT? zw9V89PHSHEmt|UDut$~*Czc8)YVEfdZ8F_Np23^a3D*<5{qQftbU;0<Di2RaQy4x1 z`{<K)j^7EMgx9MvVHJUKb!bJ-mc@JI#bXHAg|PDL_=Wra2FF%(wRCy0*N<Bdz`C}X zS=oYm4suVI3@mNtZohLw=+uw0JeP_P6zE-SSxsfmis4rvJ4eT`5`koUlLumN#KQzq zHk_ECZ7MHr%W^Ur@rddS-CE08sm9?0d^O43+;dMp2*e;QN$5kXRpbL=tdYvguoWio z$H9L|Wz{1wGl_7nlnD^71gOn^|85M!;f3D3U~OJeOx)sfz+zB9=oba=HDm_M!-Mu? zLt-y%y{&g=9Yff=D|?N)3iLOumHthQx~;!5IPNDD2d2ojlL?(QseIJ}fND>`eXfxx z8Fo6s^y=lN!O<Ah4LJXN@=s0z&DkR^sDl94?289waS>&~Ysp&W)uGsOJJ-NJL0y|R z?Jrdh&&g+Spnn?3R+Zb<j{K!MRD4$u&W} @r=8c{$=pXDBe~07~5Z8j5h)$8?vk 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%0DG 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 pHK?aaV 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⪙&& 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%0A&A@zzMLKebGD9lJM-(Zi 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 ITcfZ42i$|As{jB1 literal 0 HcmV?d00001 From 911458a973c5cb04654f9369ee4391909ce0902b Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 15:20:35 +1000 Subject: [PATCH 101/151] docs(supabase): address PR #39 review feedback - Remove em-dashes across the overview (AI "tell") - Backtick `base` in "EQL base types" - Convert the text_search note to a concise <Callout> - Collapse the RLS/stack/KMS/performance/security sections into one linked "Built for the Supabase stack" summary --- content/docs/integrations/supabase/index.mdx | 54 ++++++-------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 1868f58..474caa6 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -13,9 +13,9 @@ verifiedAgainst: stack: "0.18.0" --- -CipherStash adds application-level encryption to your Supabase project. Sensitive fields — names, emails, health records, anything you choose — are encrypted inside your application before they ever reach Postgres, so plaintext never touches your database, its backups, or its replication streams. CipherStash never sees your data or your keys. +CipherStash adds application-level encryption to your Supabase project. Sensitive fields (names, emails, health records, anything you choose) are encrypted inside your application before they ever reach Postgres, so plaintext never touches your database, its backups, or its replication streams. CipherStash never sees your data or your keys. -Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, then declare each protected column with the encrypted type that matches the operations you need — and query it with the same `.eq()`, `.order()`, and text-search calls you use today. +Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, then declare each protected column with the encrypted type that matches the operations you need, then query it with the same `.eq()`, `.order()`, and text-search calls you use today. <Cards> <Card title="Quickstart" href="/integrations/supabase/quickstart"> @@ -30,15 +30,17 @@ Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You CipherStash encrypted search is built on the [Encrypted Query Language (EQL)](/reference/eql), which can be installed into any Supabase database. Like regular Postgres, EQL provides a set of common data types and functions, but is designed for working with encrypted data. -Use EQL base types to encrypt table columns containing dates, numbers, text, or JSON. Type modifiers let you specify how you want to query data stored in a column of that type: +Use EQL `base` types to encrypt table columns containing dates, numbers, text, or JSON. Type modifiers let you specify how you want to query data stored in a column of that type: - Use `date_eq` to filter encrypted dates with `WHERE` - Use `integer_ord` to filter and sort encrypted integers with `WHERE` and `ORDER BY` -- Use `text_search` for encrypted text search — containment matching (like `LIKE '%term%'`), `WHERE` clauses, and `ORDER BY` +- Use `text_search` for encrypted text search: containment matching (like `LIKE '%term%'`), `WHERE` clauses, and `ORDER BY` Most types also support `JOIN`, `GROUP BY`, and `UNION` queries. See the [EQL reference](/reference/eql) for a full list. -> **Good to know**: `text_search` containment matching approximates `LIKE '%term%'` — it finds rows whose encrypted text *contains* your search term. It isn't full SQL `LIKE`: there are no wildcards or anchoring (only "contains", not a `term%` prefix or `%term` suffix), it matches substrings above a minimum length rather than arbitrarily short fragments, and it's a probabilistic filter that can occasionally return a false-positive row. Use `text_eq` (`=`) when you need exact matching. +<Callout type="info"> + `text_search` match is *containment* (`LIKE '%term%'`-style), not full SQL `LIKE`: there are no wildcards or anchoring, and it can occasionally return a false positive. Use `text_eq` (`=`) for exact matching. +</Callout> Add EQL columns using the Table Editor in Supabase Studio: @@ -54,44 +56,18 @@ CREATE TABLE users ( ) ``` -## RLS is not encryption - -Row Level Security controls *who can query* your data; CipherStash controls *whether it can be read at all*. RLS is enforced inside the database on plaintext, so its protection ends the moment that layer is bypassed — a leaked `service_role` key, an over-broad policy, a stolen backup, or direct disk access all expose data in the clear. Because CipherStash encrypts values in your app and keeps the keys outside the database, every one of those cases yields only ciphertext. - -> **RLS keeps the wrong user out. CipherStash keeps your data safe even when the wrong user gets in.** - -Use both: RLS to authorize access, CipherStash so a bypass never turns into a data breach. How the two compose on Supabase — including where RLS predicates can and can't reference encrypted columns — is covered in [Fundamentals → Row Level Security](/integrations/supabase/fundamentals#row-level-security). - ## Built for the Supabase stack -- **Native Supabase.js** — encrypt in your app, then store and query through the same client with the same `.eq()`, `.order()`, and text-search calls. See the [Quickstart](/integrations/supabase/quickstart). -- **Supabase Auth** — federate the signed-in user's session so encryption authenticates as them, and optionally lock decryption to their identity. See [Supabase Auth](/integrations/supabase/auth). -- **Edge Functions** — the SDK runs in Supabase Edge Functions via a WebAssembly build. See [Edge Functions](/integrations/supabase/edge-functions). -- **Row Level Security** — layers on top of your RLS policies rather than replacing them. -- **Your ORM or framework** — first-class support for Prisma and Drizzle, and frameworks like Next.js, alongside Supabase. See [Data layer](/integrations/supabase/orms). - -## Key management and auditing, built in - -There's no key vault to run and no KMS to wire up. Every value is encrypted with its own key through CipherStash ZeroKMS, and key rotation is handled for you. Decryption events are logged, so you get an [access trail](/security/audit-logging) out of the box. Prefer to hold the root key yourself? Bring Your Own Key roots it in your own KMS. - -## Performance - -Measured on the [`cipherstash/benches`](https://github.com/cipherstash/benches) suite, up to 10M rows: - -- **~0.1 ms** median for exact-match lookups -- **~0.5 ms** median for encrypted range queries -- Latency stays flat as row counts scale from 10k to 10M - -Key operations run through ZeroKMS at **up to 14× the throughput of AWS KMS** (≈615 requests/sec peak), generating up to 10,000 data keys in a single operation — so key handling never becomes the bottleneck. - -## For your security team +CipherStash layers onto the tools you already use. Each area has a page that goes deeper: -- **Audit logging** of decryption events -- **Bring Your Own Key (BYOK)** -- **FIPS compliance** and **SOC 2 compliance** -- **Zero plaintext exposure** — CipherStash never sees your data or your keys +- **[Row Level Security](/integrations/supabase/fundamentals#row-level-security):** RLS controls *who can query* your data; CipherStash controls *whether it can be read at all*. Run both, so a bypassed policy, a leaked `service_role` key, or a stolen backup yields only ciphertext. +- **[Quickstart](/integrations/supabase/quickstart):** encrypt in your app, then store and query through the same Supabase.js client with the `.eq()` and `.order()` calls you use today. +- **[Supabase Auth](/integrations/supabase/auth):** federate the signed-in session so encryption authenticates as the user, and optionally lock decryption to their identity. +- **[Edge Functions](/integrations/supabase/edge-functions):** run encryption server-side through the WebAssembly build. +- **[Data layer](/integrations/supabase/orms):** first-class support for Prisma, Drizzle, and Next.js alongside Supabase. +- **[Key management and audit logging](/security/audit-logging):** per-value keys and rotation through CipherStash ZeroKMS, a decryption access trail out of the box, and optional Bring Your Own Key. -There's a free developer tier, so you can add encryption from your very first migration. Encryption is far cheaper to design in than to retrofit — building it in now saves re-architecting your data layer later. +On the [`cipherstash/benches`](https://github.com/cipherstash/benches) suite, exact-match lookups run at roughly 0.1 ms and encrypted range queries at 0.5 ms, staying flat from 10k up to 10M rows. CipherStash never sees your data or your keys, and ships with FIPS and SOC 2 compliance. ## Where to next From 91fd7869d06d32175bf4ab48cff320e2489cc1fe Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 15:34:44 +1000 Subject: [PATCH 102/151] docs(supabase): add reusable FAQ to the overview Add a shared, product-wide FAQ component (src/components/faq) that renders an accordion and emits FAQPage JSON-LD. Generic answers (privacy, scaling, KMS, RLS-vs-encryption, free tier) live once in faq/shared and are composed with Supabase-specific questions inline on the overview. De-dupe the performance/privacy prose now covered by the FAQ. --- content/docs/integrations/supabase/index.mdx | 46 ++++++++++++- src/components/faq/index.tsx | 63 ++++++++++++++++++ src/components/faq/shared.tsx | 70 ++++++++++++++++++++ src/mdx-components.tsx | 2 + 4 files changed, 178 insertions(+), 3 deletions(-) create mode 100644 src/components/faq/index.tsx create mode 100644 src/components/faq/shared.tsx diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 474caa6..bbf1c91 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -13,6 +13,8 @@ verifiedAgainst: stack: "0.18.0" --- +import { faqPrivacy, faqScaling, faqKms, faqRlsVsEncryption, faqFreeTier } from "@/components/faq/shared"; + CipherStash adds application-level encryption to your Supabase project. Sensitive fields (names, emails, health records, anything you choose) are encrypted inside your application before they ever reach Postgres, so plaintext never touches your database, its backups, or its replication streams. CipherStash never sees your data or your keys. Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, then declare each protected column with the encrypted type that matches the operations you need, then query it with the same `.eq()`, `.order()`, and text-search calls you use today. @@ -65,9 +67,47 @@ CipherStash layers onto the tools you already use. Each area has a page that goe - **[Supabase Auth](/integrations/supabase/auth):** federate the signed-in session so encryption authenticates as the user, and optionally lock decryption to their identity. - **[Edge Functions](/integrations/supabase/edge-functions):** run encryption server-side through the WebAssembly build. - **[Data layer](/integrations/supabase/orms):** first-class support for Prisma, Drizzle, and Next.js alongside Supabase. -- **[Key management and audit logging](/security/audit-logging):** per-value keys and rotation through CipherStash ZeroKMS, a decryption access trail out of the box, and optional Bring Your Own Key. - -On the [`cipherstash/benches`](https://github.com/cipherstash/benches) suite, exact-match lookups run at roughly 0.1 ms and encrypted range queries at 0.5 ms, staying flat from 10k up to 10M rows. CipherStash never sees your data or your keys, and ships with FIPS and SOC 2 compliance. +- **[Key management and audit logging](/security/audit-logging):** per-value keys and rotation through CipherStash ZeroKMS, a decryption access trail out of the box, optional Bring Your Own Key, and FIPS and SOC 2 compliance. + +## FAQ + +<Faq + items={[ + faqPrivacy, + { + title: "Does it work with Supabase Auth and Row Level Security?", + answer: ( + <> + Yes. It integrates with Supabase Auth and runs alongside RLS. It + complements them; it does not replace them. + </> + ), + }, + faqRlsVsEncryption, + { + title: "Do I have to change how I write queries?", + answer: ( + <> + No. Query encrypted columns with the same Supabase.js calls you use + today. + </> + ), + }, + { + title: "What does migration look like?", + answer: ( + <> + Install EQL on your Supabase database, choose which columns to protect, + then set their encryption type. Encrypt values in your app before + saving them, and update columns one at a time. + </> + ), + }, + faqKms, + faqScaling, + faqFreeTier, + ]} +/> ## Where to next diff --git a/src/components/faq/index.tsx b/src/components/faq/index.tsx new file mode 100644 index 0000000..ffd9ac6 --- /dev/null +++ b/src/components/faq/index.tsx @@ -0,0 +1,63 @@ +import { Accordion, Accordions } from "fumadocs-ui/components/accordion"; +import { isValidElement, type ReactNode } from "react"; + +export type FaqEntry = { + title: string; + answer: ReactNode; +}; + +/** Flatten a ReactNode to plain text for the FAQPage JSON-LD `text` field. */ +function nodeToText(node: ReactNode): string { + if (node === null || node === undefined || typeof node === "boolean") { + return ""; + } + if (typeof node === "string" || typeof node === "number") { + return String(node); + } + if (Array.isArray(node)) { + return node.map(nodeToText).join(""); + } + if (isValidElement(node)) { + return nodeToText((node.props as { children?: ReactNode }).children); + } + return ""; +} + +/** + * Renders a list of FAQ entries as an accordion and emits FAQPage structured + * data (JSON-LD) so the questions can surface as rich results in search. + * + * Compose `items` from the shared, product-wide entries in `./shared` plus any + * integration-specific entries authored inline, keeping generic answers DRY. + */ +export function Faq({ items }: { items: FaqEntry[] }) { + const jsonLd = { + "@context": "https://schema.org", + "@type": "FAQPage", + mainEntity: items.map((item) => ({ + "@type": "Question", + name: item.title, + acceptedAnswer: { + "@type": "Answer", + text: nodeToText(item.answer).replace(/\s+/g, " ").trim(), + }, + })), + }; + + return ( + <> + <script + type="application/ld+json" + // biome-ignore lint/security/noDangerouslySetInnerHtml: JSON-LD FAQPage structured data + dangerouslySetInnerHTML={{ __html: JSON.stringify(jsonLd) }} + /> + <Accordions type="single"> + {items.map((item) => ( + <Accordion key={item.title} title={item.title}> + {item.answer} + </Accordion> + ))} + </Accordions> + </> + ); +} diff --git a/src/components/faq/shared.tsx b/src/components/faq/shared.tsx new file mode 100644 index 0000000..5d5378a --- /dev/null +++ b/src/components/faq/shared.tsx @@ -0,0 +1,70 @@ +import type { FaqEntry } from "./index"; + +/** + * Product-wide FAQ answers that are not specific to any one integration. + * Import the entries you need into an integration overview page and mix them + * with integration-specific `FaqEntry` objects authored inline. + */ + +export const faqPrivacy: FaqEntry = { + title: "Can CipherStash ever see my data, or my encryption keys?", + answer: ( + <> + No, never. Encryption and decryption occur in your application, and keys + are derived in your environment. Plaintext and keys never leave your + control and never reach CipherStash. + </> + ), +}; + +export const faqScaling: FaqEntry = { + title: "How well does it scale?", + answer: ( + <> + Latency stays flat as data grows: exact-match lookups hold at ~0.1 ms and + range queries at ~0.5 ms, from 10k to 10M rows on the{" "} + <a + href="https://github.com/cipherstash/benches" + target="_blank" + rel="noreferrer" + > + cipherstash/benches + </a>{" "} + suite. + </> + ), +}; + +export const faqKms: FaqEntry = { + title: "Do I need to run a KMS or key vault?", + answer: ( + <> + No. Key management is built in through ZeroKMS. If you want to control the + root key, Bring Your Own Key (BYOK) lets you root it in your own KMS. + </> + ), +}; + +export const faqRlsVsEncryption: FaqEntry = { + title: "I already use Row Level Security. Do I need this?", + answer: ( + <> + RLS and CipherStash do different things, and they work best together. RLS + controls which rows someone can see, but the data itself is still + unencrypted, so if RLS is bypassed (a leaked key, a wrong policy, a + compromised database) the plaintext is exposed. CipherStash encrypts the + data and stores the keys separately, so even if someone gets around RLS, + the data stays safe. Use RLS to control access, and CipherStash to keep + the data protected. + </> + ), +}; + +export const faqFreeTier: FaqEntry = { + title: "Is there a free tier?", + answer: ( + <> + Yes, a free developer tier, so you can build encryption in from day one. + </> + ), +}; diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index e8b9bd4..66ac189 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -7,6 +7,7 @@ import { BadExample } from "@/components/bad-example"; import { TrackedCodeBlock } from "@/components/code-block"; import { EqlFn } from "@/components/eql-fn"; import { EqlVersion } from "@/components/eql-version"; +import { Faq } from "@/components/faq"; import { ZeroKmsRegions } from "@/components/zerokms-regions"; /** @@ -50,6 +51,7 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents { EqlVersion, EqlFn, ZeroKmsRegions, + Faq, ...components, }; } From 45dedcd2e73277efab9d090f1dab634bf523b0e5 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 8 Jul 2026 15:39:20 +1000 Subject: [PATCH 103/151] docs(dynamodb): add reusable FAQ to the DynamoDB page Reuse the shared privacy/KMS/free-tier FAQ entries and add DynamoDB-specific questions (equality-only querying, keeping AWS SDK control, adoption). Omits the Postgres-oriented scaling/RLS entries, which do not apply. --- .../stack/cipherstash/encryption/dynamodb.mdx | 43 +++++++++++++++++++ 1 file changed, 43 insertions(+) diff --git a/content/stack/cipherstash/encryption/dynamodb.mdx b/content/stack/cipherstash/encryption/dynamodb.mdx index 76e2f44..5b672bc 100644 --- a/content/stack/cipherstash/encryption/dynamodb.mdx +++ b/content/stack/cipherstash/encryption/dynamodb.mdx @@ -3,6 +3,8 @@ title: DynamoDB description: Encrypt and decrypt DynamoDB items with the encryptedDynamoDB helper from @cipherstash/stack, including bulk operations and HMAC equality queries. --- +import { faqPrivacy, faqKms, faqFreeTier } from "@/components/faq/shared"; + CipherStash provides a DynamoDB integration through `@cipherstash/stack/dynamodb`. The `encryptedDynamoDB` helper encrypts items before writing to DynamoDB and decrypts them after reading — it does not wrap the AWS SDK, so you keep full control of your DynamoDB operations. ## Installation @@ -469,3 +471,44 @@ const queryResult = await docClient.send(new QueryCommand({ const decrypted = await dynamo.bulkDecryptModels(queryResult.Items ?? [], users) ``` + +## FAQ + +<Faq + items={[ + faqPrivacy, + { + title: "Can I query encrypted DynamoDB attributes?", + answer: ( + <> + Yes, for exact equality. Each encrypted attribute stores an{" "} + <code>__hmac</code> term you match against, so you can look up by an + encrypted partition key, sort key, or GSI. Range, comparison, and + substring queries on encrypted attributes are not supported. + </> + ), + }, + { + title: "Do I have to change how I write DynamoDB operations?", + answer: ( + <> + No. <code>encryptedDynamoDB</code> encrypts items before writing and + decrypts them after reading; it does not wrap the AWS SDK, so you keep + full control of your PutItem, GetItem, and Query calls. + </> + ), + }, + { + title: "What does adopting it look like?", + answer: ( + <> + Install <code>@cipherstash/stack</code>, define an encrypted schema for + the attributes you want to protect, initialize the client, and encrypt + values before writing them. You can adopt it one table at a time. + </> + ), + }, + faqKms, + faqFreeTier, + ]} +/> From 41a44dfda52d96504e7cf10e6ec54902dc887ce7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 23:51:09 +1000 Subject: [PATCH 104/151] docs(supabase): rework onto encryptedSupabaseV3 and the EQL 3.0.0 domains The Supabase pages documented `encryptedSupabase`, the EQL v2 dialect. Stack 1.0 ships `encryptedSupabaseV3` alongside it, and it is a different shape. Verified against the adapter source on the release branch, not against the PR descriptions, which have drifted. - `await encryptedSupabaseV3(url, key, options?)` or `(client, options?)`. It is async because it introspects the database at connect time, reads the EQL domain of every column, and derives the encryption config from it. There is no schema to declare and no `encryptedTable` to keep in sync, so `.from()` takes only a table name. - Introspection needs a direct Postgres connection: `DATABASE_URL`, or `options.databaseUrl`. Documented in the quickstart env block. - `schemas` is optional, and buys compile-time types plus startup verification. Import from `@cipherstash/stack/eql/v3`. - `select('*')` works, expanded from the introspected column list. On v2 it throws. - `.like()` / `.ilike()` throw on encrypted columns. Free-text search is `.contains()`. With the default match options the query term carries the whole query string as a token, so a substring matches nothing; called out where it will bite. - Column types are the EQL 3.0.0 prefixed domains: `public.eql_v3_text_eq`, not `eql_v3.text_eq`. The domains live in `public`; only the functions and operators live in `eql_v3`. - Supabase runs the installer as a non-superuser, so the ORE-backed domains are disabled and raise on first write. Say so on the pages that offer the choice, and point at `_ord` / `text_search`. - The query builder's `.withLockContext()` takes a `LockContext` instance, unlike the core client's, which takes a plain object. The auth page passed the wrong one. The v2 wrapper is unchanged and still documented, at the foot of the reference page. --- content/docs/integrations/supabase/auth.mdx | 36 +-- .../integrations/supabase/edge-functions.mdx | 4 +- .../integrations/supabase/fundamentals.mdx | 30 ++- content/docs/integrations/supabase/index.mdx | 2 +- content/docs/integrations/supabase/orms.mdx | 12 +- .../docs/integrations/supabase/quickstart.mdx | 92 +++---- content/docs/reference/stack/supabase.mdx | 231 ++++++++++-------- 7 files changed, 212 insertions(+), 195 deletions(-) diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index e4b79a9..7e7c272 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -5,7 +5,7 @@ type: guide components: [encryption, platform] audience: [developer] verifiedAgainst: - stack: "0.18.0" + stack: "1.0.0" auth: "0.41.0" --- @@ -32,9 +32,8 @@ Authenticate the `Encryption` client with an `OidcFederationStrategy`. It takes ```typescript title="lib/db.ts" import { createClient } from "@supabase/supabase-js" -import { Encryption, OidcFederationStrategy } from "@cipherstash/stack" -import { encryptedSupabase } from "@cipherstash/stack/supabase" -import { patients } from "./schema" +import { OidcFederationStrategy } from "@cipherstash/stack" +import { encryptedSupabaseV3 } from "@cipherstash/stack/supabase" const supabaseClient = createClient( process.env.SUPABASE_URL!, @@ -48,14 +47,11 @@ const getJwt = async () => { return session.access_token } -const encryptionClient = await Encryption({ - schemas: [patients], +export const db = await encryptedSupabaseV3(supabaseClient, { config: { authStrategy: OidcFederationStrategy.create(process.env.CS_WORKSPACE_CRN!, getJwt), }, }) - -export const db = encryptedSupabase({ encryptionClient, supabaseClient }) ``` That's the whole integration. Every `db.from(...)` query now encrypts and decrypts under the signed-in user's identity, and your Supabase Auth session and RLS policies apply to the underlying request exactly as before. @@ -70,28 +66,34 @@ Federation authenticates *as* the user. **Lock context** goes further: it bakes Lock context requires the client to be authenticated with `OidcFederationStrategy` (above). It cannot be used with `AccessKeyStrategy`, which authenticates a *service*, not a user — there is no user `sub` claim to bind to. Lock context also requires a Business or Enterprise workspace plan. </Callout> -Attach a lock context to any [`encryptedSupabase`](/reference/stack/supabase) query with `.withLockContext()`, passing the identity claim to bind: +Attach a lock context to any [`encryptedSupabaseV3`](/reference/stack/supabase) query with `.withLockContext()`. The query builder takes a `LockContext` **instance**. `sub` is the Supabase user's UUID: ```typescript +import { LockContext } from "@cipherstash/stack/identity" import { db } from "./lib/db" -import { patients } from "./lib/schema" + +const lockContext = new LockContext({ context: { identityClaim: ["sub"] } }) // Insert — the value is bound to the signed-in user's `sub` claim -await db.from("patients", patients) +await db.from("patients") .insert({ email: "alice@example.com", name: "Alice Chen" }) - .withLockContext({ identityClaim: ["sub"] }) + .withLockContext(lockContext) -// Read — the same claim must be supplied, and the same user must be authenticated -const { data } = await db.from("patients", patients) +// Read — the same user must be authenticated +const { data } = await db.from("patients") .select("id, email, name") .eq("email", "alice@example.com") - .withLockContext({ identityClaim: ["sub"] }) + .withLockContext(lockContext) ``` +<Callout type="info"> +The query builder's `.withLockContext()` takes a `LockContext` instance. The core `Encryption` client's operations take a plain object instead, as `.withLockContext({ identityClaim: ["sub"] })`. The two surfaces differ. +</Callout> + ZeroKMS resolves the claim's *value* from the token that authenticated the request — the federated Supabase identity — so no separate identify step or per-operation token is needed. Reading a locked value without a matching context, or as a different user, fails with an encryption error regardless of what RLS allows. <Callout type="info"> -Earlier releases used `new LockContext().identify(jwt)` to fetch a per-operation token. That flow is **deprecated** — per-operation CTS tokens were removed in protect-ffi 0.25. Authenticate the client with `OidcFederationStrategy` and pass the claim directly to `.withLockContext()`, as above. +Earlier releases used `new LockContext().identify(jwt)` to fetch a per-operation token. `identify()` and `getLockContext()` are **deprecated** — per-operation CTS tokens were removed in protect-ffi 0.25. The `LockContext` constructor itself is not deprecated. Authenticate the client with `OidcFederationStrategy` and pass the context straight to `.withLockContext()`, as above. </Callout> ## Where it fits @@ -122,7 +124,7 @@ The strategy's own factory and token errors follow the `@cipherstash/auth` `Resu <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> Run the federation strategy server-side in Supabase Edge Functions. </Card> - <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> + <Card title="encryptedSupabaseV3 reference" href="/reference/stack/supabase"> `.withLockContext()` and `.audit()` on the query builder. </Card> <Card title="Auth reference" href="/reference/auth"> diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx index 49ce8a2..41b3f9c 100644 --- a/content/docs/integrations/supabase/edge-functions.mdx +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -12,7 +12,7 @@ verifiedAgainst: Encryption and decryption must run somewhere your keys and credentials are safe — never in the browser. Supabase Edge Functions are that place: server-side compute next to your database. CipherStash ships a **WebAssembly build** of the SDK for exactly this runtime, so the same encrypt/decrypt code runs in Deno with no native bindings. <Callout type="info"> -**Verifying the Supabase wrapper on the edge.** The `@cipherstash/stack/wasm-inline` entry exports the core `Encryption` client (`client.encrypt` / `client.decrypt`), which this page uses. Whether the higher-level [`encryptedSupabase`](/reference/stack/supabase) wrapper is available on the edge build is being confirmed — this page will be updated with the wrapper pattern once verified. Until then, use the core client shown below inside your Edge Function. +**Verifying the Supabase wrapper on the edge.** The `@cipherstash/stack/wasm-inline` entry exports the core `Encryption` client (`client.encrypt` / `client.decrypt`), which this page uses. Whether the higher-level [`encryptedSupabaseV3`](/reference/stack/supabase) wrapper is available on the edge build is being confirmed — this page will be updated with the wrapper pattern once verified. Until then, use the core client shown below inside your Edge Function. </Callout> ## Why the wasm build @@ -119,7 +119,7 @@ const authStrategy = OidcFederationStrategy.create( Federation and identity-locked encryption — the full identity story. </Card> <Card title="Quickstart" href="/integrations/supabase/quickstart"> - The standard (Node) setup with the encryptedSupabase wrapper. + The standard (Node) setup with the encryptedSupabaseV3 wrapper. </Card> <Card title="Stack reference" href="/reference/stack"> The core Encryption client API used here. diff --git a/content/docs/integrations/supabase/fundamentals.mdx b/content/docs/integrations/supabase/fundamentals.mdx index 3209491..e7c27d7 100644 --- a/content/docs/integrations/supabase/fundamentals.mdx +++ b/content/docs/integrations/supabase/fundamentals.mdx @@ -52,22 +52,22 @@ You do **not** need to add `eql_v3` to the *Exposed schemas* list in the [API se ## Choosing column types -The column's domain type fixes what it can do, and the [Stack SDK schema](/reference/stack/supabase#declaring-the-schema) must declare the matching capability. The full type catalogue lives in the EQL reference — [numbers](/reference/eql/numbers), [dates & times](/reference/eql/dates-and-times), [text](/reference/eql/text), [JSON](/reference/eql/json), [booleans](/reference/eql/booleans) — but the shape is always the same: +The column's domain type fixes what it can do, and the wrapper reads that type straight from the database, so there is no second declaration to keep in sync. The full type catalogue lives in the EQL reference — [numbers](/reference/eql/numbers), [dates & times](/reference/eql/dates-and-times), [text](/reference/eql/text), [JSON](/reference/eql/json), [booleans](/reference/eql/booleans) — but the shape is always the same: -| You query it with | Type the column as | SDK schema capability | +| You query it with | Type the column as | EQL term | | --- | --- | --- | -| Nothing (store/decrypt only) | `eql_v3.<T>` | none | -| `.eq()` / `.in()` | `eql_v3.<T>_eq` | `.equality()` | -| Ranges, `.order()` | `eql_v3.<T>_ord` | `.orderAndRange()` | -| Free-text match | `eql_v3.text_match` | `.freeTextSearch()` | -| All three (text) | `eql_v3.text_search` | all three | -| Encrypted JSON | `eql_v3.json` | `.searchableJson()` | +| Nothing (store/decrypt only) | `public.eql_v3_<T>` | none | +| `.eq()` / `.in()` | `public.eql_v3_<T>_eq` | `hm` | +| Ranges, `.order()` | `public.eql_v3_<T>_ord` | `op` | +| Free-text match | `public.eql_v3_text_match` | `bf` | +| All three (text) | `public.eql_v3_text_search` | `hm`, `op`, `bf` | +| Encrypted JSON | `public.eql_v3_json` | `sv` | Declare only the capabilities you use: every extra capability stores extra searchable material with defined leakage — see [Searchable encryption](/concepts/searchable-encryption). ## Indexes -Encrypted columns index through **ordinary functional indexes** over EQL's term-extractor functions. This is why EQL works on Supabase unchanged: no custom operator classes (which managed platforms block), just `CREATE INDEX`, which any migration can run: +Encrypted columns index through **ordinary functional indexes** over EQL's term-extractor functions. This is why EQL works on Supabase unchanged: the default ordering term indexes under Postgres's own `bytea_ops`, so no custom operator class is needed, just `CREATE INDEX`, which any migration can run: ```sql CREATE INDEX patients_email_eq ON patients USING hash (eql_v3.eq_term(email)); @@ -78,6 +78,10 @@ ANALYZE patients; Add them once a table has real row counts (thousands, not dozens). Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes) — all of it applies to Supabase verbatim. +<Callout type="warn"> +Creating a custom operator class needs superuser, which Supabase does not grant. The EQL installer detects this and **disables the ORE-backed domains** (`_ord_ore`, `text_search_ore`), which then raise `feature_not_supported` on the first value written. Use `_ord` and `text_search`, whose CLLW OPE ordering term indexes under the default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). +</Callout> + ## Row Level Security Encrypted columns and RLS compose — they solve different problems: @@ -85,13 +89,13 @@ Encrypted columns and RLS compose — they solve different problems: - **RLS** decides *which rows* a role may query. It's enforced in the database, on whatever the database stores. - **Encryption** decides *whether a value can be read at all*. Keys stay outside the database, so anything that bypasses RLS — a leaked `service_role` key, an over-broad policy, a stolen backup, direct disk access — yields ciphertext, not plaintext. -Keep writing policies exactly as before; the `encryptedSupabase` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. +Keep writing policies exactly as before; the `encryptedSupabaseV3` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. One practical pattern: leave your row-ownership predicate on a plaintext `user_id uuid` column, and encrypt the *contents* of the row. RLS scopes the rows to `auth.uid()`; CipherStash makes their contents unreadable to everything except your app. To go one step further and make a row's contents decryptable *only* by its owner — even to your own service role — see [Supabase Auth](/integrations/supabase/auth). ## Connections and pooling -The `encryptedSupabase` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), or an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. The direct-connection path is covered in [Data layer](/integrations/supabase/orms). +The `encryptedSupabaseV3` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. It does open one direct Postgres connection at startup, over `DATABASE_URL`, to introspect your encrypted columns. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), or an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. The direct-connection path is covered in [Data layer](/integrations/supabase/orms). ## Working in the dashboard @@ -118,10 +122,10 @@ Practical consequences: Use the **SQL Editor** for schema work on encrypted columns: ```sql -ALTER TABLE patients ADD COLUMN tax_id eql_v3.text_eq; +ALTER TABLE patients ADD COLUMN tax_id public.eql_v3_text_eq; ``` -The `eql_v3` domain types are user-defined types, and the Table Editor's column-type picker doesn't reliably surface custom domains — SQL is the dependable path, and it's what your migrations should contain anyway. +The `eql_v3_*` domain types are user-defined types, and the Table Editor's column-type picker doesn't reliably surface custom domains — SQL is the dependable path, and it's what your migrations should contain anyway. ### SQL Editor diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index bbf1c91..ff70ecc 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -121,7 +121,7 @@ CipherStash layers onto the tools you already use. Each area has a page that goe <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> Run encryption server-side in Supabase Edge Functions. </Card> - <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> + <Card title="encryptedSupabaseV3 reference" href="/reference/stack/supabase"> The complete wrapper API: every filter, response shapes, and how it works. </Card> </Cards> diff --git a/content/docs/integrations/supabase/orms.mdx b/content/docs/integrations/supabase/orms.mdx index e6e0fe0..49be962 100644 --- a/content/docs/integrations/supabase/orms.mdx +++ b/content/docs/integrations/supabase/orms.mdx @@ -1,6 +1,6 @@ --- title: Data layer -description: "Two ways to reach your Supabase data with CipherStash: the encryptedSupabase wrapper over PostgREST, or a direct Postgres connection through an ORM like Drizzle or Prisma." +description: "Two ways to reach your Supabase data with CipherStash: the encryptedSupabaseV3 wrapper over PostgREST, or a direct Postgres connection through an ORM like Drizzle or Prisma." type: guide components: [encryption, eql] audience: [developer] @@ -12,12 +12,12 @@ There are two ways an application talks to a Supabase database, and CipherStash | | PostgREST path | Direct-connection path | | --- | --- | --- | -| **Client** | `supabase-js` (+ `encryptedSupabase`) | Drizzle, Prisma, or raw `pg` | +| **Client** | `supabase-js` (+ `encryptedSupabaseV3`) | Drizzle, Prisma, or raw `pg` | | **Transport** | Supabase's REST API (PostgREST) | A Postgres connection (pooler or direct) | -| **How encryption plugs in** | The [`encryptedSupabase`](/reference/stack/supabase) wrapper encrypts/decrypts around each request | The [Stack SDK](/reference/stack) encrypts values in your app; EQL-typed columns store and search them | +| **How encryption plugs in** | The [`encryptedSupabaseV3`](/reference/stack/supabase) wrapper encrypts/decrypts around each request | The [Stack SDK](/reference/stack) encrypts values in your app; EQL-typed columns store and search them | | **Best for** | Supabase-native apps, Edge Functions, RLS via the user's JWT | Existing ORM codebases, migrations, complex joins | -Both write the **same ciphertext into the same `eql_v3` columns** — the [Fundamentals](/integrations/supabase/fundamentals) database setup is identical either way. The difference is only in how your app connects and where the encrypt/decrypt step lives. You can even mix them: an `encryptedSupabase` client for app queries and Drizzle for migrations against the same tables. +Both write the **same ciphertext into the same EQL columns** — the [Fundamentals](/integrations/supabase/fundamentals) database setup is identical either way. The difference is only in how your app connects and where the encrypt/decrypt step lives. You can even mix them: an `encryptedSupabaseV3` client for app queries and Drizzle for migrations against the same tables. The [Quickstart](/integrations/supabase/quickstart) covers the PostgREST path end-to-end. This page covers the direct-connection path and the Supabase-specific glue it needs. @@ -54,7 +54,7 @@ Nothing about encryption changes the connection layer: EQL is passive SQL and th RLS composes differently depending on which connection role you use: -- The **`encryptedSupabase` / PostgREST path** carries the end user's JWT, so `auth.uid()` and your policies apply automatically. +- The **`encryptedSupabaseV3` / PostgREST path** carries the end user's JWT, so `auth.uid()` and your policies apply automatically. - The **direct-connection path** typically authenticates as a privileged role (a pooler connection string for `postgres` or `service_role`), which **bypasses RLS**. If you rely on RLS for row scoping, either connect as the `authenticated` role with the user's JWT (setting `request.jwt.claims`), or enforce that scoping in your ORM query. Either way, encryption is unaffected: values are ciphertext regardless of which role reads them. RLS decides *which rows* are returned; CipherStash decides *whether their contents can be read at all* — see [Fundamentals → Row Level Security](/integrations/supabase/fundamentals#row-level-security). @@ -63,7 +63,7 @@ Either way, encryption is unaffected: values are ciphertext regardless of which <Cards> <Card title="Quickstart" href="/integrations/supabase/quickstart"> - The PostgREST path end-to-end with encryptedSupabase. + The PostgREST path end-to-end with encryptedSupabaseV3. </Card> <Card title="Fundamentals" href="/integrations/supabase/fundamentals"> Database setup, grants, indexes, and RLS — shared by both paths. diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 3af2558..e2d8d26 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -10,7 +10,7 @@ integration: pairsWith: [drizzle, prisma-next, clerk, nextjs] verifiedAgainst: eql: "3.0.0" - stack: "0.18.0" + stack: "1.0.0" --- This tutorial takes an empty Supabase project to an encrypted, searchable table. It takes about fifteen minutes. For what CipherStash is and why you'd add it, start with the [overview](/integrations/supabase). @@ -19,47 +19,51 @@ This tutorial takes an empty Supabase project to an encrypted, searchable table. Two pieces, one on each side of your Supabase connection: -- **[EQL](/reference/eql)** installs into your Supabase Postgres as plain SQL. It provides encrypted column types — `eql_v3.text_eq`, `eql_v3.date_ord`, `eql_v3.text_match` — where the type name declares what queries the column supports. -- **[`@cipherstash/stack`](/reference/stack)** runs in your application. Its [`encryptedSupabase` wrapper](/reference/stack/supabase) encrypts values before they're written, encrypts filter terms before they're compared, and decrypts results — around your existing supabase-js client, so Supabase Auth and Row Level Security apply unchanged. +- **[EQL](/reference/eql)** installs into your Supabase Postgres as plain SQL. It provides encrypted column types, such as `public.eql_v3_text_eq` and `public.eql_v3_date_ord`, where the type name declares what queries the column supports. +- **[`@cipherstash/stack`](/reference/stack)** runs in your application. Its [`encryptedSupabaseV3` wrapper](/reference/stack/supabase) encrypts values before they're written, encrypts filter terms before they're compared, and decrypts results. It wraps your existing supabase-js client, so Supabase Auth and Row Level Security apply unchanged. <Steps> <Step> ### Install EQL on your database -Download the latest EQL install script and run it in the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new): +Download the EQL v3 install script and run it in the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new): ```sh curl -sLo cipherstash-encrypt.sql https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql ``` -Paste and run it — it needs no superuser and completes in seconds, creating the `eql_v3` schema. Then grant your Supabase roles access to it: +Paste and run it. It needs no superuser and completes in seconds, creating the `eql_v3` schema for functions and operators, and the encrypted column types in `public`. Then grant your Supabase roles access: ```sql GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; ``` -If you manage your database with `supabase migrations` instead, commit the script as your earliest migration — [Fundamentals](/integrations/supabase/fundamentals#installing-eql) covers that path and why it survives `supabase db reset`. +If you manage your database with `supabase migrations` instead, commit the script as your earliest migration. [Fundamentals](/integrations/supabase/fundamentals#installing-eql) covers that path and why it survives `supabase db reset`. </Step> <Step> ### Create a table with encrypted columns -The column type declares what each column can do. Equality lookups, free-text matching, and range/ordering are different capabilities — declare only what you query: +The column type declares what each column can do. Equality lookups, free-text matching, and range or ordering queries are different capabilities. Declare only what you query, because each capability stores an extra index term alongside the ciphertext: ```sql CREATE TABLE patients ( id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email eql_v3.text_eq NOT NULL, -- exact lookup - name eql_v3.text_match, -- free-text match - date_of_birth eql_v3.date_ord, -- ranges and ORDER BY - plan text -- not sensitive: ordinary column + email public.eql_v3_text_eq NOT NULL, -- exact lookup + name public.eql_v3_text_match, -- free-text match + date_of_birth public.eql_v3_date_ord, -- ranges and ORDER BY + plan text -- not sensitive: ordinary column ); ``` -Which type fits which column — and what each stores — is covered by the [EQL type pages](/reference/eql/core-concepts). +Which type fits which column, and what each stores, is covered by the [EQL type pages](/reference/eql/core-concepts). + +<Callout type="info"> +Supabase runs the EQL installer as a non-superuser, so the ORE-backed domains (`_ord_ore`, `text_search_ore`) are disabled on Supabase and raise if you use them. Use `_ord` and `text_search`, which order under Postgres's default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). +</Callout> </Step> <Step> @@ -70,7 +74,7 @@ Which type fits which column — and what each stores — is covered by the [EQL npm install @cipherstash/stack @supabase/supabase-js ``` -Sign up at [dashboard.cipherstash.com](https://dashboard.cipherstash.com), create a workspace, and set its credentials alongside your Supabase keys: +Sign up at [dashboard.cipherstash.com](https://dashboard.cipherstash.com), create a workspace, and set its credentials alongside your Supabase keys. `DATABASE_URL` is your project's Postgres connection string, which the wrapper uses to introspect your encrypted columns: ```sh CS_WORKSPACE_CRN=... @@ -79,46 +83,25 @@ CS_CLIENT_KEY=... CS_CLIENT_ACCESS_KEY=... SUPABASE_URL=https://<project-ref>.supabase.co SUPABASE_ANON_KEY=... +DATABASE_URL=postgresql://postgres:...@db.<project-ref>.supabase.co:5432/postgres ``` -> **Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you — it connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Fundamentals → Connecting your project](/integrations/supabase/fundamentals#connecting-your-project-to-cipherstash). - -</Step> -<Step> - -### Declare the encrypted schema in your app - -Mirror the table's encrypted columns, with the capability matching each column type: - -```typescript title="lib/schema.ts" -import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" - -export const patients = encryptedTable("patients", { - email: encryptedColumn("email").equality(), - name: encryptedColumn("name").freeTextSearch(), - date_of_birth: encryptedColumn("date_of_birth").dataType("date").orderAndRange(), -}) -``` +> **Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you. It connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Fundamentals → Connecting your project](/integrations/supabase/fundamentals#connecting-your-project-to-cipherstash). </Step> <Step> ### Wrap your Supabase client -```typescript title="lib/db.ts" -import { createClient } from "@supabase/supabase-js" -import { Encryption } from "@cipherstash/stack" -import { encryptedSupabase } from "@cipherstash/stack/supabase" -import { patients } from "./schema" +There is no schema to declare. `encryptedSupabaseV3` introspects the database over `DATABASE_URL`, finds the columns typed as EQL domains, and derives each one's encryption config from its type. -const encryptionClient = await Encryption({ schemas: [patients] }) +```typescript title="lib/db.ts" +import { encryptedSupabaseV3 } from "@cipherstash/stack/supabase" -const supabaseClient = createClient( +export const db = await encryptedSupabaseV3( process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, ) - -export const db = encryptedSupabase({ encryptionClient, supabaseClient }) ``` </Step> @@ -128,10 +111,9 @@ export const db = encryptedSupabase({ encryptionClient, supabaseClient }) ```typescript import { db } from "./lib/db" -import { patients } from "./lib/schema" // Insert — encrypted columns are encrypted before the request leaves your app -await db.from("patients", patients).insert({ +await db.from("patients").insert({ email: "alice@example.com", name: "Alice Chen", date_of_birth: "1987-04-12", @@ -139,31 +121,35 @@ await db.from("patients", patients).insert({ }) // Exact lookup on an encrypted column -const { data } = await db.from("patients", patients) +const { data } = await db + .from("patients") .select("id, email, name") .eq("email", "alice@example.com") -// Free-text match (encrypted token containment — not SQL LIKE) -await db.from("patients", patients) - .select("id, name") - .ilike("name", "ali") +// Free-text match: encrypted token containment, not SQL LIKE +await db.from("patients").select("id, name").contains("name", "Alice Chen") -// Range + newest-first on an encrypted date -await db.from("patients", patients) +// Range and newest-first on an encrypted date +await db + .from("patients") .select("id, name, date_of_birth") .gt("date_of_birth", "1980-01-01") .order("date_of_birth", { ascending: false }) .limit(20) ``` -The full method surface — filters, upserts, error shapes, identity-locked queries — is in the [`encryptedSupabase` reference](/reference/stack/supabase). +<Callout type="warn"> +`.like()` and `.ilike()` throw on encrypted columns. Free-text matching is `.contains()`, which compares encrypted token sets rather than SQL wildcards. With the default match options a substring will not match, so pass the full value. See the [wrapper reference](/reference/stack/supabase#there-is-no-like). +</Callout> + +The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabaseV3` reference](/reference/stack/supabase). </Step> <Step> ### See what the database sees -Open the Table Editor and look at the `patients` rows: every encrypted cell is a ciphertext payload, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees — including a leaked `service_role` key. [Fundamentals → Working in the dashboard](/integrations/supabase/fundamentals#working-in-the-dashboard) walks through what encrypted data looks like across the Supabase dashboard. +Open the Table Editor and look at the `patients` rows: every encrypted cell is a ciphertext payload, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees, including a leaked `service_role` key. [Fundamentals → Working in the dashboard](/integrations/supabase/fundamentals#working-in-the-dashboard) walks through what encrypted data looks like across the Supabase dashboard. </Step> </Steps> @@ -171,7 +157,7 @@ Open the Table Editor and look at the `patients` rows: every encrypted cell is a ## Production checklist - **Indexes** — at real row counts, add functional indexes for the capabilities you query. Two lines of SQL per column: [EQL indexes](/reference/eql/indexes). -- **RLS** — keep your Row Level Security policies; they compose. RLS controls *who can query* rows, encryption controls *whether their contents can be read at all* — a bypassed policy or leaked key yields only ciphertext. +- **RLS** — keep your Row Level Security policies; they compose. RLS controls *who can query* rows, encryption controls *whether their contents can be read at all*. A bypassed policy or leaked key yields only ciphertext. - **Identity-locked decryption** — tie decryption to the logged-in Supabase Auth user: [Supabase Auth integration](/integrations/supabase/auth). - **Adopt incrementally** — you can encrypt one column at a time; nothing requires a big-bang migration. See [encrypting existing data](/guides/migration/encrypt-existing-data). @@ -187,7 +173,7 @@ Open the Table Editor and look at the `patients` rows: every encrypted cell is a <Card title="Data layer (ORMs)" href="/integrations/supabase/orms"> Using Drizzle, Prisma, or a framework against Supabase with CipherStash. </Card> - <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> + <Card title="encryptedSupabaseV3 reference" href="/reference/stack/supabase"> The complete wrapper API: every filter, response shapes, and how it works. </Card> </Cards> diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index c183c56..764ff00 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -1,193 +1,214 @@ --- title: Supabase wrapper -description: "The canonical encryptedSupabase reference: one signature, the full query-builder surface, and how each filter maps to an encrypted index term." +description: "The canonical encryptedSupabaseV3 reference: connect-time introspection, the full query-builder surface, and how each filter maps to an encrypted index term." type: reference components: [encryption, eql] audience: [developer] verifiedAgainst: - stack: "0.18.0" + stack: "1.0.0" eql: "3.0.0" --- -`encryptedSupabase` wraps a `@supabase/supabase-js` client so that queries on encrypted columns work like queries on plaintext ones: mutations are encrypted before they leave your app, filter values are encrypted into the matching index term, and results are decrypted on the way back. You keep writing `.eq()`, `.gt()`, `.order()` — the wrapper handles the encryption on both sides of every call. +`encryptedSupabaseV3` wraps a `@supabase/supabase-js` client so that queries on encrypted columns work like queries on plaintext ones. Mutations are encrypted before they leave your app, filter values are encrypted into the matching index term, and results are decrypted on the way back. You keep writing `.eq()`, `.gt()`, `.order()`, and the wrapper handles the encryption on both sides of every call. This page is the single source of truth for the wrapper's API. The [Supabase integration](/integrations/supabase) shows it in context; the [EQL reference](/reference/eql) covers the database side it queries against. ## Setup -There is one signature: `encryptedSupabase` takes a config object with an encryption client and a Supabase client, and `.from()` takes the table name **and its encrypted schema**. +`encryptedSupabaseV3` **introspects your database when you call it**. It reads the column types, finds the ones typed as EQL v3 domains, and derives each column's encryption config from the domain. The database already records which columns are encrypted and what they can do, so you do not declare it a second time. -```typescript -import { createClient } from "@supabase/supabase-js" -import { Encryption } from "@cipherstash/stack" -import { encryptedSupabase } from "@cipherstash/stack/supabase" -import { encryptedTable, encryptedColumn } from "@cipherstash/stack/schema" +That makes it async, and it makes `.from()` take a table name and nothing else. -// 1. Declare which columns are encrypted, and with which capabilities -const users = encryptedTable("users", { - email: encryptedColumn("email").equality(), - name: encryptedColumn("name").freeTextSearch(), -}) +```typescript +import { encryptedSupabaseV3 } from "@cipherstash/stack/supabase" -// 2. Create the encryption client and the ordinary Supabase client -const encryptionClient = await Encryption({ schemas: [users] }) -const supabaseClient = createClient( +const supabase = await encryptedSupabaseV3( process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, ) -// 3. Wrap -const db = encryptedSupabase({ encryptionClient, supabaseClient }) - -// 4. Query — .from() takes the table name AND the schema -const { data, error } = await db - .from("users", users) - .select("id, email, name") +const { data, error } = await supabase + .from("users") + .select("id, email") .eq("email", "alice@example.com") ``` -<Callout type="warn"> -Older examples show `encryptedSupabase(url, key)` and `.from("users")` with a single argument. Neither has ever been the shipped API: the config is one object with `encryptionClient` and `supabaseClient`, and `.from(tableName, schema)` always takes the schema as its second argument — that's how the wrapper knows which columns to encrypt and decrypt. -</Callout> +Introspection needs a direct Postgres connection, which is a different credential from the Supabase URL and anon key. It reads `DATABASE_URL` from the environment, or `options.databaseUrl` if you pass it. + +```typescript +const supabase = await encryptedSupabaseV3(supabaseUrl, supabaseKey, { + databaseUrl: process.env.PG_URL, +}) +``` + +Pass an existing client instead of a URL and key when you already build one, for example to attach a Supabase Auth session: + +```typescript +const supabase = await encryptedSupabaseV3(supabaseClient, { + databaseUrl: process.env.PG_URL, +}) +``` -### `encryptedSupabase(config)` +### Options -| Config key | Type | Purpose | +| Option | Type | Purpose | | --- | --- | --- | -| `encryptionClient` | `EncryptionClient` | The client from `Encryption({ schemas: [...] })` — does all encrypt/decrypt work | -| `supabaseClient` | `SupabaseClient` | Your existing `createClient(...)` instance — auth, RLS, and connection settings all apply unchanged | +| `databaseUrl` | `string` | Postgres connection string used for introspection. Defaults to `process.env.DATABASE_URL`. | +| `config` | `ClientConfig` | Passed through to the encryption client. `eqlVersion` is forced to `3`. | +| `schemas` | `Record<string, V3Table>` | Optional declared tables. Adds compile-time types and startup verification. | -Returns an `EncryptedSupabaseInstance` with a single method: +### `.from(tableName)` -### `.from(tableName, schema)` +Returns a query builder that mirrors the supabase-js builder. Columns that are not EQL domains pass through untouched, so mixed plaintext and encrypted tables are the normal case. -`tableName` is the database table; `schema` is the `encryptedTable(...)` definition for it (the two names should match). Returns an `EncryptedQueryBuilder` that mirrors the supabase-js builder. Columns *not* declared in the schema pass through untouched — mixed plaintext/encrypted tables are the normal case. +<Callout type="warn"> +A table containing an EQL column that this SDK cannot model throws when you name it in `.from()`. The introspector identifies EQL domains by their Postgres comment, so an EQL column from a newer bundle than your SDK is detected, reported, and refused rather than silently read back as raw ciphertext. +</Callout> -## Declaring the schema +## Declaring columns in the database -Each capability you declare on a column determines the encrypted index terms its values carry, and therefore which filters work — the same capability model the database enforces through [EQL's domain variants](/reference/eql/core-concepts): +The column's domain type is the schema. Declare the capability you query on and nothing more, because each capability stores an extra index term alongside the ciphertext. -| Schema builder | Enables | Column type | EQL term | -| --- | --- | --- | --- | -| `encryptedColumn(name)` | Store and decrypt only | `eql_v3.<T>` | — | -| `.equality(tokenFilters?)` | `.eq()`, `.neq()`, `.in()` | `eql_v3.<T>_eq` | `hm` | -| `.orderAndRange()` | `.gt()`, `.gte()`, `.lt()`, `.lte()`, `.order()` | `eql_v3.<T>_ord` | `ob` | -| `.freeTextSearch(opts?)` | `.like()`, `.ilike()` — encrypted token match | `eql_v3.text_match` | `bf` | -| `.equality().orderAndRange().freeTextSearch()` | All of the above (text) | `eql_v3.text_search` | all three | -| `.searchableJson()` | Encrypted JSON documents | `eql_v3.json` | `sv` | +```sql +CREATE TABLE users ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email public.eql_v3_text_search, -- equality, ordering, free-text match + age public.eql_v3_integer_ord, -- equality, ordering + name text -- plaintext, untouched +); +``` -Use `.dataType()` for non-string columns — `"number"`, `"bigint"`, `"boolean"`, `"date"`, `"json"` (default is `"string"`). The declared capabilities must match the column's declared database type; [Schema design](/guides/development/schema-design) covers choosing them. +The capability model is the same one the database enforces through [EQL's domain variants](/reference/eql/core-concepts): + +| Domain | Enables | EQL term | +| --- | --- | --- | +| `public.eql_v3_<T>` | Store and decrypt only | none | +| `public.eql_v3_<T>_eq` | `.eq()`, `.neq()`, `.in()` | `hm` | +| `public.eql_v3_<T>_ord` | `.gt()`, `.gte()`, `.lt()`, `.lte()`, `.order()`, plus equality | `op` | +| `public.eql_v3_text_match` | `.contains()` | `bf` | +| `public.eql_v3_text_search` | All of the above, on text | `hm`, `op`, `bf` | +| `public.eql_v3_json` | Encrypted JSON documents | `sv` | + +## Optional schemas: types and startup verification + +Without `schemas`, rows are `Record<string, unknown>` and any table name is accepted. Declare a table and `.from()` returns a typed builder for it, with row types, filter-value types, and capability-narrowed methods. Declared tables are also verified against the live database before the client is handed back, so a column that was dropped or retyped fails at startup rather than at the first query. ```typescript -const patients = encryptedTable("patients", { - email: encryptedColumn("email").equality(), - name: encryptedColumn("name").freeTextSearch(), - date_of_birth: encryptedColumn("date_of_birth").dataType("date").orderAndRange(), - history: encryptedColumn("history").searchableJson(), +import { encryptedSupabaseV3 } from "@cipherstash/stack/supabase" +import { encryptedTable, types } from "@cipherstash/stack/eql/v3" + +const users = encryptedTable("users", { + email: types.TextSearch("email"), + age: types.IntegerOrd("age"), +}) + +const supabase = await encryptedSupabaseV3(supabaseUrl, supabaseKey, { + schemas: { users }, }) + +// `.gt` is offered on `age`, and rejected on `email`, at compile time +await supabase.from("users").select("id, email").gt("age", 21) ``` +Each key in `schemas` must equal its table's name. Declaring a table changes what TypeScript knows about it, never how its values are encrypted: a declared and an introspected column build byte-identically. + ## Writing data -`insert`, `update`, and `upsert` encrypt every schema-declared column before the request leaves your process. All values in a batch are encrypted in a single ZeroKMS round trip, so large inserts don't multiply key-service calls. +`insert`, `update`, and `upsert` encrypt every encrypted column before the request leaves your process. All values in a batch are encrypted in a single ZeroKMS round trip, so large inserts do not multiply key-service calls. ```typescript -await db.from("users", users).insert({ - email: "alice@example.com", // encrypted - name: "Alice Chen", // encrypted - plan: "free", // not in schema — passes through as plaintext +await supabase.from("users").insert({ + email: "alice@example.com", // encrypted + age: 30, // encrypted + name: "Alice Chen", // plaintext column, passes through }) -await db.from("users", users) - .update({ name: "Alice Nakamura" }) - .eq("email", "alice@example.com") +await supabase.from("users").update({ age: 31 }).eq("email", "alice@example.com") -await db.from("users", users).delete().eq("email", "alice@example.com") +await supabase.from("users").delete().eq("email", "alice@example.com") ``` `insert` and `upsert` accept a single row or an array. `upsert` supports `onConflict` and `ignoreDuplicates` as in supabase-js. ## Reading data -`select` takes an explicit column list. Encrypted columns in the result are decrypted before `data` is returned to you. +Encrypted columns in the result are decrypted before `data` is returned to you. `select('*')` and a no-argument `select()` both work: the wrapper expands them from the column list it introspected. ```typescript -const { data, error } = await db - .from("users", users) - .select("id, email, name") +const { data, error } = await supabase + .from("users") + .select("*") .eq("email", "alice@example.com") ``` -<Callout type="warn"> -`select('*')` throws. The wrapper needs to know which columns to cast and decrypt, so list columns explicitly. Aliases (`email as contact`) and non-encrypted columns are fine. -</Callout> - ## Filters -Every filter value on an encrypted column is encrypted client-side into the term that capability queries, then sent in place of the plaintext — the database only ever compares ciphertext. Filters on columns outside the schema pass through to supabase-js unchanged. +Every filter value on an encrypted column is encrypted client-side into the term that capability queries, then sent in place of the plaintext. The database only ever compares ciphertext. Filters on plaintext columns pass through to supabase-js unchanged. -| Method | Requires capability | What the database compares | +| Method | Requires | What the database compares | | --- | --- | --- | -| `.eq(col, value)` / `.neq(col, value)` | `.equality()` | Equality (`hm`) terms | -| `.in(col, values)` | `.equality()` | Each element encrypted as an equality term | -| `.gt()` `.gte()` `.lt()` `.lte()` | `.orderAndRange()` | ORE (`ob`) terms | -| `.like(col, pattern)` / `.ilike(col, pattern)` | `.freeTextSearch()` | Bloom-filter (`bf`) token containment | -| `.is(col, value)` | — | Passed through — SQL `NULL` is never encrypted, so `is` works on every column | -| `.match({ col: value, ... })` | per column | Each pair applied as `.eq()` | -| `.filter(col, op, value)` / `.not(col, op, value)` | per operator | Escape hatch: value is encrypted, operator string passes through | -| `.or(filters)` | per column | Encrypted-column values inside the OR string are encrypted in place | +| `.eq()` / `.neq()` | `_eq`, `_ord`, or `text_search` | Equality terms | +| `.in(col, values)` | `_eq`, `_ord`, or `text_search` | Each element encrypted separately | +| `.gt()` `.gte()` `.lt()` `.lte()` | `_ord` or `text_search` | Ordering terms | +| `.contains(col, value)` | `text_match` or `text_search` | Bloom-filter token containment | +| `.is(col, null)` | any column | Passed through. SQL `NULL` is never encrypted | +| `.match({ col: value })` | per column | Each pair applied as `.eq()` | +| `.or(filters)` | per column | Encrypted values inside the filter string are encrypted in place | +| `.not(col, op, value)` | per operator | Value is encrypted, operator passes through | +| `.filter(col, op, value)` | per operator | Escape hatch, same as `.not()` | ```typescript -// Range on an orderAndRange column -await db.from("patients", patients) - .select("id, name, date_of_birth") - .gt("date_of_birth", "1980-01-01") +// Range on an _ord column +await supabase.from("users").select("id, age").gt("age", 21) -// Combine encrypted and plaintext filters freely -await db.from("users", users) +// Encrypted and plaintext filters compose freely +await supabase + .from("users") .select("id, email") - .eq("email", "alice@example.com") // encrypted comparison - .eq("plan", "free") // ordinary supabase-js filter + .eq("email", "alice@example.com") // encrypted comparison + .eq("name", "Alice Chen") // ordinary supabase-js filter ``` -### Free-text matching is not `LIKE` +### There is no `.like()` -`.like()` and `.ilike()` on a `.freeTextSearch()` column perform **encrypted token containment**: the pattern is tokenized and encrypted into a bloom-filter query, and the database tests whether the stored value contains those (encrypted) tokens. It is a probabilistic n-gram match, not SQL pattern matching — `%` wildcards and positional anchors have no effect, and matching is case-insensitive by default (the `downcase` token filter). SQL `LIKE` itself is meaningless on ciphertext and [raises on every encrypted column](/reference/eql/text). +`.like()` and `.ilike()` **throw** on an encrypted column. SQL pattern matching is meaningless on ciphertext, and EQL's free-text search is token containment rather than wildcard matching. They still work on plaintext columns in the same table. ```typescript -// Matches rows whose name contains the tokens of "ali" -await db.from("users", users).select("id, name").ilike("name", "ali") +// ❌ throws: "like" is not supported on encrypted column "email" +await supabase.from("users").select("*").like("email", "%@example.com") + +// ✅ encrypted token containment +await supabase.from("users").select("*").contains("email", "alice@example.com") ``` -Tokenizer, filter, and filter-size options are set on `.freeTextSearch()` in the schema — they're properties of how values were encrypted, not of the query. +<Callout type="warn"> +`.contains()` on a `text_search` or `text_match` column tests whether the stored value's encrypted token set contains the query's encrypted token set. With the default match options, the query term includes the whole query string as one of its tokens, so a **substring does not match**: `contains("email", "alice")` finds nothing on a stored `alice@example.com`. Match against the full value. Matching is case-insensitive, and false positives are possible while false negatives are not. +</Callout> ## Ordering and pagination -`.order()` on an `.orderAndRange()` column sorts correctly on the encrypted ORE terms — [ordering encrypted values](/reference/eql/sorting) is exactly what that capability exists for. `.limit()`, `.range()`, `.single()`, `.maybeSingle()`, and `.csv()` behave as in supabase-js. +`.order()` on an `_ord` or `text_search` column sorts on the encrypted ordering terms, which is exactly what that capability exists for. See [ordering encrypted values](/reference/eql/sorting). `.limit()`, `.range()`, `.single()`, `.maybeSingle()`, and `.csv()` behave as in supabase-js. ```typescript -await db.from("patients", patients) - .select("id, name, date_of_birth") - .order("date_of_birth", { ascending: false }) - .limit(20) +await supabase.from("users").select("id, email, age").order("age", { ascending: false }).limit(20) ``` -Ordering a column *without* `.orderAndRange()` doesn't error — it sorts on the raw stored payload, which is meaningless. Declare the capability if you sort on it. +Ordering a column without an ordering term does not error. It sorts on the raw stored payload, which is meaningless. ## Identity and audit Two methods have no supabase-js equivalent: ```typescript -await db.from("users", users) +await supabase + .from("users") .select("id, email") .eq("email", "alice@example.com") - .withLockContext(lockContext) // decryption requires this user's identity + .withLockContext(lockContext) .audit({ metadata: { reason: "support-lookup" } }) ``` -- `.withLockContext(lockContext)` scopes every encrypt/decrypt in the query to an identity-locked context — see [Supabase Auth integration](/integrations/supabase/auth) for wiring it to Supabase Auth sessions. -- `.audit(config)` attaches metadata to the query's decryption events in the [audit log](/security/audit-logging). +`.withLockContext(lockContext)` scopes every encrypt and decrypt in the query to an identity-locked context. See the [Supabase Auth integration](/integrations/supabase/auth) for wiring it to Supabase Auth sessions. `.audit(config)` attaches metadata to the query's decryption events in the [audit log](/security/audit-logging). `.abortSignal()`, `.throwOnError()`, and `.returns<T>()` pass through as in supabase-js. @@ -209,7 +230,7 @@ type EncryptedSupabaseError = { details?: string hint?: string code?: string - encryptionError?: EncryptionError // set when encrypt/decrypt failed, not the query + encryptionError?: EncryptionError // set when encrypt/decrypt failed, not the query } ``` @@ -219,10 +240,14 @@ Check `error.encryptionError` to distinguish an encryption failure (bad workspac The builder is deferred: method calls record intent, and nothing executes until you `await`. At that point the wrapper, in order: -1. Encrypts mutation payloads (all rows, one ZeroKMS call) +1. Encrypts mutation payloads, all rows in one ZeroKMS call 2. Encrypts every filter value on an encrypted column into its index term 3. Adds `::jsonb` casts to encrypted columns in the `select` list 4. Replays the recorded calls onto the real supabase-js builder 5. Decrypts encrypted columns in the response -Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged** — RLS decides which rows come back; encryption decides whether what's in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in [Supabase Fundamentals](/integrations/supabase/fundamentals). +Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged**. RLS decides which rows come back; encryption decides whether what is in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in [Supabase fundamentals](/integrations/supabase/fundamentals). + +## The v2 wrapper + +`encryptedSupabase` is the EQL v2 dialect and is unchanged. It is synchronous, takes `{ encryptionClient, supabaseClient }`, requires `.from(tableName, schema)` with the schema as a second argument, rejects `select('*')`, and uses `.like()` / `.ilike()` for free-text search. Pick the dialect by function: v2 targets `eql_v2_encrypted` columns, v3 targets the `public.eql_v3_*` domains. New work should use `encryptedSupabaseV3`. From e360f2850833f3b55bf87ab3e01b390e8bc33128 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 9 Jul 2026 23:58:40 +1000 Subject: [PATCH 105/151] docs(supabase): state the real cause of the broken substring contains The operand is a storage payload, not a query term: PostgREST cannot cast a filter value to the narrow _query domain, and protect-ffi 0.28 rejects encryptQuery for the v3 scalars. So the needle's bloom carries the whole needle as an include_original token, which the haystack's bloom cannot contain unless the two are equal, or the needle is exactly one trigram long. Says it is a defect to be fixed in EQL rather than intended behaviour. --- content/docs/integrations/supabase/quickstart.mdx | 2 +- content/docs/reference/stack/supabase.mdx | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index e2d8d26..0fadf7a 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -139,7 +139,7 @@ await db ``` <Callout type="warn"> -`.like()` and `.ilike()` throw on encrypted columns. Free-text matching is `.contains()`, which compares encrypted token sets rather than SQL wildcards. With the default match options a substring will not match, so pass the full value. See the [wrapper reference](/reference/stack/supabase#there-is-no-like). +`.like()` and `.ilike()` throw on encrypted columns. Free-text matching is `.contains()`, which compares encrypted token sets rather than SQL wildcards. **Substring matching is currently broken**: today `.contains()` matches only the full stored value, or a three-character search string. See the [wrapper reference](/reference/stack/supabase#there-is-no-like). </Callout> The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabaseV3` reference](/reference/stack/supabase). diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 764ff00..5e8d89d 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -181,8 +181,12 @@ await supabase.from("users").select("*").like("email", "%@example.com") await supabase.from("users").select("*").contains("email", "alice@example.com") ``` +`.contains()` tests whether the stored value's bloom filter contains the query's bloom filter. Both are built from the value's trigrams plus, because `include_original` is on, the whole value as one extra token. Matching is case-insensitive, and false positives are possible while false negatives are not. + <Callout type="warn"> -`.contains()` on a `text_search` or `text_match` column tests whether the stored value's encrypted token set contains the query's encrypted token set. With the default match options, the query term includes the whole query string as one of its tokens, so a **substring does not match**: `contains("email", "alice")` finds nothing on a stored `alice@example.com`. Match against the full value. Matching is case-insensitive, and false positives are possible while false negatives are not. +**Substring matching is currently broken.** PostgREST cannot cast a filter value to EQL's narrow query domain, and `encryptQuery` does not yet support the v3 scalars, so the wrapper has to send a full *storage* payload as the operand. That payload's bloom carries the whole search string as an `include_original` token, and the stored value's bloom has no such token unless the two strings are equal. `contains("email", "alice")` therefore finds nothing on a stored `alice@example.com`. + +In practice `.contains()` matches only when the search string equals the stored value, or is exactly three characters (the trigram length), where its `include_original` token coincides with a trigram the stored value already has. The v3 Drizzle `contains` has the same defect, for the same reason. A fix belongs in EQL and protect-ffi, not in the wrapper. </Callout> ## Ordering and pagination From e807f89b9591f9285abdaaab6e2489b9dd166e1f Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 00:13:40 +1000 Subject: [PATCH 106/151] docs(supabase): separate the encryptQuery gap from the PostgREST one Drizzle and the Supabase wrapper share the defect but not the cause. The common blocker is that protect-ffi has no v3 scalar encryptQuery, so no client can build a narrow operand. Only Supabase is additionally blocked by PostgREST's inability to cast a filter value to the query domain; Drizzle emits its own SQL and can cast once a narrow term exists. --- content/docs/reference/stack/supabase.mdx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 5e8d89d..aca138a 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -186,7 +186,9 @@ await supabase.from("users").select("*").contains("email", "alice@example.com") <Callout type="warn"> **Substring matching is currently broken.** PostgREST cannot cast a filter value to EQL's narrow query domain, and `encryptQuery` does not yet support the v3 scalars, so the wrapper has to send a full *storage* payload as the operand. That payload's bloom carries the whole search string as an `include_original` token, and the stored value's bloom has no such token unless the two strings are equal. `contains("email", "alice")` therefore finds nothing on a stored `alice@example.com`. -In practice `.contains()` matches only when the search string equals the stored value, or is exactly three characters (the trigram length), where its `include_original` token coincides with a trigram the stored value already has. The v3 Drizzle `contains` has the same defect, for the same reason. A fix belongs in EQL and protect-ffi, not in the wrapper. +In practice `.contains()` matches only when the search string equals the stored value, or is exactly three characters (the trigram length), where its `include_original` token coincides with a trigram the stored value already has. + +The underlying gap is `encryptQuery`, which does not yet build query terms for the v3 scalars, so no client can produce a narrow operand today. Supabase carries a second, structural blocker: EQL defines `eql_v3.contains` against a narrow `eql_v3.query_text_search` operand, but PostgREST cannot cast a filter value to reach it. A fix belongs in protect-ffi and EQL, not in the wrapper. </Callout> ## Ordering and pagination From 5a1f834c18e275ede41da5f36e7d4337686fc977 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 00:22:23 +1000 Subject: [PATCH 107/151] docs(supabase): point the contains defect at the real cause Not a protect-ffi gap: substring containment works at the ffi layer when include_original is off, which is the schema default. stack's shared match defaults force it on, inherited from the v2 builder, where QueryMode dropped the original token. Link the tracking issue. --- content/docs/reference/stack/supabase.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index aca138a..2229a3a 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -188,7 +188,7 @@ await supabase.from("users").select("*").contains("email", "alice@example.com") In practice `.contains()` matches only when the search string equals the stored value, or is exactly three characters (the trigram length), where its `include_original` token coincides with a trigram the stored value already has. -The underlying gap is `encryptQuery`, which does not yet build query terms for the v3 scalars, so no client can produce a narrow operand today. Supabase carries a second, structural blocker: EQL defines `eql_v3.contains` against a narrow `eql_v3.query_text_search` operand, but PostgREST cannot cast a filter value to reach it. A fix belongs in protect-ffi and EQL, not in the wrapper. +The cause is that `text_search` columns always build their match index with `include_original` on, and expose no way to turn it off. The needle is tokenized as if it were a stored value, so its bloom carries the whole needle as an extra token, and the stored value's bloom has no such token. Tracked in [cipherstash/stack#610](https://github.com/cipherstash/stack/issues/610). </Callout> ## Ordering and pagination From bc3a4ec2ed84677dbc1225f83350284b075c81ef Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 00:27:12 +1000 Subject: [PATCH 108/151] docs(supabase): drop the issue link and tighten the contains callout Docs do not link GitHub issues. The callout had also accumulated two competing explanations across revisions; keep the one that is true. --- content/docs/reference/stack/supabase.mdx | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 2229a3a..0b0b259 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -184,11 +184,9 @@ await supabase.from("users").select("*").contains("email", "alice@example.com") `.contains()` tests whether the stored value's bloom filter contains the query's bloom filter. Both are built from the value's trigrams plus, because `include_original` is on, the whole value as one extra token. Matching is case-insensitive, and false positives are possible while false negatives are not. <Callout type="warn"> -**Substring matching is currently broken.** PostgREST cannot cast a filter value to EQL's narrow query domain, and `encryptQuery` does not yet support the v3 scalars, so the wrapper has to send a full *storage* payload as the operand. That payload's bloom carries the whole search string as an `include_original` token, and the stored value's bloom has no such token unless the two strings are equal. `contains("email", "alice")` therefore finds nothing on a stored `alice@example.com`. +**Substring matching is currently broken.** The search string is tokenized as though it were a stored value, so its bloom filter carries the whole search string as an extra token. The stored value's bloom has no such token, so containment fails: `contains("email", "alice")` finds nothing on a stored `alice@example.com`. -In practice `.contains()` matches only when the search string equals the stored value, or is exactly three characters (the trigram length), where its `include_original` token coincides with a trigram the stored value already has. - -The cause is that `text_search` columns always build their match index with `include_original` on, and expose no way to turn it off. The needle is tokenized as if it were a stored value, so its bloom carries the whole needle as an extra token, and the stored value's bloom has no such token. Tracked in [cipherstash/stack#610](https://github.com/cipherstash/stack/issues/610). +In practice `.contains()` matches only when the search string equals the stored value, or is exactly three characters, the trigram length. This is a defect rather than intended behaviour, and a fix is in progress. </Callout> ## Ordering and pagination From d2019d056f09dad739405bb925c3feeb94922ea6 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 00:31:45 +1000 Subject: [PATCH 109/151] docs(supabase): drop the contains defect callout, fix nav and overview link - Remove the `.contains()` substring callout from the reference page and the quickstart. Known defects belong in the issue tracker, not in the docs; the fix is imminent. - Remove the pre-publish redirect that sent /integrations/supabase to the legacy /stack/cipherstash/supabase page. It was placed on main so the future URL would resolve before v2 shipped, and its own comment says to remove it once v2 owns the URL. This branch is where v2 owns it, so the section's Overview nav item was landing on the old IA. - List Supabase first under Integrations. --- content/docs/integrations/meta.json | 2 +- content/docs/integrations/supabase/quickstart.mdx | 2 +- content/docs/reference/stack/supabase.mdx | 8 +------- next.config.mjs | 10 ---------- 4 files changed, 3 insertions(+), 19 deletions(-) diff --git a/content/docs/integrations/meta.json b/content/docs/integrations/meta.json index 13995d5..074c8ed 100644 --- a/content/docs/integrations/meta.json +++ b/content/docs/integrations/meta.json @@ -1,5 +1,5 @@ { "title": "Integrations", "icon": "Blocks", - "pages": ["..."] + "pages": ["index", "supabase", "..."] } diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 0fadf7a..ff3d730 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -139,7 +139,7 @@ await db ``` <Callout type="warn"> -`.like()` and `.ilike()` throw on encrypted columns. Free-text matching is `.contains()`, which compares encrypted token sets rather than SQL wildcards. **Substring matching is currently broken**: today `.contains()` matches only the full stored value, or a three-character search string. See the [wrapper reference](/reference/stack/supabase#there-is-no-like). +`.like()` and `.ilike()` throw on encrypted columns. Free-text matching is `.contains()`, which compares encrypted token sets rather than SQL wildcards. See the [wrapper reference](/reference/stack/supabase#there-is-no-like). </Callout> The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabaseV3` reference](/reference/stack/supabase). diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 0b0b259..a75419c 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -181,13 +181,7 @@ await supabase.from("users").select("*").like("email", "%@example.com") await supabase.from("users").select("*").contains("email", "alice@example.com") ``` -`.contains()` tests whether the stored value's bloom filter contains the query's bloom filter. Both are built from the value's trigrams plus, because `include_original` is on, the whole value as one extra token. Matching is case-insensitive, and false positives are possible while false negatives are not. - -<Callout type="warn"> -**Substring matching is currently broken.** The search string is tokenized as though it were a stored value, so its bloom filter carries the whole search string as an extra token. The stored value's bloom has no such token, so containment fails: `contains("email", "alice")` finds nothing on a stored `alice@example.com`. - -In practice `.contains()` matches only when the search string equals the stored value, or is exactly three characters, the trigram length. This is a defect rather than intended behaviour, and a fix is in progress. -</Callout> +`.contains()` tests whether the stored value's encrypted token set contains the search string's. Matching is case-insensitive, and false positives are possible while false negatives are not. ## Ordering and pagination diff --git a/next.config.mjs b/next.config.mjs index 3ffa9e2..990a7b3 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -333,16 +333,6 @@ const config = { destination: "/stack/cipherstash/kms", permanent: false, }, - // === Pre-publish placeholder for the v2 docs restructure === - // The v2 branch will host the Supabase docs at /docs/integrations/supabase, - // but that branch isn't published yet. Until it ships, temporarily (307) - // point the future URL at the current Supabase overview page so external - // links to it resolve. Remove this once v2 owns /integrations/supabase. - { - source: "/integrations/supabase", - destination: "/stack/cipherstash/supabase", - permanent: false, - }, ]; }, async rewrites() { From 7fd9400ebc2151974756a0711f2e8fa56b4bd80e Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 00:39:54 +1000 Subject: [PATCH 110/151] docs(supabase): remove the outdated Dashboard screenshot The screenshot no longer reflects the product, and there is no replacement yet. It also illustrated adding EQL columns through the Table Editor, which Fundamentals already says is unreliable: the type picker does not surface custom domains. The copy now sends readers to SQL, which is the dependable path and what a migration needs anyway. Also drops the last two "Supabase Studio" mentions. It is the Supabase Dashboard. --- content/docs/integrations/supabase/index.mdx | 12 +++++------- .../supabase-table-editor-eql-columns.png | Bin 852188 -> 0 bytes 2 files changed, 5 insertions(+), 7 deletions(-) delete mode 100644 public/images/integrations/supabase-table-editor-eql-columns.png diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index ff70ecc..76225b5 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -44,20 +44,18 @@ Most types also support `JOIN`, `GROUP BY`, and `UNION` queries. See the [EQL re `text_search` match is *containment* (`LIKE '%term%'`-style), not full SQL `LIKE`: there are no wildcards or anchoring, and it can occasionally return a false positive. Use `text_eq` (`=`) for exact matching. </Callout> -Add EQL columns using the Table Editor in Supabase Studio: - -![Supabase Studio Table Editor with EQL column types selected for the name, email, ssn, and medications columns](/images/integrations/supabase-table-editor-eql-columns.png) - -Or by specifying an EQL column type in SQL statements or migrations: +Declare EQL columns in SQL, either in the Supabase Dashboard's SQL Editor or in a migration: ```sql filename="migration.sql" CREATE TABLE users ( id serial, - email text_search, - dob date_ord + email public.eql_v3_text_search, + dob public.eql_v3_date_ord ) ``` +EQL's column types are Postgres domains, and the Dashboard's Table Editor does not reliably offer custom domains in its column-type picker, so SQL is the dependable path. It is also what your migrations should contain either way. + ## Built for the Supabase stack CipherStash layers onto the tools you already use. Each area has a page that goes deeper: diff --git a/public/images/integrations/supabase-table-editor-eql-columns.png b/public/images/integrations/supabase-table-editor-eql-columns.png deleted file mode 100644 index 5f50c446b65399cd2eac31966c5f4121e2171697..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 852188 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€BX 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�vN1fqy{K;edZu)TzA!Mk4) zEA`t#t-qhNAR`4h=kWao$`p+1hpaCTb7n$CFVP1-EVvexFm5Gpz$AmC8yuw~-tYKH zN44iR2&o0y=lhQkO?RImTw42~M^TsKpME&i4SYkW6b=#;G(ylhPf8xPUt{k^UX0hc zm9lJJ-2t{~@e~&;8tv~>wndXx<7A>|g5bOm4njiGa%gq1j94$~iq5P;QWvX=7~^o< zjho389XnOZ=$-jw;#w5v9L8#U>=>qez)&3s7494%6aq;Wlk5DAIhg=XAu$yAijJ4q z$M6Fg2>CeaW7u7ZdC{KyJrnJ&&hrhcl`pH>LU1mQ6>a>z9G=|Zg?Mm0<xe$~1I>%? zF(ks2iSK1-L(!Q~HV%sRYV<hf!8)9Y(f2UY2F@J24hE5TKA!d0i1Kl-?p?tB@fB;h zsN!FN4%n8lZ5Qu6B8PTSNHqjJwe^hyiv^MzX3$(bODwUz?P=teF^Jr96zVlSt9IVZ zrlfDU{9!p{MacCW7Mw35F&}mNZ?;X+MQ39F6V^vewgC%4A%0r86dDMvU}ID<8#uj8 zYGwEm?!(31CqZ|1%>dwuk4nN<VgBvcFM#s`L7^8f0*QhICgJGA{%9%lDh-etc?VIR zOCr|VSiiU{-6w220SG!2t@%(H=yTEj#(?XZ;wDI0B_Qz6&3A%J-67>uiz0RYAPXxC z)F%%oBdefW{*AMV{)jxL?BHAnQ-s5Q;hm~VABPR%bGkr->_$Q@)yLrq3=cboLvmZg zR2F)?ufD1n^0~3y5`ybimoblgANFenqLPL_tat}b*|KPLdt9Y5oNAHYFzgUk0gf#~ zEAl^9dw$xY#;j}ul&g9ea7>+1sH#8hI(hm+IWy@APhy=-yKSka!z6Fi6E-n)F_WXd zP#cE;F*EfFXSCLkaq#4;5;gX<KoUM;<@&O=*=od^7<H)hAon6Cd!Dw_afCcGf`yK~ zbyH@UiG5k%Ud7f&-lWU)fnm6|gAP7_UP>MQT_9G`KUQ=i7R85vZBb#MIC)7vWzHyi zCeGok&WY)95;KqKLU@>**hjQfuey|f@G%FpTy+a(-U#PnUqX^@M?^^oK0Z5)(NOeX zyk|*yf+M*hhXK2vIHSH}7wtArRP7X${Yym|6Cx`+k`q7ISdJ7JOK^+=Vgz=n^)$Ab zk5^}b3k<p0Zbq!#PMBHxSp9~A69odm8qMtNn;!K1(lK;|DO|`2&c=7Q2C`e5JMj7e z&Y0CV61vaC7>K(x7=VnILw1w<IN+6#qlw%X@F1dsR}*2qMxCOIOTZ349=Wrk2MAd3 z(!%=VDt*No*Vit67Wrj-W^w6t*A>d8`PW(<@9Bvm1~*nESraHV;#LEJjH=uKNc+W0 zUVX~Gc`~i{A$lfGb|K8A+0VL|t!m>a>xXZc#TGGyZJerKr>@!&^Y0s*jfWE#xyk#= z2Ls50#k|Zj(dMoyKS-bC&ZNN0Y5|J$+RT2Y^gOcZ4P|^_|8G_5;^&fukSjj<DwJT? zw9V89PHSHEmt|UDut$~*Czc8)YVEfdZ8F_Np23^a3D*<5{qQftbU;0<Di2RaQy4x1 z`{<K)j^7EMgx9MvVHJUKb!bJ-mc@JI#bXHAg|PDL_=Wra2FF%(wRCy0*N<Bdz`C}X zS=oYm4suVI3@mNtZohLw=+uw0JeP_P6zE-SSxsfmis4rvJ4eT`5`koUlLumN#KQzq zHk_ECZ7MHr%W^Ur@rddS-CE08sm9?0d^O43+;dMp2*e;QN$5kXRpbL=tdYvguoWio z$H9L|Wz{1wGl_7nlnD^71gOn^|85M!;f3D3U~OJeOx)sfz+zB9=oba=HDm_M!-Mu? zLt-y%y{&g=9Yff=D|?N)3iLOumHthQx~;!5IPNDD2d2ojlL?(QseIJ}fND>`eXfxx z8Fo6s^y=lN!O<Ah4LJXN@=s0z&DkR^sDl94?289waS>&~Ysp&W)uGsOJJ-NJL0y|R z?Jrdh&&g+Spnn?3R+Zb<j{K!MRD4$u&W} @r=8c{$=pXDBe~07~5Z8j5h)$8?vk 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%0DG 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 pHK?aaV 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⪙&& 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%0A&A@zzMLKebGD9lJM-(Zi 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 ITcfZ42i$|As{jB1 From 5b892577378fab30c94b82ef315fbb0a2b1e0f13 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 00:50:36 +1000 Subject: [PATCH 111/151] docs(supabase): address the preview comments - Install EQL with `npx stash eql install --eql-version 3` rather than curling the release SQL into the SQL Editor or a migration file. The CLI detects Supabase from DATABASE_URL and installs directly. - Say that v3 is direct-install only: --migration, --drizzle, --latest and --migrations-dir are all rejected alongside --eql-version 3, so a v3 install does not survive `supabase db reset`. That retires the "commit it as your earliest migration" path, which only works for v2. - Auth: promote the server-side-only warning from a blockquote to a warn callout, and lead with the rule rather than the token-refresh detail. - Edge Functions: drop the "being confirmed" callout about the wrapper. --- content/docs/integrations/supabase/auth.mdx | 6 +++- .../integrations/supabase/edge-functions.mdx | 4 --- .../integrations/supabase/fundamentals.mdx | 29 +++++++++---------- .../docs/integrations/supabase/quickstart.mdx | 10 +++---- 4 files changed, 23 insertions(+), 26 deletions(-) diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index 7e7c272..c887539 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -56,7 +56,11 @@ export const db = await encryptedSupabaseV3(supabaseClient, { That's the whole integration. Every `db.from(...)` query now encrypts and decrypts under the signed-in user's identity, and your Supabase Auth session and RLS policies apply to the underlying request exactly as before. -> **Good to know**: the federation endpoint issues no refresh token — when the CipherStash token expires, the strategy re-federates by calling `getJwt` again. Because `getJwt` reads from `supabaseClient.auth.getSession()`, supabase-js's own token refresh keeps it valid. This is also why the strategy runs **server-side only** (a Next.js Route Handler / Server Action, an Edge Function) — never in the browser, where it would expose the session token. For the Edge runtime, see [Edge Functions](/integrations/supabase/edge-functions). +<Callout type="warn"> +Run the federation strategy **server-side only**: a Next.js Route Handler or Server Action, or an Edge Function. Never in the browser, where it would expose the session token. For the Edge runtime, see [Edge Functions](/integrations/supabase/edge-functions). + +The federation endpoint issues no refresh token. When the CipherStash token expires, the strategy re-federates by calling `getJwt` again, and because `getJwt` reads from `supabaseClient.auth.getSession()`, supabase-js's own token refresh keeps it valid. +</Callout> ## Identity-bound encryption (lock context) diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx index 41b3f9c..c4e086f 100644 --- a/content/docs/integrations/supabase/edge-functions.mdx +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -11,10 +11,6 @@ verifiedAgainst: Encryption and decryption must run somewhere your keys and credentials are safe — never in the browser. Supabase Edge Functions are that place: server-side compute next to your database. CipherStash ships a **WebAssembly build** of the SDK for exactly this runtime, so the same encrypt/decrypt code runs in Deno with no native bindings. -<Callout type="info"> -**Verifying the Supabase wrapper on the edge.** The `@cipherstash/stack/wasm-inline` entry exports the core `Encryption` client (`client.encrypt` / `client.decrypt`), which this page uses. Whether the higher-level [`encryptedSupabaseV3`](/reference/stack/supabase) wrapper is available on the edge build is being confirmed — this page will be updated with the wrapper pattern once verified. Until then, use the core client shown below inside your Edge Function. -</Callout> - ## Why the wasm build Supabase Edge Functions run on Deno, which loads npm packages through the `node` compatibility layer. The SDK's default entry resolves to native NAPI bindings that don't exist in that runtime, so the edge uses a dedicated entry: `@cipherstash/stack/wasm-inline`. It embeds the WebAssembly module as base64 inside the JS bundle — no separate `.wasm` fetch, no bundler plugins, no `static_files` config. The same applies to the auth package (`@cipherstash/auth/wasm-inline`). diff --git a/content/docs/integrations/supabase/fundamentals.mdx b/content/docs/integrations/supabase/fundamentals.mdx index e7c27d7..962f55a 100644 --- a/content/docs/integrations/supabase/fundamentals.mdx +++ b/content/docs/integrations/supabase/fundamentals.mdx @@ -14,28 +14,25 @@ If you just want the fastest path from empty project to encrypted table, start w ## Installing EQL -Both paths install the same artefact — the versioned `cipherstash-encrypt.sql` from the [EQL releases page](https://github.com/cipherstash/encrypt-query-language/releases). The script is idempotent: re-running a newer version upgrades the `eql_v3` schema in place. +The `stash` CLI installs EQL. It reads `DATABASE_URL`, detects that it points at Supabase, and installs directly against the database: -### Path 1: SQL Editor (fastest) - -Paste the script into the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new) and run it. Good for a first look or a hosted-only project. - -<Callout type="warn"> -If you use the Supabase CLI locally, `supabase db reset` rebuilds your database *from your migrations directory* — anything installed directly through the SQL Editor is wiped. If you run local resets, use the migration path. -</Callout> +```bash example-id="supabase-eql-install" +npx stash eql install --eql-version 3 +``` -### Path 2: As a migration (recommended for teams) +Pass `--database-url <url>` to override the connection for a single run without writing it to disk. The install is idempotent, so `--force` reinstalls over an existing schema, and `--dry-run` shows what would happen. Check what you ended up with: -Commit the install script as your **earliest** migration, so EQL exists before any migration that references its types: +```bash +npx stash eql status +``` -```sh -curl -sLo supabase/migrations/00000000000000_install-eql.sql \ - https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql +`--eql-version` accepts `2` or `3` and **defaults to `2`**. Pass the flag until v3 becomes the default. The full flag set is in the [CLI reference](/reference/cli/eql). -supabase db push -``` +<Callout type="warn"> +EQL v3 installs **directly against the database only**. `--migration`, `--drizzle`, `--latest`, and `--migrations-dir` are rejected when combined with `--eql-version 3`; they exist for the v2 install paths. -The all-zero timestamp prefix sorts it before every real migration. From then on, EQL is part of your schema history: local resets, preview branches, and fresh environments all get it automatically. +The practical consequence is local resets. `supabase db reset` rebuilds your database from your migrations directory, so it drops a v3 install. Re-run `stash eql install` after each reset. +</Callout> ## Grants diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index ff3d730..55c14b8 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -27,20 +27,20 @@ Two pieces, one on each side of your Supabase connection: ### Install EQL on your database -Download the EQL v3 install script and run it in the [SQL Editor](https://supabase.com/dashboard/project/_/sql/new): +Point `DATABASE_URL` at your Supabase project, then install EQL with the `stash` CLI: -```sh -curl -sLo cipherstash-encrypt.sql https://github.com/cipherstash/encrypt-query-language/releases/latest/download/cipherstash-encrypt.sql +```bash cta cta-type="install" example-id="supabase-quickstart-eql-install" +npx stash eql install --eql-version 3 ``` -Paste and run it. It needs no superuser and completes in seconds, creating the `eql_v3` schema for functions and operators, and the encrypted column types in `public`. Then grant your Supabase roles access: +It detects Supabase from the connection string, needs no superuser, and completes in seconds, creating the `eql_v3` schema for functions and operators, and the encrypted column types in `public`. Then grant your Supabase roles access: ```sql GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; ``` -If you manage your database with `supabase migrations` instead, commit the script as your earliest migration. [Fundamentals](/integrations/supabase/fundamentals#installing-eql) covers that path and why it survives `supabase db reset`. +`--eql-version` defaults to `2`, so pass the flag until v3 becomes the default. [Fundamentals](/integrations/supabase/fundamentals#installing-eql) covers the rest, including why a v3 install does not survive `supabase db reset`. </Step> <Step> From f525095d502f4f5a7396567e5d4c425066ea048b Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 01:02:56 +1000 Subject: [PATCH 112/151] docs(integrations): delete the Next.js page and strip its inbound links The page was an unwritten placeholder. Removes it, the "Next.js" card on the Supabase ORMs page, its two IA.md entries, and `nextjs` from every `pairsWith` facet. Also corrects `prisma-next` to `prisma` in the Supabase facets: the page is at /integrations/prisma, so the old value named nothing. --- IA.md | 2 -- content/docs/integrations/drizzle.mdx | 2 +- content/docs/integrations/nextjs.mdx | 13 ------------- content/docs/integrations/prisma.mdx | 2 +- content/docs/integrations/supabase/index.mdx | 2 +- content/docs/integrations/supabase/orms.mdx | 3 --- content/docs/integrations/supabase/quickstart.mdx | 2 +- 7 files changed, 4 insertions(+), 22 deletions(-) delete mode 100644 content/docs/integrations/nextjs.mdx diff --git a/IA.md b/IA.md index 3986f09..73ed6ae 100644 --- a/IA.md +++ b/IA.md @@ -252,7 +252,6 @@ so it lives as facets and links, never as a tree section or a hub. | CTS | Identity service in the Platform | `platform` | `/security/cts`, `/reference/auth/*` | | `@cipherstash/auth` | Stack package (identity-aware encryption) | `[encryption, platform]` | `/reference/stack/auth` | | Proxy stack-auth | How auth works inside the Proxy | `[proxy, platform]` | `/reference/proxy/*`, `/security/proxy` | -| Next.js adapter | Framework integration | `[encryption, platform]` | `/integrations/nextjs` | | Clerk / Auth0 / Okta | Auth-provider integrations | `[platform]` | `/integrations/*` (`category: auth-provider`) | None of these is filed under an "auth" section, because there isn't one. Each is @@ -316,7 +315,6 @@ Two notes: - [ ] `/integrations/clerk` - [ ] `/integrations/auth0` — end-to-end example (Clerk parity) - [ ] `/integrations/okta` — end-to-end example (Clerk parity) -- [ ] `/integrations/nextjs` - [ ] `/integrations/typescript` — thin router to Stack SDK reference - [ ] `/integrations/serverless` — Vercel/Lambda, bundling, CS_CONFIG_PATH - [ ] `/integrations/docker` diff --git a/content/docs/integrations/drizzle.mdx b/content/docs/integrations/drizzle.mdx index ccaad4f..c06130e 100644 --- a/content/docs/integrations/drizzle.mdx +++ b/content/docs/integrations/drizzle.mdx @@ -5,7 +5,7 @@ type: tutorial integration: category: orm setup: code-only - pairsWith: [supabase, nextjs] + pairsWith: [supabase, prisma] --- This page is being built as part of the docs V2 overhaul ([CIP-3336](https://linear.app/cipherstash/issue/CIP-3336)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/integrations/nextjs.mdx b/content/docs/integrations/nextjs.mdx deleted file mode 100644 index 18ef87d..0000000 --- a/content/docs/integrations/nextjs.mdx +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: Next.js -description: "Application-level encryption in a Next.js app: where encryption runs across Server Components, Route Handlers, and Server Actions." -type: tutorial -integration: - category: framework - setup: code-only - pairsWith: [supabase, drizzle, prisma] ---- - -This page is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/integrations/prisma.mdx b/content/docs/integrations/prisma.mdx index f23a5c0..8e2119c 100644 --- a/content/docs/integrations/prisma.mdx +++ b/content/docs/integrations/prisma.mdx @@ -5,7 +5,7 @@ type: tutorial integration: category: orm setup: code-only - pairsWith: [supabase, nextjs] + pairsWith: [supabase, drizzle] --- This page is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 76225b5..bffd2b5 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -7,7 +7,7 @@ audience: [developer, ciso] integration: category: platform setup: dashboard-required - pairsWith: [drizzle, prisma-next, clerk, nextjs] + pairsWith: [drizzle, prisma, clerk] verifiedAgainst: eql: "3.0.0" stack: "0.18.0" diff --git a/content/docs/integrations/supabase/orms.mdx b/content/docs/integrations/supabase/orms.mdx index 49be962..4986999 100644 --- a/content/docs/integrations/supabase/orms.mdx +++ b/content/docs/integrations/supabase/orms.mdx @@ -32,9 +32,6 @@ The ORM integrations are **database-agnostic** — Supabase is Postgres, so the <Card title="Prisma" href="/integrations/prisma"> Encrypted fields and searchable queries with Prisma. </Card> - <Card title="Next.js" href="/integrations/nextjs"> - Where encryption runs across Server Components, Route Handlers, and Server Actions. - </Card> </Cards> ## Connecting to Supabase Postgres diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 55c14b8..75c4626 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -7,7 +7,7 @@ audience: [developer] integration: category: platform setup: dashboard-required - pairsWith: [drizzle, prisma-next, clerk, nextjs] + pairsWith: [drizzle, prisma, clerk] verifiedAgainst: eql: "3.0.0" stack: "1.0.0" From 8ef0f315117516ebeab056caede9ab9d92f632e1 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 01:24:59 +1000 Subject: [PATCH 113/151] docs(integrations): write the Drizzle and Prisma pages, and the section index Drizzle, on EQL v3. Concrete column types from `@cipherstash/stack/eql/v3/drizzle`, `extractEncryptionSchemaV3` + `EncryptionV3`, and the async capability-checked operators. Notes that `--eql-version 3` cannot emit a Drizzle migration, and that free-text search is `ops.contains` rather than `like`. Prisma, on EQL v2. The integration is `@cipherstash/prisma-next`, which targets Prisma Next rather than classic `@prisma/client`, and whose migrations create `eql_v2_encrypted` columns. Both facts are stated up front rather than left for a reader to discover. Classic Prisma users are pointed at the SDK. The index routes by how the application talks to the database, since that is what actually decides the integration. Also teaches validate-content-api about per-file exemptions: the Prisma page must name `eql_v2_encrypted` to be correct, and the v3-only rules would otherwise reject it. Verified the rule still fires elsewhere. Fixes that rule's own fix hint, which suggested the pre-3.0.0 `public.text_eq`. --- content/docs/integrations/drizzle.mdx | 172 +++++++++++++++++++++++++- content/docs/integrations/index.mdx | 64 +++++++++- content/docs/integrations/prisma.mdx | 139 ++++++++++++++++++++- scripts/validate-content-api.ts | 17 ++- 4 files changed, 381 insertions(+), 11 deletions(-) diff --git a/content/docs/integrations/drizzle.mdx b/content/docs/integrations/drizzle.mdx index c06130e..1abcbbf 100644 --- a/content/docs/integrations/drizzle.mdx +++ b/content/docs/integrations/drizzle.mdx @@ -1,13 +1,179 @@ --- title: Drizzle -description: "Encrypted columns with Drizzle ORM." +description: "Encrypted columns with Drizzle ORM: pick a concrete EQL column type, and capability-checked operators encrypt your query operands for you." type: tutorial +components: [encryption, eql] +audience: [developer] integration: category: orm setup: code-only pairsWith: [supabase, prisma] +verifiedAgainst: + stack: "1.0.0" + eql: "3.0.0" --- -This page is being built as part of the docs V2 overhaul ([CIP-3336](https://linear.app/cipherstash/issue/CIP-3336)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +Drizzle keeps its shape. You declare each encrypted column with a concrete EQL type, and a set of query operators encrypt their operands before Drizzle builds the SQL. Your `select`, `where`, and `orderBy` read as they always did, and the database only ever compares ciphertext. -Until it lands, the current version lives in the [existing docs](/stack/cipherstash/encryption/drizzle). +## Install + +```bash cta cta-type="install" example-id="install-drizzle" +npm install @cipherstash/stack drizzle-orm +``` + +Then install EQL into your database: + +```bash +npx stash eql install --eql-version 3 +``` + +<Callout type="warn"> +`--eql-version 3` installs directly against the database and cannot generate a Drizzle migration: `--drizzle` is rejected alongside it. EQL is therefore not part of your migration history, so a database rebuilt from migrations will not have it. Re-run the install after a rebuild. +</Callout> + +## Declare the table + +The column type *is* the capability. There are no flags to configure. `TextEq` answers equality and nothing else, `IntegerOrd` answers ranges and ordering, `TextMatch` answers free-text containment, and a bare `Text` or `Bigint` is storage-only. + +```typescript filename="src/schema.ts" +import { pgTable, integer } from "drizzle-orm/pg-core" +import { types } from "@cipherstash/stack/eql/v3/drizzle" + +export const users = pgTable("users", { + id: integer("id").primaryKey().generatedAlwaysAsIdentity(), + email: types.TextEq("email"), // equality + age: types.IntegerOrd("age"), // ranges, ordering, and equality + bio: types.TextMatch("bio"), // free-text containment + balance: types.Bigint("balance"), // storage only +}) +``` + +Each factory maps to the matching EQL domain, so `types.TextEq("email")` types the column as `public.eql_v3_text_eq`. The variant model behind those names is in [core concepts](/reference/eql/core-concepts). + +| Factory | Capability | EQL domain | +| --- | --- | --- | +| `types.Text(name)` | Store and decrypt only | `public.eql_v3_text` | +| `types.TextEq(name)` | `eq`, `ne`, `inArray`, `notInArray` | `public.eql_v3_text_eq` | +| `types.TextOrd(name)` | Ranges, ordering, plus equality | `public.eql_v3_text_ord` | +| `types.TextMatch(name)` | `contains` | `public.eql_v3_text_match` | +| `types.TextSearch(name)` | All of the above, on text | `public.eql_v3_text_search` | +| `types.IntegerOrd(name)` | Ranges, ordering, plus equality | `public.eql_v3_integer_ord` | + +The same bare / `Eq` / `Ord` pattern exists for `Smallint`, `Bigint`, `Real`, `Double`, `Numeric`, `Date`, and `Timestamp`. `Boolean` is storage-only by design, because a two-value column has too little cardinality for any searchable index to be safe. + +Declare only the capability you query on. Each one stores an extra index term alongside the ciphertext, with a bounded, published leakage profile: see [searchable encryption](/concepts/searchable-encryption). + +## Wire up the client + +Derive the encryption schema from the Drizzle table, build a typed client, and create the operators: + +```typescript filename="src/db.ts" +import { drizzle } from "drizzle-orm/postgres-js" +import { + createEncryptionOperatorsV3, + extractEncryptionSchemaV3, +} from "@cipherstash/stack/eql/v3/drizzle" +import { EncryptionV3 } from "@cipherstash/stack/v3" +import { users } from "./schema" + +export const usersSchema = extractEncryptionSchemaV3(users) + +export const client = await EncryptionV3({ schemas: [usersSchema] }) +export const ops = createEncryptionOperatorsV3(client) + +export const db = drizzle({ client: sqlClient }) +``` + +`extractEncryptionSchemaV3` reads the encryption config straight off the column types, so there is no second schema to keep in sync with the first. + +## Query + +Every where-clause operator is **async**, because it encrypts its operand before Drizzle sees it. `await` each one. `ops.asc` and `ops.desc` are synchronous. + +```typescript filename="src/queries.ts" +import { db, ops } from "./db" +import { users } from "./schema" + +// Equality — email is TextEq +const exact = await db.select().from(users) + .where(await ops.eq(users.email, "alice@example.com")) + +// Ranges and ordering — age is IntegerOrd +const adults = await db.select().from(users) + .where(await ops.gte(users.age, 18)) + .orderBy(ops.asc(users.age)) + +const midBand = await db.select().from(users) + .where(await ops.between(users.age, 25, 40)) + +// Set membership, built on equality +const listed = await db.select().from(users) + .where(await ops.inArray(users.email, ["alice@example.com", "bob@example.com"])) + +// Free-text token containment — bio is TextMatch +const coffee = await db.select().from(users) + .where(await ops.contains(users.bio, "coffee")) +``` + +The full operator set is `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `between`, `notBetween`, `inArray`, `notInArray`, `contains`, `exists`, `notExists`, `and`, `or`, `not`, `isNull`, `isNotNull`, `asc`, and `desc`. Null checks need no encryption, because a SQL `NULL` is never encrypted. + +Applying an operator the column's type cannot answer throws `EncryptionOperatorError` rather than silently returning wrong rows. Ordering a `TextEq` column, for instance, has no ordering term to compare. + +<Callout type="warn"> +There is no `like` or `ilike`. SQL pattern matching is meaningless on ciphertext, so free-text search is `ops.contains`, which compares encrypted token sets. It matches whole indexed tokens rather than arbitrary substrings. +</Callout> + +## Insert and read + +Rows are encrypted **before** they reach Drizzle, so Drizzle never sees plaintext. Encrypt a batch in one call, which is also one ZeroKMS round trip: + +```typescript filename="src/insert.ts" +import { client, db, usersSchema } from "./db" +import { users } from "./schema" + +const rows = await client.bulkEncryptModels( + [ + { email: "alice@example.com", age: 30, bio: "climbing and coffee", balance: 100_000n }, + { email: "bob@example.com", age: 41, bio: "cycling and coffee", balance: 250_000n }, + ], + usersSchema, +) + +if (rows.failure) { + throw new Error(rows.failure.message) +} + +await db.insert(users).values(rows.data) +``` + +`Bigint` columns take a native JS `bigint`. Decrypt what comes back with `client.bulkDecryptModels(rows)`, which is likewise one round trip for the batch. + +## Indexes + +At real row counts, add a functional index for each capability you query. The encrypted operators inline into these extractor functions, so an ordinary `CREATE INDEX` is all it takes: + +```sql filename="indexes.sql" +CREATE INDEX users_email_eq ON users USING hash (eql_v3.eq_term(email)); +CREATE INDEX users_age_ord ON users USING btree (eql_v3.ord_term(age)); +CREATE INDEX users_bio_match ON users USING gin (eql_v3.match_term(bio)); +ANALYZE users; +``` + +Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes). + +## Where to next + +<Cards> + <Card title="Supabase" href="/integrations/supabase"> + Drizzle over a Supabase Postgres connection. + </Card> + <Card title="EQL core concepts" href="/reference/eql/core-concepts"> + The variant model behind each column type. + </Card> + <Card title="Searchable encryption" href="/concepts/searchable-encryption"> + What each capability reveals, and how to choose. + </Card> + <Card title="EQL indexes" href="/reference/eql/indexes"> + The functional-index recipes behind every query on this page. + </Card> +</Cards> diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index 6148388..b03e0b5 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -1,9 +1,65 @@ --- title: Integrations -description: "Set up CipherStash with your platform, ORM, framework, auth provider, and runtime." -type: tutorial +description: "Set up CipherStash with your Postgres platform, your ORM, and your identity provider." +type: concept +components: [encryption, eql, platform] +audience: [developer] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash encrypts fields in your application and keeps them queryable in Postgres. Which integration you reach for depends on how your application talks to the database, not on what you are encrypting. -Until it lands, current documentation lives in the [existing docs](/stack). +Everything here writes the same ciphertext into the same [EQL](/reference/eql) columns, so these are not one-way doors. You can move a table from one path to another without re-encrypting it, and mix them in one codebase: an ORM for application queries, raw SQL for migrations. + +## Where your data lives + +<Cards> + <Card title="Supabase" href="/integrations/supabase"> + Wrap the Supabase client so `.eq()`, `.gt()`, and `.order()` keep working on encrypted columns. Row Level Security and Supabase Auth apply unchanged. + </Card> + <Card title="Any other Postgres" href="/get-started/quickstart"> + Neon, RDS, Aurora, Cloud SQL, or a container. EQL installs into any Postgres you can connect to, with no extension and no superuser. + </Card> +</Cards> + +## How you query it + +<Cards> + <Card title="Drizzle" href="/integrations/drizzle"> + Concrete encrypted column types and capability-checked operators. Targets EQL v3. + </Card> + <Card title="Prisma" href="/integrations/prisma"> + Encrypted columns declared in `schema.prisma`, for Prisma Next. Targets EQL v2. + </Card> + <Card title="Raw SQL" href="/get-started/quickstart"> + Encrypt the value, insert it, cast the query operand. The SDK's whole surface is `encrypt` and `encryptQuery`. + </Card> + <Card title="An ORM we don't list" href="/reference/stack"> + Encrypt before a write, decrypt after a read. Every ORM supports that, and nothing is missing. + </Card> +</Cards> + +<Callout type="info"> +Not using Postgres? The SDK still encrypts values that never touch a database, and non-Postgres stores like [DynamoDB](/stack/cipherstash/encryption/dynamodb), with no EQL involved. EQL is the Postgres surface, not the encryption itself. +</Callout> + +## Who is allowed to decrypt + +Reach for identity binding when a value should be decryptable only by the user it belongs to, rather than by anything holding the application's credentials. It needs an OIDC provider, registered once in the [Dashboard](https://dashboard.cipherstash.com/workspaces/_/oidc-providers). + +| Provider | Supported | +| --- | --- | +| Supabase Auth | Yes. See [Supabase Auth](/integrations/supabase/auth) | +| Clerk | Yes | +| Auth0 | Yes | +| Okta | Yes | +| Any OIDC issuer | Yes, if it publishes a discovery endpoint | + +See [provable access control](/solutions/provable-access) for what this buys you, and what it does not. + +## You cannot change the application + +[CipherStash Proxy](/reference/proxy) sits in front of Postgres and speaks EQL for you. Point your connection string at it. Because it speaks the Postgres wire protocol, the language your application is written in stops mattering. + +## Still deciding + +[Choose your stack](/get-started/choose-your-stack) walks the four decisions in order: SDK or Proxy, your Postgres, your ORM, and your identity provider. diff --git a/content/docs/integrations/prisma.mdx b/content/docs/integrations/prisma.mdx index 8e2119c..318f70b 100644 --- a/content/docs/integrations/prisma.mdx +++ b/content/docs/integrations/prisma.mdx @@ -1,13 +1,146 @@ --- title: Prisma -description: "Encrypted columns with Prisma ORM." +description: "Encrypted columns with Prisma Next: declare them in schema.prisma, and the migration system installs EQL for you." type: tutorial +components: [encryption, eql] +audience: [developer] integration: category: orm setup: code-only pairsWith: [supabase, drizzle] +verifiedAgainst: + prismaNext: "0.3.2" + eql: "2" --- -This page is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +`@cipherstash/prisma-next` adds searchable, field-level encryption to [Prisma Next](https://www.npmjs.com/package/prisma-next). You declare encrypted columns in `schema.prisma`, and the framework's migration system installs the EQL bundle in the same sweep that creates your tables. There is no separate "install EQL" step. -Until it lands, the current version lives in the [existing docs](/stack/cipherstash/encryption/prisma-next). +<Callout type="warn"> +This integration targets **Prisma Next**, not the classic `@prisma/client` ORM. If you are on classic Prisma, there is no extension: use the [Stack SDK](/reference/stack) directly, encrypting before a write and decrypting after a read. Every ORM supports that. + +It also targets **EQL v2**, while the rest of these docs target [EQL v3](/reference/eql). Encrypted columns are `eql_v2_encrypted`, and free-text search is `cipherstashIlike` rather than v3's token containment. +</Callout> + +## Install + +```bash cta cta-type="install" example-id="install-prisma-next" +npm install @cipherstash/stack @cipherstash/prisma-next +``` + +## Declare encrypted columns + +Six column types cover the encryptable surface: string, double, bigint, date, boolean, and JSON. + +```prisma filename="prisma/schema.prisma" +model User { + id String @id + email cipherstash.EncryptedString() + salary cipherstash.EncryptedDouble() + birthday cipherstash.EncryptedDate() + preferences cipherstash.EncryptedJson() +} +``` + +Register the extension pack so the framework knows how to plan migrations and encode values: + +```typescript filename="prisma-next.config.ts" +import cipherstash from "@cipherstash/prisma-next/control" + +export default defineConfig({ + // family, target, adapter, contract + extensionPacks: [cipherstash], +}) +``` + +## Wire up the client + +`cipherstashFromStack` builds the encryption client from your emitted contract, so there is no second schema to maintain alongside `schema.prisma`: + +```typescript filename="src/db.ts" +import "dotenv/config" +import { cipherstashFromStack } from "@cipherstash/prisma-next/stack" +import postgres from "@prisma-next/postgres/runtime" +import type { Contract } from "./prisma/contract.d" +import contractJson from "./prisma/contract.json" with { type: "json" } + +const cipherstash = await cipherstashFromStack({ contractJson }) + +export const db = postgres<Contract>({ + contractJson, + extensions: cipherstash.extensions, + middleware: cipherstash.middleware, +}) +``` + +## Migrate + +`migration apply` installs the EQL bundle alongside your schema: + +```bash +npx stash auth login # once per developer +npx prisma-next contract emit +npx prisma-next migration plan --name initial +npx prisma-next migration apply # installs EQL and creates your tables +``` + +This is the one place Prisma Next has an advantage over the other integrations: EQL lands inside your migration history, so a rebuilt database has it. + +## Read and write + +Values are wrapped in an envelope class on the way in, and decrypted explicitly on the way out. Plaintext is redacted from every implicit serialisation path (`toJSON`, `toString`, `util.inspect`), so a stray `console.log` cannot leak it. + +```typescript filename="src/queries.ts" +import { EncryptedString, decryptAll } from "@cipherstash/prisma-next/runtime" +import { db } from "./db" + +await db.orm.User.create({ + id: "user-0", + email: EncryptedString.from("alice@example.com"), +}) + +const rows = await db.orm.User + .where((u) => u.email.cipherstashIlike("%@example.com")) + .all() + +await decryptAll(rows) +console.log(await rows[0]?.email.decrypt()) +``` + +`decryptAll` decrypts a whole result set in one round trip. A single field decrypts with `await row.email.decrypt()`. + +## Query operators + +Each operator is a method on the encrypted field, and the search config the column was declared with decides which ones it can answer: + +| Operator | Answers | +| --- | --- | +| `cipherstashEq`, `cipherstashNe` | Equality | +| `cipherstashInArray`, `cipherstashNotInArray` | Set membership | +| `cipherstashGt`, `cipherstashGte`, `cipherstashLt`, `cipherstashLte` | Ranges | +| `cipherstashBetween`, `cipherstashNotBetween` | Bounded ranges | +| `cipherstashIlike`, `cipherstashNotIlike` | Free-text match | +| `cipherstashAsc`, `cipherstashDesc` | Ordering | +| `cipherstashJsonbGet`, `cipherstashJsonbPathExists`, `cipherstashJsonbPathQueryFirst` | Encrypted JSON path access | + +Writes are coalesced: one SDK round trip per `(table, column)` group per query, rather than one per value. + +## Authenticating + +Local development uses your `stash` profile after `npx stash auth login`. In production, supply the `CS_*` environment variables instead. See [going to production](/stack/deploy/going-to-production). + +## Where to next + +<Cards> + <Card title="Drizzle" href="/integrations/drizzle"> + The EQL v3 ORM integration, with concrete encrypted column types. + </Card> + <Card title="Supabase" href="/integrations/supabase"> + Prisma Next over a Supabase Postgres connection. + </Card> + <Card title="Stack SDK" href="/reference/stack"> + Encrypt and decrypt directly, for classic Prisma or any other ORM. + </Card> + <Card title="Searchable encryption" href="/concepts/searchable-encryption"> + What each capability reveals, and how to choose. + </Card> +</Cards> diff --git a/scripts/validate-content-api.ts b/scripts/validate-content-api.ts index c6c0df2..a3b2c97 100644 --- a/scripts/validate-content-api.ts +++ b/scripts/validate-content-api.ts @@ -57,12 +57,24 @@ type Rule = { fix: string; /** Only apply the rule to files under these prefixes. */ scope: string[]; + /** + * Files that legitimately name the API, and are exempt from this rule. Use + * only when a page documents a component that really does still ship it. + */ + exempt?: string[]; }; const IDENTITY_SCOPE = ["content/docs/", "content/stack/"]; /** The legacy tree documents EQL v2 throughout; only the v2 IA must be v3-only. */ const V3_SCOPE = ["content/docs/"]; +/** + * `@cipherstash/prisma-next` really does target EQL v2 — its migrations create + * `eql_v2_encrypted` columns and call `eql_v2.add_search_config`. Its page must + * name those to be correct. Delete this when prisma-next moves to v3. + */ +const PRISMA_NEXT_IS_V2 = ["content/docs/integrations/prisma.mdx"]; + const RULES: Rule[] = [ { id: "lockcontext-identify", @@ -92,14 +104,16 @@ const RULES: Rule[] = [ id: "eql-v2-encrypted-type", pattern: /\beql_v2_encrypted\b/, message: "The `eql_v2_encrypted` column type was removed in EQL 3.0.0.", - fix: "Type the column with an EQL v3 domain variant, e.g. `public.text_eq`. See /reference/eql/core-concepts.", + fix: "Type the column with an EQL v3 domain variant, e.g. `public.eql_v3_text_eq`. See /reference/eql/core-concepts.", scope: V3_SCOPE, + exempt: PRISMA_NEXT_IS_V2, }, { id: "eql-v2-schema-functions", pattern: /\beql_v2\.\w+\s*\(/, message: "The `eql_v2` schema was removed in EQL 3.0.0.", fix: "Use the `eql_v3` equivalents, or the encrypted operators directly with a typed operand.", + exempt: PRISMA_NEXT_IS_V2, scope: V3_SCOPE, }, { @@ -168,6 +182,7 @@ for (const dir of ["content/docs", "content/stack"]) { for (const rule of RULES) { if (!inScope(relative, rule)) continue; + if (rule.exempt?.includes(relative)) continue; if (rule.pattern.test(text)) { findings.push({ file: relative, From aeec96ef6e78ba6d6c7708ab67b46ab8c14b1d4b Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 10 Jul 2026 01:30:48 +1000 Subject: [PATCH 114/151] docs(integrations): rename Prisma to Prisma Next The integration is `@cipherstash/prisma-next`, for the Prisma Next framework, not classic `@prisma/client`. Titling it "Prisma" invited exactly the confusion the page then had to spend a callout undoing. Moves the slug to /integrations/prisma-next, which is what IA.md already expected, and repoints the two inbound cards, the `pairsWith` facets, and the validate-content exemption path. Ticks the three integrations entries in IA.md, noting that Prisma Next is EQL v2 today and should be revisited when v3 support lands. --- IA.md | 6 +++--- content/docs/integrations/drizzle.mdx | 2 +- content/docs/integrations/index.mdx | 4 ++-- content/docs/integrations/{prisma.mdx => prisma-next.mdx} | 2 +- content/docs/integrations/supabase/index.mdx | 2 +- content/docs/integrations/supabase/orms.mdx | 2 +- content/docs/integrations/supabase/quickstart.mdx | 2 +- scripts/validate-content-api.ts | 2 +- 8 files changed, 11 insertions(+), 11 deletions(-) rename content/docs/integrations/{prisma.mdx => prisma-next.mdx} (99%) diff --git a/IA.md b/IA.md index 73ed6ae..622bae1 100644 --- a/IA.md +++ b/IA.md @@ -301,15 +301,15 @@ Two notes: ## Integrations — CIP-3328 (Supabase), CIP-3330 (auth), CIP-3336 (rest) - [x] Section scaffold 🚧 (index + supabase stub with facet exemplar) -- [ ] `/integrations` index — category grid w/ setup badges +- [x] `/integrations` index — category grid w/ setup badges - [x] `/integrations/supabase` — flagship tutorial (CIP-3328) - [x] `/integrations/supabase/database` - [x] `/integrations/supabase/auth` - [x] `/integrations/supabase/dashboard-experience` — Table Editor, expose eql schema - [ ] ⛔ `/integrations/supabase/edge-functions` — pending Deno/FFI answer - [ ] ⛔ `/integrations/supabase/realtime` — pending product verification -- [ ] `/integrations/drizzle` 🚧 — merge the two divergent Drizzle pages -- [ ] `/integrations/prisma-next` +- [x] `/integrations/drizzle` +- [x] `/integrations/prisma-next` — EQL v2 today; revisit when v3 support lands - [ ] `/integrations/aws/rds-aurora` — Proxy path - [ ] `/integrations/aws/dynamodb` - [ ] `/integrations/clerk` diff --git a/content/docs/integrations/drizzle.mdx b/content/docs/integrations/drizzle.mdx index 1abcbbf..e0dd150 100644 --- a/content/docs/integrations/drizzle.mdx +++ b/content/docs/integrations/drizzle.mdx @@ -7,7 +7,7 @@ audience: [developer] integration: category: orm setup: code-only - pairsWith: [supabase, prisma] + pairsWith: [supabase, prisma-next] verifiedAgainst: stack: "1.0.0" eql: "3.0.0" diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index b03e0b5..6791c28 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -27,8 +27,8 @@ Everything here writes the same ciphertext into the same [EQL](/reference/eql) c <Card title="Drizzle" href="/integrations/drizzle"> Concrete encrypted column types and capability-checked operators. Targets EQL v3. </Card> - <Card title="Prisma" href="/integrations/prisma"> - Encrypted columns declared in `schema.prisma`, for Prisma Next. Targets EQL v2. + <Card title="Prisma Next" href="/integrations/prisma-next"> + Encrypted columns declared in `schema.prisma`. Targets EQL v2. Not classic Prisma. </Card> <Card title="Raw SQL" href="/get-started/quickstart"> Encrypt the value, insert it, cast the query operand. The SDK's whole surface is `encrypt` and `encryptQuery`. diff --git a/content/docs/integrations/prisma.mdx b/content/docs/integrations/prisma-next.mdx similarity index 99% rename from content/docs/integrations/prisma.mdx rename to content/docs/integrations/prisma-next.mdx index 318f70b..a5333fa 100644 --- a/content/docs/integrations/prisma.mdx +++ b/content/docs/integrations/prisma-next.mdx @@ -1,5 +1,5 @@ --- -title: Prisma +title: Prisma Next description: "Encrypted columns with Prisma Next: declare them in schema.prisma, and the migration system installs EQL for you." type: tutorial components: [encryption, eql] diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index bffd2b5..6d20c8e 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -7,7 +7,7 @@ audience: [developer, ciso] integration: category: platform setup: dashboard-required - pairsWith: [drizzle, prisma, clerk] + pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: eql: "3.0.0" stack: "0.18.0" diff --git a/content/docs/integrations/supabase/orms.mdx b/content/docs/integrations/supabase/orms.mdx index 4986999..0b9a14c 100644 --- a/content/docs/integrations/supabase/orms.mdx +++ b/content/docs/integrations/supabase/orms.mdx @@ -29,7 +29,7 @@ The ORM integrations are **database-agnostic** — Supabase is Postgres, so the <Card title="Drizzle" href="/integrations/drizzle"> Encrypted column types, query operators, and EQL migrations with Drizzle. </Card> - <Card title="Prisma" href="/integrations/prisma"> + <Card title="Prisma Next" href="/integrations/prisma-next"> Encrypted fields and searchable queries with Prisma. </Card> </Cards> diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 75c4626..bf80b25 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -7,7 +7,7 @@ audience: [developer] integration: category: platform setup: dashboard-required - pairsWith: [drizzle, prisma, clerk] + pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: eql: "3.0.0" stack: "1.0.0" diff --git a/scripts/validate-content-api.ts b/scripts/validate-content-api.ts index a3b2c97..4563c6b 100644 --- a/scripts/validate-content-api.ts +++ b/scripts/validate-content-api.ts @@ -73,7 +73,7 @@ const V3_SCOPE = ["content/docs/"]; * `eql_v2_encrypted` columns and call `eql_v2.add_search_config`. Its page must * name those to be correct. Delete this when prisma-next moves to v3. */ -const PRISMA_NEXT_IS_V2 = ["content/docs/integrations/prisma.mdx"]; +const PRISMA_NEXT_IS_V2 = ["content/docs/integrations/prisma-next.mdx"]; const RULES: Rule[] = [ { From a8a8ae1b9ee2a4a860c30f9b8d0b0cee0e801991 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 14 Jul 2026 16:22:23 +1000 Subject: [PATCH 115/151] docs: match the shipped Stack 1.0-rc.0 family and EQL 3.0 defaults MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stack 1.0 split the Drizzle and Supabase adapters into their own packages and the stash CLI made EQL v3 the default. Verified against the published 1.0.0-rc.0 tarballs. Import moves (the old subpath exports are removed from @cipherstash/stack): - @cipherstash/stack/supabase → @cipherstash/stack-supabase - @cipherstash/stack/eql/v3/drizzle → @cipherstash/stack-drizzle/v3 Install commands add the split packages; the Supabase reference gains a package-install note. CLI: `stash eql install` and `stash init` now target EQL v3 by default, so the explicit `--eql-version 3` is dropped everywhere. The get-started quickstart's separate "force v3 over the v2 install" step is removed — init installs v3 directly, exactly as that step's own callout predicted. The Drizzle-migration restriction (#613) still holds and stays documented. agent-skills: the bundled skill set changed. `stash-secrets` is gone (secrets removed from the SDK) and `stash-supply-chain-security` is new. Repointed the Drizzle/Supabase skills at their split packages and noted the Drizzle skill now covers the v3 dialect. verifiedAgainst bumped to 1.0.0-rc.0 on the pages re-checked against it. Note: `bun run build` is currently red at the TypeDoc generator, which clones the latest @cipherstash/stack source; that source needs a protect-ffi with the renamed ProtectError export. Pre-existing and unrelated to these content edits (reproduces with them stashed). --- content/docs/get-started/quickstart.mdx | 30 ++++--------------- content/docs/integrations/drizzle.mdx | 12 ++++---- content/docs/integrations/supabase/auth.mdx | 4 +-- .../integrations/supabase/edge-functions.mdx | 2 +- .../integrations/supabase/fundamentals.mdx | 6 ++-- content/docs/integrations/supabase/index.mdx | 2 +- .../docs/integrations/supabase/quickstart.mdx | 10 +++---- content/docs/reference/agent-skills.mdx | 20 ++++++------- content/docs/reference/stack/supabase.mdx | 14 ++++++--- 9 files changed, 43 insertions(+), 57 deletions(-) diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx index 37a43d9..330514d 100644 --- a/content/docs/get-started/quickstart.mdx +++ b/content/docs/get-started/quickstart.mdx @@ -5,8 +5,8 @@ type: tutorial components: [encryption, eql, cli, platform] audience: [developer] verifiedAgainst: - stack: "0.19.0" - cli: "0.17.1" + stack: "1.0.0-rc.0" + cli: "1.0.0-rc.0" eql: "3.0.0" --- @@ -33,38 +33,20 @@ npx stash init This opens a browser for device-based authentication, so local development needs no environment variables and no shared secrets. `init` then: 1. Connects to your workspace. -2. Resolves your database connection and runs `stash eql install`, which installs [EQL](/reference/eql), the Postgres surface that makes encrypted columns queryable. +2. Resolves your database connection and runs `stash eql install`, which installs [EQL](/reference/eql) v3, the Postgres surface that makes encrypted columns queryable. 3. Installs `@cipherstash/stack` if it isn't already present. 4. Scaffolds an encryption module at `src/encryption/index.ts`. 5. Writes `.cipherstash/context.json` with what it detected about your project. See the [CLI reference](/reference/cli/init) for the flags, including `--supabase`, `--drizzle`, and `--prisma-next`. -</Step> - -<Step> - -## Install EQL v3 - -This guide, and the rest of the EQL reference, targets **EQL v3**. `stash init` installs EQL v2 by default today, so ask for v3 explicitly: - -```bash example-id="quickstart-eql-v3" -npx stash eql install --eql-version 3 --force -``` - -`--force` reinstalls over the v2 schema that `init` just laid down. On a new database with no encrypted data, that is safe: there is nothing to migrate. - -Check what you ended up with: +EQL v3 is the default, so `init` installs it directly against the database. Confirm what you ended up with: -```bash +```bash example-id="quickstart-eql-status" npx stash eql status ``` -<Callout type="info"> -`--eql-version` accepts `2` or `3` and **defaults to `2`** in `stash` 0.17.1. The default becomes `3` in a future release, at which point this step goes away. Pass the flag until then, so you know which generation you are on rather than inheriting a default that is about to change. - -v3 installs directly against the database, so the `--drizzle`, `--migration`, and `--latest` flags do not apply to it. See [installing EQL](/reference/eql) for the full options, including installing across several databases. -</Callout> +This guide, and the rest of the EQL reference, targets EQL v3. </Step> diff --git a/content/docs/integrations/drizzle.mdx b/content/docs/integrations/drizzle.mdx index e0dd150..57b6698 100644 --- a/content/docs/integrations/drizzle.mdx +++ b/content/docs/integrations/drizzle.mdx @@ -9,7 +9,7 @@ integration: setup: code-only pairsWith: [supabase, prisma-next] verifiedAgainst: - stack: "1.0.0" + stack: "1.0.0-rc.0" eql: "3.0.0" --- @@ -18,17 +18,17 @@ Drizzle keeps its shape. You declare each encrypted column with a concrete EQL t ## Install ```bash cta cta-type="install" example-id="install-drizzle" -npm install @cipherstash/stack drizzle-orm +npm install @cipherstash/stack @cipherstash/stack-drizzle drizzle-orm ``` Then install EQL into your database: ```bash -npx stash eql install --eql-version 3 +npx stash eql install ``` <Callout type="warn"> -`--eql-version 3` installs directly against the database and cannot generate a Drizzle migration: `--drizzle` is rejected alongside it. EQL is therefore not part of your migration history, so a database rebuilt from migrations will not have it. Re-run the install after a rebuild. +The v3 install (the default) runs directly against the database and cannot generate a Drizzle migration: `--drizzle` is rejected for a v3 install. EQL is therefore not part of your migration history, so a database rebuilt from migrations will not have it. Re-run the install after a rebuild. </Callout> ## Declare the table @@ -37,7 +37,7 @@ The column type *is* the capability. There are no flags to configure. `TextEq` a ```typescript filename="src/schema.ts" import { pgTable, integer } from "drizzle-orm/pg-core" -import { types } from "@cipherstash/stack/eql/v3/drizzle" +import { types } from "@cipherstash/stack-drizzle/v3" export const users = pgTable("users", { id: integer("id").primaryKey().generatedAlwaysAsIdentity(), @@ -72,7 +72,7 @@ import { drizzle } from "drizzle-orm/postgres-js" import { createEncryptionOperatorsV3, extractEncryptionSchemaV3, -} from "@cipherstash/stack/eql/v3/drizzle" +} from "@cipherstash/stack-drizzle/v3" import { EncryptionV3 } from "@cipherstash/stack/v3" import { users } from "./schema" diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index c887539..e0c37d9 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -5,7 +5,7 @@ type: guide components: [encryption, platform] audience: [developer] verifiedAgainst: - stack: "1.0.0" + stack: "1.0.0-rc.0" auth: "0.41.0" --- @@ -33,7 +33,7 @@ Authenticate the `Encryption` client with an `OidcFederationStrategy`. It takes ```typescript title="lib/db.ts" import { createClient } from "@supabase/supabase-js" import { OidcFederationStrategy } from "@cipherstash/stack" -import { encryptedSupabaseV3 } from "@cipherstash/stack/supabase" +import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" const supabaseClient = createClient( process.env.SUPABASE_URL!, diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx index c4e086f..99af894 100644 --- a/content/docs/integrations/supabase/edge-functions.mdx +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -5,7 +5,7 @@ type: guide components: [encryption, platform] audience: [developer] verifiedAgainst: - stack: "0.18.0" + stack: "1.0.0-rc.0" auth: "0.41.0" --- diff --git a/content/docs/integrations/supabase/fundamentals.mdx b/content/docs/integrations/supabase/fundamentals.mdx index 962f55a..e7f4910 100644 --- a/content/docs/integrations/supabase/fundamentals.mdx +++ b/content/docs/integrations/supabase/fundamentals.mdx @@ -17,7 +17,7 @@ If you just want the fastest path from empty project to encrypted table, start w The `stash` CLI installs EQL. It reads `DATABASE_URL`, detects that it points at Supabase, and installs directly against the database: ```bash example-id="supabase-eql-install" -npx stash eql install --eql-version 3 +npx stash eql install ``` Pass `--database-url <url>` to override the connection for a single run without writing it to disk. The install is idempotent, so `--force` reinstalls over an existing schema, and `--dry-run` shows what would happen. Check what you ended up with: @@ -26,10 +26,10 @@ Pass `--database-url <url>` to override the connection for a single run without npx stash eql status ``` -`--eql-version` accepts `2` or `3` and **defaults to `2`**. Pass the flag until v3 becomes the default. The full flag set is in the [CLI reference](/reference/cli/eql). +The install targets **EQL v3 by default**; `--eql-version 2` opts back to v2. The full flag set is in the [CLI reference](/reference/cli/eql). <Callout type="warn"> -EQL v3 installs **directly against the database only**. `--migration`, `--drizzle`, `--latest`, and `--migrations-dir` are rejected when combined with `--eql-version 3`; they exist for the v2 install paths. +EQL v3 installs **directly against the database only**. `--migration`, `--drizzle`, `--latest`, and `--migrations-dir` are rejected for a v3 install; they exist for the v2 install paths. The practical consequence is local resets. `supabase db reset` rebuilds your database from your migrations directory, so it drops a v3 install. Re-run `stash eql install` after each reset. </Callout> diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 6d20c8e..e7c827a 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -10,7 +10,7 @@ integration: pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: eql: "3.0.0" - stack: "0.18.0" + stack: "1.0.0-rc.0" --- import { faqPrivacy, faqScaling, faqKms, faqRlsVsEncryption, faqFreeTier } from "@/components/faq/shared"; diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index bf80b25..a6b759b 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -10,7 +10,7 @@ integration: pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: eql: "3.0.0" - stack: "1.0.0" + stack: "1.0.0-rc.0" --- This tutorial takes an empty Supabase project to an encrypted, searchable table. It takes about fifteen minutes. For what CipherStash is and why you'd add it, start with the [overview](/integrations/supabase). @@ -30,7 +30,7 @@ Two pieces, one on each side of your Supabase connection: Point `DATABASE_URL` at your Supabase project, then install EQL with the `stash` CLI: ```bash cta cta-type="install" example-id="supabase-quickstart-eql-install" -npx stash eql install --eql-version 3 +npx stash eql install ``` It detects Supabase from the connection string, needs no superuser, and completes in seconds, creating the `eql_v3` schema for functions and operators, and the encrypted column types in `public`. Then grant your Supabase roles access: @@ -40,7 +40,7 @@ GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; ``` -`--eql-version` defaults to `2`, so pass the flag until v3 becomes the default. [Fundamentals](/integrations/supabase/fundamentals#installing-eql) covers the rest, including why a v3 install does not survive `supabase db reset`. +The install targets EQL v3 by default. [Fundamentals](/integrations/supabase/fundamentals#installing-eql) covers the rest, including why a v3 install does not survive `supabase db reset`. </Step> <Step> @@ -71,7 +71,7 @@ Supabase runs the EQL installer as a non-superuser, so the ORE-backed domains (` ### Install the SDK and connect your workspace ```sh -npm install @cipherstash/stack @supabase/supabase-js +npm install @cipherstash/stack @cipherstash/stack-supabase @supabase/supabase-js ``` Sign up at [dashboard.cipherstash.com](https://dashboard.cipherstash.com), create a workspace, and set its credentials alongside your Supabase keys. `DATABASE_URL` is your project's Postgres connection string, which the wrapper uses to introspect your encrypted columns: @@ -96,7 +96,7 @@ DATABASE_URL=postgresql://postgres:...@db.<project-ref>.supabase.co:5432/postgre There is no schema to declare. `encryptedSupabaseV3` introspects the database over `DATABASE_URL`, finds the columns typed as EQL domains, and derives each one's encryption config from its type. ```typescript title="lib/db.ts" -import { encryptedSupabaseV3 } from "@cipherstash/stack/supabase" +import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" export const db = await encryptedSupabaseV3( process.env.SUPABASE_URL!, diff --git a/content/docs/reference/agent-skills.mdx b/content/docs/reference/agent-skills.mdx index 03ea3a3..88eb5e5 100644 --- a/content/docs/reference/agent-skills.mdx +++ b/content/docs/reference/agent-skills.mdx @@ -53,21 +53,21 @@ The CipherStash CLI (`stash`) for database setup, schema management, and project ### stash-drizzle -Drizzle ORM integration using `@cipherstash/stack/drizzle`. +Drizzle ORM integration using `@cipherstash/stack-drizzle`, covering both EQL v2 and the EQL v3 dialect on `@cipherstash/stack-drizzle/v3`. **Covers:** the `encryptedType<T>()` column type; `extractEncryptionSchema()`; `createEncryptionOperators()`; query operators (`eq`, `ne`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`, `between`, `inArray`, `asc`, `desc`); encrypted JSONB operators (`jsonbPathExists`, `jsonbPathQueryFirst`, `jsonbGet`); batched `and()` / `or()` conditions; EQL migration generation; non-encrypted column fallback; Express, Hono, and Next.js examples. -**Activates when:** you are using Drizzle ORM with encrypted columns, or importing from `@cipherstash/stack/drizzle`. +**Activates when:** you are using Drizzle ORM with encrypted columns, or importing from `@cipherstash/stack-drizzle`. -**Related docs:** [Drizzle integration](/stack/cipherstash/encryption/drizzle) +**Related docs:** [Drizzle integration](/integrations/drizzle) ### stash-supabase -Supabase integration using `@cipherstash/stack/supabase`. +Supabase integration using `@cipherstash/stack-supabase`. **Covers:** the `encryptedSupabase()` wrapper; transparent encryption on `insert`, `update`, and `upsert`; transparent decryption on `select`, `single`, and `maybeSingle`; encrypted query filters (`eq`, `neq`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`, `in`, `match`, `or`, `not`, `filter`); identity-aware encryption with `.withLockContext()`; audit logging with `.audit()`; response types and error handling; Supabase-specific database setup. -**Activates when:** you are using Supabase with encrypted columns, or importing from `@cipherstash/stack/supabase`. +**Activates when:** you are using Supabase with encrypted columns, or importing from `@cipherstash/stack-supabase`. **Related docs:** [Supabase integration](/integrations/supabase) @@ -81,15 +81,13 @@ Amazon DynamoDB integration using `@cipherstash/stack/dynamodb`. **Related docs:** [DynamoDB integration](/stack/cipherstash/encryption/dynamodb) -### stash-secrets +### stash-supply-chain-security -Encrypted secrets management with `@cipherstash/stack`. +Supply-chain security controls for a project that depends on `@cipherstash/stack`. -**Covers:** the `Secrets` class API (`set`, `get`, `getMany`, `list`, `delete`); environment-based isolation with per-environment keysets; bulk retrieval with `getMany` (2 to 100 secrets per call); error types (`ApiError`, `NetworkError`, `ClientError`, `EncryptionError`, `DecryptionError`); configuration via `CS_*` environment variables or explicit config; patterns for loading secrets at startup. +**Covers:** post-install script policy (`onlyBuiltDependencies`); install cooldown (`minimumReleaseAge`); lockfile integrity (`blockExoticSubdeps` and the lockfile registry check); frozen-lockfile CI; registry pinning via `.npmrc`; Dependabot cooldown; and `CODEOWNERS`. -**Activates when:** you are storing or retrieving secrets, or working with the `Secrets` class from `@cipherstash/stack/secrets`. - -**Related docs:** [Secrets](https://cipherstash.com/stack/secrets) +**Activates when:** you are modifying CI workflows, pnpm config, dependency updates, `.github/dependabot.yml`, or anything that changes how packages enter your build. ## How skills work diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index a75419c..d19e52a 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -5,7 +5,7 @@ type: reference components: [encryption, eql] audience: [developer] verifiedAgainst: - stack: "1.0.0" + stack: "1.0.0-rc.0" eql: "3.0.0" --- @@ -13,6 +13,12 @@ verifiedAgainst: This page is the single source of truth for the wrapper's API. The [Supabase integration](/integrations/supabase) shows it in context; the [EQL reference](/reference/eql) covers the database side it queries against. +The wrapper ships as its own package, `@cipherstash/stack-supabase`, which depends on `@cipherstash/stack`: + +```bash +npm install @cipherstash/stack @cipherstash/stack-supabase @supabase/supabase-js +``` + ## Setup `encryptedSupabaseV3` **introspects your database when you call it**. It reads the column types, finds the ones typed as EQL v3 domains, and derives each column's encryption config from the domain. The database already records which columns are encrypted and what they can do, so you do not declare it a second time. @@ -20,7 +26,7 @@ This page is the single source of truth for the wrapper's API. The [Supabase int That makes it async, and it makes `.from()` take a table name and nothing else. ```typescript -import { encryptedSupabaseV3 } from "@cipherstash/stack/supabase" +import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" const supabase = await encryptedSupabaseV3( process.env.SUPABASE_URL!, @@ -94,7 +100,7 @@ The capability model is the same one the database enforces through [EQL's domain Without `schemas`, rows are `Record<string, unknown>` and any table name is accepted. Declare a table and `.from()` returns a typed builder for it, with row types, filter-value types, and capability-narrowed methods. Declared tables are also verified against the live database before the client is handed back, so a column that was dropped or retyped fails at startup rather than at the first query. ```typescript -import { encryptedSupabaseV3 } from "@cipherstash/stack/supabase" +import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" import { encryptedTable, types } from "@cipherstash/stack/eql/v3" const users = encryptedTable("users", { @@ -248,4 +254,4 @@ Because the wrapped client is your own `createClient(...)` instance, Supabase Au ## The v2 wrapper -`encryptedSupabase` is the EQL v2 dialect and is unchanged. It is synchronous, takes `{ encryptionClient, supabaseClient }`, requires `.from(tableName, schema)` with the schema as a second argument, rejects `select('*')`, and uses `.like()` / `.ilike()` for free-text search. Pick the dialect by function: v2 targets `eql_v2_encrypted` columns, v3 targets the `public.eql_v3_*` domains. New work should use `encryptedSupabaseV3`. +`encryptedSupabase` is the EQL v2 dialect. It ships from the same `@cipherstash/stack-supabase` package and is unchanged from before the 1.0 split. It is synchronous, takes `{ encryptionClient, supabaseClient }`, requires `.from(tableName, schema)` with the schema as a second argument, rejects `select('*')`, and uses `.like()` / `.ilike()` for free-text search. Pick the dialect by function: v2 targets the EQL v2 composite type, v3 targets the `public.eql_v3_*` domains. New work should use `encryptedSupabaseV3`. From 05ac216a60abc045716bf05ff904b8049b4af864 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 18:21:38 +1000 Subject: [PATCH 116/151] docs(supabase): free-text search is matches(), not contains() MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Stack renamed the encrypted free-text method in cipherstash/stack#617 (`feat(stack-drizzle,stack-supabase)!: rename encrypted contains() -> matches()`), landed 2026-07-13 — one day before this branch was last updated, so it was missed. The rename is not cosmetic. `contains()` now RAISES on an encrypted text column, because containment promises exactness that bloom-filter matching cannot deliver: contains() is native (exact) containment and does not apply to encrypted column "email". Use matches() for encrypted free-text search. Every free-text example on these pages taught the spelling that now raises. `contains()` is still correct for encrypted JSON (sub-document containment) and plaintext arrays, so the filter table now lists both, plus the selectorEq/selectorNe pair added alongside them. Also rewrites "There is no `.like()`", which was wrong in the other direction. `like`/`ilike` on an encrypted column do not throw — they are a compatibility shim that reduces the pattern to a needle and delegates to `matches()`. The result is approximate (case-insensitive, one-sided, anchoring lost) and only an unapproximable pattern — an internal `%`, or any `_` — raises. Plaintext columns keep real SQL LIKE. The section now says that, and the anchor is renamed to match, with the inbound link updated. Verified against @cipherstash/stack@1.0.0-rc.4 (packages/stack-supabase): encryptedSupabaseV3's four overloads are async and take (client | url+key) plus options, and databaseUrl/config/schemas are all real, so the surrounding examples were already correct. The v2 paragraph checks out too — encryptedSupabase is synchronous, takes { encryptionClient, supabaseClient }, and needs .from(table, schema). Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- .../docs/integrations/supabase/quickstart.mdx | 6 ++-- content/docs/reference/stack/supabase.mdx | 36 ++++++++++++++----- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index a6b759b..d0bb294 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -126,8 +126,8 @@ const { data } = await db .select("id, email, name") .eq("email", "alice@example.com") -// Free-text match: encrypted token containment, not SQL LIKE -await db.from("patients").select("id, name").contains("name", "Alice Chen") +// Free-text match: encrypted token matching, not SQL LIKE +await db.from("patients").select("id, name").matches("name", "Alice Chen") // Range and newest-first on an encrypted date await db @@ -139,7 +139,7 @@ await db ``` <Callout type="warn"> -`.like()` and `.ilike()` throw on encrypted columns. Free-text matching is `.contains()`, which compares encrypted token sets rather than SQL wildcards. See the [wrapper reference](/reference/stack/supabase#there-is-no-like). +Free-text matching is `.matches()`, which compares encrypted token sets rather than SQL wildcards. `.contains()` raises on an encrypted text column — it promises exactness that bloom matching cannot deliver. `.like()` and `.ilike()` still run, but only as an approximate shim over `.matches()`. See the [wrapper reference](/reference/stack/supabase#free-text-search-matches). </Callout> The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabaseV3` reference](/reference/stack/supabase). diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index d19e52a..3b9f0ac 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -91,7 +91,7 @@ The capability model is the same one the database enforces through [EQL's domain | `public.eql_v3_<T>` | Store and decrypt only | none | | `public.eql_v3_<T>_eq` | `.eq()`, `.neq()`, `.in()` | `hm` | | `public.eql_v3_<T>_ord` | `.gt()`, `.gte()`, `.lt()`, `.lte()`, `.order()`, plus equality | `op` | -| `public.eql_v3_text_match` | `.contains()` | `bf` | +| `public.eql_v3_text_match` | `.matches()` | `bf` | | `public.eql_v3_text_search` | All of the above, on text | `hm`, `op`, `bf` | | `public.eql_v3_json` | Encrypted JSON documents | `sv` | @@ -156,7 +156,9 @@ Every filter value on an encrypted column is encrypted client-side into the term | `.eq()` / `.neq()` | `_eq`, `_ord`, or `text_search` | Equality terms | | `.in(col, values)` | `_eq`, `_ord`, or `text_search` | Each element encrypted separately | | `.gt()` `.gte()` `.lt()` `.lte()` | `_ord` or `text_search` | Ordering terms | -| `.contains(col, value)` | `text_match` or `text_search` | Bloom-filter token containment | +| `.matches(col, value)` | `text_match` or `text_search` | Bloom-filter token containment | +| `.contains(col, value)` | `json` (or a plaintext array) | Sub-document containment, not free-text — see below | +| `.selectorEq(col, path, value)` / `.selectorNe()` | `json` | One JSON field's value, by path | | `.is(col, null)` | any column | Passed through. SQL `NULL` is never encrypted | | `.match({ col: value })` | per column | Each pair applied as `.eq()` | | `.or(filters)` | per column | Encrypted values inside the filter string are encrypted in place | @@ -175,19 +177,37 @@ await supabase .eq("name", "Alice Chen") // ordinary supabase-js filter ``` -### There is no `.like()` +### Free-text search: `.matches()` -`.like()` and `.ilike()` **throw** on an encrypted column. SQL pattern matching is meaningless on ciphertext, and EQL's free-text search is token containment rather than wildcard matching. They still work on plaintext columns in the same table. +`.matches()` tests whether the stored value's encrypted token set contains the search string's. Matching is case-insensitive, and false positives are possible while false negatives are not. ```typescript -// ❌ throws: "like" is not supported on encrypted column "email" -await supabase.from("users").select("*").like("email", "%@example.com") +await supabase.from("users").select("*").matches("email", "alice@example.com") +``` + +It is **not** `.contains()`. On an encrypted text column `.contains()` raises — containment promises exactness, which bloom-filter matching cannot deliver, so the wrapper refuses rather than quietly answering a different question: -// ✅ encrypted token containment +```typescript +// ❌ raises: contains() is native (exact) containment and does not apply to +// encrypted column "email". Use matches() for encrypted free-text search. await supabase.from("users").select("*").contains("email", "alice@example.com") ``` -`.contains()` tests whether the stored value's encrypted token set contains the search string's. Matching is case-insensitive, and false positives are possible while false negatives are not. +`.contains()` is still the right method for **encrypted JSON** documents (sub-document containment) and for plaintext array columns. + +### `.like()` and `.ilike()` are approximate + +On a plaintext column they are ordinary SQL `LIKE`. On an **encrypted** column they are a compatibility shim: the pattern is reduced to a needle and delegated to `.matches()`, so the result is *approximate* — matching becomes case-insensitive and one-sided (it may return false positives), and anchoring is lost. Leading and trailing `%` are stripped, since fuzzy matching subsumes them. A pattern that cannot be approximated — an internal `%`, or any `_` — raises instead of guessing. + +```typescript +// Works, approximately: reduced to matches("email", "@example.com") +await supabase.from("users").select("*").like("email", "%@example.com") + +// ❌ raises: an internal wildcard has no trigram equivalent +await supabase.from("users").select("*").like("email", "a%e@example.com") +``` + +Prefer `.matches()` in new code — it is the operation that actually runs, and it does not imply SQL semantics the database is not applying. ## Ordering and pagination From 844290f5afb0b27882382db70d78df596bc858ad Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 19:29:37 +1000 Subject: [PATCH 117/151] docs(supabase): free-text and encrypted-JSON queries need a different adapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Correcting my own earlier commit. Renaming contains() -> matches() fixed the spelling but documented an operation that does not run: on EQL 3.0.2+ the supabase-js wrapper raises for every encrypted free-text and encrypted-JSON term, whatever the spelling. [supabase v3]: matches() on encrypted column "email" is unavailable with EQL 3.0.2+: the SQL operator requires an eql_v3.query_* cast that PostgREST cannot express. Use the Drizzle or Prisma Next adapter, or a scoped SQL/RPC function. The docs pin EQL 3.0.4, so this is the behaviour every reader gets. The guard fires for the freeTextSearch and searchableJson query types via any spelling — matches(), contains() on a json column, selectorEq()/selectorNe(), and the same terms reached through not(), or(), or a raw filter() — and fails closed on an unknown EQL version. It does NOT touch equality, ordering, or range, so the rest of the page stands. Scoped to the supabase-js query path, which is what the limit is about. The Auth and Edge Functions pages are unaffected: this is PostgREST's inability to express an operand cast, not a limit on CipherStash with Supabase. - The wrapper reference leads the free-text section with the constraint and the three workarounds, and marks the affected rows in the filter table. - The quickstart drops its free-text example rather than showing a call that raises, and its callout now says which operations do work. - fundamentals' column-type table is accurate as written (these ARE the column's capabilities) but a reader could pick text_match or json and only then discover they cannot query it here, so it points at the constraint. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- .../integrations/supabase/fundamentals.mdx | 2 + .../docs/integrations/supabase/quickstart.mdx | 5 +-- content/docs/reference/stack/supabase.mdx | 38 ++++++++++++------- 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/content/docs/integrations/supabase/fundamentals.mdx b/content/docs/integrations/supabase/fundamentals.mdx index e7f4910..fd9e994 100644 --- a/content/docs/integrations/supabase/fundamentals.mdx +++ b/content/docs/integrations/supabase/fundamentals.mdx @@ -62,6 +62,8 @@ The column's domain type fixes what it can do, and the wrapper reads that type s Declare only the capabilities you use: every extra capability stores extra searchable material with defined leakage — see [Searchable encryption](/concepts/searchable-encryption). +These are the column's capabilities in the database. Two of them are not reachable through supabase-js on EQL 3.0.2+ — free-text match and encrypted JSON both need an operand cast PostgREST cannot express — so if you plan to query either, read [that constraint](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) before choosing the type. Equality and ordering are unaffected. + ## Indexes Encrypted columns index through **ordinary functional indexes** over EQL's term-extractor functions. This is why EQL works on Supabase unchanged: the default ordering term indexes under Postgres's own `bytea_ops`, so no custom operator class is needed, just `CREATE INDEX`, which any migration can run: diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index d0bb294..89efeb7 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -126,9 +126,6 @@ const { data } = await db .select("id, email, name") .eq("email", "alice@example.com") -// Free-text match: encrypted token matching, not SQL LIKE -await db.from("patients").select("id, name").matches("name", "Alice Chen") - // Range and newest-first on an encrypted date await db .from("patients") @@ -139,7 +136,7 @@ await db ``` <Callout type="warn"> -Free-text matching is `.matches()`, which compares encrypted token sets rather than SQL wildcards. `.contains()` raises on an encrypted text column — it promises exactness that bloom matching cannot deliver. `.like()` and `.ilike()` still run, but only as an approximate shim over `.matches()`. See the [wrapper reference](/reference/stack/supabase#free-text-search-matches). +**Free-text search is not available through this wrapper on EQL 3.0.2+.** `.matches()` — and `.like()` / `.ilike()`, which delegate to it — raise, because the operator needs an `eql_v3.query_*` operand that PostgREST cannot express. Encrypted-JSON queries are unavailable for the same reason. Equality, ordering, and range all work, as shown above. For encrypted free-text, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or a scoped SQL/RPC function. Full detail in the [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter). </Callout> The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabaseV3` reference](/reference/stack/supabase). diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 3b9f0ac..4bb99d2 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -156,9 +156,9 @@ Every filter value on an encrypted column is encrypted client-side into the term | `.eq()` / `.neq()` | `_eq`, `_ord`, or `text_search` | Equality terms | | `.in(col, values)` | `_eq`, `_ord`, or `text_search` | Each element encrypted separately | | `.gt()` `.gte()` `.lt()` `.lte()` | `_ord` or `text_search` | Ordering terms | -| `.matches(col, value)` | `text_match` or `text_search` | Bloom-filter token containment | -| `.contains(col, value)` | `json` (or a plaintext array) | Sub-document containment, not free-text — see below | -| `.selectorEq(col, path, value)` / `.selectorNe()` | `json` | One JSON field's value, by path | +| `.matches(col, value)` | `text_match` or `text_search` | Bloom-filter token containment — **unavailable on EQL 3.0.2+, [see below](#free-text-and-json-need-a-different-adapter)** | +| `.contains(col, value)` | `json`, or a plaintext array | Sub-document containment, not free-text. Encrypted JSON is **unavailable on EQL 3.0.2+** | +| `.selectorEq(col, path, value)` / `.selectorNe()` | `json` | One JSON field's value, by path — **unavailable on EQL 3.0.2+** | | `.is(col, null)` | any column | Passed through. SQL `NULL` is never encrypted | | `.match({ col: value })` | per column | Each pair applied as `.eq()` | | `.or(filters)` | per column | Encrypted values inside the filter string are encrypted in place | @@ -177,30 +177,40 @@ await supabase .eq("name", "Alice Chen") // ordinary supabase-js filter ``` -### Free-text search: `.matches()` +### Free-text and JSON need a different adapter [#free-text-and-json-need-a-different-adapter] -`.matches()` tests whether the stored value's encrypted token set contains the search string's. Matching is case-insensitive, and false positives are possible while false negatives are not. +<Callout type="warn"> +**On EQL 3.0.2 and later, this wrapper cannot run encrypted free-text search or encrypted-JSON queries.** Every spelling raises: -```typescript -await supabase.from("users").select("*").matches("email", "alice@example.com") ``` +[supabase v3]: matches() on encrypted column "email" is unavailable with EQL +3.0.2+: the SQL operator requires an eql_v3.query_* cast that PostgREST cannot +express. Use the Drizzle or Prisma Next adapter, or a scoped SQL/RPC function. +``` + +The limit is PostgREST's, not the encryption's. Those operators need a typed `eql_v3.query_*` operand, and PostgREST has no syntax for the cast — so the wrapper refuses rather than send an operand the database would compare wrongly. It fails closed on an unknown EQL version too. -It is **not** `.contains()`. On an encrypted text column `.contains()` raises — containment promises exactness, which bloom-filter matching cannot deliver, so the wrapper refuses rather than quietly answering a different question: +This applies to `.matches()`, `.contains()` on a `json` column, `.selectorEq()` / `.selectorNe()`, and the same terms reached through `.not()`, `.or()`, or a raw `.filter()`. **Equality, ordering, and range are unaffected** — `.eq()`, `.neq()`, `.in()`, `.gt()` / `.gte()` / `.lt()` / `.lte()`, and `.order()` all work, as do inserts, updates, and decryption on select. + +To search encrypted text on EQL 3.0.2+, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or put it behind a scoped SQL or RPC function. Everything else on this page still applies. +</Callout> + +On EQL 3.0.1 and earlier, `.matches()` tests whether the stored value's encrypted token set contains the search string's — case-insensitive, and false positives are possible while false negatives are not: ```typescript -// ❌ raises: contains() is native (exact) containment and does not apply to -// encrypted column "email". Use matches() for encrypted free-text search. -await supabase.from("users").select("*").contains("email", "alice@example.com") +await supabase.from("users").select("*").matches("email", "alice@example.com") ``` -`.contains()` is still the right method for **encrypted JSON** documents (sub-document containment) and for plaintext array columns. +It is **not** `.contains()`. On an encrypted text column `.contains()` raises regardless of EQL version — containment promises exactness, which bloom-filter matching cannot deliver, so the wrapper refuses rather than quietly answering a different question. `.contains()` is the right method for encrypted JSON documents and plaintext arrays. ### `.like()` and `.ilike()` are approximate -On a plaintext column they are ordinary SQL `LIKE`. On an **encrypted** column they are a compatibility shim: the pattern is reduced to a needle and delegated to `.matches()`, so the result is *approximate* — matching becomes case-insensitive and one-sided (it may return false positives), and anchoring is lost. Leading and trailing `%` are stripped, since fuzzy matching subsumes them. A pattern that cannot be approximated — an internal `%`, or any `_` — raises instead of guessing. +On a plaintext column they are ordinary SQL `LIKE`, unaffected by any of the above. On an **encrypted** column they are a compatibility shim that reduces the pattern to a needle and delegates to `.matches()` — so on EQL 3.0.2+ they raise for the same reason it does. + +Where they do run, the result is *approximate*: matching becomes case-insensitive and one-sided (it may return false positives), and anchoring is lost. Leading and trailing `%` are stripped, since fuzzy matching subsumes them. A pattern that cannot be approximated — an internal `%`, or any `_` — raises instead of guessing. ```typescript -// Works, approximately: reduced to matches("email", "@example.com") +// Reduced to matches("email", "@example.com") await supabase.from("users").select("*").like("email", "%@example.com") // ❌ raises: an internal wildcard has no trigram equivalent From ace062dca906bcbefba9ff567179d562ffcb1968 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 20:42:29 +1000 Subject: [PATCH 118/151] =?UTF-8?q?docs(supabase):=20address=20review=20?= =?UTF-8?q?=E2=80=94=20stash=20env,=20and=20the=20install=20callout=20vs?= =?UTF-8?q?=20remove=5Fv2?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Two Vercel toolbar comments on the preview. edge-functions: generate the CS_* values with `stash env` rather than having the reader assemble the file by hand. Additive — the explicit variable listing stays, since it is what documents which four the SDK actually reads. `--write` is a boolean (verified against stash@0.17.1), so the example redirects to the env file that `supabase functions serve --env-file` then consumes. fundamentals: rewrite the install callout against the stack `remove_v2` branch. What was out of date: - It justified the v3 restrictions as flags that "exist for the v2 install paths". With v2 removed there are no v2 install paths, and the install is always v3, so the framing goes. - It listed `--drizzle` alongside the other rejected flags. `--drizzle` has had its own v3 answer since stack#691: `stash eql migration --drizzle` generates a v3 install migration, cs_migrations tracking schema included, for Drizzle projects that want the install in their migration history. The install command still rejects the flag, but now points there rather than at `--eql-version 2`. - Also drops "`--eql-version 2` opts back to v2" from the prose above it. `--migration`, `--migrations-dir`, and `--latest` remain rejected, and there is still no Supabase migration variant — one v3 SQL artifact targets every platform — so the `supabase db reset` consequence stands and is kept. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- content/docs/integrations/supabase/edge-functions.mdx | 10 +++++++++- content/docs/integrations/supabase/fundamentals.mdx | 8 +++++--- 2 files changed, 14 insertions(+), 4 deletions(-) diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx index 99af894..240f52a 100644 --- a/content/docs/integrations/supabase/edge-functions.mdx +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -29,7 +29,15 @@ Map the `wasm-inline` entries in your function's `deno.json`: } ``` -Provide the `CS_*` credentials when you serve the function — locally via an env file: +Provide the `CS_*` credentials when you serve the function. Generate them with `stash env` rather than assembling the file by hand — it prints the deployment variables for the workspace you are authenticated against, so redirect it straight to the env file: + +```bash example-id="supabase-edge-stash-env" +npx stash env > ./supabase/functions/.env.local +``` + +`--write` writes to a file instead of stdout if you would rather not redirect. The command is marked experimental, so read what it emits before committing to it — and never commit the file itself. The [CLI reference](/reference/cli/env) has the full flag set. + +Then serve the function against that file: ```bash supabase functions serve --env-file ./supabase/functions/.env.local diff --git a/content/docs/integrations/supabase/fundamentals.mdx b/content/docs/integrations/supabase/fundamentals.mdx index fd9e994..4f441d2 100644 --- a/content/docs/integrations/supabase/fundamentals.mdx +++ b/content/docs/integrations/supabase/fundamentals.mdx @@ -26,12 +26,14 @@ Pass `--database-url <url>` to override the connection for a single run without npx stash eql status ``` -The install targets **EQL v3 by default**; `--eql-version 2` opts back to v2. The full flag set is in the [CLI reference](/reference/cli/eql). +The install is **always EQL v3**. The full flag set is in the [CLI reference](/reference/cli/eql). <Callout type="warn"> -EQL v3 installs **directly against the database only**. `--migration`, `--drizzle`, `--latest`, and `--migrations-dir` are rejected for a v3 install; they exist for the v2 install paths. +**EQL installs directly against the database, not through a migration.** `stash eql install` rejects `--migration`, `--migrations-dir`, and `--latest`, and there is no Supabase migration variant to fall back on — one v3 SQL artifact targets every platform. -The practical consequence is local resets. `supabase db reset` rebuilds your database from your migrations directory, so it drops a v3 install. Re-run `stash eql install` after each reset. +The practical consequence is local resets. `supabase db reset` rebuilds your database from your migrations directory, so it drops the EQL install. Re-run `stash eql install` after each reset. + +`--drizzle` is rejected here too, but has its own answer: `stash eql migration --drizzle` generates a v3 install migration — including the `cs_migrations` tracking schema — so Drizzle projects can keep the install in their migration history and apply it with `drizzle-kit migrate`. That path is Drizzle's alone; it does not produce a `supabase/migrations/` file. </Callout> ## Grants From 1c925e58d5f4de4d91893a56d96b8b0c31979ba6 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Tue, 28 Jul 2026 21:52:04 +1000 Subject: [PATCH 119/151] docs(supabase): drop the v2-wrapper section, explain the two names instead MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `remove_v2` makes `encryptedSupabase` the v3 wrapper, so a section documenting it as "the EQL v2 dialect" would describe the opposite of what it names. The v2 dialect it described will never have existed for a reader of the live site, since these docs ship after that branch. Replaced with a short note on the naming, because the alias is the thing a reader actually needs: `encryptedSupabase` and `encryptedSupabaseV3` are the same function, either import works, and the V3 spelling is a deprecated alias kept for existing imports now that the suffix is redundant. Same for the type names. Also drops the "pick the dialect by function" framing — after the merge there is only one dialect. The examples on this page still say `encryptedSupabaseV3`, deliberately. That name is correct both today and after the merge, whereas `encryptedSupabase` means the OLD synchronous v2 wrapper on the currently published SDK (1.0.0-rc.4) — switching the examples now would document a different function with a different signature. They should be renamed once remove_v2 ships, along with this page's `verifiedAgainst`. Also fixes one cell in choose-your-stack, which is outside this PR's scope but factually wrong in the same way: it advertised `.like()` as something that "keeps working" on Supabase. It delegates to `matches()`, which raises on EQL 3.0.2+ through PostgREST. Swapped for `.order()`, which does. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- content/docs/get-started/choose-your-stack.mdx | 2 +- content/docs/reference/stack/supabase.mdx | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/content/docs/get-started/choose-your-stack.mdx b/content/docs/get-started/choose-your-stack.mdx index 94f9e5c..8ec8264 100644 --- a/content/docs/get-started/choose-your-stack.mdx +++ b/content/docs/get-started/choose-your-stack.mdx @@ -44,7 +44,7 @@ Managed platforms usually block custom operator class creation. That's why the d | Query layer | Path | What it looks like | |---|---|---| | Drizzle | [Drizzle integration](/stack/cipherstash/encryption/drizzle) | An `encryptedType` column and typed query operators. Your Drizzle code keeps its shape. | -| Supabase JS | [Supabase integration](/integrations/supabase) | `encryptedSupabase` wraps the client. `.eq()`, `.like()`, `.gt()` keep working. | +| Supabase JS | [Supabase integration](/integrations/supabase) | `encryptedSupabase` wraps the client. `.eq()`, `.gt()`, `.order()` keep working. | | Prisma | [Prisma integration](/stack/cipherstash/encryption/prisma-next) | Encrypt in the data layer around Prisma calls. | | Raw SQL | [Quickstart](/get-started/quickstart) | Encrypt the value, insert it, cast the query operand. | | An ORM we don't list | The SDK | Encrypt before write, decrypt after read. Every ORM supports that. | diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 4bb99d2..7f25844 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -282,6 +282,8 @@ The builder is deferred: method calls record intent, and nothing executes until Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged**. RLS decides which rows come back; encryption decides whether what is in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in [Supabase fundamentals](/integrations/supabase/fundamentals). -## The v2 wrapper +## Two names, one function -`encryptedSupabase` is the EQL v2 dialect. It ships from the same `@cipherstash/stack-supabase` package and is unchanged from before the 1.0 split. It is synchronous, takes `{ encryptionClient, supabaseClient }`, requires `.from(tableName, schema)` with the schema as a second argument, rejects `select('*')`, and uses `.like()` / `.ilike()` for free-text search. Pick the dialect by function: v2 targets the EQL v2 composite type, v3 targets the `public.eql_v3_*` domains. New work should use `encryptedSupabaseV3`. +`encryptedSupabase` and `encryptedSupabaseV3` are the **same function**, and either import works. The `V3` suffix dates from when this package also shipped an EQL v2 dialect; now that EQL v3 is the only generation the wrapper authors, the suffix is redundant, so `encryptedSupabase` is the preferred spelling and `encryptedSupabaseV3` is a deprecated alias kept for existing imports. + +The type names work the same way: `EncryptedSupabaseOptions`, `EncryptedSupabaseInstance`, and `TypedEncryptedSupabaseInstance`, with their `…V3…` forms as deprecated aliases. From 37570a476b11f26cb912cd766a6474140482368d Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 10:50:30 +1000 Subject: [PATCH 120/151] docs(integrations): categorised landing page, and fold Fundamentals + Data layer away MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Four structural changes to the Integrations section: - The /integrations landing page leaves the sidebar (`"!index"` in meta.json, which drops it as both a child item and the folder link). It stays reachable from the docs index, Get started, and the v2 redirect map — it just isn't a nav entry. - The landing page becomes a plain list by category: Database (Supabase, Prisma Postgres) and ORM (Supabase-js, Prisma Next, Drizzle). The decision content it used to duplicate — the Postgres platform table, the ORM table, the identity-provider table — already lives on /get-started/choose-your-stack, which it now points at instead. - Supabase Overview and Fundamentals merge into one Overview page. The overlap was substantial: both explained EQL column types, both covered RLS, and both explained why the Table Editor can't create encrypted columns. Fundamentals' section anchors are preserved on the merged page, so #installing-eql, #row-level-security, #working-in-the-dashboard and #connecting-your-project-to-cipherstash keep resolving; inbound links across auth, quickstart and the wrapper reference are repointed. - Data layer folds into the Quickstart as "Using an ORM instead", condensed from 71 lines to ~20: what the direct-connection path is, which Supabase connection string to use, and the fact that a privileged direct connection bypasses RLS. Verified against the rendered output rather than the source: the built sidebar has no bare /integrations link, and every anchor the merge moved resolves to a real id on the merged page. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- content/docs/integrations/index.mdx | 51 ++--- content/docs/integrations/meta.json | 2 +- content/docs/integrations/supabase/auth.mdx | 2 +- .../integrations/supabase/fundamentals.mdx | 191 ------------------ content/docs/integrations/supabase/index.mdx | 186 ++++++++++++++--- content/docs/integrations/supabase/meta.json | 9 +- content/docs/integrations/supabase/orms.mdx | 71 ------- .../docs/integrations/supabase/quickstart.mdx | 32 ++- content/docs/reference/stack/supabase.mdx | 2 +- 9 files changed, 200 insertions(+), 346 deletions(-) delete mode 100644 content/docs/integrations/supabase/fundamentals.mdx delete mode 100644 content/docs/integrations/supabase/orms.mdx diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index 6791c28..f60ea3e 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -1,65 +1,46 @@ --- title: Integrations -description: "Set up CipherStash with your Postgres platform, your ORM, and your identity provider." +description: "Every CipherStash integration, by category: the Postgres platforms encrypted data lives in, and the query layers that read and write it." type: concept components: [encryption, eql, platform] audience: [developer] --- -CipherStash encrypts fields in your application and keeps them queryable in Postgres. Which integration you reach for depends on how your application talks to the database, not on what you are encrypting. +Every integration below writes the same ciphertext into the same [EQL](/reference/eql) columns, so none of them is a one-way door. You can move a table from one to another without re-encrypting it, and use more than one at once — an ORM for application queries, raw SQL for migrations. -Everything here writes the same ciphertext into the same [EQL](/reference/eql) columns, so these are not one-way doors. You can move a table from one path to another without re-encrypting it, and mix them in one codebase: an ORM for application queries, raw SQL for migrations. +## Database -## Where your data lives +Where the encrypted data lives. EQL installs into any Postgres you can connect to, with no extension and no superuser. <Cards> <Card title="Supabase" href="/integrations/supabase"> - Wrap the Supabase client so `.eq()`, `.gt()`, and `.order()` keep working on encrypted columns. Row Level Security and Supabase Auth apply unchanged. + Install EQL with the `stash` CLI, then query encrypted columns through PostgREST. Row Level Security, Supabase Auth, and Edge Functions all apply unchanged. </Card> - <Card title="Any other Postgres" href="/get-started/quickstart"> - Neon, RDS, Aurora, Cloud SQL, or a container. EQL installs into any Postgres you can connect to, with no extension and no superuser. + <Card title="Prisma Postgres" href="/integrations/prisma-next"> + Prisma's hosted Postgres. EQL is installed by the Prisma Next migration system, in the same sweep that creates your tables. </Card> </Cards> -## How you query it +## ORM + +How your application queries it. <Cards> - <Card title="Drizzle" href="/integrations/drizzle"> - Concrete encrypted column types and capability-checked operators. Targets EQL v3. + <Card title="Supabase-js" href="/reference/stack/supabase"> + `encryptedSupabaseV3` wraps your existing client so `.eq()`, `.in()`, `.gt()`, and `.order()` keep working on encrypted columns. </Card> <Card title="Prisma Next" href="/integrations/prisma-next"> Encrypted columns declared in `schema.prisma`. Targets EQL v2. Not classic Prisma. </Card> - <Card title="Raw SQL" href="/get-started/quickstart"> - Encrypt the value, insert it, cast the query operand. The SDK's whole surface is `encrypt` and `encryptQuery`. - </Card> - <Card title="An ORM we don't list" href="/reference/stack"> - Encrypt before a write, decrypt after a read. Every ORM supports that, and nothing is missing. + <Card title="Drizzle" href="/integrations/drizzle"> + Concrete encrypted column types and capability-checked operators. Targets EQL v3. </Card> </Cards> <Callout type="info"> -Not using Postgres? The SDK still encrypts values that never touch a database, and non-Postgres stores like [DynamoDB](/stack/cipherstash/encryption/dynamodb), with no EQL involved. EQL is the Postgres surface, not the encryption itself. +Not on this list? Any ORM works without an integration — encrypt before a write and decrypt after a read with the [Stack SDK](/reference/stack), which is what the integrations do for you. [CipherStash Proxy](/reference/proxy) covers the case where you cannot change the application at all, and the SDK also encrypts values that never reach Postgres, including non-Postgres stores like [DynamoDB](/stack/cipherstash/encryption/dynamodb). </Callout> -## Who is allowed to decrypt - -Reach for identity binding when a value should be decryptable only by the user it belongs to, rather than by anything holding the application's credentials. It needs an OIDC provider, registered once in the [Dashboard](https://dashboard.cipherstash.com/workspaces/_/oidc-providers). - -| Provider | Supported | -| --- | --- | -| Supabase Auth | Yes. See [Supabase Auth](/integrations/supabase/auth) | -| Clerk | Yes | -| Auth0 | Yes | -| Okta | Yes | -| Any OIDC issuer | Yes, if it publishes a discovery endpoint | - -See [provable access control](/solutions/provable-access) for what this buys you, and what it does not. - -## You cannot change the application - -[CipherStash Proxy](/reference/proxy) sits in front of Postgres and speaks EQL for you. Point your connection string at it. Because it speaks the Postgres wire protocol, the language your application is written in stops mattering. - ## Still deciding -[Choose your stack](/get-started/choose-your-stack) walks the four decisions in order: SDK or Proxy, your Postgres, your ORM, and your identity provider. +[Choose your stack](/get-started/choose-your-stack) walks the four decisions in order: SDK or Proxy, your Postgres, your ORM, and your identity provider — including which identity providers can bind decryption to the signed-in user. diff --git a/content/docs/integrations/meta.json b/content/docs/integrations/meta.json index 074c8ed..eb155bd 100644 --- a/content/docs/integrations/meta.json +++ b/content/docs/integrations/meta.json @@ -1,5 +1,5 @@ { "title": "Integrations", "icon": "Blocks", - "pages": ["index", "supabase", "..."] + "pages": ["!index", "supabase", "..."] } diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index e0c37d9..ecbaff7 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -24,7 +24,7 @@ CipherStash needs to trust your Supabase project as an OIDC issuer before it wil https://<project-ref>.supabase.co/auth/v1 ``` -> **Good to know**: the dashboard's [Supabase integration](/integrations/supabase/fundamentals#connecting-your-project-to-cipherstash) can register this for you in one click while it's connected to your project over OAuth. Manual OIDC configuration is covered in the [auth reference](/reference/auth). +> **Good to know**: the dashboard's [Supabase integration](/integrations/supabase#connecting-your-project-to-cipherstash) can register this for you in one click while it's connected to your project over OAuth. Manual OIDC configuration is covered in the [auth reference](/reference/auth). ## Federate the Supabase session diff --git a/content/docs/integrations/supabase/fundamentals.mdx b/content/docs/integrations/supabase/fundamentals.mdx deleted file mode 100644 index 4f441d2..0000000 --- a/content/docs/integrations/supabase/fundamentals.mdx +++ /dev/null @@ -1,191 +0,0 @@ ---- -title: Fundamentals -description: "Install and operate EQL on Supabase Postgres — migrations vs the SQL Editor, role grants, column types, functional indexes, RLS — and work with encrypted columns across the Supabase dashboard." -type: guide -components: [eql] -audience: [developer] -verifiedAgainst: - eql: "3.0.0" ---- - -EQL installs into Supabase Postgres as plain SQL — no extension packaging, no superuser, no separate Supabase build. This page covers the database side in full — how to install so it survives `supabase db reset`, the grants Supabase's roles need, choosing column types, indexing, and how encryption composes with Row Level Security — then walks through what encrypted columns look like across the Supabase dashboard. - -If you just want the fastest path from empty project to encrypted table, start with the [Quickstart](/integrations/supabase/quickstart); this page is the reference behind it. - -## Installing EQL - -The `stash` CLI installs EQL. It reads `DATABASE_URL`, detects that it points at Supabase, and installs directly against the database: - -```bash example-id="supabase-eql-install" -npx stash eql install -``` - -Pass `--database-url <url>` to override the connection for a single run without writing it to disk. The install is idempotent, so `--force` reinstalls over an existing schema, and `--dry-run` shows what would happen. Check what you ended up with: - -```bash -npx stash eql status -``` - -The install is **always EQL v3**. The full flag set is in the [CLI reference](/reference/cli/eql). - -<Callout type="warn"> -**EQL installs directly against the database, not through a migration.** `stash eql install` rejects `--migration`, `--migrations-dir`, and `--latest`, and there is no Supabase migration variant to fall back on — one v3 SQL artifact targets every platform. - -The practical consequence is local resets. `supabase db reset` rebuilds your database from your migrations directory, so it drops the EQL install. Re-run `stash eql install` after each reset. - -`--drizzle` is rejected here too, but has its own answer: `stash eql migration --drizzle` generates a v3 install migration — including the `cs_migrations` tracking schema — so Drizzle projects can keep the install in their migration history and apply it with `drizzle-kit migrate`. That path is Drizzle's alone; it does not produce a `supabase/migrations/` file. -</Callout> - -## Grants - -Supabase's API roles need access to the `eql_v3` schema, because your table columns are typed with its domains and your queries resolve its operators and functions: - -```sql -GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; -GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; -``` - -Run this once after install (and after upgrades that add functions). Without `USAGE`, PostgREST queries against tables with encrypted columns fail with a permission error on the schema. - -You do **not** need to add `eql_v3` to the *Exposed schemas* list in the [API settings](https://supabase.com/dashboard/project/_/settings/api) for normal queries — your tables live in `public`. Expose it only if you want to call EQL functions directly over the REST API. - -## Choosing column types - -The column's domain type fixes what it can do, and the wrapper reads that type straight from the database, so there is no second declaration to keep in sync. The full type catalogue lives in the EQL reference — [numbers](/reference/eql/numbers), [dates & times](/reference/eql/dates-and-times), [text](/reference/eql/text), [JSON](/reference/eql/json), [booleans](/reference/eql/booleans) — but the shape is always the same: - -| You query it with | Type the column as | EQL term | -| --- | --- | --- | -| Nothing (store/decrypt only) | `public.eql_v3_<T>` | none | -| `.eq()` / `.in()` | `public.eql_v3_<T>_eq` | `hm` | -| Ranges, `.order()` | `public.eql_v3_<T>_ord` | `op` | -| Free-text match | `public.eql_v3_text_match` | `bf` | -| All three (text) | `public.eql_v3_text_search` | `hm`, `op`, `bf` | -| Encrypted JSON | `public.eql_v3_json` | `sv` | - -Declare only the capabilities you use: every extra capability stores extra searchable material with defined leakage — see [Searchable encryption](/concepts/searchable-encryption). - -These are the column's capabilities in the database. Two of them are not reachable through supabase-js on EQL 3.0.2+ — free-text match and encrypted JSON both need an operand cast PostgREST cannot express — so if you plan to query either, read [that constraint](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) before choosing the type. Equality and ordering are unaffected. - -## Indexes - -Encrypted columns index through **ordinary functional indexes** over EQL's term-extractor functions. This is why EQL works on Supabase unchanged: the default ordering term indexes under Postgres's own `bytea_ops`, so no custom operator class is needed, just `CREATE INDEX`, which any migration can run: - -```sql -CREATE INDEX patients_email_eq ON patients USING hash (eql_v3.eq_term(email)); -CREATE INDEX patients_dob_ord ON patients USING btree (eql_v3.ord_term(date_of_birth)); -CREATE INDEX patients_name_match ON patients USING gin (eql_v3.match_term(name)); -ANALYZE patients; -``` - -Add them once a table has real row counts (thousands, not dozens). Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes) — all of it applies to Supabase verbatim. - -<Callout type="warn"> -Creating a custom operator class needs superuser, which Supabase does not grant. The EQL installer detects this and **disables the ORE-backed domains** (`_ord_ore`, `text_search_ore`), which then raise `feature_not_supported` on the first value written. Use `_ord` and `text_search`, whose CLLW OPE ordering term indexes under the default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). -</Callout> - -## Row Level Security - -Encrypted columns and RLS compose — they solve different problems: - -- **RLS** decides *which rows* a role may query. It's enforced in the database, on whatever the database stores. -- **Encryption** decides *whether a value can be read at all*. Keys stay outside the database, so anything that bypasses RLS — a leaked `service_role` key, an over-broad policy, a stolen backup, direct disk access — yields ciphertext, not plaintext. - -Keep writing policies exactly as before; the `encryptedSupabaseV3` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. - -One practical pattern: leave your row-ownership predicate on a plaintext `user_id uuid` column, and encrypt the *contents* of the row. RLS scopes the rows to `auth.uid()`; CipherStash makes their contents unreadable to everything except your app. To go one step further and make a row's contents decryptable *only* by its owner — even to your own service role — see [Supabase Auth](/integrations/supabase/auth). - -## Connections and pooling - -The `encryptedSupabaseV3` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. It does open one direct Postgres connection at startup, over `DATABASE_URL`, to introspect your encrypted columns. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), or an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. The direct-connection path is covered in [Data layer](/integrations/supabase/orms). - -## Working in the dashboard - -Encrypted columns live inside your normal Supabase dashboard — no separate tool. Here's what to expect in each part of it. - -### Table Editor - -Encrypted columns show **ciphertext payloads**, not plaintext. A `patients` row looks like: - -| id | email | name | plan | -| --- | --- | --- | --- | -| 1 | `{"v": 3, "i": {"t": "patients", "c": "email"}, "c": "mBbKmsMM%bK#…", "hm": "9c8ec1d2…"}` | `{"v": 3, "i": …, "c": "x7Qq…", "bf": [42, 1290, …]}` | `standard` | - -This is the point, not a limitation: what the Table Editor shows is exactly what a backup, a replication stream, a leaked `service_role` key, or a curious operator sees. The payload structure (`v`, `i`, `c`, and the index terms) is documented in [EQL core concepts](/reference/eql/core-concepts) — none of it reveals the plaintext. - -Practical consequences: - -- **Reading data** happens through your app (or any client using the [Stack SDK](/reference/stack)); the dashboard can't decrypt, because the keys never go near it. -- **Hand-editing an encrypted cell** in the Table Editor will produce a value that fails the column's `CHECK` constraint or fails to decrypt — treat encrypted columns as read-only in the dashboard. -- **Filtering and sorting** on encrypted columns in the Table Editor UI operates on the raw payloads, so it won't return meaningful results. Query through your app instead. - -### Creating encrypted columns - -Use the **SQL Editor** for schema work on encrypted columns: - -```sql -ALTER TABLE patients ADD COLUMN tax_id public.eql_v3_text_eq; -``` - -The `eql_v3_*` domain types are user-defined types, and the Table Editor's column-type picker doesn't reliably surface custom domains — SQL is the dependable path, and it's what your migrations should contain anyway. - -### SQL Editor - -Everything in the [EQL reference](/reference/eql) can be run from the SQL Editor — installing EQL, creating indexes, `EXPLAIN`-ing query plans. Two checks worth knowing: - -```sql --- Is EQL installed, and which version? -SELECT eql_v3.version(); - --- Which columns are encrypted? -SELECT table_name, column_name, udt_name -FROM information_schema.columns -WHERE udt_schema = 'eql_v3'; -``` - -### API settings - -Normal operation needs **no** API-settings changes: your tables are in the `public` schema, and the wrapper's queries are ordinary PostgREST calls. The `eql_v3` schema needs role *grants* (see [Grants](#grants) above), but does **not** need to be in the *Exposed schemas* list unless you want to call EQL functions directly over REST. - -## Connecting your project to CipherStash - -Connecting is optional — you can set the `CS_*` credentials by hand ([Quickstart](/integrations/supabase/quickstart#install-the-sdk-and-connect-your-workspace)). The CipherStash dashboard's first-class Supabase integration at [dashboard.cipherstash.com](https://dashboard.cipherstash.com) automates it: - -<Steps> -<Step> -### Connect via OAuth - -Authorize CipherStash against your Supabase organization. The integration requests read-only scopes (`projects:read`, `database:read`) — it never sees your database secrets. -</Step> -<Step> -### Pick a project and run the readiness checks - -The setup hub verifies EQL is installed (`eql_v3.version()`), checks for encrypted columns, and flags anything missing. -</Step> -<Step> -### Configure identity (optional) - -One click registers your project's Supabase Auth issuer (`https://<project-ref>.supabase.co/auth/v1`) with your workspace, enabling [identity-aware encryption](/integrations/supabase/auth). -</Step> -<Step> -### Copy your environment - -The hub emits the `CS_*` credentials block for your app's environment, ready to pair with your existing `SUPABASE_URL` and keys. -</Step> -</Steps> - -## Where to next - -<Cards> - <Card title="Quickstart" href="/integrations/supabase/quickstart"> - The end-to-end walkthrough this page backs. - </Card> - <Card title="EQL indexes" href="/reference/eql/indexes"> - Full indexing recipes and EXPLAIN verification. - </Card> - <Card title="Supabase Auth" href="/integrations/supabase/auth"> - Federate the session and lock decryption to the authenticated user. - </Card> - <Card title="Encrypt existing data" href="/guides/migration/encrypt-existing-data"> - Adopt encryption column-by-column on a live table. - </Card> -</Cards> diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index e7c827a..046aac1 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -1,6 +1,6 @@ --- title: Overview -description: "Searchable, application-level encryption for your Supabase project: encrypt sensitive fields in your app before they reach Postgres, and keep them queryable with the Supabase.js calls you already use." +description: "Searchable, application-level encryption for your Supabase project: what it gives you, how EQL installs into Supabase Postgres, and how to operate encrypted columns across grants, indexes, RLS, and the dashboard." type: concept components: [encryption, eql, platform] audience: [developer, ciso] @@ -17,54 +17,178 @@ import { faqPrivacy, faqScaling, faqKms, faqRlsVsEncryption, faqFreeTier } from CipherStash adds application-level encryption to your Supabase project. Sensitive fields (names, emails, health records, anything you choose) are encrypted inside your application before they ever reach Postgres, so plaintext never touches your database, its backups, or its replication streams. CipherStash never sees your data or your keys. -Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, then declare each protected column with the encrypted type that matches the operations you need, then query it with the same `.eq()`, `.order()`, and text-search calls you use today. +Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, declare each protected column with the encrypted type that matches the operations you need, then query it with the same `.eq()`, `.gt()`, and `.order()` calls you use today. -<Cards> - <Card title="Quickstart" href="/integrations/supabase/quickstart"> - Empty project to an encrypted, searchable table in about fifteen minutes. - </Card> - <Card title="Fundamentals" href="/integrations/supabase/fundamentals"> - Install and operate EQL on Supabase Postgres, and work with encrypted columns in the dashboard. - </Card> -</Cards> +If you want the fastest path from an empty project to an encrypted table, start with the [Quickstart](/integrations/supabase/quickstart) — about fifteen minutes. This page is the reference behind it: how EQL installs and what Supabase's roles need from it, choosing and indexing column types, how encryption composes with Row Level Security, and what encrypted data looks like across the dashboard. ## How it works -CipherStash encrypted search is built on the [Encrypted Query Language (EQL)](/reference/eql), which can be installed into any Supabase database. Like regular Postgres, EQL provides a set of common data types and functions, but is designed for working with encrypted data. +Encrypted search is built on [EQL](/reference/eql), which installs into any Supabase database as plain SQL. Like regular Postgres, EQL provides a set of data types and functions, but designed for working with encrypted data. + +Each protected column is declared with an EQL domain type whose name states what the column can do. The wrapper reads that type straight from the database, so there is no second declaration to keep in sync. The full type catalogue lives in the EQL reference — [numbers](/reference/eql/numbers), [dates & times](/reference/eql/dates-and-times), [text](/reference/eql/text), [JSON](/reference/eql/json), [booleans](/reference/eql/booleans) — but the shape is always the same: + +| You query it with | Type the column as | EQL term | +| --- | --- | --- | +| Nothing (store/decrypt only) | `public.eql_v3_<T>` | none | +| `.eq()` / `.in()` | `public.eql_v3_<T>_eq` | `hm` | +| Ranges, `.order()` | `public.eql_v3_<T>_ord` | `op` | +| Free-text match | `public.eql_v3_text_match` | `bf` | +| All three (text) | `public.eql_v3_text_search` | `hm`, `op`, `bf` | +| Encrypted JSON | `public.eql_v3_json` | `sv` | + +Declare only the capabilities you use: every extra capability stores extra searchable material with defined leakage — see [Searchable encryption](/concepts/searchable-encryption). -Use EQL `base` types to encrypt table columns containing dates, numbers, text, or JSON. Type modifiers let you specify how you want to query data stored in a column of that type: +Those are the column's capabilities in the database. Two of them are not reachable through supabase-js on EQL 3.0.2+ — free-text match and encrypted JSON both need an operand cast PostgREST cannot express — so if you plan to query either, read [that constraint](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) before choosing the type. Equality and ordering are unaffected. + +## Installing EQL + +The `stash` CLI installs EQL. It reads `DATABASE_URL`, detects that it points at Supabase, and installs directly against the database: + +```bash example-id="supabase-eql-install" +npx stash eql install +``` + +Pass `--database-url <url>` to override the connection for a single run without writing it to disk. The install is idempotent, so `--force` reinstalls over an existing schema, and `--dry-run` shows what would happen. Check what you ended up with: + +```bash +npx stash eql status +``` -- Use `date_eq` to filter encrypted dates with `WHERE` -- Use `integer_ord` to filter and sort encrypted integers with `WHERE` and `ORDER BY` -- Use `text_search` for encrypted text search: containment matching (like `LIKE '%term%'`), `WHERE` clauses, and `ORDER BY` +The install is **always EQL v3**. The full flag set is in the [CLI reference](/reference/cli/eql). + +<Callout type="warn"> +**EQL installs directly against the database, not through a migration.** `stash eql install` rejects `--migration`, `--migrations-dir`, and `--latest`, and there is no Supabase migration variant to fall back on — one v3 SQL artifact targets every platform. + +The practical consequence is local resets. `supabase db reset` rebuilds your database from your migrations directory, so it drops the EQL install. Re-run `stash eql install` after each reset. + +`--drizzle` is rejected here too, but has its own answer: `stash eql migration --drizzle` generates a v3 install migration — including the `cs_migrations` tracking schema — so Drizzle projects can keep the install in their migration history and apply it with `drizzle-kit migrate`. That path is Drizzle's alone; it does not produce a `supabase/migrations/` file. +</Callout> + +## Grants + +Supabase's API roles need access to the `eql_v3` schema, because your table columns are typed with its domains and your queries resolve its operators and functions: + +```sql +GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; +GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; +``` + +Run this once after install (and after upgrades that add functions). Without `USAGE`, PostgREST queries against tables with encrypted columns fail with a permission error on the schema. + +You do **not** need to add `eql_v3` to the *Exposed schemas* list in the [API settings](https://supabase.com/dashboard/project/_/settings/api) for normal queries — your tables live in `public`. Expose it only if you want to call EQL functions directly over the REST API. + +## Indexes + +Encrypted columns index through **ordinary functional indexes** over EQL's term-extractor functions. This is why EQL works on Supabase unchanged: the default ordering term indexes under Postgres's own `bytea_ops`, so no custom operator class is needed, just `CREATE INDEX`, which any migration can run: + +```sql +CREATE INDEX patients_email_eq ON patients USING hash (eql_v3.eq_term(email)); +CREATE INDEX patients_dob_ord ON patients USING btree (eql_v3.ord_term(date_of_birth)); +CREATE INDEX patients_name_match ON patients USING gin (eql_v3.match_term(name)); +ANALYZE patients; +``` -Most types also support `JOIN`, `GROUP BY`, and `UNION` queries. See the [EQL reference](/reference/eql) for a full list. +Add them once a table has real row counts (thousands, not dozens). Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes) — all of it applies to Supabase verbatim. -<Callout type="info"> - `text_search` match is *containment* (`LIKE '%term%'`-style), not full SQL `LIKE`: there are no wildcards or anchoring, and it can occasionally return a false positive. Use `text_eq` (`=`) for exact matching. +<Callout type="warn"> +Creating a custom operator class needs superuser, which Supabase does not grant. The EQL installer detects this and **disables the ORE-backed domains** (`_ord_ore`, `text_search_ore`), which then raise `feature_not_supported` on the first value written. Use `_ord` and `text_search`, whose CLLW OPE ordering term indexes under the default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). </Callout> -Declare EQL columns in SQL, either in the Supabase Dashboard's SQL Editor or in a migration: +## Row Level Security -```sql filename="migration.sql" -CREATE TABLE users ( - id serial, - email public.eql_v3_text_search, - dob public.eql_v3_date_ord -) +Encrypted columns and RLS compose — they solve different problems: + +- **RLS** decides *which rows* a role may query. It's enforced in the database, on whatever the database stores. +- **Encryption** decides *whether a value can be read at all*. Keys stay outside the database, so anything that bypasses RLS — a leaked `service_role` key, an over-broad policy, a stolen backup, direct disk access — yields ciphertext, not plaintext. + +Run both. Keep writing policies exactly as before; the `encryptedSupabaseV3` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. + +One practical pattern: leave your row-ownership predicate on a plaintext `user_id uuid` column, and encrypt the *contents* of the row. RLS scopes the rows to `auth.uid()`; CipherStash makes their contents unreadable to everything except your app. To go one step further and make a row's contents decryptable *only* by its owner — even to your own service role — see [Supabase Auth](/integrations/supabase/auth). + +## Connections and pooling + +The `encryptedSupabaseV3` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. It does open one direct Postgres connection at startup, over `DATABASE_URL`, to introspect your encrypted columns. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), or an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. The direct-connection path is covered in [Quickstart → Using an ORM instead](/integrations/supabase/quickstart#using-an-orm-instead). + +## Working in the dashboard + +Encrypted columns live inside your normal Supabase dashboard — no separate tool. Here's what to expect in each part of it. + +### Table Editor + +Encrypted columns show **ciphertext payloads**, not plaintext. A `patients` row looks like: + +| id | email | name | plan | +| --- | --- | --- | --- | +| 1 | `{"v": 3, "i": {"t": "patients", "c": "email"}, "c": "mBbKmsMM%bK#…", "hm": "9c8ec1d2…"}` | `{"v": 3, "i": …, "c": "x7Qq…", "bf": [42, 1290, …]}` | `standard` | + +This is the point, not a limitation: what the Table Editor shows is exactly what a backup, a replication stream, a leaked `service_role` key, or a curious operator sees. The payload structure (`v`, `i`, `c`, and the index terms) is documented in [EQL core concepts](/reference/eql/core-concepts) — none of it reveals the plaintext. + +Practical consequences: + +- **Reading data** happens through your app (or any client using the [Stack SDK](/reference/stack)); the dashboard can't decrypt, because the keys never go near it. +- **Hand-editing an encrypted cell** in the Table Editor will produce a value that fails the column's `CHECK` constraint or fails to decrypt — treat encrypted columns as read-only in the dashboard. +- **Filtering and sorting** on encrypted columns in the Table Editor UI operates on the raw payloads, so it won't return meaningful results. Query through your app instead. + +### Creating encrypted columns + +Use the **SQL Editor** for schema work on encrypted columns: + +```sql +ALTER TABLE patients ADD COLUMN tax_id public.eql_v3_text_eq; +``` + +The `eql_v3_*` domain types are user-defined types, and the Table Editor's column-type picker doesn't reliably surface custom domains — SQL is the dependable path, and it's what your migrations should contain anyway. + +### SQL Editor + +Everything in the [EQL reference](/reference/eql) can be run from the SQL Editor — installing EQL, creating indexes, `EXPLAIN`-ing query plans. Two checks worth knowing: + +```sql +-- Is EQL installed, and which version? +SELECT eql_v3.version(); + +-- Which columns are encrypted? +SELECT table_name, column_name, udt_name +FROM information_schema.columns +WHERE udt_schema = 'eql_v3'; ``` -EQL's column types are Postgres domains, and the Dashboard's Table Editor does not reliably offer custom domains in its column-type picker, so SQL is the dependable path. It is also what your migrations should contain either way. +### API settings + +Normal operation needs **no** API-settings changes: your tables are in the `public` schema, and the wrapper's queries are ordinary PostgREST calls. The `eql_v3` schema needs role *grants* (see [Grants](#grants) above), but does **not** need to be in the *Exposed schemas* list unless you want to call EQL functions directly over REST. + +## Connecting your project to CipherStash + +Connecting is optional — you can set the `CS_*` credentials by hand ([Quickstart](/integrations/supabase/quickstart#install-the-sdk-and-connect-your-workspace)). The CipherStash dashboard's first-class Supabase integration at [dashboard.cipherstash.com](https://dashboard.cipherstash.com) automates it: + +<Steps> +<Step> +### Connect via OAuth + +Authorize CipherStash against your Supabase organization. The integration requests read-only scopes (`projects:read`, `database:read`) — it never sees your database secrets. +</Step> +<Step> +### Pick a project and run the readiness checks + +The setup hub verifies EQL is installed (`eql_v3.version()`), checks for encrypted columns, and flags anything missing. +</Step> +<Step> +### Configure identity (optional) + +One click registers your project's Supabase Auth issuer (`https://<project-ref>.supabase.co/auth/v1`) with your workspace, enabling [identity-aware encryption](/integrations/supabase/auth). +</Step> +<Step> +### Copy your environment -## Built for the Supabase stack +The hub emits the `CS_*` credentials block for your app's environment, ready to pair with your existing `SUPABASE_URL` and keys. +</Step> +</Steps> -CipherStash layers onto the tools you already use. Each area has a page that goes deeper: +## The rest of this section -- **[Row Level Security](/integrations/supabase/fundamentals#row-level-security):** RLS controls *who can query* your data; CipherStash controls *whether it can be read at all*. Run both, so a bypassed policy, a leaked `service_role` key, or a stolen backup yields only ciphertext. -- **[Quickstart](/integrations/supabase/quickstart):** encrypt in your app, then store and query through the same Supabase.js client with the `.eq()` and `.order()` calls you use today. +- **[Quickstart](/integrations/supabase/quickstart):** the end-to-end walkthrough — install EQL, wrap your client, query encrypted data — plus the direct-connection path if you use Drizzle or Prisma. - **[Supabase Auth](/integrations/supabase/auth):** federate the signed-in session so encryption authenticates as the user, and optionally lock decryption to their identity. - **[Edge Functions](/integrations/supabase/edge-functions):** run encryption server-side through the WebAssembly build. -- **[Data layer](/integrations/supabase/orms):** first-class support for Prisma, Drizzle, and Next.js alongside Supabase. - **[Key management and audit logging](/security/audit-logging):** per-value keys and rotation through CipherStash ZeroKMS, a decryption access trail out of the box, optional Bring Your Own Key, and FIPS and SOC 2 compliance. ## FAQ diff --git a/content/docs/integrations/supabase/meta.json b/content/docs/integrations/supabase/meta.json index 02d5b3e..0312a00 100644 --- a/content/docs/integrations/supabase/meta.json +++ b/content/docs/integrations/supabase/meta.json @@ -1,12 +1,5 @@ { "title": "Supabase", "icon": "Supabase", - "pages": [ - "index", - "quickstart", - "fundamentals", - "orms", - "auth", - "edge-functions" - ] + "pages": ["index", "quickstart", "auth", "edge-functions"] } diff --git a/content/docs/integrations/supabase/orms.mdx b/content/docs/integrations/supabase/orms.mdx deleted file mode 100644 index 0b9a14c..0000000 --- a/content/docs/integrations/supabase/orms.mdx +++ /dev/null @@ -1,71 +0,0 @@ ---- -title: Data layer -description: "Two ways to reach your Supabase data with CipherStash: the encryptedSupabaseV3 wrapper over PostgREST, or a direct Postgres connection through an ORM like Drizzle or Prisma." -type: guide -components: [encryption, eql] -audience: [developer] ---- - -There are two ways an application talks to a Supabase database, and CipherStash rides along on both. Which one you use decides where encryption plugs in — so start here before reaching for the ORM-specific guide. - -## Two paths to your data - -| | PostgREST path | Direct-connection path | -| --- | --- | --- | -| **Client** | `supabase-js` (+ `encryptedSupabaseV3`) | Drizzle, Prisma, or raw `pg` | -| **Transport** | Supabase's REST API (PostgREST) | A Postgres connection (pooler or direct) | -| **How encryption plugs in** | The [`encryptedSupabaseV3`](/reference/stack/supabase) wrapper encrypts/decrypts around each request | The [Stack SDK](/reference/stack) encrypts values in your app; EQL-typed columns store and search them | -| **Best for** | Supabase-native apps, Edge Functions, RLS via the user's JWT | Existing ORM codebases, migrations, complex joins | - -Both write the **same ciphertext into the same EQL columns** — the [Fundamentals](/integrations/supabase/fundamentals) database setup is identical either way. The difference is only in how your app connects and where the encrypt/decrypt step lives. You can even mix them: an `encryptedSupabaseV3` client for app queries and Drizzle for migrations against the same tables. - -The [Quickstart](/integrations/supabase/quickstart) covers the PostgREST path end-to-end. This page covers the direct-connection path and the Supabase-specific glue it needs. - -## Using an ORM - -The ORM integrations are **database-agnostic** — Supabase is Postgres, so the encryption mechanics are the same as anywhere else. Follow the canonical guide for your ORM, then apply the Supabase connection notes below: - -<Cards> - <Card title="Drizzle" href="/integrations/drizzle"> - Encrypted column types, query operators, and EQL migrations with Drizzle. - </Card> - <Card title="Prisma Next" href="/integrations/prisma-next"> - Encrypted fields and searchable queries with Prisma. - </Card> -</Cards> - -## Connecting to Supabase Postgres - -An ORM connects over a Postgres connection string, not the REST API. Supabase gives you two, and the choice matters for a serverless or edge deployment: - -- **Direct connection** (port `5432`) — one long-lived connection to the database. Use it for migrations and for long-running servers. Not suitable for serverless functions, which open a connection per invocation. -- **Supavisor pooler** — a connection pooler in front of Postgres: - - **Transaction mode** (port `6543`) — a pooled connection per transaction. Use this for serverless / edge / Next.js Route Handlers, where connections are short-lived and numerous. - - **Session mode** (port `5432` via the pooler) — pooled but session-scoped, for clients that need session features. - -Nothing about encryption changes the connection layer: EQL is passive SQL and the Stack SDK encrypts in your app, so use the **same connection string you'd use without CipherStash**. Point your migration tooling at the direct connection and your app at the transaction pooler, exactly as Supabase recommends. - -> **Good to know**: run EQL migrations through the direct connection (or Supabase's migrations directory), not the transaction pooler — DDL and the EQL install script want a real session. See [Fundamentals → Installing EQL](/integrations/supabase/fundamentals#installing-eql). - -## Row Level Security on the direct path - -RLS composes differently depending on which connection role you use: - -- The **`encryptedSupabaseV3` / PostgREST path** carries the end user's JWT, so `auth.uid()` and your policies apply automatically. -- The **direct-connection path** typically authenticates as a privileged role (a pooler connection string for `postgres` or `service_role`), which **bypasses RLS**. If you rely on RLS for row scoping, either connect as the `authenticated` role with the user's JWT (setting `request.jwt.claims`), or enforce that scoping in your ORM query. - -Either way, encryption is unaffected: values are ciphertext regardless of which role reads them. RLS decides *which rows* are returned; CipherStash decides *whether their contents can be read at all* — see [Fundamentals → Row Level Security](/integrations/supabase/fundamentals#row-level-security). - -## Where to next - -<Cards> - <Card title="Quickstart" href="/integrations/supabase/quickstart"> - The PostgREST path end-to-end with encryptedSupabaseV3. - </Card> - <Card title="Fundamentals" href="/integrations/supabase/fundamentals"> - Database setup, grants, indexes, and RLS — shared by both paths. - </Card> - <Card title="CipherStash Proxy" href="/reference/proxy"> - Encrypt at the connection layer instead of in the app — an option for some ORM setups. - </Card> -</Cards> diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 89efeb7..7134390 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -40,7 +40,7 @@ GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; ``` -The install targets EQL v3 by default. [Fundamentals](/integrations/supabase/fundamentals#installing-eql) covers the rest, including why a v3 install does not survive `supabase db reset`. +The install targets EQL v3 by default. The [overview](/integrations/supabase#installing-eql) covers the rest, including why a v3 install does not survive `supabase db reset`. </Step> <Step> @@ -86,7 +86,7 @@ SUPABASE_ANON_KEY=... DATABASE_URL=postgresql://postgres:...@db.<project-ref>.supabase.co:5432/postgres ``` -> **Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you. It connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Fundamentals → Connecting your project](/integrations/supabase/fundamentals#connecting-your-project-to-cipherstash). +> **Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you. It connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Overview → Connecting your project](/integrations/supabase#connecting-your-project-to-cipherstash). </Step> <Step> @@ -146,11 +146,29 @@ The full method surface, including filters, upserts, error shapes, and identity- ### See what the database sees -Open the Table Editor and look at the `patients` rows: every encrypted cell is a ciphertext payload, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees, including a leaked `service_role` key. [Fundamentals → Working in the dashboard](/integrations/supabase/fundamentals#working-in-the-dashboard) walks through what encrypted data looks like across the Supabase dashboard. +Open the Table Editor and look at the `patients` rows: every encrypted cell is a ciphertext payload, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees, including a leaked `service_role` key. [Overview → Working in the dashboard](/integrations/supabase#working-in-the-dashboard) walks through what encrypted data looks like across the Supabase dashboard. </Step> </Steps> +## Using an ORM instead + +Everything above goes through PostgREST, Supabase's REST API, with `encryptedSupabaseV3` encrypting around each request. The other way to reach the same tables is a direct Postgres connection from an ORM, where the [Stack SDK](/reference/stack) encrypts values in your application and the EQL-typed columns store and search them. Both paths write the **same ciphertext into the same columns**, so the database setup above is identical either way — and you can mix them, using an `encryptedSupabaseV3` client for application queries and Drizzle for migrations against the same tables. + +<Cards> + <Card title="Drizzle" href="/integrations/drizzle"> + Encrypted column types, query operators, and EQL migrations with Drizzle. + </Card> + <Card title="Prisma Next" href="/integrations/prisma-next"> + Encrypted fields and searchable queries with Prisma. + </Card> +</Cards> + +Both integrations are database-agnostic — Supabase is Postgres, so the encryption mechanics are the same as anywhere else. Only two things are Supabase-specific: + +- **Which connection string.** Use the **direct connection** (port `5432`) for migrations and long-running servers, and the **Supavisor transaction pooler** (port `6543`) for serverless, edge, and Next.js Route Handlers, where connections are short-lived and numerous. Encryption doesn't change the choice: EQL is passive SQL, so use the same connection string you'd use without CipherStash. Run EQL migrations over the direct connection — DDL and the install script want a real session. +- **RLS stops applying for free.** The PostgREST path carries the end user's JWT, so `auth.uid()` and your policies apply automatically. A direct connection typically authenticates as a privileged role (`postgres` or `service_role`), which **bypasses RLS**. If you rely on RLS for row scoping, either connect as the `authenticated` role with the user's JWT (setting `request.jwt.claims`), or enforce that scoping in your ORM query. Encryption is unaffected either way: values are ciphertext regardless of which role reads them. + ## Production checklist - **Indexes** — at real row counts, add functional indexes for the capabilities you query. Two lines of SQL per column: [EQL indexes](/reference/eql/indexes). @@ -161,14 +179,14 @@ Open the Table Editor and look at the `patients` rows: every encrypted cell is a ## Go deeper <Cards> - <Card title="Fundamentals" href="/integrations/supabase/fundamentals"> - Migrations vs SQL Editor, grants, indexes, RLS, and the dashboard experience in detail. + <Card title="Overview" href="/integrations/supabase"> + Installing EQL, grants, column types, indexes, RLS, and the dashboard experience in detail. </Card> <Card title="Supabase Auth" href="/integrations/supabase/auth"> Federate the Supabase session and lock decryption to the authenticated user. </Card> - <Card title="Data layer (ORMs)" href="/integrations/supabase/orms"> - Using Drizzle, Prisma, or a framework against Supabase with CipherStash. + <Card title="EQL indexes" href="/reference/eql/indexes"> + Full indexing recipes and EXPLAIN verification. </Card> <Card title="encryptedSupabaseV3 reference" href="/reference/stack/supabase"> The complete wrapper API: every filter, response shapes, and how it works. diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 7f25844..544812e 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -280,7 +280,7 @@ The builder is deferred: method calls record intent, and nothing executes until 4. Replays the recorded calls onto the real supabase-js builder 5. Decrypts encrypted columns in the response -Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged**. RLS decides which rows come back; encryption decides whether what is in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in [Supabase fundamentals](/integrations/supabase/fundamentals). +Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged**. RLS decides which rows come back; encryption decides whether what is in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in the [Supabase overview](/integrations/supabase). ## Two names, one function From 6613512d186973708dbe66ad5e8606cf8c738c15 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 11:12:31 +1000 Subject: [PATCH 121/151] docs(drizzle): let this branch own the /integrations/drizzle cross-link MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `content/stack/reference/drizzle.mdx` points at `/integrations/drizzle`, which is a page this branch creates. #81 (the link-validator fix, off v2) removes that link, because on v2 alone it is a genuine 404 — the target does not exist there yet. That set up a silent failure. This branch did not touch the line, so rebasing onto a v2 containing #81 would have taken #81's removal without a conflict, dropping the cross-link even though the page it points at had just landed. Rewording the sentence here makes the branch an explicit editor of that line, so the two changes conflict and the merge has to make a decision instead of quietly picking one. The rewrite is also more accurate on its own terms: this page documents the older `@cipherstash/stack/drizzle` entry point, which the previous phrasing left implicit. The redirect itself needed no change — `/stack/reference/drizzle` → `/integrations/drizzle` has been in v2-redirects.mjs all along. What this branch supplies is the destination, so the redirect resolves here where it did not on v2. Claude-Session: https://claude.ai/code/session_01NkuQNMvw9BpB4BWWeKtfV8 --- content/stack/reference/drizzle.mdx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/stack/reference/drizzle.mdx b/content/stack/reference/drizzle.mdx index c69a68f..e50e296 100644 --- a/content/stack/reference/drizzle.mdx +++ b/content/stack/reference/drizzle.mdx @@ -131,7 +131,7 @@ See the [CipherStash CLI reference](/stack/cipherstash/cli) for all `db install` ## Full API surface -The Drizzle adapter now ships as its own package, `@cipherstash/stack-drizzle`. The EQL v3 dialect is on `@cipherstash/stack-drizzle/v3`. Its surface: +The Drizzle adapter now ships as its own package, `@cipherstash/stack-drizzle`, with the EQL v3 dialect on `@cipherstash/stack-drizzle/v3`. This page documents the older `@cipherstash/stack/drizzle` entry point; the [Drizzle integration](/integrations/drizzle) is the current, EQL v3 surface: - `encryptedType` — column builder - `extractEncryptionSchema` — schema conversion From 663abb04e6a74f239ed4aabb11fa4751c0a48bb8 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Wed, 29 Jul 2026 17:23:20 +1000 Subject: [PATCH 122/151] docs(supabase): clarify encryption terminology and enhance quickstart tutorial --- content/docs/integrations/supabase/index.mdx | 2 +- content/docs/integrations/supabase/quickstart.mdx | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 046aac1..84b31c3 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -15,7 +15,7 @@ verifiedAgainst: import { faqPrivacy, faqScaling, faqKms, faqRlsVsEncryption, faqFreeTier } from "@/components/faq/shared"; -CipherStash adds application-level encryption to your Supabase project. Sensitive fields (names, emails, health records, anything you choose) are encrypted inside your application before they ever reach Postgres, so plaintext never touches your database, its backups, or its replication streams. CipherStash never sees your data or your keys. +CipherStash adds field-level encryption to your Supabase project. Sensitive fields (names, emails, health records, anything you choose) are encrypted inside your application before they ever reach Postgres, so plaintext never touches your database, its backups, or its replication streams. CipherStash never sees your data or your keys. Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, declare each protected column with the encrypted type that matches the operations you need, then query it with the same `.eq()`, `.gt()`, and `.order()` calls you use today. diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 7134390..e124018 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -17,10 +17,10 @@ This tutorial takes an empty Supabase project to an encrypted, searchable table. ## How it fits together -Two pieces, one on each side of your Supabase connection: +To use use searchable encryption in Supabase, 2 components are required: -- **[EQL](/reference/eql)** installs into your Supabase Postgres as plain SQL. It provides encrypted column types, such as `public.eql_v3_text_eq` and `public.eql_v3_date_ord`, where the type name declares what queries the column supports. -- **[`@cipherstash/stack`](/reference/stack)** runs in your application. Its [`encryptedSupabaseV3` wrapper](/reference/stack/supabase) encrypts values before they're written, encrypts filter terms before they're compared, and decrypts results. It wraps your existing supabase-js client, so Supabase Auth and Row Level Security apply unchanged. +- **[EQL](/reference/eql)** defines the encrypted types and installs into your Supabase database +- **[`@cipherstash/stack`](/reference/stack)** runs in your application and encrypts data and queries before sending to the database. <Steps> <Step> @@ -86,7 +86,9 @@ SUPABASE_ANON_KEY=... DATABASE_URL=postgresql://postgres:...@db.<project-ref>.supabase.co:5432/postgres ``` -> **Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you. It connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Overview → Connecting your project](/integrations/supabase#connecting-your-project-to-cipherstash). +<Callout type="idea"> +**Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you. It connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Overview → Connecting your project](/integrations/supabase#connecting-your-project-to-cipherstash). +</Callout> </Step> <Step> From 83e310561de981db92f57df99e5342bf64b0c0d7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 11:08:32 +1000 Subject: [PATCH 123/151] docs(supabase): reframe quickstart as encrypting an existing column MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The quickstart went from an empty project to an encrypted table, which is the easy case and not the one readers arrive with. Reframe it around a `patients` table that already holds live plaintext data, and walk the deployment ladder from the stash-deployment skill: add nullable `*_encrypted` mirror columns for `name` and `date_of_birth`, dual-write everywhere, deploy, backfill the historical rows, build the extractor indexes, then cut reads over. Stops short of dropping the plaintext columns. That is a separate, irreversible deploy, so it gets a follow-up section covering the soak, `stash encrypt drop`, and why the generated migration re-checks coverage at apply time — with sequencing deferred to the deployment guide. Carries over the failure modes that lose data silently: nullable-mandatory mirrors, the `_encrypted` naming convention `backfill` resolves by default, dual-writing on every path, running the backfill under the app's `CS_*` credentials, and needing those credentials at build time. Keeps a callout for the greenfield path, and updates the overview's descriptions of the quickstart plus its migration FAQ answer to match. --- content/docs/integrations/supabase/index.mdx | 15 +- .../docs/integrations/supabase/quickstart.mdx | 258 +++++++++++++++--- 2 files changed, 222 insertions(+), 51 deletions(-) diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 84b31c3..d3936b8 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -19,7 +19,7 @@ CipherStash adds field-level encryption to your Supabase project. Sensitive fiel Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, declare each protected column with the encrypted type that matches the operations you need, then query it with the same `.eq()`, `.gt()`, and `.order()` calls you use today. -If you want the fastest path from an empty project to an encrypted table, start with the [Quickstart](/integrations/supabase/quickstart) — about fifteen minutes. This page is the reference behind it: how EQL installs and what Supabase's roles need from it, choosing and indexing column types, how encryption composes with Row Level Security, and what encrypted data looks like across the dashboard. +If you want the fastest path to encrypting a column that already holds live data, start with the [Quickstart](/integrations/supabase/quickstart) — about twenty minutes, taking a plaintext `patients` table through mirror columns, dual-writes, backfill, and read cutover. This page is the reference behind it: how EQL installs and what Supabase's roles need from it, choosing and indexing column types, how encryption composes with Row Level Security, and what encrypted data looks like across the dashboard. ## How it works @@ -186,7 +186,7 @@ The hub emits the `CS_*` credentials block for your app's environment, ready to ## The rest of this section -- **[Quickstart](/integrations/supabase/quickstart):** the end-to-end walkthrough — install EQL, wrap your client, query encrypted data — plus the direct-connection path if you use Drizzle or Prisma. +- **[Quickstart](/integrations/supabase/quickstart):** the end-to-end walkthrough — install EQL, wrap your client, and convert two live plaintext columns to encrypted ones — plus the direct-connection path if you use Drizzle or Prisma. - **[Supabase Auth](/integrations/supabase/auth):** federate the signed-in session so encryption authenticates as the user, and optionally lock decryption to their identity. - **[Edge Functions](/integrations/supabase/edge-functions):** run encryption server-side through the WebAssembly build. - **[Key management and audit logging](/security/audit-logging):** per-value keys and rotation through CipherStash ZeroKMS, a decryption access trail out of the box, optional Bring Your Own Key, and FIPS and SOC 2 compliance. @@ -219,9 +219,12 @@ The hub emits the `CS_*` credentials block for your app's environment, ready to title: "What does migration look like?", answer: ( <> - Install EQL on your Supabase database, choose which columns to protect, - then set their encryption type. Encrypt values in your app before - saving them, and update columns one at a time. + Install EQL on your Supabase database, add an encrypted mirror column + beside each column you want to protect, write both for a while, + backfill the historical rows, then move reads across. One column at a + time, no downtime, reversible until you drop the plaintext. The{" "} + <a href="/integrations/supabase/quickstart">Quickstart</a> walks + through it end to end. </> ), }, @@ -235,7 +238,7 @@ The hub emits the `CS_*` credentials block for your app's environment, ready to <Cards> <Card title="Quickstart" href="/integrations/supabase/quickstart"> - The end-to-end walkthrough: install EQL, wrap your client, query encrypted data. + The end-to-end walkthrough: install EQL, wrap your client, and encrypt two columns that already hold live data. </Card> <Card title="Supabase Auth" href="/integrations/supabase/auth"> Federate the Supabase session and lock decryption to the authenticated user. diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index e124018..268371c 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -1,6 +1,6 @@ --- title: Quickstart -description: "Take an empty Supabase project to an encrypted, searchable table: install EQL, declare encrypted columns, wrap your Supabase client, and query with the calls you already use." +description: "Encrypt two sensitive columns on a Supabase table that already holds live data: add encrypted mirror columns, dual-write, backfill, and cut reads over — without downtime or data loss." type: tutorial components: [encryption, eql, platform] audience: [developer] @@ -13,15 +13,51 @@ verifiedAgainst: stack: "1.0.0-rc.0" --- -This tutorial takes an empty Supabase project to an encrypted, searchable table. It takes about fifteen minutes. For what CipherStash is and why you'd add it, start with the [overview](/integrations/supabase). +This tutorial takes a Supabase table that already exists, already holds real rows, and stores sensitive data in plaintext — and converts two of its columns to searchable encryption without downtime or data loss. It takes about twenty minutes. For what CipherStash is and why you'd add it, start with the [overview](/integrations/supabase). + +## The starting point + +A `patients` table, entirely in plaintext, with rows in it: + +```sql +CREATE TABLE patients ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email text NOT NULL, + name text, + date_of_birth date, + plan text +); +``` + +We'll encrypt **`name`** and **`date_of_birth`** — the two fields that identify a patient. `email` stays plaintext for now (the same recipe applies to it later), and `plan` isn't sensitive, so it stays an ordinary column forever. ## How it fits together -To use use searchable encryption in Supabase, 2 components are required: +To use searchable encryption in Supabase, 2 components are required: - **[EQL](/reference/eql)** defines the encrypted types and installs into your Supabase database - **[`@cipherstash/stack`](/reference/stack)** runs in your application and encrypts data and queries before sending to the database. +Because ciphertext can only be produced by your application — no `UPDATE` and no database function can encrypt an existing row — a populated column can't be swapped for an encrypted one in a single step. Instead, each column gets an **encrypted mirror** that is filled in alongside the plaintext original, and only once every row has a ciphertext twin do reads move over: + +``` + DEPLOY 1 out-of-band DEPLOY 2 follow-up + ──────────── ─────────── ───────────── ────────── + + encrypted mirrors backfill historical reads → mirrors drop plaintext + + dual-write everywhere rows, build indexes dual-writes stay columns + reads unchanged + │ ▲ ▲ + └── ⛔ dual-writes must be ──┘ ⛔ soak, verify ───┘ + live in the deployed + environment first +``` + +The plaintext columns stay authoritative — and stay populated — the whole way through. Nothing in this tutorial is irreversible. + +<Callout type="idea"> +**Starting from scratch instead?** On a table with no data, skip the ladder entirely: declare the columns as EQL types in the `CREATE TABLE` (`name public.eql_v3_text_eq`, `date_of_birth public.eql_v3_date_ord`), then jump to [Wrap your Supabase client](#wrap-your-supabase-client). Steps 4 through 7 exist only to protect data that already exists. +</Callout> + <Steps> <Step> @@ -42,28 +78,7 @@ GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_ The install targets EQL v3 by default. The [overview](/integrations/supabase#installing-eql) covers the rest, including why a v3 install does not survive `supabase db reset`. -</Step> -<Step> - -### Create a table with encrypted columns - -The column type declares what each column can do. Equality lookups, free-text matching, and range or ordering queries are different capabilities. Declare only what you query, because each capability stores an extra index term alongside the ciphertext: - -```sql -CREATE TABLE patients ( - id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email public.eql_v3_text_eq NOT NULL, -- exact lookup - name public.eql_v3_text_match, -- free-text match - date_of_birth public.eql_v3_date_ord, -- ranges and ORDER BY - plan text -- not sensitive: ordinary column -); -``` - -Which type fits which column, and what each stores, is covered by the [EQL type pages](/reference/eql/core-concepts). - -<Callout type="info"> -Supabase runs the EQL installer as a non-superuser, so the ORE-backed domains (`_ord_ore`, `text_search_ore`) are disabled on Supabase and raise if you use them. Use `_ord` and `text_search`, which order under Postgres's default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). -</Callout> +This step is additive and touches none of your tables, so ship it early — on its own if you like. Nothing depends on encryption yet, so a credential or connectivity problem surfaces while it's cheap. </Step> <Step> @@ -86,6 +101,12 @@ SUPABASE_ANON_KEY=... DATABASE_URL=postgresql://postgres:...@db.<project-ref>.supabase.co:5432/postgres ``` +Mint one set of credentials per environment with `npx stash env --name patients-prod`. The access key is shown once, so pipe it straight into your platform's secret store. + +<Callout type="warn"> +**These are usually needed at build time, not just run time.** If your encrypted client is constructed at module load — the `lib/db.ts` singleton below does exactly that — then any build step that imports it authenticates during the build, and a build without `CS_*` fails with `Not authenticated`. Local builds hide this, because your `~/.cipherstash` device profile authenticates silently. +</Callout> + <Callout type="idea"> **Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you. It connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Overview → Connecting your project](/integrations/supabase#connecting-your-project-to-cipherstash). </Callout> @@ -95,7 +116,7 @@ DATABASE_URL=postgresql://postgres:...@db.<project-ref>.supabase.co:5432/postgre ### Wrap your Supabase client -There is no schema to declare. `encryptedSupabaseV3` introspects the database over `DATABASE_URL`, finds the columns typed as EQL domains, and derives each one's encryption config from its type. +There is no schema to declare. `encryptedSupabaseV3` introspects the database over `DATABASE_URL`, finds the columns typed as EQL domains, and derives each one's encryption config from its type. Plain `text` and `date` columns pass through untouched, so wrapping the client changes nothing until encrypted columns exist. ```typescript title="lib/db.ts" import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" @@ -106,37 +127,168 @@ export const db = await encryptedSupabaseV3( ) ``` +Swap your existing `createClient` for this and deploy it. Every query keeps working exactly as before. + </Step> <Step> -### Write and query encrypted data +### Add the encrypted mirror columns + +Now the first real change. Generate a migration: + +```bash +supabase migration new add_patients_encrypted_columns +``` + +Add one mirror column per plaintext column. The type declares what the column can do — equality lookups, free-text matching, and range or ordering queries are different capabilities, and each one stores an extra index term alongside the ciphertext, so declare only what you query: -```typescript -import { db } from "./lib/db" +```sql title="supabase/migrations/<timestamp>_add_patients_encrypted_columns.sql" +ALTER TABLE patients + ADD COLUMN name_encrypted public.eql_v3_text_eq, -- exact lookup + ADD COLUMN date_of_birth_encrypted public.eql_v3_date_ord; -- ranges and ORDER BY +``` + +Two things about that SQL matter: + +- **Both columns are nullable.** Mandatory — every existing row has no ciphertext yet. `NOT NULL` here fails the migration, or (worse) succeeds against an empty local database and fails in production. +- **The names end in `_encrypted`.** That's the convention `stash encrypt backfill` resolves by default, so `--encrypted-column` isn't needed later. + +Apply it with `supabase db reset` locally or `supabase migration up` against the remote project. The plaintext columns are untouched, and nothing reads the new ones yet. + +<Callout type="info"> +`name` is a natural candidate for free-text search, but `.matches()` isn't reachable through the supabase-js wrapper (see the callout in step 8), so this tutorial types it `eql_v3_text_eq` for exact lookup. If you need encrypted free-text on `name`, type it `public.eql_v3_text_match` and query it through the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter. Which type fits which column is covered by the [EQL type pages](/reference/eql/core-concepts). + +Supabase also runs the EQL installer as a non-superuser, so the ORE-backed domains (`_ord_ore`, `text_search_ore`) are disabled and raise if you use them. Use `_ord` and `text_search`, which order under Postgres's default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). +</Callout> + +</Step> +<Step> + +### Dual-write to both columns + +This ships in the **same PR and the same deploy** as the migration above. It changes what your application *writes*; it does not change what it reads. + +Every path that writes `name` or `date_of_birth` now writes the mirror too, in the same statement. The wrapper encrypts the mirror automatically — it's an EQL domain column — while the plaintext column passes through unchanged: + +```typescript title="lib/patients.ts" +import { db } from "./db" + +export async function createPatient(input: { + email: string + name: string + dateOfBirth: string + plan: string +}) { + return db.from("patients").insert({ + email: input.email, + name: input.name, // plaintext — keep writing it + name_encrypted: input.name, // encrypted mirror + date_of_birth: input.dateOfBirth, // plaintext — keep writing it + date_of_birth_encrypted: input.dateOfBirth, // encrypted mirror + plan: input.plan, + }) +} + +export async function updatePatientName(id: number, name: string) { + return db.from("patients").update({ + name, + name_encrypted: name, + }).eq("id", id) +} +``` -// Insert — encrypted columns are encrypted before the request leaves your app -await db.from("patients").insert({ - email: "alice@example.com", - name: "Alice Chen", - date_of_birth: "1987-04-12", - plan: "standard", -}) +Funnelling writes through functions like these is the easiest way to make the rule hold, because callers can't write one half. +<Callout type="warn"> +**"Every path" means every path.** Not just the main service — insert sites, update sites, upserts and `ON CONFLICT` clauses, seed scripts, CSV importers, admin actions, background jobs, Edge Functions, RPC functions, and webhook handlers. One missed branch means rows written in production after this deploy have plaintext but no ciphertext, and the backfill (which runs before those rows exist) will never catch them. Grep for every writer of `patients.name` and `patients.date_of_birth` before merging. +</Callout> + +After this deploy the system is in a safe steady state, and can stay there indefinitely. New rows are fully mirrored, old rows aren't, and reads work either way. + +</Step> +<Step> + +### Deploy, and confirm dual-writes are live + +⛔ **The gate.** Ship the PR. Dual-writes must be running in the deployed environment that owns this database — not on your laptop, not in CI — before the backfill is safe. This is the one manual decision in the tutorial, and it's the reason nothing here can lose a row. + +Once the deploy is live: + +```bash +npx stash status +``` + +`stash status` reports each column's phase and the next move. CipherStash records the transition in `cs_migrations`, and `stash encrypt backfill` refuses to proceed without it. + +</Step> +<Step> + +### Backfill the historical rows + +Not a deploy — a one-off job, run once against the production database, that encrypts the rows written before dual-writing existed: + +```bash +npx stash encrypt backfill --table patients --column name +npx stash encrypt backfill --table patients --column date_of_birth +``` + +Each run pages through the table by primary key, encrypting a chunk at a time and writing one transactional `UPDATE` plus a checkpoint per chunk. It's resumable, SIGINT-safe, and idempotent, so an interrupted run picks up where it stopped. It prompts you to confirm dual-writes are deployed; in CI, pass `--confirm-dual-writes-deployed` instead. Concurrent production writes are safe precisely *because* dual-writes are live. + +<Callout type="warn"> +**Run the backfill with the same `CS_*` credentials the deployed app uses.** Ciphertext is written under whichever keyset the resolved credentials belong to, and `CS_*` environment variables take precedence over your local `~/.cipherstash` profile. A backfill authenticated as your laptop writes rows your production app **cannot decrypt** — with no error until someone reads them. +</Callout> + +Then verify coverage. This must return zeroes before you go any further: + +```sql +SELECT + count(*) FILTER (WHERE name IS NOT NULL AND name_encrypted IS NULL) AS name_uncovered, + count(*) FILTER (WHERE date_of_birth IS NOT NULL AND date_of_birth_encrypted IS NULL) AS dob_uncovered +FROM patients; +``` + +A non-zero count means a write path that isn't dual-writing. Find it, fix it, deploy it, and re-run the backfill (`--force` re-encrypts every row regardless of current state). + +</Step> +<Step> + +### Build the indexes + +After the backfill, before reads move over. Encrypted columns index through ordinary functional indexes over EQL's term-extractor functions — one bulk build now, instead of per-row index maintenance during the backfill: + +```sql +CREATE INDEX patients_name_enc_eq ON patients USING hash (eql_v3.eq_term(name_encrypted)); +CREATE INDEX patients_dob_enc_ord ON patients USING btree (eql_v3.ord_term(date_of_birth_encrypted)); +ANALYZE patients; +``` + +Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes). + +</Step> +<Step> + +### Cut reads over to the encrypted columns + +The second deploy, and application code only — there's no rename and no CLI step. Point your queries at the mirror columns by name. The wrapper encrypts filter values into the matching index term on the way out, and decrypts results on the way back, so the values you get are plaintext: + +```typescript title="lib/patients.ts" // Exact lookup on an encrypted column const { data } = await db .from("patients") - .select("id, email, name") - .eq("email", "alice@example.com") + .select("id, email, name_encrypted") + .eq("name_encrypted", "Alice Chen") // Range and newest-first on an encrypted date -await db +const { data: recent } = await db .from("patients") - .select("id, name, date_of_birth") - .gt("date_of_birth", "1980-01-01") - .order("date_of_birth", { ascending: false }) + .select("id, name_encrypted, date_of_birth_encrypted") + .gt("date_of_birth_encrypted", "1980-01-01") + .order("date_of_birth_encrypted", { ascending: false }) .limit(20) ``` +**Keep the dual-writes.** That's what makes this deploy reversible: if reads misbehave, reverting the code returns you to plaintext reads with both columns still correct. + <Callout type="warn"> **Free-text search is not available through this wrapper on EQL 3.0.2+.** `.matches()` — and `.like()` / `.ilike()`, which delegate to it — raise, because the operator needs an `eql_v3.query_*` operand that PostgREST cannot express. Encrypted-JSON queries are unavailable for the same reason. Equality, ordering, and range all work, as shown above. For encrypted free-text, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or a scoped SQL/RPC function. Full detail in the [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter). </Callout> @@ -148,11 +300,27 @@ The full method surface, including filters, upserts, error shapes, and identity- ### See what the database sees -Open the Table Editor and look at the `patients` rows: every encrypted cell is a ciphertext payload, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees, including a leaked `service_role` key. [Overview → Working in the dashboard](/integrations/supabase#working-in-the-dashboard) walks through what encrypted data looks like across the Supabase dashboard. +Open the Table Editor and look at the `patients` rows: `name_encrypted` and `date_of_birth_encrypted` are ciphertext payloads, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees, including a leaked `service_role` key. + +The `name` and `date_of_birth` columns are still sitting there in plaintext — that's expected at this point, and it's what makes every step so far reversible. Removing them is the next section. [Overview → Working in the dashboard](/integrations/supabase#working-in-the-dashboard) walks through what encrypted data looks like across the Supabase dashboard. </Step> </Steps> +## Next: dropping the plaintext columns + +Everything above can be walked back. Dropping the plaintext columns cannot, which is why it's a separate deploy — and why it's worth soaking first. Let real traffic read the encrypted columns for a while, and check that results are *correct*, not merely non-empty: ordering, range filters, and known rows. Re-run the coverage query from step 7. + +When you're confident, the drop is a third deploy: remove the dual-write logic, then drop the plaintext columns with a migration generated by the CLI: + +```bash +npx stash encrypt drop --table patients --column name +``` + +Generate it rather than hand-writing an `ALTER TABLE`. The emitted SQL takes an `ACCESS EXCLUSIVE` lock, **re-counts uncovered rows at apply time**, and raises instead of dropping if any remain — because the coverage you verified at planning time is not the coverage at apply time. + +Sequencing that drop safely across environments, wiring `CS_*` into build and runtime, and rolling back per stage are covered in the [deployment guide](/guides/deployment). + ## Using an ORM instead Everything above goes through PostgREST, Supabase's REST API, with `encryptedSupabaseV3` encrypting around each request. The other way to reach the same tables is a direct Postgres connection from an ORM, where the [Stack SDK](/reference/stack) encrypts values in your application and the EQL-typed columns store and search them. Both paths write the **same ciphertext into the same columns**, so the database setup above is identical either way — and you can mix them, using an `encryptedSupabaseV3` client for application queries and Drizzle for migrations against the same tables. @@ -168,7 +336,7 @@ Everything above goes through PostgREST, Supabase's REST API, with `encryptedSup Both integrations are database-agnostic — Supabase is Postgres, so the encryption mechanics are the same as anywhere else. Only two things are Supabase-specific: -- **Which connection string.** Use the **direct connection** (port `5432`) for migrations and long-running servers, and the **Supavisor transaction pooler** (port `6543`) for serverless, edge, and Next.js Route Handlers, where connections are short-lived and numerous. Encryption doesn't change the choice: EQL is passive SQL, so use the same connection string you'd use without CipherStash. Run EQL migrations over the direct connection — DDL and the install script want a real session. +- **Which connection string.** Use the **direct connection** (port `5432`) for migrations, backfills, and long-running servers, and the **Supavisor transaction pooler** (port `6543`) for serverless, edge, and Next.js Route Handlers, where connections are short-lived and numerous. Encryption doesn't change the choice: EQL is passive SQL, so use the same connection string you'd use without CipherStash. Run EQL migrations over the direct connection — DDL and the install script want a real session. - **RLS stops applying for free.** The PostgREST path carries the end user's JWT, so `auth.uid()` and your policies apply automatically. A direct connection typically authenticates as a privileged role (`postgres` or `service_role`), which **bypasses RLS**. If you rely on RLS for row scoping, either connect as the `authenticated` role with the user's JWT (setting `request.jwt.claims`), or enforce that scoping in your ORM query. Encryption is unaffected either way: values are ciphertext regardless of which role reads them. ## Production checklist @@ -176,7 +344,7 @@ Both integrations are database-agnostic — Supabase is Postgres, so the encrypt - **Indexes** — at real row counts, add functional indexes for the capabilities you query. Two lines of SQL per column: [EQL indexes](/reference/eql/indexes). - **RLS** — keep your Row Level Security policies; they compose. RLS controls *who can query* rows, encryption controls *whether their contents can be read at all*. A bypassed policy or leaked key yields only ciphertext. - **Identity-locked decryption** — tie decryption to the logged-in Supabase Auth user: [Supabase Auth integration](/integrations/supabase/auth). -- **Adopt incrementally** — you can encrypt one column at a time; nothing requires a big-bang migration. See [encrypting existing data](/guides/migration/encrypt-existing-data). +- **One column at a time** — nothing requires a big-bang migration. `email` can follow the same ladder next month, on its own schedule, while the columns you've already converted stay encrypted. ## Go deeper From 4f85b5096a096980e2a179f1fb81bd5c25e3a3e7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 15:20:01 +1000 Subject: [PATCH 124/151] docs(supabase): add supabase-js guide --- content/docs/integrations/index.mdx | 4 +- content/docs/integrations/supabase/auth.mdx | 25 +- .../integrations/supabase/edge-functions.mdx | 6 +- content/docs/integrations/supabase/index.mdx | 14 +- content/docs/integrations/supabase/meta.json | 2 +- .../docs/integrations/supabase/quickstart.mdx | 16 +- .../integrations/supabase/supabase-js.mdx | 231 ++++++++++++++++++ content/docs/reference/stack/supabase.mdx | 26 +- 8 files changed, 282 insertions(+), 42 deletions(-) create mode 100644 content/docs/integrations/supabase/supabase-js.mdx diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index f60ea3e..b2ee232 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -26,8 +26,8 @@ Where the encrypted data lives. EQL installs into any Postgres you can connect t How your application queries it. <Cards> - <Card title="Supabase-js" href="/reference/stack/supabase"> - `encryptedSupabaseV3` wraps your existing client so `.eq()`, `.in()`, `.gt()`, and `.order()` keep working on encrypted columns. + <Card title="supabase-js" href="/integrations/supabase/supabase-js"> + `encryptedSupabase` wraps your existing client so `.eq()`, `.in()`, `.gt()`, and `.order()` keep working on encrypted columns. </Card> <Card title="Prisma Next" href="/integrations/prisma-next"> Encrypted columns declared in `schema.prisma`. Targets EQL v2. Not classic Prisma. diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index ecbaff7..4cd788d 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -5,8 +5,8 @@ type: guide components: [encryption, platform] audience: [developer] verifiedAgainst: - stack: "1.0.0-rc.0" - auth: "0.41.0" + stack: "1.0.0" + auth: "0.42.0" --- Supabase Auth already knows who your user is. This page connects that identity to CipherStash in two layers you can adopt independently: @@ -33,7 +33,7 @@ Authenticate the `Encryption` client with an `OidcFederationStrategy`. It takes ```typescript title="lib/db.ts" import { createClient } from "@supabase/supabase-js" import { OidcFederationStrategy } from "@cipherstash/stack" -import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" +import { encryptedSupabase } from "@cipherstash/stack-supabase" const supabaseClient = createClient( process.env.SUPABASE_URL!, @@ -47,9 +47,15 @@ const getJwt = async () => { return session.access_token } -export const db = await encryptedSupabaseV3(supabaseClient, { +const federation = OidcFederationStrategy.create( + process.env.CS_WORKSPACE_CRN!, + getJwt, +) +if (federation.failure) throw new Error(federation.failure.error.message) + +export const db = await encryptedSupabase(supabaseClient, { config: { - authStrategy: OidcFederationStrategy.create(process.env.CS_WORKSPACE_CRN!, getJwt), + authStrategy: federation.data, }, }) ``` @@ -70,13 +76,12 @@ Federation authenticates *as* the user. **Lock context** goes further: it bakes Lock context requires the client to be authenticated with `OidcFederationStrategy` (above). It cannot be used with `AccessKeyStrategy`, which authenticates a *service*, not a user — there is no user `sub` claim to bind to. Lock context also requires a Business or Enterprise workspace plan. </Callout> -Attach a lock context to any [`encryptedSupabaseV3`](/reference/stack/supabase) query with `.withLockContext()`. The query builder takes a `LockContext` **instance**. `sub` is the Supabase user's UUID: +Attach a lock context to any [`encryptedSupabase`](/reference/stack/supabase) query with `.withLockContext()`. `sub` is the Supabase user's UUID: ```typescript -import { LockContext } from "@cipherstash/stack/identity" import { db } from "./lib/db" -const lockContext = new LockContext({ context: { identityClaim: ["sub"] } }) +const lockContext = { identityClaim: ["sub"] } // Insert — the value is bound to the signed-in user's `sub` claim await db.from("patients") @@ -91,7 +96,7 @@ const { data } = await db.from("patients") ``` <Callout type="info"> -The query builder's `.withLockContext()` takes a `LockContext` instance. The core `Encryption` client's operations take a plain object instead, as `.withLockContext({ identityClaim: ["sub"] })`. The two surfaces differ. +The query builder accepts either the plain `{ identityClaim: ["sub"] }` shape shown above or a `LockContext` instance. The plain shape is sufficient for new code. </Callout> ZeroKMS resolves the claim's *value* from the token that authenticated the request — the federated Supabase identity — so no separate identify step or per-operation token is needed. Reading a locked value without a matching context, or as a different user, fails with an encryption error regardless of what RLS allows. @@ -128,7 +133,7 @@ The strategy's own factory and token errors follow the `@cipherstash/auth` `Resu <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> Run the federation strategy server-side in Supabase Edge Functions. </Card> - <Card title="encryptedSupabaseV3 reference" href="/reference/stack/supabase"> + <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> `.withLockContext()` and `.audit()` on the query builder. </Card> <Card title="Auth reference" href="/reference/auth"> diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx index 240f52a..c3dd32d 100644 --- a/content/docs/integrations/supabase/edge-functions.mdx +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -5,8 +5,8 @@ type: guide components: [encryption, platform] audience: [developer] verifiedAgainst: - stack: "1.0.0-rc.0" - auth: "0.41.0" + stack: "1.0.0" + auth: "0.42.0" --- Encryption and decryption must run somewhere your keys and credentials are safe — never in the browser. Supabase Edge Functions are that place: server-side compute next to your database. CipherStash ships a **WebAssembly build** of the SDK for exactly this runtime, so the same encrypt/decrypt code runs in Deno with no native bindings. @@ -123,7 +123,7 @@ const authStrategy = OidcFederationStrategy.create( Federation and identity-locked encryption — the full identity story. </Card> <Card title="Quickstart" href="/integrations/supabase/quickstart"> - The standard (Node) setup with the encryptedSupabaseV3 wrapper. + The standard (Node) setup with the encryptedSupabase wrapper. </Card> <Card title="Stack reference" href="/reference/stack"> The core Encryption client API used here. diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index d3936b8..5bdaeca 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -9,8 +9,8 @@ integration: setup: dashboard-required pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: - eql: "3.0.0" - stack: "1.0.0-rc.0" + eql: "3.0.2" + stack: "1.0.0" --- import { faqPrivacy, faqScaling, faqKms, faqRlsVsEncryption, faqFreeTier } from "@/components/faq/shared"; @@ -101,13 +101,13 @@ Encrypted columns and RLS compose — they solve different problems: - **RLS** decides *which rows* a role may query. It's enforced in the database, on whatever the database stores. - **Encryption** decides *whether a value can be read at all*. Keys stay outside the database, so anything that bypasses RLS — a leaked `service_role` key, an over-broad policy, a stolen backup, direct disk access — yields ciphertext, not plaintext. -Run both. Keep writing policies exactly as before; the `encryptedSupabaseV3` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. +Run both. Keep writing policies exactly as before; the `encryptedSupabase` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. One practical pattern: leave your row-ownership predicate on a plaintext `user_id uuid` column, and encrypt the *contents* of the row. RLS scopes the rows to `auth.uid()`; CipherStash makes their contents unreadable to everything except your app. To go one step further and make a row's contents decryptable *only* by its owner — even to your own service role — see [Supabase Auth](/integrations/supabase/auth). ## Connections and pooling -The `encryptedSupabaseV3` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. It does open one direct Postgres connection at startup, over `DATABASE_URL`, to introspect your encrypted columns. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), or an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. The direct-connection path is covered in [Quickstart → Using an ORM instead](/integrations/supabase/quickstart#using-an-orm-instead). +The `encryptedSupabase` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. It does open one direct Postgres connection at startup, over `DATABASE_URL`, to introspect your encrypted columns. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), or an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. The direct-connection path is covered in [Quickstart → Using an ORM instead](/integrations/supabase/quickstart#using-an-orm-instead). ## Working in the dashboard @@ -187,6 +187,7 @@ The hub emits the `CS_*` credentials block for your app's environment, ready to ## The rest of this section - **[Quickstart](/integrations/supabase/quickstart):** the end-to-end walkthrough — install EQL, wrap your client, and convert two live plaintext columns to encrypted ones — plus the direct-connection path if you use Drizzle or Prisma. +- **[supabase-js](/integrations/supabase/supabase-js):** create the encrypted client, then insert, select, filter, and order encrypted columns with the familiar query builder. - **[Supabase Auth](/integrations/supabase/auth):** federate the signed-in session so encryption authenticates as the user, and optionally lock decryption to their identity. - **[Edge Functions](/integrations/supabase/edge-functions):** run encryption server-side through the WebAssembly build. - **[Key management and audit logging](/security/audit-logging):** per-value keys and rotation through CipherStash ZeroKMS, a decryption access trail out of the box, optional Bring Your Own Key, and FIPS and SOC 2 compliance. @@ -240,13 +241,16 @@ The hub emits the `CS_*` credentials block for your app's environment, ready to <Card title="Quickstart" href="/integrations/supabase/quickstart"> The end-to-end walkthrough: install EQL, wrap your client, and encrypt two columns that already hold live data. </Card> + <Card title="supabase-js" href="/integrations/supabase/supabase-js"> + Insert, select, filter, and order encrypted columns through the Supabase JavaScript client. + </Card> <Card title="Supabase Auth" href="/integrations/supabase/auth"> Federate the Supabase session and lock decryption to the authenticated user. </Card> <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> Run encryption server-side in Supabase Edge Functions. </Card> - <Card title="encryptedSupabaseV3 reference" href="/reference/stack/supabase"> + <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> The complete wrapper API: every filter, response shapes, and how it works. </Card> </Cards> diff --git a/content/docs/integrations/supabase/meta.json b/content/docs/integrations/supabase/meta.json index 0312a00..f03d6df 100644 --- a/content/docs/integrations/supabase/meta.json +++ b/content/docs/integrations/supabase/meta.json @@ -1,5 +1,5 @@ { "title": "Supabase", "icon": "Supabase", - "pages": ["index", "quickstart", "auth", "edge-functions"] + "pages": ["index", "quickstart", "supabase-js", "auth", "edge-functions"] } diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 268371c..f8fcc4d 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -9,8 +9,8 @@ integration: setup: dashboard-required pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: - eql: "3.0.0" - stack: "1.0.0-rc.0" + eql: "3.0.2" + stack: "1.0.0" --- This tutorial takes a Supabase table that already exists, already holds real rows, and stores sensitive data in plaintext — and converts two of its columns to searchable encryption without downtime or data loss. It takes about twenty minutes. For what CipherStash is and why you'd add it, start with the [overview](/integrations/supabase). @@ -116,12 +116,12 @@ Mint one set of credentials per environment with `npx stash env --name patients- ### Wrap your Supabase client -There is no schema to declare. `encryptedSupabaseV3` introspects the database over `DATABASE_URL`, finds the columns typed as EQL domains, and derives each one's encryption config from its type. Plain `text` and `date` columns pass through untouched, so wrapping the client changes nothing until encrypted columns exist. +There is no schema to declare. `encryptedSupabase` introspects the database over `DATABASE_URL`, finds the columns typed as EQL domains, and derives each one's encryption config from its type. Plain `text` and `date` columns pass through untouched, so wrapping the client changes nothing until encrypted columns exist. ```typescript title="lib/db.ts" -import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" +import { encryptedSupabase } from "@cipherstash/stack-supabase" -export const db = await encryptedSupabaseV3( +export const db = await encryptedSupabase( process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, ) @@ -293,7 +293,7 @@ const { data: recent } = await db **Free-text search is not available through this wrapper on EQL 3.0.2+.** `.matches()` — and `.like()` / `.ilike()`, which delegate to it — raise, because the operator needs an `eql_v3.query_*` operand that PostgREST cannot express. Encrypted-JSON queries are unavailable for the same reason. Equality, ordering, and range all work, as shown above. For encrypted free-text, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or a scoped SQL/RPC function. Full detail in the [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter). </Callout> -The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabaseV3` reference](/reference/stack/supabase). +The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabase` reference](/reference/stack/supabase). </Step> <Step> @@ -323,7 +323,7 @@ Sequencing that drop safely across environments, wiring `CS_*` into build and ru ## Using an ORM instead -Everything above goes through PostgREST, Supabase's REST API, with `encryptedSupabaseV3` encrypting around each request. The other way to reach the same tables is a direct Postgres connection from an ORM, where the [Stack SDK](/reference/stack) encrypts values in your application and the EQL-typed columns store and search them. Both paths write the **same ciphertext into the same columns**, so the database setup above is identical either way — and you can mix them, using an `encryptedSupabaseV3` client for application queries and Drizzle for migrations against the same tables. +Everything above goes through PostgREST, Supabase's REST API, with `encryptedSupabase` encrypting around each request. The other way to reach the same tables is a direct Postgres connection from an ORM, where the [Stack SDK](/reference/stack) encrypts values in your application and the EQL-typed columns store and search them. Both paths write the **same ciphertext into the same columns**, so the database setup above is identical either way — and you can mix them, using an `encryptedSupabase` client for application queries and Drizzle for migrations against the same tables. <Cards> <Card title="Drizzle" href="/integrations/drizzle"> @@ -358,7 +358,7 @@ Both integrations are database-agnostic — Supabase is Postgres, so the encrypt <Card title="EQL indexes" href="/reference/eql/indexes"> Full indexing recipes and EXPLAIN verification. </Card> - <Card title="encryptedSupabaseV3 reference" href="/reference/stack/supabase"> + <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> The complete wrapper API: every filter, response shapes, and how it works. </Card> </Cards> diff --git a/content/docs/integrations/supabase/supabase-js.mdx b/content/docs/integrations/supabase/supabase-js.mdx new file mode 100644 index 0000000..b592f65 --- /dev/null +++ b/content/docs/integrations/supabase/supabase-js.mdx @@ -0,0 +1,231 @@ +--- +title: supabase-js +description: "Use the encryptedSupabase wrapper for transparent encryption, decryption, filtering, and ordering through the Supabase JavaScript client." +type: guide +components: [encryption, eql, platform] +audience: [developer] +integration: + category: orm + setup: code-only + pairsWith: [supabase] +verifiedAgainst: + stack: "1.0.0" + eql: "3.0.2" +--- + +`encryptedSupabase` wraps a [`@supabase/supabase-js`](https://supabase.com/docs/reference/javascript/introduction) client. It encrypts values before mutations leave your application, encrypts query operands for searchable columns, and decrypts selected rows before returning them. Plaintext columns pass through unchanged. + +The result is the familiar supabase-js query shape: + +```typescript +const { data, error } = await db + .from("patients") + .select("id, name, date_of_birth") + .eq("name", "Alice Chen") +``` + +The `name` operand and returned `name` value are plaintext in your code. Supabase and Postgres only receive their encrypted representations. + +<Callout type="info"> +This guide assumes EQL is installed and your encrypted columns use `public.eql_v3_*` domain types. Complete the [Quickstart](/integrations/supabase/quickstart) first if your database is not ready. +</Callout> + +## Install + +Install the Stack SDK, its Supabase adapter, supabase-js, and the Postgres driver used for schema introspection: + +```bash cta cta-type="install" example-id="install-supabase-js" +npm install @cipherstash/stack @cipherstash/stack-supabase @supabase/supabase-js pg +``` + +Your server needs these environment variables: + +```bash +SUPABASE_URL=https://<project-ref>.supabase.co +SUPABASE_ANON_KEY=... +DATABASE_URL=postgresql://... +``` + +The encryption client also needs a local `stash auth login` session or `CS_*` machine credentials. The [Quickstart setup](/integrations/supabase/quickstart#install-the-sdk-and-connect-your-workspace) covers both. + +## Create the client + +Pass your Supabase URL and key to `encryptedSupabase`. The async factory uses `DATABASE_URL` once at startup to inspect the `public` schema and identify its EQL columns. Application queries still go through the Supabase URL and PostgREST. + +```typescript title="lib/db.ts" +import { encryptedSupabase } from "@cipherstash/stack-supabase" + +export const db = await encryptedSupabase( + process.env.SUPABASE_URL!, + process.env.SUPABASE_ANON_KEY!, +) +``` + +Pass `databaseUrl` when your direct connection uses another environment variable: + +```typescript +export const db = await encryptedSupabase(supabaseUrl, supabaseKey, { + databaseUrl: process.env.SUPABASE_DATABASE_URL, +}) +``` + +If your application already creates a Supabase client, wrap that instance instead. Its Auth session, custom headers, and Row Level Security context are preserved: + +```typescript title="lib/db.ts" +import { createClient } from "@supabase/supabase-js" +import { encryptedSupabase } from "@cipherstash/stack-supabase" + +const supabase = createClient(supabaseUrl, supabaseAnonKey) + +export const db = await encryptedSupabase(supabase, { + databaseUrl: process.env.DATABASE_URL, +}) +``` + +<Callout type="warn"> +Create this client on the server. It needs a direct database connection and CipherStash credentials, so it cannot run in a browser or Worker. For Deno, use the [Edge Functions guide](/integrations/supabase/edge-functions). +</Callout> + +`encryptedSupabaseV3` remains as a deprecated, type-identical alias for existing applications. Use `encryptedSupabase` in new code. + +## Add optional TypeScript schemas + +Database introspection is enough at runtime. An optional declared schema adds compile-time row and filter types, and verifies at startup that the declaration matches the live database. + +```typescript title="lib/db.ts" +import { encryptedTable, types } from "@cipherstash/stack/eql/v3" +import { encryptedSupabase } from "@cipherstash/stack-supabase" + +const patients = encryptedTable("patients", { + name: types.TextEq("name"), + dateOfBirth: types.DateOrd("date_of_birth"), +}) + +export const typedDb = await encryptedSupabase(supabaseUrl, supabaseAnonKey, { + schemas: { patients }, +}) +``` + +The record key must match the database table name. A property may map to a different database column, as `dateOfBirth` does above; the wrapper applies that mapping to selects, mutations, filters, and returned rows. + +## Insert, update, and upsert + +Write plaintext values. The wrapper encrypts only the columns backed by EQL domains and sends every other column through unchanged. + +```typescript +const { data, error } = await db + .from("patients") + .insert({ + email: "alice@example.com", // plaintext column + name: "Alice Chen", // encrypted column + date_of_birth: "1988-06-15", // encrypted column + plan: "standard", // plaintext column + }) + .select("id, email, name, date_of_birth, plan") + .single() + +await db + .from("patients") + .update({ name: "Alice Jones" }) + .eq("id", data!.id) + +await db.from("patients").upsert( + { email: "alice@example.com", name: "Alice Jones" }, + { onConflict: "email" }, +) +``` + +`insert` and `upsert` accept one row or an array. The wrapper batches a mutation's encryption work into one ZeroKMS round trip. + +## Select and filter + +Encrypted values are decrypted before they appear in `data`. Bare `.select()` and `.select("*")` work because the wrapper expands the column list discovered during introspection. + +```typescript +const { data } = await db + .from("patients") + .select("*") + .eq("name", "Alice Chen") +``` + +The EQL domain on each encrypted column determines which filters it accepts: + +| supabase-js method | Required encrypted domain | Behaviour | +| --- | --- | --- | +| `.eq()`, `.neq()`, `.in()` | `_eq`, `_ord`, or `text_search` | Compares encrypted equality terms | +| `.gt()`, `.gte()`, `.lt()`, `.lte()` | `_ord` or `text_search` | Compares encrypted ordering terms | +| `.is(column, null)` | Any column | Passes SQL `NULL` through without encryption | +| `.match()`, `.or()`, `.not()`, `.filter()` | Depends on the operator | Encrypts operands for encrypted columns | +| `.contains()` | Plaintext JSON or array only on EQL 3.0.2 | Uses native PostgREST containment | + +Encrypted and plaintext predicates compose in the same query: + +```typescript +const { data } = await db + .from("patients") + .select("id, name, date_of_birth, plan") + .gte("date_of_birth", "1980-01-01") // encrypted range + .lt("date_of_birth", "1990-01-01") // encrypted range + .eq("plan", "standard") // plaintext equality +``` + +Use `.is(column, null)` for null checks. Passing `null` to a comparison such as `.eq()` cannot create an encrypted query term and is forwarded to PostgREST; it is almost never the intended SQL operation. + +## Order and paginate + +`.order()` works on plaintext columns and OPE-backed encrypted ordering domains such as `date_ord`, `integer_ord`, and `text_search`. The wrapper orders an encrypted column by the `op` term inside its payload, reproducing plaintext order without decrypting in Postgres. + +```typescript +const { data } = await db + .from("patients") + .select("id, name, date_of_birth") + .order("date_of_birth", { ascending: false }) + .range(0, 19) +``` + +Storage-only, equality-only, and match-only encrypted columns cannot be ordered. ORE-backed `_ord_ore` domains also cannot be ordered through PostgREST; Supabase installations disable those domains because their operator class requires superuser privileges. + +`.limit()`, `.range()`, `.single()`, `.maybeSingle()`, `.abortSignal()`, `.throwOnError()`, and `.returns<T>()` otherwise mirror supabase-js. `.csv()` throws because PostgREST serializes ciphertext before the wrapper has a chance to decrypt it; select rows normally and serialize the plaintext result in your application. + +## Free-text and encrypted JSON queries + +<Callout type="warn"> +**EQL 3.0.2 cannot run encrypted free-text or encrypted JSON queries through supabase-js.** `.matches()`, encrypted `.contains()`, `.selectorEq()`, and `.selectorNe()` fail before a request is sent. Their SQL operators require an `eql_v3.query_*` cast that PostgREST cannot express. + +Inserts, selects, decryption, equality, ranges, and ordering are unaffected. Use [Drizzle](/integrations/drizzle), [Prisma Next](/integrations/prisma-next), or a carefully scoped SQL/RPC function for free-text and encrypted JSON queries. +</Callout> + +Scalar encrypted filters currently use a full encrypted storage envelope as the PostgREST operand because PostgREST cannot cast a term-only query envelope. PostgREST sends filters in GET query strings, so configure application and proxy logs not to retain query strings. The operand is encrypted, but it can contain ciphertext and every index term for the queried value. + +## Responses and errors + +Awaiting the builder returns the normal supabase-js response fields. Encryption failures use the same response path and add `error.encryptionError`: + +```typescript +const { data, error, count, status, statusText } = await db + .from("patients") + .select("id, name") + .eq("name", "Alice Chen") + +if (error?.encryptionError) { + // CipherStash authentication, encryption, or decryption failed +} else if (error) { + // Supabase or Postgres rejected the request +} +``` + +Chain `.throwOnError()` when the surrounding code prefers exceptions. Chain `.audit({ metadata })` to attach context to ZeroKMS audit events, or `.withLockContext({ identityClaim: ["sub"] })` to bind encryption to a federated user. See [Supabase Auth](/integrations/supabase/auth) before using lock contexts. + +## Where to next + +<Cards> + <Card title="Supabase Auth" href="/integrations/supabase/auth"> + Preserve the signed-in Supabase user and optionally lock decryption to their identity. + </Card> + <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> + Run encryption in Deno with the WebAssembly build. + </Card> + <Card title="Supabase wrapper reference" href="/reference/stack/supabase"> + The complete query-builder API, response types, and implementation details. + </Card> +</Cards> diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 544812e..9169ecc 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -1,15 +1,15 @@ --- title: Supabase wrapper -description: "The canonical encryptedSupabaseV3 reference: connect-time introspection, the full query-builder surface, and how each filter maps to an encrypted index term." +description: "The canonical encryptedSupabase reference: connect-time introspection, the full query-builder surface, and how each filter maps to an encrypted index term." type: reference components: [encryption, eql] audience: [developer] verifiedAgainst: - stack: "1.0.0-rc.0" - eql: "3.0.0" + stack: "1.0.0" + eql: "3.0.2" --- -`encryptedSupabaseV3` wraps a `@supabase/supabase-js` client so that queries on encrypted columns work like queries on plaintext ones. Mutations are encrypted before they leave your app, filter values are encrypted into the matching index term, and results are decrypted on the way back. You keep writing `.eq()`, `.gt()`, `.order()`, and the wrapper handles the encryption on both sides of every call. +`encryptedSupabase` wraps a `@supabase/supabase-js` client so that queries on encrypted columns work like queries on plaintext ones. Mutations are encrypted before they leave your app, filter values are encrypted into the matching index term, and results are decrypted on the way back. You keep writing `.eq()`, `.gt()`, `.order()`, and the wrapper handles the encryption on both sides of every call. This page is the single source of truth for the wrapper's API. The [Supabase integration](/integrations/supabase) shows it in context; the [EQL reference](/reference/eql) covers the database side it queries against. @@ -21,14 +21,14 @@ npm install @cipherstash/stack @cipherstash/stack-supabase @supabase/supabase-js ## Setup -`encryptedSupabaseV3` **introspects your database when you call it**. It reads the column types, finds the ones typed as EQL v3 domains, and derives each column's encryption config from the domain. The database already records which columns are encrypted and what they can do, so you do not declare it a second time. +`encryptedSupabase` **introspects your database when you call it**. It reads the column types, finds the ones typed as EQL v3 domains, and derives each column's encryption config from the domain. The database already records which columns are encrypted and what they can do, so you do not declare it a second time. That makes it async, and it makes `.from()` take a table name and nothing else. ```typescript -import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" +import { encryptedSupabase } from "@cipherstash/stack-supabase" -const supabase = await encryptedSupabaseV3( +const supabase = await encryptedSupabase( process.env.SUPABASE_URL!, process.env.SUPABASE_ANON_KEY!, ) @@ -42,7 +42,7 @@ const { data, error } = await supabase Introspection needs a direct Postgres connection, which is a different credential from the Supabase URL and anon key. It reads `DATABASE_URL` from the environment, or `options.databaseUrl` if you pass it. ```typescript -const supabase = await encryptedSupabaseV3(supabaseUrl, supabaseKey, { +const supabase = await encryptedSupabase(supabaseUrl, supabaseKey, { databaseUrl: process.env.PG_URL, }) ``` @@ -50,7 +50,7 @@ const supabase = await encryptedSupabaseV3(supabaseUrl, supabaseKey, { Pass an existing client instead of a URL and key when you already build one, for example to attach a Supabase Auth session: ```typescript -const supabase = await encryptedSupabaseV3(supabaseClient, { +const supabase = await encryptedSupabase(supabaseClient, { databaseUrl: process.env.PG_URL, }) ``` @@ -100,7 +100,7 @@ The capability model is the same one the database enforces through [EQL's domain Without `schemas`, rows are `Record<string, unknown>` and any table name is accepted. Declare a table and `.from()` returns a typed builder for it, with row types, filter-value types, and capability-narrowed methods. Declared tables are also verified against the live database before the client is handed back, so a column that was dropped or retyped fails at startup rather than at the first query. ```typescript -import { encryptedSupabaseV3 } from "@cipherstash/stack-supabase" +import { encryptedSupabase } from "@cipherstash/stack-supabase" import { encryptedTable, types } from "@cipherstash/stack/eql/v3" const users = encryptedTable("users", { @@ -108,7 +108,7 @@ const users = encryptedTable("users", { age: types.IntegerOrd("age"), }) -const supabase = await encryptedSupabaseV3(supabaseUrl, supabaseKey, { +const supabase = await encryptedSupabase(supabaseUrl, supabaseKey, { schemas: { users }, }) @@ -221,13 +221,13 @@ Prefer `.matches()` in new code — it is the operation that actually runs, and ## Ordering and pagination -`.order()` on an `_ord` or `text_search` column sorts on the encrypted ordering terms, which is exactly what that capability exists for. See [ordering encrypted values](/reference/eql/sorting). `.limit()`, `.range()`, `.single()`, `.maybeSingle()`, and `.csv()` behave as in supabase-js. +`.order()` on an `_ord` or `text_search` column sorts on the encrypted ordering terms, which is exactly what that capability exists for. See [ordering encrypted values](/reference/eql/sorting). `.limit()`, `.range()`, `.single()`, and `.maybeSingle()` behave as in supabase-js. ```typescript await supabase.from("users").select("id, email, age").order("age", { ascending: false }).limit(20) ``` -Ordering a column without an ordering term does not error. It sorts on the raw stored payload, which is meaningless. +Ordering a storage-only, equality-only, match-only, or `_ord_ore` encrypted column throws instead of sorting the raw stored payload. `.csv()` also throws because PostgREST serializes the rows before the wrapper can decrypt them; select rows normally and serialize the plaintext result in your application. ## Identity and audit From 8236d41b5a18478aa86bcb173ded924ebd67d729 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 15:20:08 +1000 Subject: [PATCH 125/151] fix: clear repository lint failures --- scripts/fixtures/stash-manifest.json | 15 +++------------ scripts/generate-cli-docs.ts | 20 ++++++++++++++------ src/components/code-block.tsx | 10 ++++++++++ 3 files changed, 27 insertions(+), 18 deletions(-) diff --git a/scripts/fixtures/stash-manifest.json b/scripts/fixtures/stash-manifest.json index 0de5ec4..8190378 100644 --- a/scripts/fixtures/stash-manifest.json +++ b/scripts/fixtures/stash-manifest.json @@ -48,10 +48,7 @@ { "name": "plan", "summary": "Draft a reviewable encryption plan at .cipherstash/plan.md", - "examples": [ - "plan", - "plan --target claude-code" - ], + "examples": ["plan", "plan --target claude-code"], "flags": [ { "name": "--complete-rollout", @@ -114,10 +111,7 @@ "name": "manifest", "summary": "Print the structured, versioned command surface", "long": "Emit the CLI command surface as data. `--json` produces the machine-\nreadable manifest the docs generator and agents consume; without it a\ngrouped command list is printed. The manifest is stamped with the CLI\nversion, so a page generated from it always names the version it describes.", - "examples": [ - "manifest --json", - "manifest" - ], + "examples": ["manifest --json", "manifest"], "flags": [ { "name": "--json", @@ -168,10 +162,7 @@ { "name": "auth regions", "summary": "List the regions you can authenticate against", - "examples": [ - "auth regions", - "auth regions --json" - ], + "examples": ["auth regions", "auth regions --json"], "flags": [ { "name": "--json", diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index 89a59ce..84c7dcf 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -317,8 +317,7 @@ function renderIndex( const sections = manifest.groupOrder .filter((g) => groups.has(g)) .map((g) => { - const rows = groups - .get(g)! + const rows = (groups.get(g) ?? []) .flatMap((base) => manifest.commands .filter((c) => c.base === base) @@ -348,9 +347,10 @@ ${sections} function renderMeta(manifest: Manifest, groups: Map<string, string[]>): string { const pages: string[] = []; for (const g of manifest.groupOrder) { - if (!groups.has(g)) continue; + const groupPages = groups.get(g); + if (!groupPages) continue; pages.push(`---${g}---`); - pages.push(...groups.get(g)!); + pages.push(...groupPages); } return `${JSON.stringify({ title: "CLI", pages }, null, 2)}\n`; } @@ -379,8 +379,16 @@ function main() { const groups = new Map<string, string[]>(); for (const g of manifest.groupOrder) groups.set(g, []); for (const base of bases) { - const g = manifest.commands.find((c) => c.base === base)!.group; - groups.get(g)!.push(base); + const command = manifest.commands.find((c) => c.base === base); + if (!command) throw new Error(`No command found for base "${base}".`); + + const group = groups.get(command.group); + if (!group) { + throw new Error( + `Command "${command.path}" uses undeclared group "${command.group}".`, + ); + } + group.push(base); } for (const [g, list] of groups) if (!list.length) groups.delete(g); diff --git a/src/components/code-block.tsx b/src/components/code-block.tsx index d15fbaa..b42044c 100644 --- a/src/components/code-block.tsx +++ b/src/components/code-block.tsx @@ -47,6 +47,16 @@ export function TrackedCodeBlock(props: CodeBlockProps) { return <Mermaid chart={mermaidChart} />; } + return <TrackedFumadocsCodeBlock {...props} />; +} + +/** + * Instrumented Fumadocs code block, split from the Mermaid dispatch above so + * every hook in this component is called unconditionally. + */ +function TrackedFumadocsCodeBlock(props: CodeBlockProps) { + const attrs = props as CodeBlockProps & TrackingProps; + const language = attrs["data-language"] ?? "plaintext"; const exampleId = attrs["data-example-id"]; const isCta = attrs["data-cta"] === "true"; const ctaType = attrs["data-cta-type"]; From 64ed161ee58a1b87297d9d2422d5e9e42395572a Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 15:29:25 +1000 Subject: [PATCH 126/151] docs(supabase): verify against EQL 3.0.4 --- content/docs/integrations/supabase/index.mdx | 4 ++-- .../docs/integrations/supabase/quickstart.mdx | 4 ++-- .../docs/integrations/supabase/supabase-js.mdx | 6 +++--- content/docs/reference/stack/supabase.mdx | 16 +++++++++------- 4 files changed, 16 insertions(+), 14 deletions(-) diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 5bdaeca..b73e754 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -9,7 +9,7 @@ integration: setup: dashboard-required pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: - eql: "3.0.2" + eql: "3.0.4" stack: "1.0.0" --- @@ -38,7 +38,7 @@ Each protected column is declared with an EQL domain type whose name states what Declare only the capabilities you use: every extra capability stores extra searchable material with defined leakage — see [Searchable encryption](/concepts/searchable-encryption). -Those are the column's capabilities in the database. Two of them are not reachable through supabase-js on EQL 3.0.2+ — free-text match and encrypted JSON both need an operand cast PostgREST cannot express — so if you plan to query either, read [that constraint](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) before choosing the type. Equality and ordering are unaffected. +Those are the column's capabilities in the database. Two of them are not reachable through supabase-js with the current EQL 3.0.4 release — free-text match and encrypted JSON both need an operand cast PostgREST cannot express — so if you plan to query either, read [that constraint](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) before choosing the type. Equality and ordering are unaffected. ## Installing EQL diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index f8fcc4d..97508ba 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -9,7 +9,7 @@ integration: setup: dashboard-required pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: - eql: "3.0.2" + eql: "3.0.4" stack: "1.0.0" --- @@ -290,7 +290,7 @@ const { data: recent } = await db **Keep the dual-writes.** That's what makes this deploy reversible: if reads misbehave, reverting the code returns you to plaintext reads with both columns still correct. <Callout type="warn"> -**Free-text search is not available through this wrapper on EQL 3.0.2+.** `.matches()` — and `.like()` / `.ilike()`, which delegate to it — raise, because the operator needs an `eql_v3.query_*` operand that PostgREST cannot express. Encrypted-JSON queries are unavailable for the same reason. Equality, ordering, and range all work, as shown above. For encrypted free-text, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or a scoped SQL/RPC function. Full detail in the [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter). +**Free-text search is not available through this wrapper with the current EQL 3.0.4 release.** `.matches()` — and `.like()` / `.ilike()`, which delegate to it — raise, because the operator needs an `eql_v3.query_*` operand that PostgREST cannot express. Encrypted-JSON queries are unavailable for the same reason. Equality, ordering, and range all work, as shown above. For encrypted free-text, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or a scoped SQL/RPC function. Full detail in the [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter). </Callout> The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabase` reference](/reference/stack/supabase). diff --git a/content/docs/integrations/supabase/supabase-js.mdx b/content/docs/integrations/supabase/supabase-js.mdx index b592f65..cea320e 100644 --- a/content/docs/integrations/supabase/supabase-js.mdx +++ b/content/docs/integrations/supabase/supabase-js.mdx @@ -10,7 +10,7 @@ integration: pairsWith: [supabase] verifiedAgainst: stack: "1.0.0" - eql: "3.0.2" + eql: "3.0.4" --- `encryptedSupabase` wraps a [`@supabase/supabase-js`](https://supabase.com/docs/reference/javascript/introduction) client. It encrypts values before mutations leave your application, encrypts query operands for searchable columns, and decrypts selected rows before returning them. Plaintext columns pass through unchanged. @@ -156,7 +156,7 @@ The EQL domain on each encrypted column determines which filters it accepts: | `.gt()`, `.gte()`, `.lt()`, `.lte()` | `_ord` or `text_search` | Compares encrypted ordering terms | | `.is(column, null)` | Any column | Passes SQL `NULL` through without encryption | | `.match()`, `.or()`, `.not()`, `.filter()` | Depends on the operator | Encrypts operands for encrypted columns | -| `.contains()` | Plaintext JSON or array only on EQL 3.0.2 | Uses native PostgREST containment | +| `.contains()` | Plaintext JSON or array | Uses native PostgREST containment | Encrypted and plaintext predicates compose in the same query: @@ -190,7 +190,7 @@ Storage-only, equality-only, and match-only encrypted columns cannot be ordered. ## Free-text and encrypted JSON queries <Callout type="warn"> -**EQL 3.0.2 cannot run encrypted free-text or encrypted JSON queries through supabase-js.** `.matches()`, encrypted `.contains()`, `.selectorEq()`, and `.selectorNe()` fail before a request is sent. Their SQL operators require an `eql_v3.query_*` cast that PostgREST cannot express. +**The current EQL 3.0.4 release cannot run encrypted free-text or encrypted JSON queries through supabase-js.** `.matches()`, encrypted `.contains()`, `.selectorEq()`, and `.selectorNe()` fail before a request is sent. Their SQL operators require an `eql_v3.query_*` cast that PostgREST cannot express. This PostgREST boundary was introduced in EQL 3.0.2 and remains in 3.0.4, which is why the runtime error describes it as `3.0.2+`. Inserts, selects, decryption, equality, ranges, and ordering are unaffected. Use [Drizzle](/integrations/drizzle), [Prisma Next](/integrations/prisma-next), or a carefully scoped SQL/RPC function for free-text and encrypted JSON queries. </Callout> diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 9169ecc..8e4dbe7 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -6,7 +6,7 @@ components: [encryption, eql] audience: [developer] verifiedAgainst: stack: "1.0.0" - eql: "3.0.2" + eql: "3.0.4" --- `encryptedSupabase` wraps a `@supabase/supabase-js` client so that queries on encrypted columns work like queries on plaintext ones. Mutations are encrypted before they leave your app, filter values are encrypted into the matching index term, and results are decrypted on the way back. You keep writing `.eq()`, `.gt()`, `.order()`, and the wrapper handles the encryption on both sides of every call. @@ -156,9 +156,9 @@ Every filter value on an encrypted column is encrypted client-side into the term | `.eq()` / `.neq()` | `_eq`, `_ord`, or `text_search` | Equality terms | | `.in(col, values)` | `_eq`, `_ord`, or `text_search` | Each element encrypted separately | | `.gt()` `.gte()` `.lt()` `.lte()` | `_ord` or `text_search` | Ordering terms | -| `.matches(col, value)` | `text_match` or `text_search` | Bloom-filter token containment — **unavailable on EQL 3.0.2+, [see below](#free-text-and-json-need-a-different-adapter)** | -| `.contains(col, value)` | `json`, or a plaintext array | Sub-document containment, not free-text. Encrypted JSON is **unavailable on EQL 3.0.2+** | -| `.selectorEq(col, path, value)` / `.selectorNe()` | `json` | One JSON field's value, by path — **unavailable on EQL 3.0.2+** | +| `.matches(col, value)` | `text_match` or `text_search` | Bloom-filter token containment — **unavailable through PostgREST with EQL 3.0.4, [see below](#free-text-and-json-need-a-different-adapter)** | +| `.contains(col, value)` | `json`, or a plaintext array | Sub-document containment, not free-text. Encrypted JSON is **unavailable through PostgREST with EQL 3.0.4** | +| `.selectorEq(col, path, value)` / `.selectorNe()` | `json` | One JSON field's value, by path — **unavailable through PostgREST with EQL 3.0.4** | | `.is(col, null)` | any column | Passed through. SQL `NULL` is never encrypted | | `.match({ col: value })` | per column | Each pair applied as `.eq()` | | `.or(filters)` | per column | Encrypted values inside the filter string are encrypted in place | @@ -180,7 +180,7 @@ await supabase ### Free-text and JSON need a different adapter [#free-text-and-json-need-a-different-adapter] <Callout type="warn"> -**On EQL 3.0.2 and later, this wrapper cannot run encrypted free-text search or encrypted-JSON queries.** Every spelling raises: +**With the current EQL 3.0.4 release, this wrapper cannot run encrypted free-text search or encrypted-JSON queries.** Every spelling raises: ``` [supabase v3]: matches() on encrypted column "email" is unavailable with EQL @@ -188,11 +188,13 @@ await supabase express. Use the Drizzle or Prisma Next adapter, or a scoped SQL/RPC function. ``` +The error says `3.0.2+` because EQL 3.0.2 introduced this query-domain requirement. EQL 3.0.4 retains it. + The limit is PostgREST's, not the encryption's. Those operators need a typed `eql_v3.query_*` operand, and PostgREST has no syntax for the cast — so the wrapper refuses rather than send an operand the database would compare wrongly. It fails closed on an unknown EQL version too. This applies to `.matches()`, `.contains()` on a `json` column, `.selectorEq()` / `.selectorNe()`, and the same terms reached through `.not()`, `.or()`, or a raw `.filter()`. **Equality, ordering, and range are unaffected** — `.eq()`, `.neq()`, `.in()`, `.gt()` / `.gte()` / `.lt()` / `.lte()`, and `.order()` all work, as do inserts, updates, and decryption on select. -To search encrypted text on EQL 3.0.2+, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or put it behind a scoped SQL or RPC function. Everything else on this page still applies. +To search encrypted text with EQL 3.0.4, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or put it behind a scoped SQL or RPC function. Everything else on this page still applies. </Callout> On EQL 3.0.1 and earlier, `.matches()` tests whether the stored value's encrypted token set contains the search string's — case-insensitive, and false positives are possible while false negatives are not: @@ -205,7 +207,7 @@ It is **not** `.contains()`. On an encrypted text column `.contains()` raises re ### `.like()` and `.ilike()` are approximate -On a plaintext column they are ordinary SQL `LIKE`, unaffected by any of the above. On an **encrypted** column they are a compatibility shim that reduces the pattern to a needle and delegates to `.matches()` — so on EQL 3.0.2+ they raise for the same reason it does. +On a plaintext column they are ordinary SQL `LIKE`, unaffected by any of the above. On an **encrypted** column they are a compatibility shim that reduces the pattern to a needle and delegates to `.matches()` — so with EQL 3.0.4 they raise for the same reason it does. Where they do run, the result is *approximate*: matching becomes case-insensitive and one-sided (it may return false positives), and anchoring is lost. Leading and trailing `%` are stripped, since fuzzy matching subsumes them. A pattern that cannot be approximated — an internal `%`, or any `_` — raises instead of guessing. From 59f8f57845ae56efd39a3691940384ba7d3e153d Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 17:00:11 +1000 Subject: [PATCH 127/151] docs(supabase): streamline integration guides --- content/docs/guides/deployment/index.mdx | 93 ++++- .../migration/encrypt-existing-data.mdx | 213 ++++++++++- content/docs/guides/migration/index.mdx | 16 +- content/docs/integrations/supabase/auth.mdx | 2 +- .../integrations/supabase/edge-functions.mdx | 6 + content/docs/integrations/supabase/index.mdx | 254 ++----------- .../docs/integrations/supabase/quickstart.mdx | 357 ++++-------------- .../integrations/supabase/supabase-js.mdx | 2 +- 8 files changed, 427 insertions(+), 516 deletions(-) diff --git a/content/docs/guides/deployment/index.mdx b/content/docs/guides/deployment/index.mdx index f269e42..c2c6d21 100644 --- a/content/docs/guides/deployment/index.mdx +++ b/content/docs/guides/deployment/index.mdx @@ -1,8 +1,95 @@ --- title: Deployment -description: "Deployment documentation — being built as part of the docs V2 overhaul." +description: "Deploy CipherStash changes safely across environments, with explicit credential, migration, rollout, monitoring, and rollback gates." +type: guide +components: [encryption, eql, cli] +audience: [developer] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash deployments coordinate application code, database schema, and credentials. Treat each independently deployable stage as a release with its own verification and rollback gate. -Until it lands, current documentation lives in the [existing docs](/stack). +For the detailed dual-write, backfill, and cutover procedure for populated columns, follow [Encrypt existing data](/guides/migration/encrypt-existing-data). This page covers the production rollout around that migration. + +## Before the first deployment + +- Create a separate CipherStash workspace or machine credential set for each environment. +- Store `CS_*` values in the environment's secret manager rather than copying a developer's local profile. +- Confirm the production database connection used by migrations and backfills. +- Test encryption, decryption, and the queries you rely on against a non-production database with the same EQL version. +- Inventory all application versions and background workers that may remain live during a rolling deployment. +- Decide who can approve backfill, read cutover, and plaintext removal. + +## Credentials at build and runtime + +An encryption client constructed at module load may authenticate when a build tool imports that module. In that case, `CS_WORKSPACE_CRN`, `CS_CLIENT_ID`, `CS_CLIENT_KEY`, and `CS_CLIENT_ACCESS_KEY` must be available during both the build and runtime phases. + +Do not let a local `stash auth login` session mask missing deployment credentials. Reproduce the production build in a clean environment that has only the secrets explicitly supplied by the deployment platform. + +Backfills must use credentials for the same workspace and keyset as the deployed application. `CS_*` environment variables take precedence over a local CipherStash profile. + +## Environment order + +Promote each stage through environments in this order: + +1. Local or ephemeral development database +2. Shared development or test +3. Staging with production-like data volume and connection behavior +4. Production + +Run schema compatibility and application tests after each promotion. Do not use a successful local backfill as evidence that production credentials, row counts, locks, or query plans are safe. + +## Production rollout + +| Stage | Change | Verification gate | Rollback | +| --- | --- | --- | --- | +| Install EQL | Database-only, additive | EQL status and application connectivity | Leave installed | +| Add encrypted mirrors | Nullable columns plus dual-writes | Every writer populates both columns | Revert writers; keep columns | +| Backfill | Out-of-band data job | Zero uncovered rows and sampled decryptions match | Stop and resume later | +| Build indexes | Database-only | Expected indexes engage under `EXPLAIN` | Drop or rebuild the index | +| Cut reads over | Application-only | Known filters, ordering, nulls, and RLS behavior are correct | Revert reads to plaintext | +| Remove plaintext | Application and destructive schema change | Soak complete; no old application versions remain | Restore or migrate from backup | + +Keep schema changes backward-compatible with both the old and new application version during rolling deployments. In particular, encrypted mirror columns must remain nullable until every historical row is covered. + +## Release gates + +### Before backfill + +- Dual-writes are deployed in every process that can mutate the table. +- Known inserts, updates, upserts, imports, and background jobs populate both columns. +- The backfill is using production's CipherStash credentials. +- The primary key and chunk size are suitable for paging through the table. + +### Before read cutover + +- Coverage queries return zero missing encrypted values. +- Encrypted indexes have been created and verified using [EQL indexes](/reference/eql/indexes). +- Equality, range, ordering, null, and authorization tests pass against representative data. +- The old plaintext read path remains deployable as a rollback. + +### Before dropping plaintext + +- The encrypted read path has soaked under real traffic. +- No supported application version reads or writes the plaintext column. +- Coverage has been checked again. +- Required backups and restore procedures have been tested. +- The destructive migration has a named approver and maintenance window where required. + +## Monitor after cutover + +Monitor ordinary database and application signals alongside encryption-specific failures: + +- Encryption and decryption errors +- ZeroKMS request latency and availability +- Query latency, sequential scans, and index use +- Missing or unexpectedly null values +- Authorization and Row Level Security regressions +- Backfill progress, retry rate, and uncovered-row count + +Test the correctness of returned values, not only request success rates. An incorrectly scoped filter or ordering query may return plausible but incomplete data without raising an error. + +## Rollback principles + +Prefer application rollbacks while both plaintext and encrypted columns are being maintained. Before plaintext removal, a read cutover can be reversed without changing data: point reads back to the original columns and leave dual-writes running. + +After plaintext is dropped, rollback becomes a data-recovery operation. Avoid reaching that stage until operational evidence shows the encrypted path is stable and every supported application version has moved forward. diff --git a/content/docs/guides/migration/encrypt-existing-data.mdx b/content/docs/guides/migration/encrypt-existing-data.mdx index df00457..a613f6f 100644 --- a/content/docs/guides/migration/encrypt-existing-data.mdx +++ b/content/docs/guides/migration/encrypt-existing-data.mdx @@ -1,9 +1,216 @@ --- title: Encrypt existing data -description: "Backfilling encryption onto live tables, column by column." +description: "Move populated plaintext columns to searchable encryption with dual-writes, a resumable backfill, and a reversible read cutover." type: guide +components: [encryption, eql, cli] +audience: [developer] --- -This page is being built as part of the docs V2 overhaul ([CIP-3329](https://linear.app/cipherstash/issue/CIP-3329)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +Encrypting a populated column is a staged application and database migration. Ciphertext must be produced in your application, so a database migration cannot convert existing plaintext by itself. -Until it lands, the current version lives in the [existing docs](/stack/cipherstash/proxy/encrypt-tool). +The safe pattern is to add an encrypted mirror column, dual-write new changes, backfill historical rows, and then move reads to the mirror. The plaintext column remains authoritative until the final cleanup, making every earlier stage reversible. + +This guide uses `encryptedSupabase` for its examples. The same sequence applies when the application uses [Drizzle](/integrations/drizzle), [Prisma Next](/integrations/prisma-next), or the [Stack SDK](/reference/stack): change the adapter-specific code, not the rollout order. + +## Migration sequence + +```text +DEPLOY 1 OUT OF BAND DEPLOY 2 DEPLOY 3 +Add encrypted mirror Backfill existing rows Read encrypted mirror Drop plaintext +Begin dual-writes Verify coverage Keep dual-writes Stop dual-writes +Reads stay plaintext Build indexes Soak and verify +``` + +Do not start the backfill until dual-writes are running in every deployed writer. Otherwise, a row created after the backfill passes it can remain permanently uncovered. + +## Before you start + +- Install EQL and configure your encryption client. For Supabase, complete the [Quickstart](/integrations/supabase/quickstart) against a development table first. +- Inventory every writer of the columns: services, jobs, Edge Functions, imports, seeds, RPC functions, webhooks, and administrative tools. +- Make the same CipherStash machine credentials available to the deployed application and the backfill job. +- Decide which encrypted capability each column needs by following [EQL core concepts](/reference/eql/core-concepts). + +The examples migrate `patients.name` and `patients.date_of_birth`: + +```sql +CREATE TABLE patients ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email text NOT NULL, + name text, + date_of_birth date, + plan text +); +``` + +<Steps> +<Step> + +### Add nullable encrypted mirrors + +Add one encrypted column beside each plaintext column: + +```sql +ALTER TABLE patients + ADD COLUMN name_encrypted public.eql_v3_text_eq, + ADD COLUMN date_of_birth_encrypted public.eql_v3_date_ord; +``` + +The new columns must be nullable because existing rows do not have ciphertext yet. The `_encrypted` suffix is the convention used by `stash encrypt backfill`; use `--encrypted-column` if your names differ. + +Ship this schema change together with the dual-write code in the next step. Do not rename or remove the plaintext columns. + +</Step> +<Step> + +### Dual-write every mutation + +Update every insert, update, and upsert path to write the plaintext column and its encrypted mirror in the same statement: + +```typescript title="lib/patients.ts" +import { db } from "./db" + +export async function createPatient(input: { + email: string + name: string + dateOfBirth: string + plan: string +}) { + return db.from("patients").insert({ + email: input.email, + name: input.name, + name_encrypted: input.name, + date_of_birth: input.dateOfBirth, + date_of_birth_encrypted: input.dateOfBirth, + plan: input.plan, + }) +} + +export async function updatePatientName(id: number, name: string) { + return db + .from("patients") + .update({ name, name_encrypted: name }) + .eq("id", id) +} +``` + +The encrypted client encrypts the mirror values while passing the original values through unchanged. Keeping both values in one database statement prevents one half of the write from succeeding without the other. + +Search the codebase for every writer before deploying. A missed importer, background job, conflict handler, or administrative path can create uncovered rows. + +</Step> +<Step> + +### Deploy and verify dual-writes + +Deploy the schema and application changes to the environment that owns the database. The backfill is not safe while dual-writes exist only locally or in CI. + +After the deployment, create and update known rows through each important write path. Confirm that both the plaintext and encrypted columns are populated, then inspect the migration state: + +```bash +npx stash encrypt status +``` + +The application is now in a safe steady state: new writes are mirrored, old rows remain plaintext-only, and reads still use the original columns. + +</Step> +<Step> + +### Backfill historical rows + +Run one backfill per plaintext column: + +```bash +npx stash encrypt backfill --table patients --column name +npx stash encrypt backfill --table patients --column date_of_birth +``` + +The command pages by primary key, encrypts rows in chunks, and records checkpoints. It is resumable and idempotent. For a non-interactive job, acknowledge the deployment gate with `--confirm-dual-writes-deployed`. + +<Callout type="warn"> +Run the backfill with the same CipherStash workspace and credentials as the deployed application. A local CipherStash profile may point to a different workspace, producing values the production application cannot decrypt. +</Callout> + +</Step> +<Step> + +### Verify complete coverage + +Check that every populated plaintext value has an encrypted mirror: + +```sql +SELECT + count(*) FILTER ( + WHERE name IS NOT NULL AND name_encrypted IS NULL + ) AS name_uncovered, + count(*) FILTER ( + WHERE date_of_birth IS NOT NULL + AND date_of_birth_encrypted IS NULL + ) AS dob_uncovered +FROM patients; +``` + +Both counts must be zero. A non-zero result usually means a writer is not dual-writing. Fix and deploy that path, then run the backfill again before continuing. + +Also sample known records through the encrypted application client and verify their decrypted values against the plaintext originals. + +</Step> +<Step> + +### Build encrypted indexes + +Build the functional indexes required by the queries you will move to the encrypted columns. Do this after the bulk backfill and before changing reads. + +Index definitions, supported query shapes, `EXPLAIN` verification, and guidance for large tables are maintained in [EQL indexes](/reference/eql/indexes). Use concurrent index creation where that guide recommends it for a live table. + +</Step> +<Step> + +### Cut reads over + +Deploy an application-only change that reads and filters on the encrypted mirror columns: + +```typescript +const { data } = await db + .from("patients") + .select("id, email, name_encrypted, date_of_birth_encrypted") + .eq("name_encrypted", "Alice Chen") + .gt("date_of_birth_encrypted", "1980-01-01") + .order("date_of_birth_encrypted", { ascending: false }) +``` + +Keep dual-writes enabled. If the new read path misbehaves, reverting this deployment restores plaintext reads while both sets of columns remain current. + +Verify correctness rather than checking only for non-empty results. Test known equality matches, range boundaries, ordering, nulls, and authorization behavior. + +</Step> +<Step> + +### Soak, then remove plaintext + +Let production traffic exercise the encrypted read path. Monitor query errors, latency, decryption failures, and uncovered-row counts for an appropriate period. + +Once you no longer need a plaintext rollback, remove the dual-write code and generate the destructive migration: + +```bash +npx stash encrypt drop --table patients --column name +``` + +Review and apply the generated migration through your normal deployment process. Repeat per column rather than combining unrelated migrations into one irreversible change. + +<Callout type="warn"> +Dropping the plaintext column is the first irreversible stage. Take any required backup, verify coverage again at apply time, and confirm that no old application version still reads or writes the column. +</Callout> + +</Step> +</Steps> + +## Rollback by stage + +| Current stage | Safe rollback | +| --- | --- | +| Mirrors added, before backfill | Revert application writes; leave or remove the empty mirrors | +| Backfill in progress | Stop it and resume later; keep plaintext reads and dual-writes | +| Reads cut over | Revert reads to plaintext; keep dual-writes | +| Plaintext dropped | Restore from an approved backup or perform a new decrypting migration | + +For environment ordering, credential handling, release gates, and production monitoring, continue with the [deployment guide](/guides/deployment). diff --git a/content/docs/guides/migration/index.mdx b/content/docs/guides/migration/index.mdx index cd728e5..6741cf4 100644 --- a/content/docs/guides/migration/index.mdx +++ b/content/docs/guides/migration/index.mdx @@ -1,8 +1,18 @@ --- title: Data migration -description: "Data migration documentation — being built as part of the docs V2 overhaul." +description: "Safely introduce CipherStash encryption to existing schemas and populated production data." +type: guide +components: [encryption, eql, cli] +audience: [developer] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +Encryption migrations coordinate schema changes, application writes, historical data, and read cutovers. Keep each stage independently verifiable and reversible until the plaintext data is intentionally removed. -Until it lands, current documentation lives in the [existing docs](/stack). +<Cards> + <Card title="Encrypt existing data" href="/guides/migration/encrypt-existing-data"> + Add encrypted mirrors, deploy dual-writes, backfill historical rows, cut reads over, and remove plaintext safely. + </Card> + <Card title="Deployment" href="/guides/deployment"> + Plan environment promotion, credentials, release gates, monitoring, and rollback. + </Card> +</Cards> diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index 4cd788d..cd3ad17 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -24,7 +24,7 @@ CipherStash needs to trust your Supabase project as an OIDC issuer before it wil https://<project-ref>.supabase.co/auth/v1 ``` -> **Good to know**: the dashboard's [Supabase integration](/integrations/supabase#connecting-your-project-to-cipherstash) can register this for you in one click while it's connected to your project over OAuth. Manual OIDC configuration is covered in the [auth reference](/reference/auth). +> **Good to know**: the [CipherStash dashboard](https://dashboard.cipherstash.com) can register this for you in one click while it is connected to your Supabase project over OAuth. Manual OIDC configuration is covered in the [auth reference](/reference/auth). ## Federate the Supabase session diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx index c3dd32d..485ff2c 100644 --- a/content/docs/integrations/supabase/edge-functions.mdx +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -29,6 +29,12 @@ Map the `wasm-inline` entries in your function's `deno.json`: } ``` +<Callout type="warn"> +**The developer profile is not supported in Edge Functions.** `stash auth login` creates a profile for the native Node.js SDK on your development machine. An Edge Function runs the WebAssembly client inside an isolated Deno runtime, where that profile and automatic credential discovery are unavailable. + +Provide the four `CS_*` values explicitly through an env file when serving locally and through Supabase secrets when deployed. +</Callout> + Provide the `CS_*` credentials when you serve the function. Generate them with `stash env` rather than assembling the file by hand — it prints the deployment variables for the workspace you are authenticated against, so redirect it straight to the env file: ```bash example-id="supabase-edge-stash-env" diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index b73e754..854ae70 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -1,256 +1,56 @@ --- title: Overview -description: "Searchable, application-level encryption for your Supabase project: what it gives you, how EQL installs into Supabase Postgres, and how to operate encrypted columns across grants, indexes, RLS, and the dashboard." +description: "Add searchable application-level encryption to Supabase while keeping the Supabase client, Auth, Row Level Security, and your choice of Postgres ORM." type: concept components: [encryption, eql, platform] audience: [developer, ciso] integration: category: platform - setup: dashboard-required + setup: code-only pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: eql: "3.0.4" stack: "1.0.0" --- -import { faqPrivacy, faqScaling, faqKms, faqRlsVsEncryption, faqFreeTier } from "@/components/faq/shared"; +CipherStash adds searchable, field-level encryption to Supabase. Your application encrypts sensitive values before they reach Postgres, so the database, backups, replication streams, and Supabase dashboard contain ciphertext rather than plaintext. -CipherStash adds field-level encryption to your Supabase project. Sensitive fields (names, emails, health records, anything you choose) are encrypted inside your application before they ever reach Postgres, so plaintext never touches your database, its backups, or its replication streams. CipherStash never sees your data or your keys. - -Unlike ordinary field encryption, the ciphertext stays **fully queryable**. You install [Encrypt Query Language (EQL)](/reference/eql) on your Supabase database, declare each protected column with the encrypted type that matches the operations you need, then query it with the same `.eq()`, `.gt()`, and `.order()` calls you use today. - -If you want the fastest path to encrypting a column that already holds live data, start with the [Quickstart](/integrations/supabase/quickstart) — about twenty minutes, taking a plaintext `patients` table through mirror columns, dual-writes, backfill, and read cutover. This page is the reference behind it: how EQL installs and what Supabase's roles need from it, choosing and indexing column types, how encryption composes with Row Level Security, and what encrypted data looks like across the dashboard. +Unlike ordinary application-level encryption, protected columns remain queryable. Equality filters, range queries, and ordering use the same Supabase query-builder methods as plaintext columns, while CipherStash encrypts query values and decrypts results around each request. ## How it works -Encrypted search is built on [EQL](/reference/eql), which installs into any Supabase database as plain SQL. Like regular Postgres, EQL provides a set of data types and functions, but designed for working with encrypted data. - -Each protected column is declared with an EQL domain type whose name states what the column can do. The wrapper reads that type straight from the database, so there is no second declaration to keep in sync. The full type catalogue lives in the EQL reference — [numbers](/reference/eql/numbers), [dates & times](/reference/eql/dates-and-times), [text](/reference/eql/text), [JSON](/reference/eql/json), [booleans](/reference/eql/booleans) — but the shape is always the same: - -| You query it with | Type the column as | EQL term | -| --- | --- | --- | -| Nothing (store/decrypt only) | `public.eql_v3_<T>` | none | -| `.eq()` / `.in()` | `public.eql_v3_<T>_eq` | `hm` | -| Ranges, `.order()` | `public.eql_v3_<T>_ord` | `op` | -| Free-text match | `public.eql_v3_text_match` | `bf` | -| All three (text) | `public.eql_v3_text_search` | `hm`, `op`, `bf` | -| Encrypted JSON | `public.eql_v3_json` | `sv` | - -Declare only the capabilities you use: every extra capability stores extra searchable material with defined leakage — see [Searchable encryption](/concepts/searchable-encryption). - -Those are the column's capabilities in the database. Two of them are not reachable through supabase-js with the current EQL 3.0.4 release — free-text match and encrypted JSON both need an operand cast PostgREST cannot express — so if you plan to query either, read [that constraint](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) before choosing the type. Equality and ordering are unaffected. - -## Installing EQL - -The `stash` CLI installs EQL. It reads `DATABASE_URL`, detects that it points at Supabase, and installs directly against the database: - -```bash example-id="supabase-eql-install" -npx stash eql install -``` - -Pass `--database-url <url>` to override the connection for a single run without writing it to disk. The install is idempotent, so `--force` reinstalls over an existing schema, and `--dry-run` shows what would happen. Check what you ended up with: - -```bash -npx stash eql status -``` - -The install is **always EQL v3**. The full flag set is in the [CLI reference](/reference/cli/eql). - -<Callout type="warn"> -**EQL installs directly against the database, not through a migration.** `stash eql install` rejects `--migration`, `--migrations-dir`, and `--latest`, and there is no Supabase migration variant to fall back on — one v3 SQL artifact targets every platform. - -The practical consequence is local resets. `supabase db reset` rebuilds your database from your migrations directory, so it drops the EQL install. Re-run `stash eql install` after each reset. - -`--drizzle` is rejected here too, but has its own answer: `stash eql migration --drizzle` generates a v3 install migration — including the `cs_migrations` tracking schema — so Drizzle projects can keep the install in their migration history and apply it with `drizzle-kit migrate`. That path is Drizzle's alone; it does not produce a `supabase/migrations/` file. -</Callout> - -## Grants - -Supabase's API roles need access to the `eql_v3` schema, because your table columns are typed with its domains and your queries resolve its operators and functions: - -```sql -GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; -GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; -``` - -Run this once after install (and after upgrades that add functions). Without `USAGE`, PostgREST queries against tables with encrypted columns fail with a permission error on the schema. - -You do **not** need to add `eql_v3` to the *Exposed schemas* list in the [API settings](https://supabase.com/dashboard/project/_/settings/api) for normal queries — your tables live in `public`. Expose it only if you want to call EQL functions directly over the REST API. - -## Indexes - -Encrypted columns index through **ordinary functional indexes** over EQL's term-extractor functions. This is why EQL works on Supabase unchanged: the default ordering term indexes under Postgres's own `bytea_ops`, so no custom operator class is needed, just `CREATE INDEX`, which any migration can run: - -```sql -CREATE INDEX patients_email_eq ON patients USING hash (eql_v3.eq_term(email)); -CREATE INDEX patients_dob_ord ON patients USING btree (eql_v3.ord_term(date_of_birth)); -CREATE INDEX patients_name_match ON patients USING gin (eql_v3.match_term(name)); -ANALYZE patients; -``` - -Add them once a table has real row counts (thousands, not dozens). Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes) — all of it applies to Supabase verbatim. - -<Callout type="warn"> -Creating a custom operator class needs superuser, which Supabase does not grant. The EQL installer detects this and **disables the ORE-backed domains** (`_ord_ore`, `text_search_ore`), which then raise `feature_not_supported` on the first value written. Use `_ord` and `text_search`, whose CLLW OPE ordering term indexes under the default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). -</Callout> - -## Row Level Security - -Encrypted columns and RLS compose — they solve different problems: - -- **RLS** decides *which rows* a role may query. It's enforced in the database, on whatever the database stores. -- **Encryption** decides *whether a value can be read at all*. Keys stay outside the database, so anything that bypasses RLS — a leaked `service_role` key, an over-broad policy, a stolen backup, direct disk access — yields ciphertext, not plaintext. - -Run both. Keep writing policies exactly as before; the `encryptedSupabase` wrapper goes through your own supabase-js client, so the caller's JWT and your policies apply to every query. Policies can freely reference *non-encrypted* columns (`user_id`, `tenant_id`, timestamps). Policies **cannot usefully compare encrypted values to plaintext** — the database never sees plaintext, so keep RLS predicates on plaintext columns and encrypted-value filtering in your queries. - -One practical pattern: leave your row-ownership predicate on a plaintext `user_id uuid` column, and encrypt the *contents* of the row. RLS scopes the rows to `auth.uid()`; CipherStash makes their contents unreadable to everything except your app. To go one step further and make a row's contents decryptable *only* by its owner — even to your own service role — see [Supabase Auth](/integrations/supabase/auth). - -## Connections and pooling - -The `encryptedSupabase` wrapper talks to Supabase over PostgREST (your existing `SUPABASE_URL`), so connection pooling concerns don't change — nothing about encryption touches the connection layer. It does open one direct Postgres connection at startup, over `DATABASE_URL`, to introspect your encrypted columns. If you also connect to the database directly (migrations, [CipherStash Proxy](/reference/proxy), or an ORM like [Drizzle](/integrations/drizzle)), use the same connection strings you'd use without encryption; EQL is passive SQL and has no session requirements. The direct-connection path is covered in [Quickstart → Using an ORM instead](/integrations/supabase/quickstart#using-an-orm-instead). - -## Working in the dashboard - -Encrypted columns live inside your normal Supabase dashboard — no separate tool. Here's what to expect in each part of it. - -### Table Editor - -Encrypted columns show **ciphertext payloads**, not plaintext. A `patients` row looks like: - -| id | email | name | plan | -| --- | --- | --- | --- | -| 1 | `{"v": 3, "i": {"t": "patients", "c": "email"}, "c": "mBbKmsMM%bK#…", "hm": "9c8ec1d2…"}` | `{"v": 3, "i": …, "c": "x7Qq…", "bf": [42, 1290, …]}` | `standard` | - -This is the point, not a limitation: what the Table Editor shows is exactly what a backup, a replication stream, a leaked `service_role` key, or a curious operator sees. The payload structure (`v`, `i`, `c`, and the index terms) is documented in [EQL core concepts](/reference/eql/core-concepts) — none of it reveals the plaintext. - -Practical consequences: - -- **Reading data** happens through your app (or any client using the [Stack SDK](/reference/stack)); the dashboard can't decrypt, because the keys never go near it. -- **Hand-editing an encrypted cell** in the Table Editor will produce a value that fails the column's `CHECK` constraint or fails to decrypt — treat encrypted columns as read-only in the dashboard. -- **Filtering and sorting** on encrypted columns in the Table Editor UI operates on the raw payloads, so it won't return meaningful results. Query through your app instead. - -### Creating encrypted columns - -Use the **SQL Editor** for schema work on encrypted columns: - -```sql -ALTER TABLE patients ADD COLUMN tax_id public.eql_v3_text_eq; -``` - -The `eql_v3_*` domain types are user-defined types, and the Table Editor's column-type picker doesn't reliably surface custom domains — SQL is the dependable path, and it's what your migrations should contain anyway. - -### SQL Editor - -Everything in the [EQL reference](/reference/eql) can be run from the SQL Editor — installing EQL, creating indexes, `EXPLAIN`-ing query plans. Two checks worth knowing: - -```sql --- Is EQL installed, and which version? -SELECT eql_v3.version(); - --- Which columns are encrypted? -SELECT table_name, column_name, udt_name -FROM information_schema.columns -WHERE udt_schema = 'eql_v3'; -``` - -### API settings - -Normal operation needs **no** API-settings changes: your tables are in the `public` schema, and the wrapper's queries are ordinary PostgREST calls. The `eql_v3` schema needs role *grants* (see [Grants](#grants) above), but does **not** need to be in the *Exposed schemas* list unless you want to call EQL functions directly over REST. - -## Connecting your project to CipherStash +CipherStash has two parts: -Connecting is optional — you can set the `CS_*` credentials by hand ([Quickstart](/integrations/supabase/quickstart#install-the-sdk-and-connect-your-workspace)). The CipherStash dashboard's first-class Supabase integration at [dashboard.cipherstash.com](https://dashboard.cipherstash.com) automates it: +1. [Encrypt Query Language (EQL)](/reference/eql) adds encrypted column types, operators, and functions to your Supabase Postgres database. +2. [`encryptedSupabase`](/reference/stack/supabase) wraps the Supabase JavaScript client and performs encryption and decryption in your application. -<Steps> -<Step> -### Connect via OAuth +The EQL type assigned to a column declares what can be queried. For example, an equality column supports `.eq()` and `.in()`, while an ordered column also supports ranges and `.order()`. Choose only the capabilities you need, because searchable encryption has defined leakage characteristics. See [EQL core concepts](/reference/eql/core-concepts) for the complete model. -Authorize CipherStash against your Supabase organization. The integration requests read-only scopes (`projects:read`, `database:read`) — it never sees your database secrets. -</Step> -<Step> -### Pick a project and run the readiness checks +With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ordering queries. Encrypted free-text and JSON queries require an adapter such as Drizzle or Prisma Next because PostgREST cannot express the typed operands those operations require. The [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) documents the limitation. -The setup hub verifies EQL is installed (`eql_v3.version()`), checks for encrypted columns, and flags anything missing. -</Step> -<Step> -### Configure identity (optional) +## Choose your path -One click registers your project's Supabase Auth issuer (`https://<project-ref>.supabase.co/auth/v1`) with your workspace, enabling [identity-aware encryption](/integrations/supabase/auth). -</Step> -<Step> -### Copy your environment +| What you want to do | Start here | +| --- | --- | +| Encrypt and query your first Supabase column | [Supabase Quickstart](/integrations/supabase/quickstart) | +| Use the Supabase JavaScript client | [supabase-js guide](/integrations/supabase/supabase-js) | +| Look up the complete wrapper API | [`encryptedSupabase` reference](/reference/stack/supabase) | +| Bind decryption to the signed-in user | [Supabase Auth](/integrations/supabase/auth) | +| Encrypt inside Supabase Edge Functions | [Edge Functions](/integrations/supabase/edge-functions) | +| Use an ORM against Supabase Postgres | [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) | +| Encrypt columns that already contain data | [Encrypt existing data](/guides/migration/encrypt-existing-data) | +| Plan a production rollout or rollback | [Deployment guide](/guides/deployment) | -The hub emits the `CS_*` credentials block for your app's environment, ready to pair with your existing `SUPABASE_URL` and keys. -</Step> -</Steps> +## Supabase, Drizzle, and Prisma -## The rest of this section +Supabase is Postgres, so you are not limited to PostgREST or `supabase-js`. CipherStash's [Drizzle](/integrations/drizzle) and [Prisma Next](/integrations/prisma-next) integrations can read and write the same EQL columns through a direct database connection. They produce the same ciphertext, so an application can use more than one adapter without re-encrypting its data. -- **[Quickstart](/integrations/supabase/quickstart):** the end-to-end walkthrough — install EQL, wrap your client, and convert two live plaintext columns to encrypted ones — plus the direct-connection path if you use Drizzle or Prisma. -- **[supabase-js](/integrations/supabase/supabase-js):** create the encrypted client, then insert, select, filter, and order encrypted columns with the familiar query builder. -- **[Supabase Auth](/integrations/supabase/auth):** federate the signed-in session so encryption authenticates as the user, and optionally lock decryption to their identity. -- **[Edge Functions](/integrations/supabase/edge-functions):** run encryption server-side through the WebAssembly build. -- **[Key management and audit logging](/security/audit-logging):** per-value keys and rotation through CipherStash ZeroKMS, a decryption access trail out of the box, optional Bring Your Own Key, and FIPS and SOC 2 compliance. +Use `encryptedSupabase` when you want Supabase's query builder and automatic propagation of the caller's JWT. Use an ORM when it better fits your application or when you need encrypted free-text or JSON queries. A privileged direct database connection may bypass Row Level Security, so preserve tenant or user scoping in the connection role or ORM query. -## FAQ +## Row Level Security and indexes -<Faq - items={[ - faqPrivacy, - { - title: "Does it work with Supabase Auth and Row Level Security?", - answer: ( - <> - Yes. It integrates with Supabase Auth and runs alongside RLS. It - complements them; it does not replace them. - </> - ), - }, - faqRlsVsEncryption, - { - title: "Do I have to change how I write queries?", - answer: ( - <> - No. Query encrypted columns with the same Supabase.js calls you use - today. - </> - ), - }, - { - title: "What does migration look like?", - answer: ( - <> - Install EQL on your Supabase database, add an encrypted mirror column - beside each column you want to protect, write both for a while, - backfill the historical rows, then move reads across. One column at a - time, no downtime, reversible until you drop the plaintext. The{" "} - <a href="/integrations/supabase/quickstart">Quickstart</a> walks - through it end to end. - </> - ), - }, - faqKms, - faqScaling, - faqFreeTier, - ]} -/> +Encryption complements Supabase Row Level Security rather than replacing it. RLS controls which rows a caller may query; encryption controls whether the values in those rows can be read. Keep RLS predicates on plaintext ownership columns such as `user_id`, and encrypt the sensitive contents of the row. [Supabase Auth](/integrations/supabase/auth) can additionally bind decryption to the authenticated user's identity. -## Where to next +Encrypted columns use ordinary functional Postgres indexes over EQL term-extractor functions. The recipes, query shapes, `EXPLAIN` checks, and large-table guidance are maintained in [EQL indexes](/reference/eql/indexes). -<Cards> - <Card title="Quickstart" href="/integrations/supabase/quickstart"> - The end-to-end walkthrough: install EQL, wrap your client, and encrypt two columns that already hold live data. - </Card> - <Card title="supabase-js" href="/integrations/supabase/supabase-js"> - Insert, select, filter, and order encrypted columns through the Supabase JavaScript client. - </Card> - <Card title="Supabase Auth" href="/integrations/supabase/auth"> - Federate the Supabase session and lock decryption to the authenticated user. - </Card> - <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> - Run encryption server-side in Supabase Edge Functions. - </Card> - <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> - The complete wrapper API: every filter, response shapes, and how it works. - </Card> -</Cards> +In the Supabase Table Editor, encrypted columns appear as ciphertext payloads. Read and edit them through an application using CipherStash; the dashboard does not hold the keys required to decrypt them. diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 97508ba..c3a3fd4 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -1,364 +1,165 @@ --- title: Quickstart -description: "Encrypt two sensitive columns on a Supabase table that already holds live data: add encrypted mirror columns, dual-write, backfill, and cut reads over — without downtime or data loss." +description: "Encrypt, store, and query your first field in Supabase with EQL and the encrypted Supabase JavaScript client." type: tutorial components: [encryption, eql, platform] audience: [developer] integration: category: platform - setup: dashboard-required + setup: code-only pairsWith: [drizzle, prisma-next, clerk] verifiedAgainst: eql: "3.0.4" stack: "1.0.0" --- -This tutorial takes a Supabase table that already exists, already holds real rows, and stores sensitive data in plaintext — and converts two of its columns to searchable encryption without downtime or data loss. It takes about twenty minutes. For what CipherStash is and why you'd add it, start with the [overview](/integrations/supabase). +This tutorial creates a Supabase table with one encrypted column, writes a value through the Supabase JavaScript client, and queries it without sending plaintext to Postgres. -## The starting point +It is designed for a new table or an empty column. If the column already contains production data, use [Encrypt existing data](/guides/migration/encrypt-existing-data) instead. -A `patients` table, entirely in plaintext, with rows in it: +## Before you start -```sql -CREATE TABLE patients ( - id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email text NOT NULL, - name text, - date_of_birth date, - plan text -); -``` - -We'll encrypt **`name`** and **`date_of_birth`** — the two fields that identify a patient. `email` stays plaintext for now (the same recipe applies to it later), and `plan` isn't sensitive, so it stays an ordinary column forever. - -## How it fits together - -To use searchable encryption in Supabase, 2 components are required: - -- **[EQL](/reference/eql)** defines the encrypted types and installs into your Supabase database -- **[`@cipherstash/stack`](/reference/stack)** runs in your application and encrypts data and queries before sending to the database. +You need: -Because ciphertext can only be produced by your application — no `UPDATE` and no database function can encrypt an existing row — a populated column can't be swapped for an encrypted one in a single step. Instead, each column gets an **encrypted mirror** that is filled in alongside the plaintext original, and only once every row has a ciphertext twin do reads move over: - -``` - DEPLOY 1 out-of-band DEPLOY 2 follow-up - ──────────── ─────────── ───────────── ────────── - + encrypted mirrors backfill historical reads → mirrors drop plaintext - + dual-write everywhere rows, build indexes dual-writes stay columns - reads unchanged - │ ▲ ▲ - └── ⛔ dual-writes must be ──┘ ⛔ soak, verify ───┘ - live in the deployed - environment first -``` - -The plaintext columns stay authoritative — and stay populated — the whole way through. Nothing in this tutorial is irreversible. - -<Callout type="idea"> -**Starting from scratch instead?** On a table with no data, skip the ladder entirely: declare the columns as EQL types in the `CREATE TABLE` (`name public.eql_v3_text_eq`, `date_of_birth public.eql_v3_date_ord`), then jump to [Wrap your Supabase client](#wrap-your-supabase-client). Steps 4 through 7 exist only to protect data that already exists. -</Callout> +- A Supabase project and its database connection string +- A Node.js project +- A CipherStash account; the setup flow signs you in <Steps> <Step> -### Install EQL on your database - -Point `DATABASE_URL` at your Supabase project, then install EQL with the `stash` CLI: - -```bash cta cta-type="install" example-id="supabase-quickstart-eql-install" -npx stash eql install -``` - -It detects Supabase from the connection string, needs no superuser, and completes in seconds, creating the `eql_v3` schema for functions and operators, and the encrypted column types in `public`. Then grant your Supabase roles access: - -```sql -GRANT USAGE ON SCHEMA eql_v3 TO anon, authenticated, service_role; -GRANT EXECUTE ON ALL FUNCTIONS IN SCHEMA eql_v3 TO anon, authenticated, service_role; -``` - -The install targets EQL v3 by default. The [overview](/integrations/supabase#installing-eql) covers the rest, including why a v3 install does not survive `supabase db reset`. - -This step is additive and touches none of your tables, so ship it early — on its own if you like. Nothing depends on encryption yet, so a credential or connectivity problem surfaces while it's cheap. - -</Step> -<Step> - -### Install the SDK and connect your workspace - -```sh -npm install @cipherstash/stack @cipherstash/stack-supabase @supabase/supabase-js -``` +### Initialize CipherStash -Sign up at [dashboard.cipherstash.com](https://dashboard.cipherstash.com), create a workspace, and set its credentials alongside your Supabase keys. `DATABASE_URL` is your project's Postgres connection string, which the wrapper uses to introspect your encrypted columns: +Add your Supabase settings to the project's environment: -```sh -CS_WORKSPACE_CRN=... -CS_CLIENT_ID=... -CS_CLIENT_KEY=... -CS_CLIENT_ACCESS_KEY=... +```sh title=".env" SUPABASE_URL=https://<project-ref>.supabase.co SUPABASE_ANON_KEY=... DATABASE_URL=postgresql://postgres:...@db.<project-ref>.supabase.co:5432/postgres ``` -Mint one set of credentials per environment with `npx stash env --name patients-prod`. The access key is shown once, so pipe it straight into your platform's secret store. - -<Callout type="warn"> -**These are usually needed at build time, not just run time.** If your encrypted client is constructed at module load — the `lib/db.ts` singleton below does exactly that — then any build step that imports it authenticates during the build, and a build without `CS_*` fails with `Not authenticated`. Local builds hide this, because your `~/.cipherstash` device profile authenticates silently. -</Callout> - -<Callout type="idea"> -**Good to know**: the CipherStash dashboard's Supabase integration can generate this whole block for you. It connects to your project over OAuth, runs readiness checks, and emits the `CS_*` credentials. It's optional; the manual block above works everywhere. See [Overview → Connecting your project](/integrations/supabase#connecting-your-project-to-cipherstash). -</Callout> - -</Step> -<Step> - -### Wrap your Supabase client +Then run the Supabase setup flow: -There is no schema to declare. `encryptedSupabase` introspects the database over `DATABASE_URL`, finds the columns typed as EQL domains, and derives each one's encryption config from its type. Plain `text` and `date` columns pass through untouched, so wrapping the client changes nothing until encrypted columns exist. - -```typescript title="lib/db.ts" -import { encryptedSupabase } from "@cipherstash/stack-supabase" - -export const db = await encryptedSupabase( - process.env.SUPABASE_URL!, - process.env.SUPABASE_ANON_KEY!, -) +```bash cta cta-type="install" example-id="supabase-quickstart-eql-install" +npx stash init --supabase ``` -Swap your existing `createClient` for this and deploy it. Every query keeps working exactly as before. - -</Step> -<Step> +`stash init`: -### Add the encrypted mirror columns +- Opens the CipherStash device login if you do not already have a developer profile +- Resolves the database configuration +- Installs compatible, pinned versions of `@cipherstash/stack`, `@cipherstash/stack-supabase`, and the `stash` CLI +- Installs EQL v3 with the grants required by Supabase's `anon`, `authenticated`, and `service_role` roles +- Scaffolds the encryption client and records context for coding agents -Now the first real change. Generate a migration: +If the command generates a Supabase migration instead of applying EQL directly, run the apply command it prints before continuing. Confirm that EQL is available with: ```bash -supabase migration new add_patients_encrypted_columns +npx stash eql status ``` -Add one mirror column per plaintext column. The type declares what the column can do — equality lookups, free-text matching, and range or ordering queries are different capabilities, and each one stores an extra index term alongside the ciphertext, so declare only what you query: +The native Stack client automatically uses the developer profile created by this login. You do not need `CS_*` machine credentials for local development; those are for deployed environments. -```sql title="supabase/migrations/<timestamp>_add_patients_encrypted_columns.sql" -ALTER TABLE patients - ADD COLUMN name_encrypted public.eql_v3_text_eq, -- exact lookup - ADD COLUMN date_of_birth_encrypted public.eql_v3_date_ord; -- ranges and ORDER BY -``` - -Two things about that SQL matter: - -- **Both columns are nullable.** Mandatory — every existing row has no ciphertext yet. `NOT NULL` here fails the migration, or (worse) succeeds against an empty local database and fails in production. -- **The names end in `_encrypted`.** That's the convention `stash encrypt backfill` resolves by default, so `--encrypted-column` isn't needed later. - -Apply it with `supabase db reset` locally or `supabase migration up` against the remote project. The plaintext columns are untouched, and nothing reads the new ones yet. - -<Callout type="info"> -`name` is a natural candidate for free-text search, but `.matches()` isn't reachable through the supabase-js wrapper (see the callout in step 8), so this tutorial types it `eql_v3_text_eq` for exact lookup. If you need encrypted free-text on `name`, type it `public.eql_v3_text_match` and query it through the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter. Which type fits which column is covered by the [EQL type pages](/reference/eql/core-concepts). - -Supabase also runs the EQL installer as a non-superuser, so the ORE-backed domains (`_ord_ore`, `text_search_ore`) are disabled and raise if you use them. Use `_ord` and `text_search`, which order under Postgres's default btree operator class. See [SEM specifiers](/reference/eql/core-concepts#sem-specifiers). -</Callout> - -</Step> -<Step> - -### Dual-write to both columns - -This ships in the **same PR and the same deploy** as the migration above. It changes what your application *writes*; it does not change what it reads. - -Every path that writes `name` or `date_of_birth` now writes the mirror too, in the same statement. The wrapper encrypts the mirror automatically — it's an EQL domain column — while the plaintext column passes through unchanged: - -```typescript title="lib/patients.ts" -import { db } from "./db" - -export async function createPatient(input: { - email: string - name: string - dateOfBirth: string - plan: string -}) { - return db.from("patients").insert({ - email: input.email, - name: input.name, // plaintext — keep writing it - name_encrypted: input.name, // encrypted mirror - date_of_birth: input.dateOfBirth, // plaintext — keep writing it - date_of_birth_encrypted: input.dateOfBirth, // encrypted mirror - plan: input.plan, - }) -} - -export async function updatePatientName(id: number, name: string) { - return db.from("patients").update({ - name, - name_encrypted: name, - }).eq("id", id) -} -``` - -Funnelling writes through functions like these is the easiest way to make the rule hold, because callers can't write one half. +<Callout type="idea"> +**Using an agent?** An agent can drive the same setup. If no developer profile exists, it should start `npx stash auth login --json --region <region> --supabase`, show you the returned verification URL, and leave the command running until authorization completes. It can then run `npx stash init --supabase --region <region>`. -<Callout type="warn"> -**"Every path" means every path.** Not just the main service — insert sites, update sites, upserts and `ON CONFLICT` clauses, seed scripts, CSV importers, admin actions, background jobs, Edge Functions, RPC functions, and webhook handlers. One missed branch means rows written in production after this deploy have plaintext but no ciphertext, and the backfill (which runs before those rows exist) will never catch them. Grep for every writer of `patients.name` and `patients.date_of_birth` before merging. +At the end of interactive initialization, you can continue into `stash plan`. Choosing Codex or Claude Code installs the Supabase-specific CipherStash skills into the agent's project directory; editor agents receive the same guidance through `AGENTS.md`. The skills cover Supabase, authentication, EQL indexes, deployment, and the CLI, giving the agent the context needed to plan and implement encryption changes safely. </Callout> -After this deploy the system is in a safe steady state, and can stay there indefinitely. New rows are fully mirrored, old rows aren't, and reads work either way. - </Step> <Step> -### Deploy, and confirm dual-writes are live - -⛔ **The gate.** Ship the PR. Dual-writes must be running in the deployed environment that owns this database — not on your laptop, not in CI — before the backfill is safe. This is the one manual decision in the tutorial, and it's the reason nothing here can lose a row. +### Create an encrypted column -Once the deploy is live: +Run this in the Supabase SQL Editor or add it to a new migration: -```bash -npx stash status +```sql +CREATE TABLE contacts ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email public.eql_v3_text_eq NOT NULL, + display_name text +); ``` -`stash status` reports each column's phase and the next move. CipherStash records the transition in `cs_migrations`, and `stash encrypt backfill` refuses to proceed without it. +`email` is an EQL equality column, so it can be stored, decrypted, and queried with methods such as `.eq()` and `.in()`. `display_name` is ordinary plaintext and passes through unchanged. + +The column type is the encryption schema. There is no separate application declaration to keep synchronized. For other data types and query capabilities, see [EQL core concepts](/reference/eql/core-concepts). </Step> <Step> -### Backfill the historical rows +### Create the encrypted Supabase client -Not a deploy — a one-off job, run once against the production database, that encrypts the rows written before dual-writing existed: +`stash init` installed the CipherStash packages. If this project does not already use the Supabase JavaScript client, install it: ```bash -npx stash encrypt backfill --table patients --column name -npx stash encrypt backfill --table patients --column date_of_birth +npm install @supabase/supabase-js ``` -Each run pages through the table by primary key, encrypting a chunk at a time and writing one transactional `UPDATE` plus a checkpoint per chunk. It's resumable, SIGINT-safe, and idempotent, so an interrupted run picks up where it stopped. It prompts you to confirm dual-writes are deployed; in CI, pass `--confirm-dual-writes-deployed` instead. Concurrent production writes are safe precisely *because* dual-writes are live. +Create a client: -<Callout type="warn"> -**Run the backfill with the same `CS_*` credentials the deployed app uses.** Ciphertext is written under whichever keyset the resolved credentials belong to, and `CS_*` environment variables take precedence over your local `~/.cipherstash` profile. A backfill authenticated as your laptop writes rows your production app **cannot decrypt** — with no error until someone reads them. -</Callout> - -Then verify coverage. This must return zeroes before you go any further: +```typescript title="lib/db.ts" +import { encryptedSupabase } from "@cipherstash/stack-supabase" -```sql -SELECT - count(*) FILTER (WHERE name IS NOT NULL AND name_encrypted IS NULL) AS name_uncovered, - count(*) FILTER (WHERE date_of_birth IS NOT NULL AND date_of_birth_encrypted IS NULL) AS dob_uncovered -FROM patients; +export const db = await encryptedSupabase( + process.env.SUPABASE_URL!, + process.env.SUPABASE_ANON_KEY!, +) ``` -A non-zero count means a write path that isn't dual-writing. Find it, fix it, deploy it, and re-run the backfill (`--force` re-encrypts every row regardless of current state). +At startup, `encryptedSupabase` uses `DATABASE_URL` to inspect the database and recognize `contacts.email` as encrypted. Plaintext tables and columns continue to behave normally. </Step> <Step> -### Build the indexes +### Insert and query a value -After the backfill, before reads move over. Encrypted columns index through ordinary functional indexes over EQL's term-extractor functions — one bulk build now, instead of per-row index maintenance during the backfill: +Write plaintext application values as usual: -```sql -CREATE INDEX patients_name_enc_eq ON patients USING hash (eql_v3.eq_term(name_encrypted)); -CREATE INDEX patients_dob_enc_ord ON patients USING btree (eql_v3.ord_term(date_of_birth_encrypted)); -ANALYZE patients; -``` +```typescript +import { db } from "./lib/db" -Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes). +const { error: insertError } = await db.from("contacts").insert({ + email: "alice@example.com", + display_name: "Alice", +}) -</Step> -<Step> +if (insertError) throw insertError +``` -### Cut reads over to the encrypted columns +The wrapper encrypts `email` before it leaves the application. It then encrypts the filter value when you query the column and decrypts the matching result: -The second deploy, and application code only — there's no rename and no CLI step. Point your queries at the mirror columns by name. The wrapper encrypts filter values into the matching index term on the way out, and decrypts results on the way back, so the values you get are plaintext: +```typescript +const { data, error } = await db + .from("contacts") + .select("id, email, display_name") + .eq("email", "alice@example.com") + .single() -```typescript title="lib/patients.ts" -// Exact lookup on an encrypted column -const { data } = await db - .from("patients") - .select("id, email, name_encrypted") - .eq("name_encrypted", "Alice Chen") +if (error) throw error -// Range and newest-first on an encrypted date -const { data: recent } = await db - .from("patients") - .select("id, name_encrypted, date_of_birth_encrypted") - .gt("date_of_birth_encrypted", "1980-01-01") - .order("date_of_birth_encrypted", { ascending: false }) - .limit(20) +console.log(data) +// { id: 1, email: "alice@example.com", display_name: "Alice" } ``` -**Keep the dual-writes.** That's what makes this deploy reversible: if reads misbehave, reverting the code returns you to plaintext reads with both columns still correct. - -<Callout type="warn"> -**Free-text search is not available through this wrapper with the current EQL 3.0.4 release.** `.matches()` — and `.like()` / `.ilike()`, which delegate to it — raise, because the operator needs an `eql_v3.query_*` operand that PostgREST cannot express. Encrypted-JSON queries are unavailable for the same reason. Equality, ordering, and range all work, as shown above. For encrypted free-text, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or a scoped SQL/RPC function. Full detail in the [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter). -</Callout> - -The full method surface, including filters, upserts, error shapes, and identity-locked queries, is in the [`encryptedSupabase` reference](/reference/stack/supabase). +Supabase Row Level Security still applies because the wrapper sends the request through the Supabase client. Add policies just as you would for an unencrypted table. </Step> <Step> -### See what the database sees +### Confirm that Supabase sees ciphertext -Open the Table Editor and look at the `patients` rows: `name_encrypted` and `date_of_birth_encrypted` are ciphertext payloads, not plaintext. That's what a backup, a replication stream, or anyone bypassing your app sees, including a leaked `service_role` key. +Open `contacts` in the Supabase Table Editor. The `email` cell contains an EQL ciphertext payload, while `display_name` remains readable. -The `name` and `date_of_birth` columns are still sitting there in plaintext — that's expected at this point, and it's what makes every step so far reversible. Removing them is the next section. [Overview → Working in the dashboard](/integrations/supabase#working-in-the-dashboard) walks through what encrypted data looks like across the Supabase dashboard. +The Table Editor cannot decrypt or meaningfully filter the encrypted value because its keys remain outside the database. Read and update encrypted fields through a CipherStash-enabled application. </Step> </Steps> -## Next: dropping the plaintext columns - -Everything above can be walked back. Dropping the plaintext columns cannot, which is why it's a separate deploy — and why it's worth soaking first. Let real traffic read the encrypted columns for a while, and check that results are *correct*, not merely non-empty: ordering, range filters, and known rows. Re-run the coverage query from step 7. - -When you're confident, the drop is a third deploy: remove the dual-write logic, then drop the plaintext columns with a migration generated by the CLI: - -```bash -npx stash encrypt drop --table patients --column name -``` - -Generate it rather than hand-writing an `ALTER TABLE`. The emitted SQL takes an `ACCESS EXCLUSIVE` lock, **re-counts uncovered rows at apply time**, and raises instead of dropping if any remain — because the coverage you verified at planning time is not the coverage at apply time. - -Sequencing that drop safely across environments, wiring `CS_*` into build and runtime, and rolling back per stage are covered in the [deployment guide](/guides/deployment). - -## Using an ORM instead - -Everything above goes through PostgREST, Supabase's REST API, with `encryptedSupabase` encrypting around each request. The other way to reach the same tables is a direct Postgres connection from an ORM, where the [Stack SDK](/reference/stack) encrypts values in your application and the EQL-typed columns store and search them. Both paths write the **same ciphertext into the same columns**, so the database setup above is identical either way — and you can mix them, using an `encryptedSupabase` client for application queries and Drizzle for migrations against the same tables. - -<Cards> - <Card title="Drizzle" href="/integrations/drizzle"> - Encrypted column types, query operators, and EQL migrations with Drizzle. - </Card> - <Card title="Prisma Next" href="/integrations/prisma-next"> - Encrypted fields and searchable queries with Prisma. - </Card> -</Cards> - -Both integrations are database-agnostic — Supabase is Postgres, so the encryption mechanics are the same as anywhere else. Only two things are Supabase-specific: - -- **Which connection string.** Use the **direct connection** (port `5432`) for migrations, backfills, and long-running servers, and the **Supavisor transaction pooler** (port `6543`) for serverless, edge, and Next.js Route Handlers, where connections are short-lived and numerous. Encryption doesn't change the choice: EQL is passive SQL, so use the same connection string you'd use without CipherStash. Run EQL migrations over the direct connection — DDL and the install script want a real session. -- **RLS stops applying for free.** The PostgREST path carries the end user's JWT, so `auth.uid()` and your policies apply automatically. A direct connection typically authenticates as a privileged role (`postgres` or `service_role`), which **bypasses RLS**. If you rely on RLS for row scoping, either connect as the `authenticated` role with the user's JWT (setting `request.jwt.claims`), or enforce that scoping in your ORM query. Encryption is unaffected either way: values are ciphertext regardless of which role reads them. - -## Production checklist - -- **Indexes** — at real row counts, add functional indexes for the capabilities you query. Two lines of SQL per column: [EQL indexes](/reference/eql/indexes). -- **RLS** — keep your Row Level Security policies; they compose. RLS controls *who can query* rows, encryption controls *whether their contents can be read at all*. A bypassed policy or leaked key yields only ciphertext. -- **Identity-locked decryption** — tie decryption to the logged-in Supabase Auth user: [Supabase Auth integration](/integrations/supabase/auth). -- **One column at a time** — nothing requires a big-bang migration. `email` can follow the same ladder next month, on its own schedule, while the columns you've already converted stay encrypted. - -## Go deeper +## Next steps -<Cards> - <Card title="Overview" href="/integrations/supabase"> - Installing EQL, grants, column types, indexes, RLS, and the dashboard experience in detail. - </Card> - <Card title="Supabase Auth" href="/integrations/supabase/auth"> - Federate the Supabase session and lock decryption to the authenticated user. - </Card> - <Card title="EQL indexes" href="/reference/eql/indexes"> - Full indexing recipes and EXPLAIN verification. - </Card> - <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> - The complete wrapper API: every filter, response shapes, and how it works. - </Card> -</Cards> +- Learn the supported mutations, filters, ordering, response types, and errors in the [supabase-js guide](/integrations/supabase/supabase-js). +- Use the complete [`encryptedSupabase` API reference](/reference/stack/supabase) when you need method-level detail. +- Add functional indexes when the table reaches meaningful row counts by following [EQL indexes](/reference/eql/indexes). +- For a populated table, follow the safe dual-write and backfill process in [Encrypt existing data](/guides/migration/encrypt-existing-data). +- To use a direct Postgres ORM connection, continue with [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next). diff --git a/content/docs/integrations/supabase/supabase-js.mdx b/content/docs/integrations/supabase/supabase-js.mdx index cea320e..a1d1ebd 100644 --- a/content/docs/integrations/supabase/supabase-js.mdx +++ b/content/docs/integrations/supabase/supabase-js.mdx @@ -46,7 +46,7 @@ SUPABASE_ANON_KEY=... DATABASE_URL=postgresql://... ``` -The encryption client also needs a local `stash auth login` session or `CS_*` machine credentials. The [Quickstart setup](/integrations/supabase/quickstart#install-the-sdk-and-connect-your-workspace) covers both. +The encryption client also needs a local developer profile created by `stash auth login`, or `CS_*` machine credentials in a deployed environment. The [Quickstart setup](/integrations/supabase/quickstart#initialize-cipherstash) creates and uses the developer profile. ## Create the client From cca0739ce8bf9c261aa140235db1c92ab0abd1d7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 17:41:02 +1000 Subject: [PATCH 128/151] docs: rewrite Prisma ORM 8 integration --- IA.md | 2 +- .../docs/get-started/choose-your-stack.mdx | 3 +- .../migration/encrypt-existing-data.mdx | 2 +- content/docs/integrations/drizzle.mdx | 2 +- content/docs/integrations/index.mdx | 8 +- content/docs/integrations/meta.json | 2 +- content/docs/integrations/prisma-next.mdx | 146 -------------- .../docs/integrations/prisma/deployment.mdx | 72 +++++++ content/docs/integrations/prisma/index.mdx | 57 ++++++ content/docs/integrations/prisma/meta.json | 12 ++ .../integrations/prisma/prisma-compute.mdx | 93 +++++++++ .../integrations/prisma/prisma-postgres.mdx | 68 +++++++ .../docs/integrations/prisma/quickstart.mdx | 180 ++++++++++++++++++ .../prisma/schema-and-queries.mdx | 130 +++++++++++++ content/docs/integrations/supabase/index.mdx | 8 +- .../docs/integrations/supabase/quickstart.mdx | 4 +- .../integrations/supabase/supabase-js.mdx | 2 +- content/docs/reference/stack/supabase.mdx | 4 +- next.config.mjs | 5 + scripts/validate-content-api.ts | 9 - v2-redirects.mjs | 2 +- 21 files changed, 637 insertions(+), 174 deletions(-) delete mode 100644 content/docs/integrations/prisma-next.mdx create mode 100644 content/docs/integrations/prisma/deployment.mdx create mode 100644 content/docs/integrations/prisma/index.mdx create mode 100644 content/docs/integrations/prisma/meta.json create mode 100644 content/docs/integrations/prisma/prisma-compute.mdx create mode 100644 content/docs/integrations/prisma/prisma-postgres.mdx create mode 100644 content/docs/integrations/prisma/quickstart.mdx create mode 100644 content/docs/integrations/prisma/schema-and-queries.mdx diff --git a/IA.md b/IA.md index 622bae1..3244e94 100644 --- a/IA.md +++ b/IA.md @@ -309,7 +309,7 @@ Two notes: - [ ] ⛔ `/integrations/supabase/edge-functions` — pending Deno/FFI answer - [ ] ⛔ `/integrations/supabase/realtime` — pending product verification - [x] `/integrations/drizzle` -- [x] `/integrations/prisma-next` — EQL v2 today; revisit when v3 support lands +- [x] `/integrations/prisma` — Prisma ORM 8 RC, EQL v3, Prisma Postgres, and Prisma Compute - [ ] `/integrations/aws/rds-aurora` — Proxy path - [ ] `/integrations/aws/dynamodb` - [ ] `/integrations/clerk` diff --git a/content/docs/get-started/choose-your-stack.mdx b/content/docs/get-started/choose-your-stack.mdx index 8ec8264..c333a60 100644 --- a/content/docs/get-started/choose-your-stack.mdx +++ b/content/docs/get-started/choose-your-stack.mdx @@ -29,6 +29,7 @@ EQL installs into any Postgres you can connect to. It needs no extension, no sup | Platform | Works | Notes | |---|---|---| | Supabase | Yes | [Supabase integration](/integrations/supabase). Expose the `eql_v3` schema in the dashboard. | +| Prisma Postgres | Yes | [Prisma Postgres integration](/integrations/prisma/prisma-postgres). EQL is installed through the Prisma ORM 8 migration graph. | | Neon, RDS, Aurora, Cloud SQL | Yes | `stash eql install` detects a non-superuser role and adapts. | | Self-hosted Postgres | Yes | Full operator-class support, so the ORE ordering mechanism is available. | | Postgres behind PgBouncer | Yes | Transaction pooling is fine. Proxy has its own pooling. | @@ -45,7 +46,7 @@ Managed platforms usually block custom operator class creation. That's why the d |---|---|---| | Drizzle | [Drizzle integration](/stack/cipherstash/encryption/drizzle) | An `encryptedType` column and typed query operators. Your Drizzle code keeps its shape. | | Supabase JS | [Supabase integration](/integrations/supabase) | `encryptedSupabase` wraps the client. `.eq()`, `.gt()`, `.order()` keep working. | -| Prisma | [Prisma integration](/stack/cipherstash/encryption/prisma-next) | Encrypt in the data layer around Prisma calls. | +| Prisma ORM 8 RC | [Prisma integration](/integrations/prisma) | Encrypted fields and query operators are generated from `schema.prisma`. | | Raw SQL | [Quickstart](/get-started/quickstart) | Encrypt the value, insert it, cast the query operand. | | An ORM we don't list | The SDK | Encrypt before write, decrypt after read. Every ORM supports that. | diff --git a/content/docs/guides/migration/encrypt-existing-data.mdx b/content/docs/guides/migration/encrypt-existing-data.mdx index a613f6f..7cc9975 100644 --- a/content/docs/guides/migration/encrypt-existing-data.mdx +++ b/content/docs/guides/migration/encrypt-existing-data.mdx @@ -10,7 +10,7 @@ Encrypting a populated column is a staged application and database migration. Ci The safe pattern is to add an encrypted mirror column, dual-write new changes, backfill historical rows, and then move reads to the mirror. The plaintext column remains authoritative until the final cleanup, making every earlier stage reversible. -This guide uses `encryptedSupabase` for its examples. The same sequence applies when the application uses [Drizzle](/integrations/drizzle), [Prisma Next](/integrations/prisma-next), or the [Stack SDK](/reference/stack): change the adapter-specific code, not the rollout order. +This guide uses `encryptedSupabase` for its examples. The same sequence applies when the application uses [Drizzle](/integrations/drizzle), [Prisma ORM 8](/integrations/prisma), or the [Stack SDK](/reference/stack): change the adapter-specific code, not the rollout order. ## Migration sequence diff --git a/content/docs/integrations/drizzle.mdx b/content/docs/integrations/drizzle.mdx index 57b6698..9d963c4 100644 --- a/content/docs/integrations/drizzle.mdx +++ b/content/docs/integrations/drizzle.mdx @@ -7,7 +7,7 @@ audience: [developer] integration: category: orm setup: code-only - pairsWith: [supabase, prisma-next] + pairsWith: [supabase, prisma] verifiedAgainst: stack: "1.0.0-rc.0" eql: "3.0.0" diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index b2ee232..050b058 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -16,8 +16,8 @@ Where the encrypted data lives. EQL installs into any Postgres you can connect t <Card title="Supabase" href="/integrations/supabase"> Install EQL with the `stash` CLI, then query encrypted columns through PostgREST. Row Level Security, Supabase Auth, and Edge Functions all apply unchanged. </Card> - <Card title="Prisma Postgres" href="/integrations/prisma-next"> - Prisma's hosted Postgres. EQL is installed by the Prisma Next migration system, in the same sweep that creates your tables. + <Card title="Prisma Postgres" href="/integrations/prisma/prisma-postgres"> + Prisma's managed Postgres, with EQL installed through the Prisma ORM 8 migration graph. </Card> </Cards> @@ -29,8 +29,8 @@ How your application queries it. <Card title="supabase-js" href="/integrations/supabase/supabase-js"> `encryptedSupabase` wraps your existing client so `.eq()`, `.in()`, `.gt()`, and `.order()` keep working on encrypted columns. </Card> - <Card title="Prisma Next" href="/integrations/prisma-next"> - Encrypted columns declared in `schema.prisma`. Targets EQL v2. Not classic Prisma. + <Card title="Prisma ORM 8" href="/integrations/prisma"> + Encrypted EQL v3 columns declared in `schema.prisma`, with typed encrypted query operators. </Card> <Card title="Drizzle" href="/integrations/drizzle"> Concrete encrypted column types and capability-checked operators. Targets EQL v3. diff --git a/content/docs/integrations/meta.json b/content/docs/integrations/meta.json index eb155bd..bfb94b1 100644 --- a/content/docs/integrations/meta.json +++ b/content/docs/integrations/meta.json @@ -1,5 +1,5 @@ { "title": "Integrations", "icon": "Blocks", - "pages": ["!index", "supabase", "..."] + "pages": ["!index", "supabase", "prisma", "..."] } diff --git a/content/docs/integrations/prisma-next.mdx b/content/docs/integrations/prisma-next.mdx deleted file mode 100644 index a5333fa..0000000 --- a/content/docs/integrations/prisma-next.mdx +++ /dev/null @@ -1,146 +0,0 @@ ---- -title: Prisma Next -description: "Encrypted columns with Prisma Next: declare them in schema.prisma, and the migration system installs EQL for you." -type: tutorial -components: [encryption, eql] -audience: [developer] -integration: - category: orm - setup: code-only - pairsWith: [supabase, drizzle] -verifiedAgainst: - prismaNext: "0.3.2" - eql: "2" ---- - -`@cipherstash/prisma-next` adds searchable, field-level encryption to [Prisma Next](https://www.npmjs.com/package/prisma-next). You declare encrypted columns in `schema.prisma`, and the framework's migration system installs the EQL bundle in the same sweep that creates your tables. There is no separate "install EQL" step. - -<Callout type="warn"> -This integration targets **Prisma Next**, not the classic `@prisma/client` ORM. If you are on classic Prisma, there is no extension: use the [Stack SDK](/reference/stack) directly, encrypting before a write and decrypting after a read. Every ORM supports that. - -It also targets **EQL v2**, while the rest of these docs target [EQL v3](/reference/eql). Encrypted columns are `eql_v2_encrypted`, and free-text search is `cipherstashIlike` rather than v3's token containment. -</Callout> - -## Install - -```bash cta cta-type="install" example-id="install-prisma-next" -npm install @cipherstash/stack @cipherstash/prisma-next -``` - -## Declare encrypted columns - -Six column types cover the encryptable surface: string, double, bigint, date, boolean, and JSON. - -```prisma filename="prisma/schema.prisma" -model User { - id String @id - email cipherstash.EncryptedString() - salary cipherstash.EncryptedDouble() - birthday cipherstash.EncryptedDate() - preferences cipherstash.EncryptedJson() -} -``` - -Register the extension pack so the framework knows how to plan migrations and encode values: - -```typescript filename="prisma-next.config.ts" -import cipherstash from "@cipherstash/prisma-next/control" - -export default defineConfig({ - // family, target, adapter, contract - extensionPacks: [cipherstash], -}) -``` - -## Wire up the client - -`cipherstashFromStack` builds the encryption client from your emitted contract, so there is no second schema to maintain alongside `schema.prisma`: - -```typescript filename="src/db.ts" -import "dotenv/config" -import { cipherstashFromStack } from "@cipherstash/prisma-next/stack" -import postgres from "@prisma-next/postgres/runtime" -import type { Contract } from "./prisma/contract.d" -import contractJson from "./prisma/contract.json" with { type: "json" } - -const cipherstash = await cipherstashFromStack({ contractJson }) - -export const db = postgres<Contract>({ - contractJson, - extensions: cipherstash.extensions, - middleware: cipherstash.middleware, -}) -``` - -## Migrate - -`migration apply` installs the EQL bundle alongside your schema: - -```bash -npx stash auth login # once per developer -npx prisma-next contract emit -npx prisma-next migration plan --name initial -npx prisma-next migration apply # installs EQL and creates your tables -``` - -This is the one place Prisma Next has an advantage over the other integrations: EQL lands inside your migration history, so a rebuilt database has it. - -## Read and write - -Values are wrapped in an envelope class on the way in, and decrypted explicitly on the way out. Plaintext is redacted from every implicit serialisation path (`toJSON`, `toString`, `util.inspect`), so a stray `console.log` cannot leak it. - -```typescript filename="src/queries.ts" -import { EncryptedString, decryptAll } from "@cipherstash/prisma-next/runtime" -import { db } from "./db" - -await db.orm.User.create({ - id: "user-0", - email: EncryptedString.from("alice@example.com"), -}) - -const rows = await db.orm.User - .where((u) => u.email.cipherstashIlike("%@example.com")) - .all() - -await decryptAll(rows) -console.log(await rows[0]?.email.decrypt()) -``` - -`decryptAll` decrypts a whole result set in one round trip. A single field decrypts with `await row.email.decrypt()`. - -## Query operators - -Each operator is a method on the encrypted field, and the search config the column was declared with decides which ones it can answer: - -| Operator | Answers | -| --- | --- | -| `cipherstashEq`, `cipherstashNe` | Equality | -| `cipherstashInArray`, `cipherstashNotInArray` | Set membership | -| `cipherstashGt`, `cipherstashGte`, `cipherstashLt`, `cipherstashLte` | Ranges | -| `cipherstashBetween`, `cipherstashNotBetween` | Bounded ranges | -| `cipherstashIlike`, `cipherstashNotIlike` | Free-text match | -| `cipherstashAsc`, `cipherstashDesc` | Ordering | -| `cipherstashJsonbGet`, `cipherstashJsonbPathExists`, `cipherstashJsonbPathQueryFirst` | Encrypted JSON path access | - -Writes are coalesced: one SDK round trip per `(table, column)` group per query, rather than one per value. - -## Authenticating - -Local development uses your `stash` profile after `npx stash auth login`. In production, supply the `CS_*` environment variables instead. See [going to production](/stack/deploy/going-to-production). - -## Where to next - -<Cards> - <Card title="Drizzle" href="/integrations/drizzle"> - The EQL v3 ORM integration, with concrete encrypted column types. - </Card> - <Card title="Supabase" href="/integrations/supabase"> - Prisma Next over a Supabase Postgres connection. - </Card> - <Card title="Stack SDK" href="/reference/stack"> - Encrypt and decrypt directly, for classic Prisma or any other ORM. - </Card> - <Card title="Searchable encryption" href="/concepts/searchable-encryption"> - What each capability reveals, and how to choose. - </Card> -</Cards> diff --git a/content/docs/integrations/prisma/deployment.mdx b/content/docs/integrations/prisma/deployment.mdx new file mode 100644 index 0000000..ee5400e --- /dev/null +++ b/content/docs/integrations/prisma/deployment.mdx @@ -0,0 +1,72 @@ +--- +title: Deployment +description: "Deploy CipherStash schema changes, backfills, indexes, and credentials safely with Prisma ORM 8." +type: guide +components: [encryption, eql] +audience: [developer, cto] +integration: + category: orm + setup: code-only +verifiedAgainst: + prismaNext: "0.16.0" + eql: "3.0.4" + stack: "1.0.0" +--- + +Prisma owns the complete database migration graph for this integration, including the EQL bundle, encrypted columns, and their functional indexes. Application releases still need to be staged carefully when a plaintext column already contains data. + +For the reasoning, rollback rules, and adapter-independent sequence, read [Encrypt existing data](/guides/migration/encrypt-existing-data) and the [deployment guide](/guides/deployment). This page maps that process to Prisma ORM 8. + +## New tables and empty columns + +For a new table or an empty column: + +```bash +npx prisma-next contract emit +npx prisma-next migration plan --name add-encrypted-fields +npx prisma-next migrate +``` + +The CipherStash extension pack contributes EQL to the same graph. Do not run `stash eql install`. + +## Populated columns + +Move a populated plaintext column to encryption across separate application releases: + +| Release | Prisma and application change | Gate | +| --- | --- | --- | +| 1. Add and dual-write | Add a nullable encrypted twin; write plaintext and ciphertext on every path; keep plaintext reads | Confirm dual-writes are live | +| Backfill | Run `stash encrypt backfill` against the target database with the deployed app's keyset | Confirm zero uncovered rows | +| Index | Add EQL functional indexes as a Prisma raw-SQL migration operation and run `ANALYZE` | Verify plans with `EXPLAIN` | +| 2. Cut over reads | Query and decrypt the encrypted twin; keep dual-writes | Soak under real traffic | +| 3. Stop dual-writing | Write only the encrypted field; retain the plaintext column | Confirm every instance is updated | +| 4. Remove plaintext | Apply a guarded destructive migration, then remove the old field from the contract | Irreversible | + +Do not combine these boundaries. In particular, a backfill is safe only after every production write path dual-writes, and the plaintext column must remain until encrypted reads have soaked successfully. + +## Index migrations + +Prisma schemas cannot express functional indexes. Keep their DDL as `rawSql` operations from `@prisma-next/postgres/migration` in the Prisma migration history; never apply them ad hoc to production. + +Use the recipes in [EQL indexes](/reference/eql/indexes). Build indexes after the bulk backfill and before encrypted reads go live, then run `ANALYZE` and verify the actual query plan. + +## Credentials + +Local builds can use the developer profile created by `stash init`. CI, production builds, application runtimes, backfills, and one-off migration jobs use: + +```dotenv +CS_WORKSPACE_CRN=crn:<region>:<workspace-id> +CS_CLIENT_ID=<uuid> +CS_CLIENT_KEY=<hex> +CS_CLIENT_ACCESS_KEY=CSAK... +``` + +Create separate credentials for each environment with `stash env`. A backfill must use credentials bound to the same keyset as the deployed application; otherwise decryption or encrypted search can fail after a seemingly successful write. + +The encryption client is commonly constructed during module import, so make `CS_*` available at build time as well as runtime. + +## Runtime packaging + +The Prisma adapter uses the native Stack client. Keep `@cipherstash/stack`, `@cipherstash/protect-ffi`, and `@cipherstash/auth` external to server bundles, and deploy to a runtime that can load native packages. This adapter is not supported on edge runtimes. + +For Prisma's hosted deployment behavior, including additive-only push-to-deploy and preview databases, continue with [Prisma Compute](/integrations/prisma/prisma-compute). diff --git a/content/docs/integrations/prisma/index.mdx b/content/docs/integrations/prisma/index.mdx new file mode 100644 index 0000000..69ec4ae --- /dev/null +++ b/content/docs/integrations/prisma/index.mdx @@ -0,0 +1,57 @@ +--- +title: Overview +description: "Searchable field-level encryption for Prisma ORM 8: declare encrypted columns in schema.prisma and query them with the Prisma ORM." +type: concept +components: [encryption, eql] +audience: [developer] +integration: + category: orm + setup: code-only + pairsWith: [supabase, drizzle] +verifiedAgainst: + prismaNext: "0.16.0" + eql: "3.0.4" + stack: "1.0.0" +--- + +CipherStash adds searchable, field-level encryption to Prisma ORM 8. Encrypted columns are declared in `schema.prisma`, EQL is installed through Prisma's migration graph, and the generated query API encrypts operands and values before they reach Postgres. + +<Callout type="info"> +This integration targets the **Prisma ORM 8 release candidate**, formerly known as **Prisma Next**. The prerelease CLI, package names, configuration file, and initialization flag still use `prisma-next` or `@prisma-next/*`; the examples preserve those names exactly. + +It does not extend the classic `@prisma/client` API. For earlier Prisma releases, use the [Stack SDK](/reference/stack) around your existing reads and writes. +</Callout> + +## Choose your path + +| What you want to do | Start here | +| --- | --- | +| Encrypt and query your first Prisma field | [Prisma ORM Quickstart](/integrations/prisma/quickstart) | +| Choose column types or look up query operators | [Schema and queries](/integrations/prisma/schema-and-queries) | +| Encrypt data already in production | [Prisma deployment guide](/integrations/prisma/deployment) | +| Use Prisma's managed database | [Prisma Postgres](/integrations/prisma/prisma-postgres) | +| Deploy the application with Prisma | [Prisma Compute](/integrations/prisma/prisma-compute) | +| Design and verify encrypted indexes | [EQL indexes](/reference/eql/indexes) | +| Look up the Prisma 8 prerelease itself | [Prisma ORM 8 documentation](https://www.prisma.io/docs/orm/next) | + +## How it works + +The [`@cipherstash/stack-prisma`](https://www.npmjs.com/package/@cipherstash/stack-prisma) extension has three integration points: + +1. Domain-named constructors such as `cipherstash.TextSearch()` declare encrypted EQL v3 columns in `schema.prisma`. +2. The CipherStash extension pack adds EQL and those columns to Prisma's contract and migration graph. +3. `cipherstashFromStack` connects the generated Prisma runtime to the Stack encryption client. + +The column type fixes which encrypted queries are possible. For example, `TextEq()` supports equality, while `TextSearch()` also supports ranges, ordering, and token matching. Choosing the narrowest useful type minimizes the information disclosed by searchable encryption. [Schema and queries](/integrations/prisma/schema-and-queries) contains the complete type and operator tables. + +## EQL and migration ownership + +This integration targets EQL v3 only. Prisma owns the EQL installation: `npx prisma-next migrate` installs the EQL bundle alongside your application schema. Do not run `stash eql install` in a Prisma ORM 8 project. + +Encrypted functional indexes also belong in the Prisma migration graph. `schema.prisma` cannot express expression indexes, so add their SQL as a Prisma raw-SQL migration operation. The canonical recipes and `EXPLAIN` checks live in [EQL indexes](/reference/eql/indexes). + +## Runtime and authentication + +Local development uses the CipherStash developer profile created by `stash init`. CI and deployed applications use the four `CS_*` environment variables. The Prisma adapter currently uses the native Stack client, so deploy it to a server runtime that can load native packages; it is not an edge-runtime adapter. + +For a new project, continue with the [Quickstart](/integrations/prisma/quickstart). diff --git a/content/docs/integrations/prisma/meta.json b/content/docs/integrations/prisma/meta.json new file mode 100644 index 0000000..ae57a3a --- /dev/null +++ b/content/docs/integrations/prisma/meta.json @@ -0,0 +1,12 @@ +{ + "title": "Prisma ORM", + "icon": "Database", + "pages": [ + "index", + "quickstart", + "schema-and-queries", + "deployment", + "prisma-postgres", + "prisma-compute" + ] +} diff --git a/content/docs/integrations/prisma/prisma-compute.mdx b/content/docs/integrations/prisma/prisma-compute.mdx new file mode 100644 index 0000000..8208034 --- /dev/null +++ b/content/docs/integrations/prisma/prisma-compute.mdx @@ -0,0 +1,93 @@ +--- +title: Prisma Compute +description: "Deploy a CipherStash-enabled Prisma ORM 8 application on Prisma Compute." +type: guide +components: [encryption, eql, platform] +audience: [developer, cto] +integration: + category: platform + setup: code-only +verifiedAgainst: + prismaNext: "0.16.0" + eql: "3.0.4" + stack: "1.0.0" +--- + +[Prisma Compute](https://www.prisma.io/docs/compute) deploys TypeScript applications alongside Prisma Postgres. CipherStash has been exercised with Prisma Compute's July 2026 public beta; verify fast-moving CLI and platform details against the current Prisma documentation. + +## Before the first deploy + +Add the four CipherStash credentials to both the preview and production roles: + +```dotenv +CS_WORKSPACE_CRN=crn:<region>:<workspace-id> +CS_CLIENT_ID=<uuid> +CS_CLIENT_KEY=<hex> +CS_CLIENT_ACCESS_KEY=CSAK... +``` + +These values are needed during the build as well as at runtime because a database module may construct `cipherstashFromStack` when it is imported. Prisma Compute resolves environment variables when it creates a deployment, so redeploy after changing them. + +Use separate credentials for preview and production, bound to the keyset intended for each environment. + +{/* Screenshot candidate: Prisma Compute environment-variable screen showing the + four CS_* key names, preview/production scopes, and hidden values. */} + +## Keep native packages external + +The Prisma adapter uses CipherStash's native client. For Next.js, exclude its packages from the server bundle: + +```typescript title="next.config.ts" +import type { NextConfig } from "next" + +const nextConfig: NextConfig = { + serverExternalPackages: [ + "@cipherstash/stack", + "@cipherstash/protect-ffi", + "@cipherstash/auth", + ], +} + +export default nextConfig +``` + +Do not select an edge runtime for routes that use this Prisma adapter. + +## Understand push-to-deploy + +A Prisma Compute deployment runs contract emission and `prisma-next db init` against the target branch database. + +- Additive changes, including the EQL bundle and new encrypted columns, are reconciled during deployment. +- Destructive changes such as dropping the old plaintext column or setting `NOT NULL` are rejected by the additive-only deployment policy. +- Preview branches receive fresh databases, so a green preview does not prove that a destructive production update will succeed. + +Use separate pull requests for each stage in the [Prisma deployment guide](/integrations/prisma/deployment). + +## Apply destructive migrations deliberately + +After the release that stops writing the plaintext column is live, apply the reviewed destructive migration directly to the production database before merging the contract change: + +```bash +npx @prisma/cli database list +npx @prisma/cli database show <database> --json +npx @prisma/cli database connection create <database-id> + +npx prisma-next db update --db "<one-time-direct-url>" + +npx @prisma/cli database connection remove <connection-id> +``` + +Confirm the production database by name and with `database show`; do not rely on list order or branch metadata. A migration applied to the wrong preview database can succeed while the production deployment continues to fail. + +The destructive migration must include an apply-time coverage guard so the plaintext column is not dropped while any row lacks ciphertext. + +## Operational notes + +- Keep authorization checks in the page, server action, or route handler rather than relying only on Next.js middleware. +- Runtime output and build output use different Prisma commands: `app logs` and `build logs <build-id>`. +- A first request after scale-to-zero can cold-start; retry before treating it as an application failure. + +{/* Screenshot candidate: Prisma Compute branch page showing an application, + its linked Prisma Postgres database, and separate production/preview state. */} + +Prisma Compute is in public beta. Reconfirm platform limitations before using it for a mission-critical workload. diff --git a/content/docs/integrations/prisma/prisma-postgres.mdx b/content/docs/integrations/prisma/prisma-postgres.mdx new file mode 100644 index 0000000..9dd0d37 --- /dev/null +++ b/content/docs/integrations/prisma/prisma-postgres.mdx @@ -0,0 +1,68 @@ +--- +title: Prisma Postgres +description: "Connect the CipherStash Prisma ORM 8 integration to Prisma's managed Postgres service." +type: guide +components: [encryption, eql, platform] +audience: [developer, cto] +integration: + category: platform + setup: code-only +verifiedAgainst: + prismaNext: "0.16.0" + eql: "3.0.4" + stack: "1.0.0" +--- + +[Prisma Postgres](https://www.prisma.io/docs/postgres) is Prisma's managed Postgres service. CipherStash uses it like any other Postgres database: encryption happens in the application, and EQL plus the encrypted domains live in the database. + +## Choose the connection URL + +Prisma Postgres provides pooled and direct connections: + +| Use | Connection | +| --- | --- | +| Application runtime | Pooled URL on `pooled.db.prisma.io` | +| Migrations, administrative work, and one-off backfills | Direct URL on `db.prisma.io` | + +Both connections require TLS. Copy the URLs from the Prisma Console and keep them in the relevant environment's secret store. + +```dotenv title=".env" +DATABASE_URL=postgresql://...@pooled.db.prisma.io:5432/postgres?sslmode=require +DIRECT_URL=postgresql://...@db.prisma.io:5432/postgres?sslmode=require +``` + +Use the direct URL when applying the Prisma migration graph or running a long-lived backfill. Use the pooled URL when connecting the deployed application. + +{/* Screenshot candidate: Prisma Console connection dialog with pooled and direct + connection choices visible, project names retained, and credentials redacted. */} + +## Initialize the database + +Set the migration process to the direct connection, then run the normal Prisma flow: + +```bash +DATABASE_URL="$DIRECT_URL" npx prisma-next contract emit +DATABASE_URL="$DIRECT_URL" npx prisma-next migration plan --name initial +DATABASE_URL="$DIRECT_URL" npx prisma-next migrate +``` + +This installs EQL through Prisma's migration graph. Do not install EQL separately with the `stash` CLI. + +For a populated column, use the direct connection for the out-of-band backfill and confirm that it targets the intended production or preview database. Follow the [Prisma deployment guide](/integrations/prisma/deployment) before changing live data. + +## What appears in Prisma tools + +Prisma Studio and the Prisma Console see EQL ciphertext payloads, not plaintext. That is expected: encryption keys remain in the application, outside Prisma Postgres. Read and update encrypted values through the CipherStash-enabled Prisma runtime. + +{/* Screenshot candidate: Prisma Studio showing one encrypted field as an EQL + ciphertext payload beside a non-sensitive plaintext field. */} + +## Branch databases + +Prisma platform branches can have isolated databases. Treat each branch as a separate CipherStash environment: + +- Confirm the database identity before migrations or backfills. +- Use separate `CS_*` credentials for preview and production. +- Keep every writer and one-off job on the keyset intended for that environment. + +If the application is also hosted by Prisma, [Prisma Compute](/integrations/prisma/prisma-compute) explains its build, environment-variable, and migration behavior. diff --git a/content/docs/integrations/prisma/quickstart.mdx b/content/docs/integrations/prisma/quickstart.mdx new file mode 100644 index 0000000..b02af2f --- /dev/null +++ b/content/docs/integrations/prisma/quickstart.mdx @@ -0,0 +1,180 @@ +--- +title: Quickstart +description: "Declare, migrate, write, and query your first encrypted field with CipherStash and Prisma ORM 8." +type: tutorial +components: [encryption, eql] +audience: [developer] +integration: + category: orm + setup: code-only + pairsWith: [supabase, drizzle] +verifiedAgainst: + prismaNext: "0.16.0" + eql: "3.0.4" + stack: "1.0.0" +--- + +This tutorial adds an encrypted, searchable email field to an existing Prisma ORM 8 release candidate project. + +<Callout type="info"> +Prisma ORM 8 was formerly called Prisma Next. Its prerelease command remains `prisma-next`, and the CipherStash initialization flag remains `--prisma-next`. +</Callout> + +It is designed for a new table or empty column. To encrypt a populated column safely, use the [Prisma deployment guide](/integrations/prisma/deployment). + +## Before you start + +You need: + +- A Prisma ORM 8 release candidate project with `prisma-next.config.ts` +- A Postgres database and `DATABASE_URL` +- A CipherStash account; initialization signs you in + +<Steps> +<Step> + +### Initialize CipherStash + +From the Prisma project, run: + +```bash cta cta-type="install" example-id="prisma-quickstart-init" +npx stash init --prisma-next +``` + +`stash init` opens the CipherStash device login when necessary, creates the local developer profile, and installs compatible pinned versions of `@cipherstash/stack`, `@cipherstash/stack-prisma`, and the `stash` CLI. + +It intentionally does not install EQL directly. The Prisma migration graph owns that step. + +<Callout type="idea"> +Agents can run the same initialization command. If authentication is needed, they can present the verification URL and wait for you to complete device login. Initialization also records project context and can install the CipherStash Prisma, authentication, indexing, deployment, and CLI skills for supported coding agents. +</Callout> + +</Step> +<Step> + +### Declare an encrypted field + +Add the CipherStash type to your schema: + +```prisma title="prisma/schema.prisma" +model User { + id String @id + email cipherstash.TextSearch() +} +``` + +`TextSearch()` supports encrypted equality, range, ordering, and token matching. If you only need equality, prefer `TextEq()`. See [Schema and queries](/integrations/prisma/schema-and-queries) for every column type. + +</Step> +<Step> + +### Register the extension pack + +Add CipherStash to your existing Prisma configuration: + +```typescript title="prisma-next.config.ts" +import cipherstash from "@cipherstash/stack-prisma/control" +import { defineConfig } from "@prisma-next/cli/config-types" +import { prismaContract } from "@prisma-next/sql-contract-psl/provider" +import postgresPack from "@prisma-next/target-postgres/pack" +import { postgresCreateNamespace } from "@prisma-next/target-postgres/types" + +export default defineConfig({ + // Keep your existing family, target, driver, adapter, and database settings. + extensionPacks: [cipherstash], + contract: prismaContract("./prisma/schema.prisma", { + output: "src/prisma/contract.json", + target: postgresPack, + createNamespace: postgresCreateNamespace, + }), + migrations: { dir: "migrations" }, +}) +``` + +If you already use extension packs, include `cipherstash` in the existing array. `createNamespace` is required by Prisma Next 0.15 and later. + +</Step> +<Step> + +### Emit and migrate + +Generate the contract, plan the migration, and apply it: + +```bash +npx prisma-next contract emit +npx prisma-next migration plan --name add-encrypted-user +npx prisma-next migrate +``` + +The final command installs EQL v3 and applies your application migration in one graph. Do not run `stash eql install` for this integration. + +</Step> +<Step> + +### Connect the encrypted runtime + +Create the database module from the emitted contract: + +```typescript title="src/db.ts" +import "dotenv/config" +import { cipherstashFromStack } from "@cipherstash/stack-prisma/v3" +import postgres from "@prisma-next/postgres/runtime" +import type { Contract } from "./prisma/contract.d" +import contractJson from "./prisma/contract.json" with { type: "json" } + +const cipherstash = await cipherstashFromStack({ contractJson }) + +export const db = postgres<Contract>({ + contractJson, + extensions: cipherstash.extensions, + middleware: cipherstash.middleware, +}) +``` + +`cipherstashFromStack` uses the local developer profile automatically. Deployed environments use `CS_*` credentials instead. + +</Step> +<Step> + +### Write and query encrypted data + +Wrap plaintext values at the write boundary, then use the generated `eql*` operators: + +```typescript +import { + decryptAll, + EncryptedString, +} from "@cipherstash/stack-prisma/runtime" +import { db } from "./db" + +const runtime = await db.connect({ url: process.env.DATABASE_URL! }) + +try { + await db.orm.public.User.create({ + id: "user-0", + email: EncryptedString.from("alice@example.com"), + }) + + const rows = await db.orm.public.User + .where((user) => user.email.eqlEq("alice@example.com")) + .all() + + await decryptAll(rows) + console.log(await rows[0]?.email.decrypt()) + // alice@example.com +} finally { + await runtime.close() +} +``` + +The write value and query operand are encrypted before reaching Postgres. `decryptAll` batches result decryption; `.decrypt()` returns the plaintext value. + +</Step> +</Steps> + +## Next steps + +- Choose other encrypted field types and operators in [Schema and queries](/integrations/prisma/schema-and-queries). +- Add functional indexes using [EQL indexes](/reference/eql/indexes); keep their raw SQL operations in the Prisma migration graph. +- Follow the [Prisma deployment guide](/integrations/prisma/deployment) before changing a populated production column. +- Continue with [Prisma Postgres](/integrations/prisma/prisma-postgres) or [Prisma Compute](/integrations/prisma/prisma-compute) if you use Prisma's hosted platform. diff --git a/content/docs/integrations/prisma/schema-and-queries.mdx b/content/docs/integrations/prisma/schema-and-queries.mdx new file mode 100644 index 0000000..de26d2f --- /dev/null +++ b/content/docs/integrations/prisma/schema-and-queries.mdx @@ -0,0 +1,130 @@ +--- +title: Schema and queries +description: "CipherStash column constructors, runtime envelopes, and encrypted query operators for Prisma ORM 8." +type: reference +components: [encryption, eql] +audience: [developer] +integration: + category: orm + setup: code-only +verifiedAgainst: + prismaNext: "0.16.0" + eql: "3.0.4" + stack: "1.0.0" +--- + +The CipherStash Prisma extension separates the encrypted **column type** from the runtime **value envelope**: + +- In `schema.prisma`, a domain-named constructor such as `TextEq()` fixes the Postgres plaintext family and searchable capabilities. +- In application code, a primitive-named envelope such as `EncryptedString` wraps a plaintext value for encryption. + +## Column constructors + +Choose the plaintext type first, then the narrowest query capability your application needs. + +| Plaintext | Storage only | Equality | Order and range | Free-text only | All text queries | +| --- | --- | --- | --- | --- | --- | +| `string` | `Text()` | `TextEq()` | `TextOrd()` | `TextMatch()` | `TextSearch()` | +| `number` (`int4`) | `Integer()` | `IntegerEq()` | `IntegerOrd()` | — | — | +| `number` (`int2`) | `Smallint()` | `SmallintEq()` | `SmallintOrd()` | — | — | +| `bigint` (`int8`) | `BigInt()` | `BigIntEq()` | `BigIntOrd()` | — | — | +| `number` (`numeric`) | `Numeric()` | `NumericEq()` | `NumericOrd()` | — | — | +| `number` (`float4`) | `Real()` | `RealEq()` | `RealOrd()` | — | — | +| `number` (`float8`) | `Double()` | `DoubleEq()` | `DoubleOrd()` | — | — | +| `Date` (`date`) | `Date()` | `DateEq()` | `DateOrd()` | — | — | +| `Date` (`timestamp`) | `Timestamp()` | `TimestampEq()` | `TimestampOrd()` | — | — | +| `boolean` | `Boolean()` | — | — | — | — | +| JSON document | `Json()` supports containment and JSONPath queries | — | — | — | — | + +Every `*Ord()` constructor includes equality. `TextMatch()` provides token matching without equality; `TextSearch()` combines equality, range, ordering, and token matching. Bare constructors such as `Text()` are storage-only. + +Each constructor maps directly to an EQL v3 Postgres domain. For example, `cipherstash.DoubleOrd()` creates an `eql_v3_double_ord` column. The type cannot be broadened at query time. + +## Runtime envelopes + +| Schema family | Write envelope | +| --- | --- | +| `Text*` | `EncryptedString.from(value)` | +| `Integer*`, `Smallint*`, `Numeric*`, `Real*`, `Double*` | `EncryptedNumber.from(value)` | +| `BigInt*` | `EncryptedBigInt.from(value)` | +| `Date*`, `Timestamp*` | `EncryptedDate.from(value)` | +| `Boolean` | `EncryptedBoolean.from(value)` | +| `Json` | `EncryptedJson.from(value)` | + +Import envelopes and `decryptAll` from `@cipherstash/stack-prisma/runtime`. + +```typescript +import { + decryptAll, + EncryptedDate, + EncryptedNumber, + EncryptedString, +} from "@cipherstash/stack-prisma/runtime" + +await db.orm.public.User.create({ + id: "user-0", + email: EncryptedString.from("alice@example.com"), + salary: EncryptedNumber.from(100_000), + birthday: EncryptedDate.from(new Date("1990-01-01")), +}) + +const rows = await db.orm.public.User.all() +await decryptAll(rows) +``` + +`decryptAll` groups a result set by table and column to avoid one encryption-service round trip per value. Call `.decrypt()` on an envelope after the batch completes. + +## Query operators + +Operators are generated only where the declared domain supports them. + +| Operator | Meaning | +| --- | --- | +| `eqlEq(value)`, `eqlNeq(value)` | Equality and inequality | +| `eqlIn(values)`, `eqlNotIn(values)` | Set membership | +| `eqlMatch(term)` | Free-text token match | +| `eqlGt/Gte/Lt/Lte(value)` | Range comparison | +| `eqlBetween(low, high)`, `eqlNotBetween(low, high)` | Bounded range | +| `eqlAsc(column)`, `eqlDesc(column)` | Encrypted ordering | +| `eqlJsonContains(value)` | JSON containment | +| `eqlJsonPathEq/Neq(path, value)` | Equality at a JSONPath | +| `eqlJsonPathGt/Gte/Lt/Lte(path, value)` | Range comparison at a JSONPath | +| `eqlJsonPathAsc/Desc(column, path)` | Ordering by a JSONPath leaf | + +```typescript +import { + eqlAsc, + eqlJsonPathDesc, +} from "@cipherstash/stack-prisma/runtime" + +const matches = await db.orm.public.User + .where((user) => user.email.eqlMatch("example.com")) + .all() + +const earners = await db.orm.public.User + .where((user) => user.salary.eqlBetween(100_000, 150_000)) + .orderBy((user) => eqlAsc(user.salary)) + .all() + +const preferences = await db.orm.public.User + .where((user) => user.profile.eqlJsonContains({ theme: "dark" })) + .orderBy((user) => eqlJsonPathDesc(user.profile, "$.score")) + .all() +``` + +Free-text search is token matching, not SQL `ILIKE`. Pass a term such as `example.com`, not a wildcard pattern such as `%example.com%`. + +## Indexes + +Encrypted predicates require functional Postgres indexes at meaningful scale. `schema.prisma` cannot express expression indexes, so put the index DDL in a Prisma raw-SQL migration operation and apply it with `prisma-next migrate`. + +The domain-to-index matrix, SQL recipes, rollout timing, `ANALYZE`, and `EXPLAIN` verification are maintained in [EQL indexes](/reference/eql/indexes). + +## Subpath exports + +| Import | Purpose | +| --- | --- | +| `@cipherstash/stack-prisma/control` | Prisma extension pack | +| `@cipherstash/stack-prisma/v3` | `cipherstashFromStack` and the EQL v3 adapter | +| `@cipherstash/stack-prisma/runtime` | Envelopes, `decryptAll`, and query helpers | +| `@cipherstash/stack-prisma/column-types` | TypeScript-authored contract factories | diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index 854ae70..f9efeec 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -7,7 +7,7 @@ audience: [developer, ciso] integration: category: platform setup: code-only - pairsWith: [drizzle, prisma-next, clerk] + pairsWith: [drizzle, prisma, clerk] verifiedAgainst: eql: "3.0.4" stack: "1.0.0" @@ -26,7 +26,7 @@ CipherStash has two parts: The EQL type assigned to a column declares what can be queried. For example, an equality column supports `.eq()` and `.in()`, while an ordered column also supports ranges and `.order()`. Choose only the capabilities you need, because searchable encryption has defined leakage characteristics. See [EQL core concepts](/reference/eql/core-concepts) for the complete model. -With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ordering queries. Encrypted free-text and JSON queries require an adapter such as Drizzle or Prisma Next because PostgREST cannot express the typed operands those operations require. The [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) documents the limitation. +With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ordering queries. Encrypted free-text and JSON queries require an adapter such as Drizzle or Prisma ORM 8 because PostgREST cannot express the typed operands those operations require. The [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) documents the limitation. ## Choose your path @@ -37,13 +37,13 @@ With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ord | Look up the complete wrapper API | [`encryptedSupabase` reference](/reference/stack/supabase) | | Bind decryption to the signed-in user | [Supabase Auth](/integrations/supabase/auth) | | Encrypt inside Supabase Edge Functions | [Edge Functions](/integrations/supabase/edge-functions) | -| Use an ORM against Supabase Postgres | [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) | +| Use an ORM against Supabase Postgres | [Drizzle](/integrations/drizzle) or [Prisma ORM 8](/integrations/prisma) | | Encrypt columns that already contain data | [Encrypt existing data](/guides/migration/encrypt-existing-data) | | Plan a production rollout or rollback | [Deployment guide](/guides/deployment) | ## Supabase, Drizzle, and Prisma -Supabase is Postgres, so you are not limited to PostgREST or `supabase-js`. CipherStash's [Drizzle](/integrations/drizzle) and [Prisma Next](/integrations/prisma-next) integrations can read and write the same EQL columns through a direct database connection. They produce the same ciphertext, so an application can use more than one adapter without re-encrypting its data. +Supabase is Postgres, so you are not limited to PostgREST or `supabase-js`. CipherStash's [Drizzle](/integrations/drizzle) and [Prisma ORM 8](/integrations/prisma) integrations can read and write the same EQL columns through a direct database connection. They produce the same ciphertext, so an application can use more than one adapter without re-encrypting its data. Use `encryptedSupabase` when you want Supabase's query builder and automatic propagation of the caller's JWT. Use an ORM when it better fits your application or when you need encrypted free-text or JSON queries. A privileged direct database connection may bypass Row Level Security, so preserve tenant or user scoping in the connection role or ORM query. diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index c3a3fd4..f7dd3d4 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -7,7 +7,7 @@ audience: [developer] integration: category: platform setup: code-only - pairsWith: [drizzle, prisma-next, clerk] + pairsWith: [drizzle, prisma, clerk] verifiedAgainst: eql: "3.0.4" stack: "1.0.0" @@ -162,4 +162,4 @@ The Table Editor cannot decrypt or meaningfully filter the encrypted value becau - Use the complete [`encryptedSupabase` API reference](/reference/stack/supabase) when you need method-level detail. - Add functional indexes when the table reaches meaningful row counts by following [EQL indexes](/reference/eql/indexes). - For a populated table, follow the safe dual-write and backfill process in [Encrypt existing data](/guides/migration/encrypt-existing-data). -- To use a direct Postgres ORM connection, continue with [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next). +- To use a direct Postgres ORM connection, continue with [Drizzle](/integrations/drizzle) or [Prisma ORM 8](/integrations/prisma). diff --git a/content/docs/integrations/supabase/supabase-js.mdx b/content/docs/integrations/supabase/supabase-js.mdx index a1d1ebd..246919d 100644 --- a/content/docs/integrations/supabase/supabase-js.mdx +++ b/content/docs/integrations/supabase/supabase-js.mdx @@ -192,7 +192,7 @@ Storage-only, equality-only, and match-only encrypted columns cannot be ordered. <Callout type="warn"> **The current EQL 3.0.4 release cannot run encrypted free-text or encrypted JSON queries through supabase-js.** `.matches()`, encrypted `.contains()`, `.selectorEq()`, and `.selectorNe()` fail before a request is sent. Their SQL operators require an `eql_v3.query_*` cast that PostgREST cannot express. This PostgREST boundary was introduced in EQL 3.0.2 and remains in 3.0.4, which is why the runtime error describes it as `3.0.2+`. -Inserts, selects, decryption, equality, ranges, and ordering are unaffected. Use [Drizzle](/integrations/drizzle), [Prisma Next](/integrations/prisma-next), or a carefully scoped SQL/RPC function for free-text and encrypted JSON queries. +Inserts, selects, decryption, equality, ranges, and ordering are unaffected. Use [Drizzle](/integrations/drizzle), [Prisma ORM 8](/integrations/prisma), or a carefully scoped SQL/RPC function for free-text and encrypted JSON queries. </Callout> Scalar encrypted filters currently use a full encrypted storage envelope as the PostgREST operand because PostgREST cannot cast a term-only query envelope. PostgREST sends filters in GET query strings, so configure application and proxy logs not to retain query strings. The operand is encrypted, but it can contain ciphertext and every index term for the queried value. diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx index 8e4dbe7..c05e347 100644 --- a/content/docs/reference/stack/supabase.mdx +++ b/content/docs/reference/stack/supabase.mdx @@ -185,7 +185,7 @@ await supabase ``` [supabase v3]: matches() on encrypted column "email" is unavailable with EQL 3.0.2+: the SQL operator requires an eql_v3.query_* cast that PostgREST cannot -express. Use the Drizzle or Prisma Next adapter, or a scoped SQL/RPC function. +express. Use the Drizzle or Prisma ORM 8 adapter, or a scoped SQL/RPC function. ``` The error says `3.0.2+` because EQL 3.0.2 introduced this query-domain requirement. EQL 3.0.4 retains it. @@ -194,7 +194,7 @@ The limit is PostgREST's, not the encryption's. Those operators need a typed `eq This applies to `.matches()`, `.contains()` on a `json` column, `.selectorEq()` / `.selectorNe()`, and the same terms reached through `.not()`, `.or()`, or a raw `.filter()`. **Equality, ordering, and range are unaffected** — `.eq()`, `.neq()`, `.in()`, `.gt()` / `.gte()` / `.lt()` / `.lte()`, and `.order()` all work, as do inserts, updates, and decryption on select. -To search encrypted text with EQL 3.0.4, use the [Drizzle](/integrations/drizzle) or [Prisma Next](/integrations/prisma-next) adapter for that query, or put it behind a scoped SQL or RPC function. Everything else on this page still applies. +To search encrypted text with EQL 3.0.4, use the [Drizzle](/integrations/drizzle) or [Prisma ORM 8](/integrations/prisma) adapter for that query, or put it behind a scoped SQL or RPC function. Everything else on this page still applies. </Callout> On EQL 3.0.1 and earlier, `.matches()` tests whether the stored value's encrypted token set contains the search string's — case-insensitive, and false positives are possible while false negatives are not: diff --git a/next.config.mjs b/next.config.mjs index 990a7b3..efdadca 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -33,6 +33,11 @@ const config = { destination: "/get-started/quickstart", permanent: false, }, + { + source: "/integrations/prisma-next", + destination: "/integrations/prisma", + permanent: true, + }, ...(enableV2Redirects ? v2Redirects : []), // === 4-section consolidation: product sections under /cipherstash/ === { diff --git a/scripts/validate-content-api.ts b/scripts/validate-content-api.ts index 4563c6b..b260ead 100644 --- a/scripts/validate-content-api.ts +++ b/scripts/validate-content-api.ts @@ -68,13 +68,6 @@ const IDENTITY_SCOPE = ["content/docs/", "content/stack/"]; /** The legacy tree documents EQL v2 throughout; only the v2 IA must be v3-only. */ const V3_SCOPE = ["content/docs/"]; -/** - * `@cipherstash/prisma-next` really does target EQL v2 — its migrations create - * `eql_v2_encrypted` columns and call `eql_v2.add_search_config`. Its page must - * name those to be correct. Delete this when prisma-next moves to v3. - */ -const PRISMA_NEXT_IS_V2 = ["content/docs/integrations/prisma-next.mdx"]; - const RULES: Rule[] = [ { id: "lockcontext-identify", @@ -106,14 +99,12 @@ const RULES: Rule[] = [ message: "The `eql_v2_encrypted` column type was removed in EQL 3.0.0.", fix: "Type the column with an EQL v3 domain variant, e.g. `public.eql_v3_text_eq`. See /reference/eql/core-concepts.", scope: V3_SCOPE, - exempt: PRISMA_NEXT_IS_V2, }, { id: "eql-v2-schema-functions", pattern: /\beql_v2\.\w+\s*\(/, message: "The `eql_v2` schema was removed in EQL 3.0.0.", fix: "Use the `eql_v3` equivalents, or the encrypted operators directly with a typed operand.", - exempt: PRISMA_NEXT_IS_V2, scope: V3_SCOPE, }, { diff --git a/v2-redirects.mjs b/v2-redirects.mjs index e983333..5c93da1 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -58,7 +58,7 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/encryption/prisma-next", - destination: "/integrations/prisma-next", + destination: "/integrations/prisma", permanent: false, }, { From 9477cdcc15abe02dd8b45d17e032dbba9e18a7b7 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 19:40:03 +1000 Subject: [PATCH 129/151] docs: add Prisma navigation icon --- content/docs/integrations/prisma/meta.json | 2 +- src/components/icons/prisma.tsx | 19 +++++++++++++++++++ src/lib/source.ts | 2 ++ 3 files changed, 22 insertions(+), 1 deletion(-) create mode 100644 src/components/icons/prisma.tsx diff --git a/content/docs/integrations/prisma/meta.json b/content/docs/integrations/prisma/meta.json index ae57a3a..67e8db1 100644 --- a/content/docs/integrations/prisma/meta.json +++ b/content/docs/integrations/prisma/meta.json @@ -1,6 +1,6 @@ { "title": "Prisma ORM", - "icon": "Database", + "icon": "Prisma", "pages": [ "index", "quickstart", diff --git a/src/components/icons/prisma.tsx b/src/components/icons/prisma.tsx new file mode 100644 index 0000000..f5e7f67 --- /dev/null +++ b/src/components/icons/prisma.tsx @@ -0,0 +1,19 @@ +export function PrismaIcon(props: React.SVGProps<SVGSVGElement>) { + return ( + <svg + viewBox="0 0 58 72" + fill="none" + xmlns="http://www.w3.org/2000/svg" + role="img" + aria-label="Prisma" + {...props} + > + <path + fillRule="evenodd" + clipRule="evenodd" + d="M0.522473 45.0933C-0.184191 46.246 -0.173254 47.7004 0.550665 48.8423L13.6534 69.5114C14.5038 70.8529 16.1429 71.4646 17.6642 71.0082L55.4756 59.6648C57.539 59.0457 58.5772 56.7439 57.6753 54.7874L33.3684 2.06007C32.183 -0.511323 28.6095 -0.722394 27.1296 1.69157L0.522473 45.0933ZM32.7225 14.1141C32.2059 12.9187 30.4565 13.1028 30.2001 14.3796L20.842 60.9749C20.6447 61.9574 21.5646 62.7964 22.5248 62.5098L48.6494 54.7114C49.4119 54.4838 49.8047 53.6415 49.4891 52.9111L32.7225 14.1141Z" + className="fill-[#090A15] dark:fill-white" + /> + </svg> + ); +} diff --git a/src/lib/source.ts b/src/lib/source.ts index b3b58ca..6c2080d 100644 --- a/src/lib/source.ts +++ b/src/lib/source.ts @@ -3,9 +3,11 @@ import type * as PageTree from "fumadocs-core/page-tree"; import { type InferPageType, loader } from "fumadocs-core/source"; import { icons } from "lucide-react"; import { createElement } from "react"; +import { PrismaIcon } from "@/components/icons/prisma"; import { SupabaseIcon } from "@/components/icons/supabase"; const customIcons: Record<string, () => React.ReactElement> = { + Prisma: () => createElement(PrismaIcon, { width: 16, height: 16 }), Supabase: () => createElement(SupabaseIcon, { width: 16, height: 16 }), }; From eb3e46e24305f993de3d6aab5715c206100b4415 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 19:53:35 +1000 Subject: [PATCH 130/151] docs: use the Prisma init flag --- content/docs/get-started/quickstart.mdx | 2 +- content/docs/integrations/prisma/index.mdx | 2 +- content/docs/integrations/prisma/quickstart.mdx | 10 ++++++---- 3 files changed, 8 insertions(+), 6 deletions(-) diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx index 330514d..38571ec 100644 --- a/content/docs/get-started/quickstart.mdx +++ b/content/docs/get-started/quickstart.mdx @@ -38,7 +38,7 @@ This opens a browser for device-based authentication, so local development needs 4. Scaffolds an encryption module at `src/encryption/index.ts`. 5. Writes `.cipherstash/context.json` with what it detected about your project. -See the [CLI reference](/reference/cli/init) for the flags, including `--supabase`, `--drizzle`, and `--prisma-next`. +Integration-specific initialization flags include `--supabase`, `--drizzle`, and `--prisma`. EQL v3 is the default, so `init` installs it directly against the database. Confirm what you ended up with: diff --git a/content/docs/integrations/prisma/index.mdx b/content/docs/integrations/prisma/index.mdx index 69ec4ae..6d2d0d3 100644 --- a/content/docs/integrations/prisma/index.mdx +++ b/content/docs/integrations/prisma/index.mdx @@ -17,7 +17,7 @@ verifiedAgainst: CipherStash adds searchable, field-level encryption to Prisma ORM 8. Encrypted columns are declared in `schema.prisma`, EQL is installed through Prisma's migration graph, and the generated query API encrypts operands and values before they reach Postgres. <Callout type="info"> -This integration targets the **Prisma ORM 8 release candidate**, formerly known as **Prisma Next**. The prerelease CLI, package names, configuration file, and initialization flag still use `prisma-next` or `@prisma-next/*`; the examples preserve those names exactly. +This integration targets the **Prisma ORM 8 release candidate**, formerly known as **Prisma Next**. The prerelease CLI, package names, and configuration file still use `prisma-next` or `@prisma-next/*`; the examples preserve those names exactly. CipherStash setup uses `stash init --prisma`. It does not extend the classic `@prisma/client` API. For earlier Prisma releases, use the [Stack SDK](/reference/stack) around your existing reads and writes. </Callout> diff --git a/content/docs/integrations/prisma/quickstart.mdx b/content/docs/integrations/prisma/quickstart.mdx index b02af2f..9a40668 100644 --- a/content/docs/integrations/prisma/quickstart.mdx +++ b/content/docs/integrations/prisma/quickstart.mdx @@ -17,7 +17,7 @@ verifiedAgainst: This tutorial adds an encrypted, searchable email field to an existing Prisma ORM 8 release candidate project. <Callout type="info"> -Prisma ORM 8 was formerly called Prisma Next. Its prerelease command remains `prisma-next`, and the CipherStash initialization flag remains `--prisma-next`. +Prisma ORM 8 was formerly called Prisma Next. Its prerelease command remains `prisma-next`, while CipherStash initialization uses `--prisma`. </Callout> It is designed for a new table or empty column. To encrypt a populated column safely, use the [Prisma deployment guide](/integrations/prisma/deployment). @@ -38,7 +38,7 @@ You need: From the Prisma project, run: ```bash cta cta-type="install" example-id="prisma-quickstart-init" -npx stash init --prisma-next +npx stash init --prisma ``` `stash init` opens the CipherStash device login when necessary, creates the local developer profile, and installs compatible pinned versions of `@cipherstash/stack`, `@cipherstash/stack-prisma`, and the `stash` CLI. @@ -46,7 +46,9 @@ npx stash init --prisma-next It intentionally does not install EQL directly. The Prisma migration graph owns that step. <Callout type="idea"> -Agents can run the same initialization command. If authentication is needed, they can present the verification URL and wait for you to complete device login. Initialization also records project context and can install the CipherStash Prisma, authentication, indexing, deployment, and CLI skills for supported coding agents. +Agents can run the same setup. If no developer profile exists, the agent should start `npx stash auth login --json --region <region> --prisma`, present the returned verification URL, and wait for you to complete device login. It can then run `npx stash init --prisma --region <region>`. + +Initialization records project context and can install the CipherStash Prisma, authentication, indexing, deployment, and CLI skills for supported coding agents. </Callout> </Step> @@ -91,7 +93,7 @@ export default defineConfig({ }) ``` -If you already use extension packs, include `cipherstash` in the existing array. `createNamespace` is required by Prisma Next 0.15 and later. +If you already use extension packs, include `cipherstash` in the existing array. `createNamespace` is required by Prisma's 0.15 and later prereleases. </Step> <Step> From 4031180117f3986d7ed0bea6ce0328aff08d4acf Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 20:12:04 +1000 Subject: [PATCH 131/151] docs: add reusable credential options --- .../docs/integrations/prisma/deployment.mdx | 13 +- content/docs/integrations/prisma/index.mdx | 4 +- .../integrations/prisma/prisma-compute.mdx | 9 +- .../docs/integrations/prisma/quickstart.mdx | 2 +- src/components/cipherstash-credentials.tsx | 118 ++++++++++++++++++ src/mdx-components.tsx | 2 + 6 files changed, 129 insertions(+), 19 deletions(-) create mode 100644 src/components/cipherstash-credentials.tsx diff --git a/content/docs/integrations/prisma/deployment.mdx b/content/docs/integrations/prisma/deployment.mdx index ee5400e..8bc63cc 100644 --- a/content/docs/integrations/prisma/deployment.mdx +++ b/content/docs/integrations/prisma/deployment.mdx @@ -52,18 +52,11 @@ Use the recipes in [EQL indexes](/reference/eql/indexes). Build indexes after th ## Credentials -Local builds can use the developer profile created by `stash init`. CI, production builds, application runtimes, backfills, and one-off migration jobs use: +<CipherStashCredentials /> -```dotenv -CS_WORKSPACE_CRN=crn:<region>:<workspace-id> -CS_CLIENT_ID=<uuid> -CS_CLIENT_KEY=<hex> -CS_CLIENT_ACCESS_KEY=CSAK... -``` - -Create separate credentials for each environment with `stash env`. A backfill must use credentials bound to the same keyset as the deployed application; otherwise decryption or encrypted search can fail after a seemingly successful write. +Create separate credentials for each deployed environment. A backfill must use credentials bound to the same keyset as the deployed application; otherwise decryption or encrypted search can fail after a seemingly successful write. -The encryption client is commonly constructed during module import, so make `CS_*` available at build time as well as runtime. +The encryption client is commonly constructed during module import, so make the four `CS_*` variables available at build time as well as runtime. ## Runtime packaging diff --git a/content/docs/integrations/prisma/index.mdx b/content/docs/integrations/prisma/index.mdx index 6d2d0d3..d8fe996 100644 --- a/content/docs/integrations/prisma/index.mdx +++ b/content/docs/integrations/prisma/index.mdx @@ -52,6 +52,8 @@ Encrypted functional indexes also belong in the Prisma migration graph. `schema. ## Runtime and authentication -Local development uses the CipherStash developer profile created by `stash init`. CI and deployed applications use the four `CS_*` environment variables. The Prisma adapter currently uses the native Stack client, so deploy it to a server runtime that can load native packages; it is not an edge-runtime adapter. +Local development uses the CipherStash developer profile created by `stash init`. CI and deployed applications use credentials created with the CLI or Dashboard. [Credentials](/integrations/prisma/deployment#credentials) lists all three options and the four deployment environment variables. + +The Prisma adapter currently uses the native Stack client, so deploy it to a server runtime that can load native packages; it is not an edge-runtime adapter. For a new project, continue with the [Quickstart](/integrations/prisma/quickstart). diff --git a/content/docs/integrations/prisma/prisma-compute.mdx b/content/docs/integrations/prisma/prisma-compute.mdx index 8208034..b21848f 100644 --- a/content/docs/integrations/prisma/prisma-compute.mdx +++ b/content/docs/integrations/prisma/prisma-compute.mdx @@ -17,14 +17,9 @@ verifiedAgainst: ## Before the first deploy -Add the four CipherStash credentials to both the preview and production roles: +<CipherStashCredentials /> -```dotenv -CS_WORKSPACE_CRN=crn:<region>:<workspace-id> -CS_CLIENT_ID=<uuid> -CS_CLIENT_KEY=<hex> -CS_CLIENT_ACCESS_KEY=CSAK... -``` +The local developer profile is not available on Prisma Compute. Create deployment credentials with `stash env` or the Dashboard, then add all four variables to both the preview and production roles. These values are needed during the build as well as at runtime because a database module may construct `cipherstashFromStack` when it is imported. Prisma Compute resolves environment variables when it creates a deployment, so redeploy after changing them. diff --git a/content/docs/integrations/prisma/quickstart.mdx b/content/docs/integrations/prisma/quickstart.mdx index 9a40668..6f23700 100644 --- a/content/docs/integrations/prisma/quickstart.mdx +++ b/content/docs/integrations/prisma/quickstart.mdx @@ -133,7 +133,7 @@ export const db = postgres<Contract>({ }) ``` -`cipherstashFromStack` uses the local developer profile automatically. Deployed environments use `CS_*` credentials instead. +`cipherstashFromStack` uses the local developer profile automatically. For CI or a deployed application, see [Credentials](/integrations/prisma/deployment#credentials) for the CLI and Dashboard options. </Step> <Step> diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx new file mode 100644 index 0000000..64c5339 --- /dev/null +++ b/src/components/cipherstash-credentials.tsx @@ -0,0 +1,118 @@ +import { CodeBlock, Pre } from "fumadocs-ui/components/codeblock"; +import { ExternalLink, Laptop, LayoutDashboard, Terminal } from "lucide-react"; + +const ENVIRONMENT_VARIABLES = `CS_WORKSPACE_CRN=crn:<region>.<provider>:<workspace-id> +CS_CLIENT_ID=<uuid> +CS_CLIENT_KEY=<hex> +CS_CLIENT_ACCESS_KEY=CSAK...`; + +const options = [ + { + title: "Developer profile", + useFor: "Local development", + icon: Laptop, + content: ( + <> + Run <code>npx stash auth login</code>. The native Stack client finds the + resulting developer profile automatically, so you do not need + environment variables on your development machine. + </> + ), + }, + { + title: "stash env", + useFor: "CI and deployed environments", + icon: Terminal, + content: ( + <> + Run <code>npx stash env --name <app-env></code> while logged in. + It creates a client and prints the four environment variables below. The + access key is shown only once. + </> + ), + }, + { + title: "Dashboard", + useFor: "CI and deployed environments", + icon: LayoutDashboard, + content: ( + <> + Open your{" "} + <a + href="https://dashboard.cipherstash.com/workspaces/_" + target="_blank" + rel="noreferrer" + className="font-medium underline underline-offset-4" + > + CipherStash workspace + <ExternalLink + className="ms-1 inline size-3" + aria-label="Opens in a new tab" + /> + </a>{" "} + and create deployment credentials there. Add the resulting values to + your platform's secret store. + </> + ), + }, +] as const; + +/** + * The canonical credential-source chooser for integration and deployment + * guides. Keep the discovery order and environment-variable names aligned + * with the Stack authentication skill. + */ +export function CipherStashCredentials() { + return ( + <div className="not-prose my-6 overflow-hidden rounded-xl border bg-fd-card"> + <div className="border-b px-5 py-4"> + <h3 className="font-semibold text-fd-foreground"> + Choose a credential source + </h3> + <p className="mt-1 text-sm text-fd-muted-foreground"> + Use the developer profile locally. For CI or a deployed application, + create a separate credential set with the CLI or Dashboard. + </p> + </div> + + <ol className="grid divide-y md:grid-cols-3 md:divide-x md:divide-y-0"> + {options.map(({ title, useFor, icon: Icon, content }, index) => ( + <li key={title} className="p-5"> + <div className="flex items-start gap-3"> + <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-secondary text-fd-muted-foreground"> + <Icon className="size-4" aria-hidden="true" /> + </span> + <div> + <p className="font-medium text-fd-foreground"> + {index + 1}. {title} + </p> + <p className="mt-0.5 text-xs font-medium uppercase tracking-wide text-fd-muted-foreground"> + {useFor} + </p> + </div> + </div> + <p className="mt-3 text-sm leading-relaxed text-fd-muted-foreground [&_code]:text-fd-foreground"> + {content} + </p> + </li> + ))} + </ol> + + <div className="border-t px-5 py-4"> + <p className="text-sm font-medium text-fd-foreground"> + Deployment environment variables + </p> + <p className="mt-1 text-sm text-fd-muted-foreground"> + Both deployment methods produce the same values. Treat{" "} + <code>CS_CLIENT_KEY</code> and <code>CS_CLIENT_ACCESS_KEY</code> as + secrets. + </p> + <CodeBlock title=".env" className="mb-0"> + <Pre className="px-4"> + <code>{ENVIRONMENT_VARIABLES}</code> + </Pre> + </CodeBlock> + </div> + </div> + ); +} diff --git a/src/mdx-components.tsx b/src/mdx-components.tsx index 66ac189..122f68c 100644 --- a/src/mdx-components.tsx +++ b/src/mdx-components.tsx @@ -4,6 +4,7 @@ import defaultMdxComponents from "fumadocs-ui/mdx"; import type { MDXComponents } from "mdx/types"; import type { ComponentProps } from "react"; import { BadExample } from "@/components/bad-example"; +import { CipherStashCredentials } from "@/components/cipherstash-credentials"; import { TrackedCodeBlock } from "@/components/code-block"; import { EqlFn } from "@/components/eql-fn"; import { EqlVersion } from "@/components/eql-version"; @@ -48,6 +49,7 @@ export function getMDXComponents(components?: MDXComponents): MDXComponents { Steps, Step, BadExample, + CipherStashCredentials, EqlVersion, EqlFn, ZeroKmsRegions, From 37db92c1df641243b9390d74aef1d646d3885167 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 20:23:27 +1000 Subject: [PATCH 132/151] docs: polish credential options styling --- source.config.ts | 140 +-------------------- src/components/cipherstash-credentials.tsx | 22 ++-- src/lib/shiki-themes.ts | 132 +++++++++++++++++++ 3 files changed, 146 insertions(+), 148 deletions(-) create mode 100644 src/lib/shiki-themes.ts diff --git a/source.config.ts b/source.config.ts index 1239b51..38e98e6 100644 --- a/source.config.ts +++ b/source.config.ts @@ -3,6 +3,7 @@ import { rehypeCodeDefaultOptions } from "fumadocs-core/mdx-plugins"; import { metaSchema, pageSchema } from "fumadocs-core/source/schema"; import { defineConfig, defineDocs } from "fumadocs-mdx/config"; import { z } from "zod"; +import { cipherstashDark, cipherstashLight } from "./src/lib/shiki-themes"; // You can customise Zod schemas for frontmatter and `meta.json` here // see https://fumadocs.dev/docs/mdx/collections @@ -77,145 +78,6 @@ export const v2docs = defineDocs({ }); // ── Syntax highlighting: the CipherStash code theme ────────────────────────── -// Two custom Shiki themes (light + dark) built from the site palette instead of -// Fumadocs' default GitHub themes: the lime-green brand accent for keywords, -// warm neutrals for text and comments, and teal / gold / amber supporting hues -// tuned to the near-black and off-white grounds the docs already use. Shiki runs -// in dual-theme mode (see `defaultColor: false` in rehypeCodeDefaultOptions), so -// these switch with the site's light/dark toggle via CSS variables. -interface CodePalette { - bg: string; - fg: string; - com: string; - kw: string; - fn: string; - typ: string; - str: string; - num: string; - pun: string; -} - -function cipherstashTheme( - name: string, - type: "light" | "dark", - c: CodePalette, -) { - return { - name, - type, - colors: { - "editor.background": c.bg, - "editor.foreground": c.fg, - }, - settings: [ - { settings: { background: c.bg, foreground: c.fg } }, - { - scope: ["comment", "punctuation.definition.comment", "string.comment"], - settings: { foreground: c.com, fontStyle: "italic" }, - }, - { - scope: [ - "keyword", - "keyword.control", - "keyword.other", - "keyword.operator.new", - "keyword.operator.expression", - "keyword.operator.logical", - "storage", - "storage.type", - "storage.modifier", - "variable.language", - "entity.name.tag", - "punctuation.definition.tag", - ], - settings: { foreground: c.kw }, - }, - { - scope: [ - "entity.name.function", - "support.function", - "meta.function-call", - "meta.function-call.generic", - "variable.function", - ], - settings: { foreground: c.fn }, - }, - { - scope: [ - "entity.name.type", - "entity.name.class", - "support.type", - "support.class", - "entity.other.inherited-class", - "entity.name.namespace", - "support.type.property-name", - "meta.object-literal.key", - "entity.other.attribute-name", - ], - settings: { foreground: c.typ }, - }, - { - scope: [ - "string", - "string.quoted", - "string.template", - "string.regexp", - "punctuation.definition.string", - ], - settings: { foreground: c.str }, - }, - { - scope: [ - "constant.numeric", - "constant.language", - "constant.character", - "constant.other", - "support.constant", - ], - settings: { foreground: c.num }, - }, - { - scope: [ - "punctuation", - "keyword.operator", - "meta.brace", - "punctuation.separator", - "punctuation.terminator", - ], - settings: { foreground: c.pun }, - }, - { - scope: ["variable", "variable.other", "variable.parameter"], - settings: { foreground: c.fg }, - }, - ], - }; -} - -const cipherstashDark = cipherstashTheme("cipherstash-dark", "dark", { - bg: "#0b0b0a", - fg: "#eae8dd", - com: "#8f8f8f", - kw: "#d77595", - fn: "#d2a8ff", - typ: "#7fd0c4", - str: "#c8f031", - num: "#f4dd63", - pun: "#9a9486", -}); - -const cipherstashLight = cipherstashTheme("cipherstash-light", "light", { - bg: "#faf9f4", - fg: "#2b2822", - com: "#7a7a7a", - kw: "#a63057", - fn: "#8250df", - typ: "#1c8577", - str: "#567d0d", - num: "#977c11", - pun: "#6b6559", -}); - // Parse the leftover code-fence meta string (what remains after Fumadocs // extracts `title`, `tab`, and line-number directives) for the analytics // attributes documented for authors: `example-id`, `cta`, and `cta-type`. diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx index 64c5339..5fa5c4b 100644 --- a/src/components/cipherstash-credentials.tsx +++ b/src/components/cipherstash-credentials.tsx @@ -1,5 +1,6 @@ -import { CodeBlock, Pre } from "fumadocs-ui/components/codeblock"; +import { DynamicCodeBlock } from "fumadocs-ui/components/dynamic-codeblock"; import { ExternalLink, Laptop, LayoutDashboard, Terminal } from "lucide-react"; +import { cipherstashDark, cipherstashLight } from "@/lib/shiki-themes"; const ENVIRONMENT_VARIABLES = `CS_WORKSPACE_CRN=crn:<region>.<provider>:<workspace-id> CS_CLIENT_ID=<uuid> @@ -42,7 +43,7 @@ const options = [ href="https://dashboard.cipherstash.com/workspaces/_" target="_blank" rel="noreferrer" - className="font-medium underline underline-offset-4" + className="font-medium text-fd-foreground underline decoration-fd-primary decoration-[1.5px] underline-offset-[3.5px] transition-opacity hover:opacity-80" > CipherStash workspace <ExternalLink @@ -64,7 +65,7 @@ const options = [ */ export function CipherStashCredentials() { return ( - <div className="not-prose my-6 overflow-hidden rounded-xl border bg-fd-card"> + <div className="not-prose my-6 overflow-hidden rounded-xl border border-t-2 border-t-fd-primary bg-fd-card"> <div className="border-b px-5 py-4"> <h3 className="font-semibold text-fd-foreground"> Choose a credential source @@ -79,7 +80,7 @@ export function CipherStashCredentials() { {options.map(({ title, useFor, icon: Icon, content }, index) => ( <li key={title} className="p-5"> <div className="flex items-start gap-3"> - <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-secondary text-fd-muted-foreground"> + <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> <Icon className="size-4" aria-hidden="true" /> </span> <div> @@ -107,11 +108,14 @@ export function CipherStashCredentials() { <code>CS_CLIENT_KEY</code> and <code>CS_CLIENT_ACCESS_KEY</code> as secrets. </p> - <CodeBlock title=".env" className="mb-0"> - <Pre className="px-4"> - <code>{ENVIRONMENT_VARIABLES}</code> - </Pre> - </CodeBlock> + <DynamicCodeBlock + lang="dotenv" + code={ENVIRONMENT_VARIABLES} + codeblock={{ title: ".env", className: "mb-0" }} + options={{ + themes: { light: cipherstashLight, dark: cipherstashDark }, + }} + /> </div> </div> ); diff --git a/src/lib/shiki-themes.ts b/src/lib/shiki-themes.ts new file mode 100644 index 0000000..bb60543 --- /dev/null +++ b/src/lib/shiki-themes.ts @@ -0,0 +1,132 @@ +interface CodePalette { + bg: string; + fg: string; + com: string; + kw: string; + fn: string; + typ: string; + str: string; + num: string; + pun: string; +} + +function cipherstashTheme( + name: string, + type: "light" | "dark", + c: CodePalette, +) { + return { + name, + type, + colors: { + "editor.background": c.bg, + "editor.foreground": c.fg, + }, + settings: [ + { settings: { background: c.bg, foreground: c.fg } }, + { + scope: ["comment", "punctuation.definition.comment", "string.comment"], + settings: { foreground: c.com, fontStyle: "italic" }, + }, + { + scope: [ + "keyword", + "keyword.control", + "keyword.other", + "keyword.operator.new", + "keyword.operator.expression", + "keyword.operator.logical", + "storage", + "storage.type", + "storage.modifier", + "variable.language", + "entity.name.tag", + "punctuation.definition.tag", + ], + settings: { foreground: c.kw }, + }, + { + scope: [ + "entity.name.function", + "support.function", + "meta.function-call", + "meta.function-call.generic", + "variable.function", + ], + settings: { foreground: c.fn }, + }, + { + scope: [ + "entity.name.type", + "entity.name.class", + "support.type", + "support.class", + "entity.other.inherited-class", + "entity.name.namespace", + "support.type.property-name", + "meta.object-literal.key", + "entity.other.attribute-name", + ], + settings: { foreground: c.typ }, + }, + { + scope: [ + "string", + "string.quoted", + "string.template", + "string.regexp", + "punctuation.definition.string", + ], + settings: { foreground: c.str }, + }, + { + scope: [ + "constant.numeric", + "constant.language", + "constant.character", + "constant.other", + "support.constant", + ], + settings: { foreground: c.num }, + }, + { + scope: [ + "punctuation", + "keyword.operator", + "meta.brace", + "punctuation.separator", + "punctuation.terminator", + ], + settings: { foreground: c.pun }, + }, + { + scope: ["variable", "variable.other", "variable.parameter"], + settings: { foreground: c.fg }, + }, + ], + }; +} + +export const cipherstashDark = cipherstashTheme("cipherstash-dark", "dark", { + bg: "#0b0b0a", + fg: "#eae8dd", + com: "#8f8f8f", + kw: "#d77595", + fn: "#d2a8ff", + typ: "#7fd0c4", + str: "#c8f031", + num: "#f4dd63", + pun: "#9a9486", +}); + +export const cipherstashLight = cipherstashTheme("cipherstash-light", "light", { + bg: "#faf9f4", + fg: "#2b2822", + com: "#7a7a7a", + kw: "#a63057", + fn: "#8250df", + typ: "#1c8577", + str: "#567d0d", + num: "#977c11", + pun: "#6b6559", +}); From 60599fc35ad1fba9ced1d36cc3fddc94281590b4 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 19:25:54 +1000 Subject: [PATCH 133/151] docs(prisma): add generated API reference --- .gitignore | 2 + IA.md | 2 +- .../prisma/api-reference/meta.json | 14 ++ content/docs/integrations/prisma/index.mdx | 1 + content/docs/integrations/prisma/meta.json | 1 + package.json | 3 +- scripts/generate-prisma-docs.ts | 45 +++++++ scripts/lib/docs-generator.ts | 121 +++++++++++++----- scripts/validate-content-api.ts | 1 + scripts/validate-links.ts | 5 +- 10 files changed, 159 insertions(+), 36 deletions(-) create mode 100644 content/docs/integrations/prisma/api-reference/meta.json create mode 100644 scripts/generate-prisma-docs.ts diff --git a/.gitignore b/.gitignore index 856a089..7e2c4ba 100644 --- a/.gitignore +++ b/.gitignore @@ -37,6 +37,8 @@ content/stack/reference/stack/latest/ content/stack/reference/stack/v*/ content/stack/reference/drizzle/latest/ content/stack/reference/drizzle/v*/ +content/docs/integrations/prisma/api-reference/* +!content/docs/integrations/prisma/api-reference/meta.json .tmp-* .env.local diff --git a/IA.md b/IA.md index 3244e94..1b7436f 100644 --- a/IA.md +++ b/IA.md @@ -309,7 +309,7 @@ Two notes: - [ ] ⛔ `/integrations/supabase/edge-functions` — pending Deno/FFI answer - [ ] ⛔ `/integrations/supabase/realtime` — pending product verification - [x] `/integrations/drizzle` -- [x] `/integrations/prisma` — Prisma ORM 8 RC, EQL v3, Prisma Postgres, and Prisma Compute +- [x] `/integrations/prisma` — Prisma ORM 8 RC, EQL v3, Prisma Postgres, Prisma Compute, and generated API reference - [ ] `/integrations/aws/rds-aurora` — Proxy path - [ ] `/integrations/aws/dynamodb` - [ ] `/integrations/clerk` diff --git a/content/docs/integrations/prisma/api-reference/meta.json b/content/docs/integrations/prisma/api-reference/meta.json new file mode 100644 index 0000000..10d114f --- /dev/null +++ b/content/docs/integrations/prisma/api-reference/meta.json @@ -0,0 +1,14 @@ +{ + "title": "API reference", + "pages": [ + "index", + "codec-types", + "column-types", + "control", + "operation-types", + "pack", + "runtime", + "stack", + "v3" + ] +} diff --git a/content/docs/integrations/prisma/index.mdx b/content/docs/integrations/prisma/index.mdx index d8fe996..3fa9652 100644 --- a/content/docs/integrations/prisma/index.mdx +++ b/content/docs/integrations/prisma/index.mdx @@ -28,6 +28,7 @@ It does not extend the classic `@prisma/client` API. For earlier Prisma releases | --- | --- | | Encrypt and query your first Prisma field | [Prisma ORM Quickstart](/integrations/prisma/quickstart) | | Choose column types or look up query operators | [Schema and queries](/integrations/prisma/schema-and-queries) | +| Look up every exported function and type | [API reference](/integrations/prisma/api-reference) | | Encrypt data already in production | [Prisma deployment guide](/integrations/prisma/deployment) | | Use Prisma's managed database | [Prisma Postgres](/integrations/prisma/prisma-postgres) | | Deploy the application with Prisma | [Prisma Compute](/integrations/prisma/prisma-compute) | diff --git a/content/docs/integrations/prisma/meta.json b/content/docs/integrations/prisma/meta.json index 67e8db1..6a9ebfb 100644 --- a/content/docs/integrations/prisma/meta.json +++ b/content/docs/integrations/prisma/meta.json @@ -5,6 +5,7 @@ "index", "quickstart", "schema-and-queries", + "api-reference", "deployment", "prisma-postgres", "prisma-compute" diff --git a/package.json b/package.json index 44256fd..db688e4 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "prebuild": "bun run generate-docs && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-mermaid && bun run validate-links && bun run validate-redirects", + "prebuild": "bun run generate-docs && bun run generate-docs:prisma && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-mermaid && bun run validate-links && bun run validate-redirects", "build": "next build", "dev": "next dev -p 3001", "start": "next start", @@ -12,6 +12,7 @@ "lint": "biome check", "format": "biome format --write", "generate-docs": "tsx scripts/generate-docs.ts", + "generate-docs:prisma": "tsx scripts/generate-prisma-docs.ts", "generate-docs:eql": "tsx scripts/generate-eql-docs.ts", "generate-docs:eql-api": "tsx scripts/generate-eql-api-docs.ts", "generate-docs:cli": "tsx scripts/generate-cli-docs.ts", diff --git a/scripts/generate-prisma-docs.ts b/scripts/generate-prisma-docs.ts new file mode 100644 index 0000000..9675aa4 --- /dev/null +++ b/scripts/generate-prisma-docs.ts @@ -0,0 +1,45 @@ +#!/usr/bin/env tsx +/** Generate the Prisma ORM integration's API reference from Stack main. */ +import path from "node:path"; +import { type DocsConfig, generateDocs } from "./lib/docs-generator.js"; + +const prismaConfig: DocsConfig = { + packageName: "@cipherstash/stack-prisma", + projectName: "@cipherstash/stack-prisma", + repoUrl: "https://github.com/cipherstash/stack.git", + sourceRef: "main", + tempDirName: ".tmp-stack-prisma", + baseOutputDir: path.join( + process.cwd(), + "content/docs/integrations/prisma/api-reference", + ), + publicPath: "/integrations/prisma/api-reference", + metaTitle: "API reference", + versionedOutput: false, + entryPointBasePath: "packages/stack-prisma/src/exports", + router: "module", + flattenOutputFiles: true, + entryPoints: [ + "./packages/stack-prisma/src/exports/codec-types.ts", + "./packages/stack-prisma/src/exports/column-types.ts", + "./packages/stack-prisma/src/exports/control.ts", + "./packages/stack-prisma/src/exports/operation-types.ts", + "./packages/stack-prisma/src/exports/pack.ts", + "./packages/stack-prisma/src/exports/runtime.ts", + "./packages/stack-prisma/src/exports/stack.ts", + "./packages/stack-prisma/src/exports/v3.ts", + ], + tsconfigInclude: ["packages/stack-prisma/src/**/*"], + tagFilter: () => false, + referencePathSegment: "prisma", + frontmatterGlobals: { + type: "reference", + components: ["encryption", "eql"], + audience: ["developer"], + }, +}; + +generateDocs(prismaConfig).catch((error) => { + console.error("Failed to generate the Prisma API reference:", error); + process.exit(1); +}); diff --git a/scripts/lib/docs-generator.ts b/scripts/lib/docs-generator.ts index 92cc52b..5309ff9 100644 --- a/scripts/lib/docs-generator.ts +++ b/scripts/lib/docs-generator.ts @@ -22,6 +22,24 @@ export interface DocsConfig { tagFilter: (tag: string) => boolean; /** Reference URL path segment (e.g., 'stack' or 'drizzle') */ referencePathSegment: string; + /** Generate from a branch or commit instead of selecting a release tag. */ + sourceRef?: string; + /** Public route before the generated version directory. */ + publicPath?: string; + /** Navigation title written to the package-level meta.json. */ + metaTitle?: string; + /** TypeDoc project name. */ + projectName?: string; + /** Additional frontmatter added to every generated page. */ + frontmatterGlobals?: Record<string, unknown>; + /** Generate directly into baseOutputDir instead of a latest/version folder. */ + versionedOutput?: boolean; + /** Base path TypeDoc uses to name entry-point modules. */ + entryPointBasePath?: string; + /** TypeDoc Markdown output router. */ + router?: "member" | "module"; + /** Write generated module pages into one directory. */ + flattenOutputFiles?: boolean; } /** @@ -66,6 +84,9 @@ export async function stripMdxExtensions(dir: string): Promise<void> { // TypeDoc generates links to index pages (e.g., ../index or /stack/.../index) // but Fumadocs serves index.mdx at the directory URL without /index. content = content.replace(/\]\(([^)#]*)\/index([#)])/g, "]($1$2"); + // A flattened module sits beside the root index and links back to it as + // `(index)`, without a preceding slash for the rule above to match. + content = content.replace(/\]\(index([#)])/g, "](./$1"); // Strip temp directory prefix from source link text (e.g., .tmp-stack/) // Matches: [.tmp-stack/packages/...](url) → [packages/...](url) content = content.replace(/\[\.tmp-[^/]+\//g, "["); @@ -102,7 +123,11 @@ export async function generateMetaJson(dir: string): Promise<void> { } const metaPath = path.join(dir, "meta.json"); - await fs.writeFile(metaPath, JSON.stringify({ pages }, null, 2), "utf8"); + await fs.writeFile( + metaPath, + `${JSON.stringify({ pages }, null, 2)}\n`, + "utf8", + ); } /** @@ -223,12 +248,16 @@ export async function generateDocsForTag( const versionString = version ? `v${version.major}.${version.minor}.${version.patch}` : tag; - const dirName = isLatest ? "latest" : versionString; - const outputDir = path.join(config.baseOutputDir, dirName); + const dirName = + config.versionedOutput === false ? "" : isLatest ? "latest" : versionString; + const outputDir = dirName + ? path.join(config.baseOutputDir, dirName) + : config.baseOutputDir; + const displayDirName = dirName || "unversioned API reference"; console.log(`\n${"=".repeat(60)}`); console.log( - `Generating docs for ${dirName}${isLatest ? ` (${versionString})` : ""}`, + `Generating docs for ${displayDirName}${isLatest ? ` (${versionString})` : ""}`, ); console.log("=".repeat(60)); @@ -296,9 +325,12 @@ export async function generateDocsForTag( // Create TypeDoc configuration const typedocConfig = { + name: config.projectName, entryPoints: config.entryPoints, tsconfig: "./typedoc.tsconfig.json", - basePath: workingDir, + basePath: config.entryPointBasePath + ? path.join(workingDir, config.entryPointBasePath) + : workingDir, plugin: [ "typedoc-plugin-markdown", "typedoc-plugin-frontmatter", @@ -308,6 +340,7 @@ export async function generateDocsForTag( readme: "none", frontmatterGlobals: { packageVersion: versionString, + ...config.frontmatterGlobals, }, frontmatterCommentTags: ["author", "description"], githubPages: false, @@ -385,6 +418,8 @@ export async function generateDocsForTag( sanitizeComments: true, fileExtension: ".mdx", entryFileName: "index", + router: config.router, + flattenOutputFiles: config.flattenOutputFiles, // Type errors fail the build, deliberately. This was `true` to tolerate // "cross-package type references unresolved even though the source is // correct" — but that diagnosis was wrong, and tolerating it was not free: @@ -403,7 +438,7 @@ export async function generateDocsForTag( "Variable", "Enum", ], - publicPath: `/stack/reference/${config.referencePathSegment}/${dirName}/`, + publicPath: `${(config.publicPath ?? `/stack/reference/${config.referencePathSegment}`).replace(/\/$/, "")}${dirName ? `/${dirName}` : ""}/`, }; const configPath = path.join(workingDir, "typedoc.json"); @@ -426,7 +461,7 @@ export async function generateDocsForTag( console.log("Generating meta.json files..."); await generateMetaJson(outputDir); - console.log(`Docs for ${dirName} generated successfully!`); + console.log(`Docs for ${displayDirName} generated successfully!`); console.log(`Output directory: ${outputDir}`); return { dirName, versionString, isLatest }; @@ -475,27 +510,34 @@ export async function generateDocs(config: DocsConfig): Promise<void> { }); workingDir = tempDir; - console.log("Fetching all tags..."); - execSync("git fetch --tags", { cwd: workingDir, stdio: "inherit" }); - - allTags = execSync("git tag --sort=-v:refname", { - cwd: workingDir, - encoding: "utf8", - }) - .trim() - .split("\n"); - - if (allTags.length === 0 || allTags[0] === "") { - throw new Error(`No tags found in ${config.packageName} repository`); + if (config.sourceRef) { + allTags = [config.sourceRef]; + console.log(`Using source ref ${config.sourceRef}`); + } else { + console.log("Fetching all tags..."); + execSync("git fetch --tags", { cwd: workingDir, stdio: "inherit" }); + + allTags = execSync("git tag --sort=-v:refname", { + cwd: workingDir, + encoding: "utf8", + }) + .trim() + .split("\n"); + + if (allTags.length === 0 || allTags[0] === "") { + throw new Error(`No tags found in ${config.packageName} repository`); + } + + console.log(`Found ${allTags.length} tags`); } - - console.log(`Found ${allTags.length} tags`); } // Determine which versions to generate const versionsToGenerate = localPath ? [{ tag: "local-dev", isLatest: true }] - : getVersionsToGenerate(allTags, config.tagFilter); + : config.sourceRef + ? [{ tag: config.sourceRef, isLatest: true }] + : getVersionsToGenerate(allTags, config.tagFilter); if (!localPath && versionsToGenerate.length === 0) { throw new Error( @@ -511,12 +553,17 @@ export async function generateDocs(config: DocsConfig): Promise<void> { // Clean existing generated output (preserve hand-authored files) for (const { tag, isLatest } of versionsToGenerate) { const version = parseVersion(tag); - const dirName = isLatest - ? "latest" - : version - ? `v${version.major}.${version.minor}.${version.patch}` - : tag; - const versionDir = path.join(config.baseOutputDir, dirName); + const dirName = + config.versionedOutput === false + ? "" + : isLatest + ? "latest" + : version + ? `v${version.major}.${version.minor}.${version.patch}` + : tag; + const versionDir = dirName + ? path.join(config.baseOutputDir, dirName) + : config.baseOutputDir; await fs.rm(versionDir, { recursive: true, force: true }); } @@ -533,14 +580,22 @@ export async function generateDocs(config: DocsConfig): Promise<void> { generatedVersions.push(versionInfo); } - // Generate a meta.json for the package directory listing versions + // Generate package-level navigation. An unversioned reference already has + // a complete meta.json from generateMetaJson; preserve its page list. const packageMetaPath = path.join(config.baseOutputDir, "meta.json"); - const packageMeta = { - pages: generatedVersions.map(({ dirName }) => dirName), - }; + const packageMeta = + config.versionedOutput === false + ? { + ...(config.metaTitle ? { title: config.metaTitle } : {}), + ...JSON.parse(await fs.readFile(packageMetaPath, "utf8")), + } + : { + ...(config.metaTitle ? { title: config.metaTitle } : {}), + pages: generatedVersions.map(({ dirName }) => dirName), + }; await fs.writeFile( packageMetaPath, - JSON.stringify(packageMeta, null, 2), + `${JSON.stringify(packageMeta, null, 2)}\n`, "utf8", ); diff --git a/scripts/validate-content-api.ts b/scripts/validate-content-api.ts index b260ead..a421360 100644 --- a/scripts/validate-content-api.ts +++ b/scripts/validate-content-api.ts @@ -36,6 +36,7 @@ import path from "node:path"; const SKIP_PATHS = [ "content/stack/reference/stack/", // TypeDoc output "content/docs/reference/stack/", // TypeDoc output (post-repoint) + "content/docs/integrations/prisma/api-reference/", // TypeDoc output "content/stack/reference/eql/index.mdx", // generated EQL API reference "content/docs/reference/eql/functions.mdx", // generated "content/docs/reference/cli/", // generated from `stash manifest --json` diff --git a/scripts/validate-links.ts b/scripts/validate-links.ts index 5f1dc8b..6cc963b 100644 --- a/scripts/validate-links.ts +++ b/scripts/validate-links.ts @@ -358,7 +358,10 @@ allBroken.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line); * every link into those pages looks broken — say so rather than let a hundred * spurious errors imply the docs are falling apart. */ -const GENERATED = ["content/stack/reference/stack/latest"]; +const GENERATED = [ + "content/stack/reference/stack/latest", + "content/docs/integrations/prisma/api-reference/index.mdx", +]; const missing = GENERATED.filter((d) => !fs.existsSync(path.join(ROOT, d))); console.log( From 26919a9d77d37afd5f23c0fbaa3eaeeabe1eb424 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 20:44:21 +1000 Subject: [PATCH 134/151] docs: reuse credential options across v2 --- content/docs/get-started/choose-your-stack.mdx | 8 ++------ content/docs/get-started/quickstart.mdx | 2 +- content/docs/guides/deployment/index.mdx | 4 +++- .../guides/migration/encrypt-existing-data.mdx | 4 ++-- content/docs/integrations/drizzle.mdx | 6 ++++++ .../integrations/supabase/edge-functions.mdx | 17 ++++++----------- content/docs/integrations/supabase/index.mdx | 1 + .../docs/integrations/supabase/quickstart.mdx | 2 +- .../docs/integrations/supabase/supabase-js.mdx | 6 +++++- content/docs/reference/proxy/configuration.mdx | 2 +- .../docs/reference/workspace/configuration.mdx | 18 ++++-------------- 11 files changed, 32 insertions(+), 38 deletions(-) diff --git a/content/docs/get-started/choose-your-stack.mdx b/content/docs/get-started/choose-your-stack.mdx index c333a60..e2c4963 100644 --- a/content/docs/get-started/choose-your-stack.mdx +++ b/content/docs/get-started/choose-your-stack.mdx @@ -84,13 +84,9 @@ A database breach defeats encryption at rest, because the database decrypts on r ## From development to production -| Stage | Credentials | Setup | -|---|---|---| -| Local development | Device-based | `stash init` per developer. No environment variables. | -| CI and staging | Machine | An application client key, plus `CS_*` environment variables. | -| Production | Machine | Same, with the client key held in your secret manager. | +<CipherStashCredentials /> -Device auth gives each developer their own identity, so local decryptions are attributable. There's no interactive device in CI, hence the switch. See [going to production](/stack/deploy/going-to-production). +Device auth gives each developer their own identity, so local decryptions are attributable. There is no interactive device profile in CI, hence the switch to explicit credentials. See [Deployment](/guides/deployment) for build-time availability, environment separation, and rollout gates. ## Still not sure diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx index 38571ec..086fec5 100644 --- a/content/docs/get-started/quickstart.mdx +++ b/content/docs/get-started/quickstart.mdx @@ -182,4 +182,4 @@ You encrypted a field, stored it, queried it without decrypting, and read it bac - **Using an ORM or Supabase?** The [Drizzle](/stack/cipherstash/encryption/drizzle) and [Supabase](/integrations/supabase) integrations wrap your existing client so queries look normal. - **No app changes possible?** [CipherStash Proxy](/reference/proxy) sits in front of Postgres and does this transparently. - **Bind decryption to a user.** [Provable access control](/solutions/provable-access) ties a value to the identity that encrypted it. -- **Ready to deploy?** [Going to production](/stack/deploy/going-to-production) covers the switch from device auth to machine credentials. +- **Ready to deploy?** [Deployment](/guides/deployment) covers credential choices, environment promotion, and production rollout gates. diff --git a/content/docs/guides/deployment/index.mdx b/content/docs/guides/deployment/index.mdx index c2c6d21..e5ef18e 100644 --- a/content/docs/guides/deployment/index.mdx +++ b/content/docs/guides/deployment/index.mdx @@ -21,7 +21,9 @@ For the detailed dual-write, backfill, and cutover procedure for populated colum ## Credentials at build and runtime -An encryption client constructed at module load may authenticate when a build tool imports that module. In that case, `CS_WORKSPACE_CRN`, `CS_CLIENT_ID`, `CS_CLIENT_KEY`, and `CS_CLIENT_ACCESS_KEY` must be available during both the build and runtime phases. +<CipherStashCredentials /> + +An encryption client constructed at module load may authenticate when a build tool imports that module. In that case, the four `CS_*` variables shown above must be available during both the build and runtime phases. Do not let a local `stash auth login` session mask missing deployment credentials. Reproduce the production build in a clean environment that has only the secrets explicitly supplied by the deployment platform. diff --git a/content/docs/guides/migration/encrypt-existing-data.mdx b/content/docs/guides/migration/encrypt-existing-data.mdx index 7cc9975..69c6b0a 100644 --- a/content/docs/guides/migration/encrypt-existing-data.mdx +++ b/content/docs/guides/migration/encrypt-existing-data.mdx @@ -27,7 +27,7 @@ Do not start the backfill until dual-writes are running in every deployed writer - Install EQL and configure your encryption client. For Supabase, complete the [Quickstart](/integrations/supabase/quickstart) against a development table first. - Inventory every writer of the columns: services, jobs, Edge Functions, imports, seeds, RPC functions, webhooks, and administrative tools. -- Make the same CipherStash machine credentials available to the deployed application and the backfill job. +- Make the same CipherStash deployment credentials available to the application and backfill job; see [Credentials at build and runtime](/guides/deployment#credentials-at-build-and-runtime). - Decide which encrypted capability each column needs by following [EQL core concepts](/reference/eql/core-concepts). The examples migrate `patients.name` and `patients.date_of_birth`: @@ -127,7 +127,7 @@ npx stash encrypt backfill --table patients --column date_of_birth The command pages by primary key, encrypts rows in chunks, and records checkpoints. It is resumable and idempotent. For a non-interactive job, acknowledge the deployment gate with `--confirm-dual-writes-deployed`. <Callout type="warn"> -Run the backfill with the same CipherStash workspace and credentials as the deployed application. A local CipherStash profile may point to a different workspace, producing values the production application cannot decrypt. +Run the backfill with the same CipherStash workspace and keyset as the deployed application. A local developer profile may point to a different workspace, producing values the production application cannot decrypt. Use the deployed environment's explicit `CS_*` values for the job. </Callout> </Step> diff --git a/content/docs/integrations/drizzle.mdx b/content/docs/integrations/drizzle.mdx index 9d963c4..e099aca 100644 --- a/content/docs/integrations/drizzle.mdx +++ b/content/docs/integrations/drizzle.mdx @@ -31,6 +31,12 @@ npx stash eql install The v3 install (the default) runs directly against the database and cannot generate a Drizzle migration: `--drizzle` is rejected for a v3 install. EQL is therefore not part of your migration history, so a database rebuilt from migrations will not have it. Re-run the install after a rebuild. </Callout> +## Credentials + +<CipherStashCredentials /> + +The native Stack client used below discovers the four `CS_*` variables first, then falls back to the developer profile. Use separate credentials for each deployed environment. + ## Declare the table The column type *is* the capability. There are no flags to configure. `TextEq` answers equality and nothing else, `IntegerOrd` answers ranges and ordering, `TextMatch` answers free-text containment, and a bare `Text` or `Bigint` is storage-only. diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx index 485ff2c..84969c0 100644 --- a/content/docs/integrations/supabase/edge-functions.mdx +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -35,13 +35,15 @@ Map the `wasm-inline` entries in your function's `deno.json`: Provide the four `CS_*` values explicitly through an env file when serving locally and through Supabase secrets when deployed. </Callout> -Provide the `CS_*` credentials when you serve the function. Generate them with `stash env` rather than assembling the file by hand — it prints the deployment variables for the workspace you are authenticated against, so redirect it straight to the env file: +<CipherStashCredentials /> + +For an Edge Function, use the CLI or Dashboard option; the developer profile cannot cross into the Deno runtime. To create a dedicated local credential set and write it directly to the function's env file: ```bash example-id="supabase-edge-stash-env" -npx stash env > ./supabase/functions/.env.local +npx stash env --name edge-dev --write ./supabase/functions/.env.local ``` -`--write` writes to a file instead of stdout if you would rather not redirect. The command is marked experimental, so read what it emits before committing to it — and never commit the file itself. The [CLI reference](/reference/cli/env) has the full flag set. +Never commit this file. Each successful `stash env` run creates a new credential with a unique name, and the access key cannot be shown again. Then serve the function against that file: @@ -49,14 +51,7 @@ Then serve the function against that file: supabase functions serve --env-file ./supabase/functions/.env.local ``` -```sh title="supabase/functions/.env.local" -CS_WORKSPACE_CRN=crn:ap-southeast-2.aws:<workspace-id> -CS_CLIENT_ID=... -CS_CLIENT_KEY=... -CS_CLIENT_ACCESS_KEY=... -``` - -For deployed functions, set the same values as [Edge Function secrets](https://supabase.com/dashboard/project/_/settings/functions). +For deployed functions, add the same four values as [Edge Function secrets](https://supabase.com/dashboard/project/_/settings/functions). Use a separate credential set for production rather than copying the local values. ## Encrypt and decrypt in a function diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index f9efeec..c26fce0 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -37,6 +37,7 @@ With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ord | Look up the complete wrapper API | [`encryptedSupabase` reference](/reference/stack/supabase) | | Bind decryption to the signed-in user | [Supabase Auth](/integrations/supabase/auth) | | Encrypt inside Supabase Edge Functions | [Edge Functions](/integrations/supabase/edge-functions) | +| Choose local or deployment credentials | [Workspace credentials](/reference/workspace/configuration#credentials) | | Use an ORM against Supabase Postgres | [Drizzle](/integrations/drizzle) or [Prisma ORM 8](/integrations/prisma) | | Encrypt columns that already contain data | [Encrypt existing data](/guides/migration/encrypt-existing-data) | | Plan a production rollout or rollback | [Deployment guide](/guides/deployment) | diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index f7dd3d4..da64681 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -58,7 +58,7 @@ If the command generates a Supabase migration instead of applying EQL directly, npx stash eql status ``` -The native Stack client automatically uses the developer profile created by this login. You do not need `CS_*` machine credentials for local development; those are for deployed environments. +The native Stack client automatically uses the developer profile created by this login. You do not need the four deployment environment variables for local development. When you deploy, [choose a deployment credential source](/guides/deployment#credentials-at-build-and-runtime). <Callout type="idea"> **Using an agent?** An agent can drive the same setup. If no developer profile exists, it should start `npx stash auth login --json --region <region> --supabase`, show you the returned verification URL, and leave the command running until authorization completes. It can then run `npx stash init --supabase --region <region>`. diff --git a/content/docs/integrations/supabase/supabase-js.mdx b/content/docs/integrations/supabase/supabase-js.mdx index 246919d..e198479 100644 --- a/content/docs/integrations/supabase/supabase-js.mdx +++ b/content/docs/integrations/supabase/supabase-js.mdx @@ -46,7 +46,11 @@ SUPABASE_ANON_KEY=... DATABASE_URL=postgresql://... ``` -The encryption client also needs a local developer profile created by `stash auth login`, or `CS_*` machine credentials in a deployed environment. The [Quickstart setup](/integrations/supabase/quickstart#initialize-cipherstash) creates and uses the developer profile. +## Credentials + +<CipherStashCredentials /> + +The [Quickstart setup](/integrations/supabase/quickstart#initialize-cipherstash) creates and uses the developer profile. In CI or a deployed application, add the four `CS_*` variables to the same server environment as the Supabase settings above. ## Create the client diff --git a/content/docs/reference/proxy/configuration.mdx b/content/docs/reference/proxy/configuration.mdx index e98b04a..2eac736 100644 --- a/content/docs/reference/proxy/configuration.mdx +++ b/content/docs/reference/proxy/configuration.mdx @@ -48,7 +48,7 @@ docker compose up <Callout type="info"> Unlike the Stack SDK, Proxy **always requires credentials to be supplied explicitly**, because it runs as a separate process or container and cannot use the host's device-based authentication. -For local development, create a client key and access key in the [Dashboard](https://dashboard.cipherstash.com). For production, see [Going to production](/stack/deploy/going-to-production). +Create the four variables with `stash env` or the Dashboard, then supply them to the Proxy container. [Workspace credentials](/reference/workspace/configuration#credentials) shows both options and the complete environment block. </Callout> ## Setting up the database schema diff --git a/content/docs/reference/workspace/configuration.mdx b/content/docs/reference/workspace/configuration.mdx index 87d6622..74fa37d 100644 --- a/content/docs/reference/workspace/configuration.mdx +++ b/content/docs/reference/workspace/configuration.mdx @@ -7,19 +7,11 @@ components: [platform, encryption] A workspace is identified by its **CRN** and accessed with a **client key** and an **access key**. How those credentials reach your application differs between local development and production. -## Local development +## Credentials -For local development, credentials are handled automatically by device-based authentication. Run `stash init` to set up your device: +<CipherStashCredentials /> -```bash cta cta-type="quickstart" example-id="stash-init-workspace" -npx stash init -``` - -This creates a device-backed client key with access to the workspace's default keyset. No environment variables are needed. - -## Production credentials - -In production and CI/CD, a workspace is configured with explicit credentials: +## What the deployment variables mean | Credential | Description | |---|---| @@ -28,9 +20,7 @@ In production and CI/CD, a workspace is configured with explicit credentials: | Client key | Your half of the dual-party key split | | Access key | Authenticates API calls to CipherStash | -These are the same credentials the [Stack SDK](/reference/stack) and [Proxy](/reference/proxy/configuration) consume. For the full set of environment variables and programmatic options, see the [Stack SDK configuration reference](/reference/stack). - -See [going to production](/stack/deploy/going-to-production) for a step-by-step guide to generating them. +These are the same credentials the [Stack SDK](/reference/stack) and [Proxy](/reference/proxy/configuration) consume. For build-time availability, environment separation, and production rollout gates, see [Deployment](/guides/deployment). ## Keysets From 0f957a3662b1f2be25fd5ea3330df9fcc4108de9 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 20:51:19 +1000 Subject: [PATCH 135/151] docs: refine credential option hierarchy --- src/components/cipherstash-credentials.tsx | 69 ++++++++++++---------- 1 file changed, 37 insertions(+), 32 deletions(-) diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx index 5fa5c4b..fe7bb48 100644 --- a/src/components/cipherstash-credentials.tsx +++ b/src/components/cipherstash-credentials.tsx @@ -12,31 +12,31 @@ const options = [ title: "Developer profile", useFor: "Local development", icon: Laptop, - content: ( + action: ( <> - Run <code>npx stash auth login</code>. The native Stack client finds the - resulting developer profile automatically, so you do not need - environment variables on your development machine. + Run <code>npx stash auth login</code>. </> ), + description: + "The native Stack client uses the developer profile automatically.", }, { title: "stash env", - useFor: "CI and deployed environments", + useFor: "CI and Deployment", icon: Terminal, - content: ( + action: ( <> - Run <code>npx stash env --name <app-env></code> while logged in. - It creates a client and prints the four environment variables below. The - access key is shown only once. + Run <code>npx stash env --name <app-env></code>. </> ), + description: + "Creates a client and prints the four variables below. The access key is shown once.", }, { title: "Dashboard", - useFor: "CI and deployed environments", + useFor: "CI and Deployment", icon: LayoutDashboard, - content: ( + action: ( <> Open your{" "} <a @@ -51,10 +51,10 @@ const options = [ aria-label="Opens in a new tab" /> </a>{" "} - and create deployment credentials there. Add the resulting values to - your platform's secret store. + and create deployment credentials. </> ), + description: "Save the values in your platform’s secret store.", }, ] as const; @@ -77,26 +77,31 @@ export function CipherStashCredentials() { </div> <ol className="grid divide-y md:grid-cols-3 md:divide-x md:divide-y-0"> - {options.map(({ title, useFor, icon: Icon, content }, index) => ( - <li key={title} className="p-5"> - <div className="flex items-start gap-3"> - <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> - <Icon className="size-4" aria-hidden="true" /> - </span> - <div> - <p className="font-medium text-fd-foreground"> - {index + 1}. {title} - </p> - <p className="mt-0.5 text-xs font-medium uppercase tracking-wide text-fd-muted-foreground"> - {useFor} - </p> + {options.map( + ({ title, useFor, icon: Icon, action, description }, index) => ( + <li key={title} className="p-5"> + <div className="flex items-start gap-3"> + <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> + <Icon className="size-4" aria-hidden="true" /> + </span> + <div> + <p className="font-medium text-fd-foreground"> + {index + 1}. {title} + </p> + <p className="mt-0.5 text-xs font-medium uppercase tracking-wide text-fd-muted-foreground"> + {useFor} + </p> + </div> </div> - </div> - <p className="mt-3 text-sm leading-relaxed text-fd-muted-foreground [&_code]:text-fd-foreground"> - {content} - </p> - </li> - ))} + <p className="mt-3 text-sm leading-relaxed text-fd-foreground"> + {action} + </p> + <p className="mt-1 text-xs leading-relaxed text-fd-muted-foreground"> + {description} + </p> + </li> + ), + )} </ol> <div className="border-t px-5 py-4"> From 2aafd644f01302d479870813dccb68f8213a4b4a Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 20:53:20 +1000 Subject: [PATCH 136/151] fix(docs): flatten TypeDoc code spans Fumadocs can parse braces on wrapped continuation lines as MDX expressions. --- .github/workflows/docs.yml | 3 ++ scripts/lib/docs-generator.ts | 90 +++++++++++++++++++++++++++++++++++ scripts/validate-links.ts | 4 +- 3 files changed, 95 insertions(+), 2 deletions(-) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index f30a96f..220f09c 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -49,5 +49,8 @@ jobs: - name: Generate the SDK reference run: bun run generate-docs + - name: Generate the Prisma reference + run: bun run generate-docs:prisma + - name: Validate internal links and anchors run: bun run validate-links diff --git a/scripts/lib/docs-generator.ts b/scripts/lib/docs-generator.ts index 5309ff9..ef29cdc 100644 --- a/scripts/lib/docs-generator.ts +++ b/scripts/lib/docs-generator.ts @@ -51,6 +51,95 @@ export interface VersionInfo { patch: number; } +/** + * Keep inline code spans on one physical line. + * + * TSDoc comments are commonly wrapped at a fixed width, including in the + * middle of a backtick span. Markdown permits that, but MDX can reinterpret a + * `{ ... }` on the continuation line as an expression inside its surrounding + * list or blockquote container. Fenced code blocks are deliberately excluded. + */ +function collapseMultilineInlineCode(content: string): string { + // TypeDoc's frontmatter plugin can truncate a summary midway through an + // inline-code span. Never pair that unmatched backtick with one in the MDX + // body: frontmatter is YAML and does not need Markdown normalization. + const frontmatter = content.match(/^---\n[\s\S]*?\n---\n?/)?.[0] ?? ""; + const lines = content.slice(frontmatter.length).split("\n"); + const output: string[] = []; + let prose: string[] = []; + let fence: { character: string; length: number } | undefined; + + const collapseProse = () => { + if (prose.length === 0) return; + const block = prose.join("\n"); + let result = ""; + let cursor = 0; + + while (cursor < block.length) { + const start = block.indexOf("`", cursor); + if (start === -1) { + result += block.slice(cursor); + break; + } + + let openingLength = 1; + while (block[start + openingLength] === "`") openingLength += 1; + result += block.slice(cursor, start + openingLength); + cursor = start + openingLength; + + let closing = cursor; + while (closing < block.length) { + closing = block.indexOf("`", closing); + if (closing === -1) break; + let closingLength = 1; + while (block[closing + closingLength] === "`") closingLength += 1; + if (closingLength === openingLength) break; + closing += closingLength; + } + + if (closing === -1) { + result += block.slice(cursor); + cursor = block.length; + break; + } + + const body = block.slice(cursor, closing); + result += body.includes("\n") + ? body.replace(/[ \t]*\n[ \t]*/g, " ") + : body; + result += "`".repeat(openingLength); + cursor = closing + openingLength; + } + + output.push(...result.split("\n")); + prose = []; + }; + + for (const line of lines) { + const match = line.match(/^ {0,3}(`{3,}|~{3,})(.*)$/); + const marker = match?.[1]; + if (!fence && marker) { + collapseProse(); + output.push(line); + fence = { character: marker[0] ?? "", length: marker.length }; + } else if (fence) { + output.push(line); + if ( + marker?.[0] === fence.character && + marker.length >= fence.length && + match?.[2]?.trim() === "" + ) { + fence = undefined; + } + } else { + prose.push(line); + } + } + collapseProse(); + + return `${frontmatter}${output.join("\n")}`; +} + /** * Cleans up markdown links in generated .mdx files: * 1. Strips .mdx extensions from link targets @@ -75,6 +164,7 @@ export async function stripMdxExtensions(dir: string): Promise<void> { await stripMdxExtensions(fullPath); } else if (entry.isFile() && entry.name.endsWith(".mdx")) { let content = await fs.readFile(fullPath, "utf8"); + content = collapseMultilineInlineCode(content); content = content.replace(/\]\(([^)#]+)\.mdx([#)])/g, "]($1$2"); content = content.replace( /\]\(\/docs\/reference\//g, diff --git a/scripts/validate-links.ts b/scripts/validate-links.ts index 6cc963b..c33b356 100644 --- a/scripts/validate-links.ts +++ b/scripts/validate-links.ts @@ -372,8 +372,8 @@ console.log( if (missing.length > 0) { console.log( `\n! Generated API pages are absent (${missing.join(", ")}), so links into\n` + - " them will be reported as missing. Run `bun run generate-docs` first —\n" + - " `prebuild` does, which is why CI does not hit this.", + " them will be reported as missing. Run the matching `generate-docs:*`\n" + + " task first; `prebuild` and the links workflow do this automatically.", ); } From 81ba1bead01a7d3bc85ad7aaf692c9e158c9b357 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 21:01:03 +1000 Subject: [PATCH 137/151] docs: add copyable credential commands --- src/components/cipherstash-credentials.tsx | 59 ++++++++++++++++------ 1 file changed, 44 insertions(+), 15 deletions(-) diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx index fe7bb48..5517efe 100644 --- a/src/components/cipherstash-credentials.tsx +++ b/src/components/cipherstash-credentials.tsx @@ -1,5 +1,9 @@ +"use client"; + +import type { CodeBlockProps } from "fumadocs-ui/components/codeblock"; import { DynamicCodeBlock } from "fumadocs-ui/components/dynamic-codeblock"; import { ExternalLink, Laptop, LayoutDashboard, Terminal } from "lucide-react"; +import { TrackedCodeBlock } from "@/components/code-block"; import { cipherstashDark, cipherstashLight } from "@/lib/shiki-themes"; const ENVIRONMENT_VARIABLES = `CS_WORKSPACE_CRN=crn:<region>.<provider>:<workspace-id> @@ -12,11 +16,8 @@ const options = [ title: "Developer profile", useFor: "Local development", icon: Laptop, - action: ( - <> - Run <code>npx stash auth login</code>. - </> - ), + command: "npx stash auth login", + action: null, description: "The native Stack client uses the developer profile automatically.", }, @@ -24,11 +25,8 @@ const options = [ title: "stash env", useFor: "CI and Deployment", icon: Terminal, - action: ( - <> - Run <code>npx stash env --name <app-env></code>. - </> - ), + command: "npx stash env --name <app-env>", + action: null, description: "Creates a client and prints the four variables below. The access key is shown once.", }, @@ -36,6 +34,7 @@ const options = [ title: "Dashboard", useFor: "CI and Deployment", icon: LayoutDashboard, + command: null, action: ( <> Open your{" "} @@ -58,6 +57,16 @@ const options = [ }, ] as const; +function TrackedBashCodeBlock(props: CodeBlockProps) { + return ( + <TrackedCodeBlock + {...props} + data-language="bash" + className={`my-0 ${props.className ?? ""}`} + /> + ); +} + /** * The canonical credential-source chooser for integration and deployment * guides. Keep the discovery order and environment-variable names aligned @@ -78,7 +87,10 @@ export function CipherStashCredentials() { <ol className="grid divide-y md:grid-cols-3 md:divide-x md:divide-y-0"> {options.map( - ({ title, useFor, icon: Icon, action, description }, index) => ( + ( + { title, useFor, icon: Icon, command, action, description }, + index, + ) => ( <li key={title} className="p-5"> <div className="flex items-start gap-3"> <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> @@ -93,10 +105,27 @@ export function CipherStashCredentials() { </p> </div> </div> - <p className="mt-3 text-sm leading-relaxed text-fd-foreground"> - {action} - </p> - <p className="mt-1 text-xs leading-relaxed text-fd-muted-foreground"> + {command ? ( + <div className="mt-3"> + <p className="mb-1 text-sm text-fd-foreground">Run:</p> + <DynamicCodeBlock + lang="bash" + code={command} + options={{ + themes: { + light: cipherstashLight, + dark: cipherstashDark, + }, + components: { pre: TrackedBashCodeBlock }, + }} + /> + </div> + ) : ( + <p className="mt-3 text-sm leading-relaxed text-fd-foreground"> + {action} + </p> + )} + <p className="mt-2 text-xs leading-relaxed text-fd-muted-foreground"> {description} </p> </li> From f3c033c128e69c36fa2036e7f8111ccb6b0878a6 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 21:07:47 +1000 Subject: [PATCH 138/151] docs: present credential options as tabs --- src/components/cipherstash-credentials.tsx | 110 ++++++++++++--------- 1 file changed, 65 insertions(+), 45 deletions(-) diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx index 5517efe..eb9996e 100644 --- a/src/components/cipherstash-credentials.tsx +++ b/src/components/cipherstash-credentials.tsx @@ -2,6 +2,12 @@ import type { CodeBlockProps } from "fumadocs-ui/components/codeblock"; import { DynamicCodeBlock } from "fumadocs-ui/components/dynamic-codeblock"; +import { + Tabs, + TabsContent, + TabsList, + TabsTrigger, +} from "fumadocs-ui/components/tabs"; import { ExternalLink, Laptop, LayoutDashboard, Terminal } from "lucide-react"; import { TrackedCodeBlock } from "@/components/code-block"; import { cipherstashDark, cipherstashLight } from "@/lib/shiki-themes"; @@ -13,6 +19,7 @@ CS_CLIENT_ACCESS_KEY=CSAK...`; const options = [ { + value: "developer-profile", title: "Developer profile", useFor: "Local development", icon: Laptop, @@ -22,6 +29,7 @@ const options = [ "The native Stack client uses the developer profile automatically.", }, { + value: "stash-env", title: "stash env", useFor: "CI and Deployment", icon: Terminal, @@ -31,6 +39,7 @@ const options = [ "Creates a client and prints the four variables below. The access key is shown once.", }, { + value: "dashboard", title: "Dashboard", useFor: "CI and Deployment", icon: LayoutDashboard, @@ -85,53 +94,64 @@ export function CipherStashCredentials() { </p> </div> - <ol className="grid divide-y md:grid-cols-3 md:divide-x md:divide-y-0"> - {options.map( - ( - { title, useFor, icon: Icon, command, action, description }, - index, - ) => ( - <li key={title} className="p-5"> - <div className="flex items-start gap-3"> - <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> - <Icon className="size-4" aria-hidden="true" /> + <Tabs + defaultValue={options[0].value} + className="my-0 gap-0 overflow-visible rounded-none border-0 bg-transparent" + > + <TabsList className="grid grid-cols-3 gap-0 overflow-x-auto border-b px-0"> + {options.map(({ value, title, useFor, icon: Icon }, index) => ( + <TabsTrigger + key={value} + value={value} + className="group w-full min-w-40 justify-start border-b-2 px-5 py-4 text-left data-[state=active]:bg-fd-primary/5 data-[state=active]:text-fd-foreground" + > + <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> + <Icon className="size-4" aria-hidden="true" /> + </span> + <span className="min-w-0"> + <span className="block font-medium"> + {index + 1}. {title} </span> - <div> - <p className="font-medium text-fd-foreground"> - {index + 1}. {title} - </p> - <p className="mt-0.5 text-xs font-medium uppercase tracking-wide text-fd-muted-foreground"> - {useFor} - </p> - </div> - </div> - {command ? ( - <div className="mt-3"> - <p className="mb-1 text-sm text-fd-foreground">Run:</p> - <DynamicCodeBlock - lang="bash" - code={command} - options={{ - themes: { - light: cipherstashLight, - dark: cipherstashDark, - }, - components: { pre: TrackedBashCodeBlock }, - }} - /> - </div> - ) : ( - <p className="mt-3 text-sm leading-relaxed text-fd-foreground"> - {action} - </p> - )} - <p className="mt-2 text-xs leading-relaxed text-fd-muted-foreground"> - {description} + <span className="mt-0.5 block text-xs font-medium uppercase tracking-wide text-fd-muted-foreground"> + {useFor} + </span> + </span> + </TabsTrigger> + ))} + </TabsList> + + {options.map(({ value, command, action, description }) => ( + <TabsContent + key={value} + value={value} + className="rounded-none bg-transparent p-5" + > + {command ? ( + <> + <p className="mb-2 text-sm text-fd-foreground">Run:</p> + <DynamicCodeBlock + lang="bash" + code={command} + options={{ + themes: { + light: cipherstashLight, + dark: cipherstashDark, + }, + components: { pre: TrackedBashCodeBlock }, + }} + /> + </> + ) : ( + <p className="text-sm leading-relaxed text-fd-foreground"> + {action} </p> - </li> - ), - )} - </ol> + )} + <p className="mt-3 text-xs leading-relaxed text-fd-muted-foreground"> + {description} + </p> + </TabsContent> + ))} + </Tabs> <div className="border-t px-5 py-4"> <p className="text-sm font-medium text-fd-foreground"> From 40325086b18cc822fc1d8a91990eebcdd40212e1 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 21:10:20 +1000 Subject: [PATCH 139/151] docs: scope deployment variables to deployment tabs --- src/components/cipherstash-credentials.tsx | 45 +++++++++++++--------- 1 file changed, 26 insertions(+), 19 deletions(-) diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx index eb9996e..c59c3b4 100644 --- a/src/components/cipherstash-credentials.tsx +++ b/src/components/cipherstash-credentials.tsx @@ -76,6 +76,29 @@ function TrackedBashCodeBlock(props: CodeBlockProps) { ); } +function DeploymentEnvironmentVariables() { + return ( + <div className="mt-5 border-t pt-4"> + <p className="text-sm font-medium text-fd-foreground"> + Deployment environment variables + </p> + <p className="mt-1 text-sm text-fd-muted-foreground"> + Both deployment methods produce the same values. Treat{" "} + <code>CS_CLIENT_KEY</code> and <code>CS_CLIENT_ACCESS_KEY</code> as + secrets. + </p> + <DynamicCodeBlock + lang="dotenv" + code={ENVIRONMENT_VARIABLES} + codeblock={{ title: ".env", className: "mb-0" }} + options={{ + themes: { light: cipherstashLight, dark: cipherstashDark }, + }} + /> + </div> + ); +} + /** * The canonical credential-source chooser for integration and deployment * guides. Keep the discovery order and environment-variable names aligned @@ -149,28 +172,12 @@ export function CipherStashCredentials() { <p className="mt-3 text-xs leading-relaxed text-fd-muted-foreground"> {description} </p> + {value !== "developer-profile" && ( + <DeploymentEnvironmentVariables /> + )} </TabsContent> ))} </Tabs> - - <div className="border-t px-5 py-4"> - <p className="text-sm font-medium text-fd-foreground"> - Deployment environment variables - </p> - <p className="mt-1 text-sm text-fd-muted-foreground"> - Both deployment methods produce the same values. Treat{" "} - <code>CS_CLIENT_KEY</code> and <code>CS_CLIENT_ACCESS_KEY</code> as - secrets. - </p> - <DynamicCodeBlock - lang="dotenv" - code={ENVIRONMENT_VARIABLES} - codeblock={{ title: ".env", className: "mb-0" }} - options={{ - themes: { light: cipherstashLight, dark: cipherstashDark }, - }} - /> - </div> </div> ); } From acf865f33343a1b227a0a6b505b9cfa90a48cff8 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 21:13:09 +1000 Subject: [PATCH 140/151] docs(prisma): move API reference nav last --- content/docs/integrations/prisma/meta.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/content/docs/integrations/prisma/meta.json b/content/docs/integrations/prisma/meta.json index 6a9ebfb..3f6502e 100644 --- a/content/docs/integrations/prisma/meta.json +++ b/content/docs/integrations/prisma/meta.json @@ -5,9 +5,9 @@ "index", "quickstart", "schema-and-queries", - "api-reference", "deployment", "prisma-postgres", - "prisma-compute" + "prisma-compute", + "api-reference" ] } From 14f328eb48ba28cd5ddcd3f13b0f8599bbbcda5a Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 21:15:57 +1000 Subject: [PATCH 141/151] docs: polish credential variable styling --- src/components/cipherstash-credentials.tsx | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx index c59c3b4..655eaa9 100644 --- a/src/components/cipherstash-credentials.tsx +++ b/src/components/cipherstash-credentials.tsx @@ -82,10 +82,11 @@ function DeploymentEnvironmentVariables() { <p className="text-sm font-medium text-fd-foreground"> Deployment environment variables </p> - <p className="mt-1 text-sm text-fd-muted-foreground"> - Both deployment methods produce the same values. Treat{" "} - <code>CS_CLIENT_KEY</code> and <code>CS_CLIENT_ACCESS_KEY</code> as - secrets. + <p className="my-2 text-xs text-fd-muted-foreground"> + Both deployment methods produce the same values. + <br /> + Treat <code>CS_CLIENT_KEY</code> and <code>CS_CLIENT_ACCESS_KEY</code>{" "} + as secrets. </p> <DynamicCodeBlock lang="dotenv" From 63b0dd6b0a0e2546ab7403fcf7cfa4657616a246 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 21:18:18 +1000 Subject: [PATCH 142/151] fix: use credential dropdown on narrow screens --- src/components/cipherstash-credentials.tsx | 55 +++++++++++++++++++--- 1 file changed, 49 insertions(+), 6 deletions(-) diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx index 655eaa9..af5ad63 100644 --- a/src/components/cipherstash-credentials.tsx +++ b/src/components/cipherstash-credentials.tsx @@ -7,8 +7,15 @@ import { TabsContent, TabsList, TabsTrigger, -} from "fumadocs-ui/components/tabs"; -import { ExternalLink, Laptop, LayoutDashboard, Terminal } from "lucide-react"; +} from "fumadocs-ui/components/ui/tabs"; +import { + ChevronDown, + ExternalLink, + Laptop, + LayoutDashboard, + Terminal, +} from "lucide-react"; +import { useId, useState } from "react"; import { TrackedCodeBlock } from "@/components/code-block"; import { cipherstashDark, cipherstashLight } from "@/lib/shiki-themes"; @@ -66,6 +73,8 @@ const options = [ }, ] as const; +type CredentialOptionValue = (typeof options)[number]["value"]; + function TrackedBashCodeBlock(props: CodeBlockProps) { return ( <TrackedCodeBlock @@ -106,6 +115,11 @@ function DeploymentEnvironmentVariables() { * with the Stack authentication skill. */ export function CipherStashCredentials() { + const selectId = useId(); + const [selectedOption, setSelectedOption] = useState<CredentialOptionValue>( + options[0].value, + ); + return ( <div className="not-prose my-6 overflow-hidden rounded-xl border border-t-2 border-t-fd-primary bg-fd-card"> <div className="border-b px-5 py-4"> @@ -119,15 +133,44 @@ export function CipherStashCredentials() { </div> <Tabs - defaultValue={options[0].value} + value={selectedOption} + onValueChange={(value) => + setSelectedOption(value as CredentialOptionValue) + } className="my-0 gap-0 overflow-visible rounded-none border-0 bg-transparent" > - <TabsList className="grid grid-cols-3 gap-0 overflow-x-auto border-b px-0"> + <div className="border-b p-4 md:hidden"> + <label htmlFor={selectId} className="sr-only"> + Credential source + </label> + <div className="relative"> + <select + id={selectId} + value={selectedOption} + onChange={(event) => + setSelectedOption(event.target.value as CredentialOptionValue) + } + className="w-full appearance-none rounded-lg border bg-fd-background px-3 py-2.5 pe-10 text-sm font-medium text-fd-foreground shadow-sm outline-none transition-colors focus:border-fd-primary focus:ring-2 focus:ring-fd-primary/20" + > + {options.map(({ value, title, useFor }) => ( + <option key={value} value={value}> + {title} — {useFor} + </option> + ))} + </select> + <ChevronDown + className="pointer-events-none absolute end-3 top-1/2 size-4 -translate-y-1/2 text-fd-muted-foreground" + aria-hidden="true" + /> + </div> + </div> + + <TabsList className="hidden grid-cols-3 border-b md:grid"> {options.map(({ value, title, useFor, icon: Icon }, index) => ( <TabsTrigger key={value} value={value} - className="group w-full min-w-40 justify-start border-b-2 px-5 py-4 text-left data-[state=active]:bg-fd-primary/5 data-[state=active]:text-fd-foreground" + className="group inline-flex w-full items-center justify-start gap-2 border-b-2 border-transparent px-5 py-4 text-left text-sm text-fd-muted-foreground transition-colors hover:text-fd-foreground data-[state=active]:border-fd-primary data-[state=active]:bg-fd-primary/5 data-[state=active]:text-fd-foreground" > <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> <Icon className="size-4" aria-hidden="true" /> @@ -148,7 +191,7 @@ export function CipherStashCredentials() { <TabsContent key={value} value={value} - className="rounded-none bg-transparent p-5" + className="rounded-none bg-transparent p-5 outline-none" > {command ? ( <> From e9753c5835e91fb37e50631ee2eb6048fc80524f Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 21:28:24 +1000 Subject: [PATCH 143/151] fix: anchor mobile credential menu --- src/components/cipherstash-credentials.tsx | 89 ++++++++++++++++------ 1 file changed, 66 insertions(+), 23 deletions(-) diff --git a/src/components/cipherstash-credentials.tsx b/src/components/cipherstash-credentials.tsx index af5ad63..2665cb9 100644 --- a/src/components/cipherstash-credentials.tsx +++ b/src/components/cipherstash-credentials.tsx @@ -2,6 +2,12 @@ import type { CodeBlockProps } from "fumadocs-ui/components/codeblock"; import { DynamicCodeBlock } from "fumadocs-ui/components/dynamic-codeblock"; +import { + Popover, + PopoverClose, + PopoverContent, + PopoverTrigger, +} from "fumadocs-ui/components/ui/popover"; import { Tabs, TabsContent, @@ -9,13 +15,14 @@ import { TabsTrigger, } from "fumadocs-ui/components/ui/tabs"; import { + Check, ChevronDown, ExternalLink, Laptop, LayoutDashboard, Terminal, } from "lucide-react"; -import { useId, useState } from "react"; +import { useState } from "react"; import { TrackedCodeBlock } from "@/components/code-block"; import { cipherstashDark, cipherstashLight } from "@/lib/shiki-themes"; @@ -115,10 +122,12 @@ function DeploymentEnvironmentVariables() { * with the Stack authentication skill. */ export function CipherStashCredentials() { - const selectId = useId(); const [selectedOption, setSelectedOption] = useState<CredentialOptionValue>( options[0].value, ); + const activeOption = + options.find(({ value }) => value === selectedOption) ?? options[0]; + const ActiveIcon = activeOption.icon; return ( <div className="not-prose my-6 overflow-hidden rounded-xl border border-t-2 border-t-fd-primary bg-fd-card"> @@ -140,29 +149,63 @@ export function CipherStashCredentials() { className="my-0 gap-0 overflow-visible rounded-none border-0 bg-transparent" > <div className="border-b p-4 md:hidden"> - <label htmlFor={selectId} className="sr-only"> - Credential source - </label> - <div className="relative"> - <select - id={selectId} - value={selectedOption} - onChange={(event) => - setSelectedOption(event.target.value as CredentialOptionValue) - } - className="w-full appearance-none rounded-lg border bg-fd-background px-3 py-2.5 pe-10 text-sm font-medium text-fd-foreground shadow-sm outline-none transition-colors focus:border-fd-primary focus:ring-2 focus:ring-fd-primary/20" + <Popover> + <PopoverTrigger asChild> + <button + type="button" + className="flex w-full items-center gap-3 rounded-lg border bg-fd-background px-3 py-2.5 text-left shadow-sm outline-none transition-colors hover:bg-fd-accent focus-visible:border-fd-primary focus-visible:ring-2 focus-visible:ring-fd-primary/20" + > + <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> + <ActiveIcon className="size-4" aria-hidden="true" /> + </span> + <span className="min-w-0 flex-1"> + <span className="block text-sm font-medium text-fd-foreground"> + {activeOption.title} + </span> + <span className="block text-xs font-medium uppercase tracking-wide text-fd-muted-foreground"> + {activeOption.useFor} + </span> + </span> + <ChevronDown + className="size-4 shrink-0 text-fd-muted-foreground" + aria-hidden="true" + /> + </button> + </PopoverTrigger> + <PopoverContent + align="start" + collisionPadding={16} + className="w-[var(--radix-popover-trigger-width)] p-1" > - {options.map(({ value, title, useFor }) => ( - <option key={value} value={value}> - {title} — {useFor} - </option> + {options.map(({ value, title, useFor, icon: Icon }) => ( + <PopoverClose key={value} asChild> + <button + type="button" + onClick={() => setSelectedOption(value)} + className="flex w-full items-center gap-3 rounded-lg px-3 py-2.5 text-left outline-none transition-colors hover:bg-fd-accent focus-visible:bg-fd-accent" + > + <span className="flex size-8 shrink-0 items-center justify-center rounded-full bg-fd-primary/10 text-fd-primary"> + <Icon className="size-4" aria-hidden="true" /> + </span> + <span className="min-w-0 flex-1"> + <span className="block text-sm font-medium text-fd-foreground"> + {title} + </span> + <span className="block text-xs font-medium uppercase tracking-wide text-fd-muted-foreground"> + {useFor} + </span> + </span> + {value === selectedOption && ( + <Check + className="size-4 shrink-0 text-fd-primary" + aria-hidden="true" + /> + )} + </button> + </PopoverClose> ))} - </select> - <ChevronDown - className="pointer-events-none absolute end-3 top-1/2 size-4 -translate-y-1/2 text-fd-muted-foreground" - aria-hidden="true" - /> - </div> + </PopoverContent> + </Popover> </div> <TabsList className="hidden grid-cols-3 border-b md:grid"> From 6e39aa520e28b09375f9f5efcf1274e81b3abf7c Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 22:04:43 +1000 Subject: [PATCH 144/151] docs: reorganize SDK references Keep wrapper APIs with their integration guides and make section roots expand-only. --- .github/workflows/docs.yml | 9 +- .gitignore | 4 + IA.md | 10 +- content/docs/concepts/compare/index.mdx | 1 + content/docs/concepts/compare/meta.json | 2 +- content/docs/concepts/index.mdx | 1 + content/docs/concepts/meta.json | 2 +- content/docs/guides/deployment/index.mdx | 1 + content/docs/guides/deployment/meta.json | 2 +- content/docs/guides/development/index.mdx | 1 + content/docs/guides/development/meta.json | 2 +- content/docs/guides/index.mdx | 1 + content/docs/guides/meta.json | 2 +- content/docs/guides/migration/index.mdx | 1 + content/docs/guides/migration/meta.json | 2 +- content/docs/guides/troubleshooting/index.mdx | 1 + content/docs/guides/troubleshooting/meta.json | 2 +- content/docs/integrations/index.mdx | 1 + content/docs/integrations/meta.json | 2 +- .../supabase/api-reference/meta.json | 4 + content/docs/integrations/supabase/auth.mdx | 6 +- content/docs/integrations/supabase/index.mdx | 6 +- content/docs/integrations/supabase/meta.json | 9 +- .../docs/integrations/supabase/quickstart.mdx | 2 +- .../integrations/supabase/supabase-js.mdx | 2 +- content/docs/reference/auth/index.mdx | 1 + content/docs/reference/auth/meta.json | 2 +- content/docs/reference/cli/index.mdx | 1 + content/docs/reference/cli/meta.json | 1 + content/docs/reference/eql/index.mdx | 1 + content/docs/reference/eql/meta.json | 1 + content/docs/reference/eql/v2/index.mdx | 1 + content/docs/reference/eql/v2/meta.json | 2 +- content/docs/reference/index.mdx | 1 + content/docs/reference/proxy/index.mdx | 1 + .../reference/stack/api-reference/meta.json | 17 + content/docs/reference/stack/index.mdx | 33 +- content/docs/reference/stack/meta.json | 2 +- content/docs/reference/stack/supabase.mdx | 291 ------------------ content/docs/reference/stack/usage.mdx | 87 ++++++ content/docs/reference/workspace/index.mdx | 1 + content/docs/security/compliance/index.mdx | 1 + content/docs/security/compliance/meta.json | 2 +- content/docs/solutions/index.mdx | 1 + .../encryption/bulk-operations.mdx | 2 +- .../stack/cipherstash/encryption/models.mdx | 2 +- content/stack/cipherstash/kms/oidc.mdx | 4 +- content/stack/reference/encryption-sdk.mdx | 21 +- content/stack/reference/index.mdx | 2 +- next.config.mjs | 4 +- package.json | 3 +- scripts/generate-cli-docs.ts | 3 +- scripts/generate-docs.ts | 49 +-- scripts/generate-supabase-docs.ts | 37 +++ scripts/lib/docs-generator.ts | 35 ++- scripts/plugins/fumadocs-frontmatter.mjs | 1 + scripts/validate-content-api.ts | 5 +- scripts/validate-links.ts | 3 +- v2-redirects.mjs | 4 +- 59 files changed, 317 insertions(+), 381 deletions(-) create mode 100644 content/docs/integrations/supabase/api-reference/meta.json create mode 100644 content/docs/reference/stack/api-reference/meta.json delete mode 100644 content/docs/reference/stack/supabase.mdx create mode 100644 content/docs/reference/stack/usage.mdx create mode 100644 scripts/generate-supabase-docs.ts diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 220f09c..08b68f9 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -42,13 +42,16 @@ jobs: - run: bun install --frozen-lockfile - # The TypeDoc reference under content/stack/reference/stack/latest/ is - # gitignored and built from a clone of cipherstash/stack. Roughly 18 - # links point into it, so without this step they all report as missing. + # The TypeDoc references under the V2 integration/reference sections are + # gitignored and built from a clone of cipherstash/stack. Links point + # into them, so without this step those targets report as missing. # `prebuild` generates before validating for the same reason. - name: Generate the SDK reference run: bun run generate-docs + - name: Generate the Supabase reference + run: bun run generate-docs:supabase + - name: Generate the Prisma reference run: bun run generate-docs:prisma diff --git a/.gitignore b/.gitignore index 7e2c4ba..641a8b8 100644 --- a/.gitignore +++ b/.gitignore @@ -39,6 +39,10 @@ content/stack/reference/drizzle/latest/ content/stack/reference/drizzle/v*/ content/docs/integrations/prisma/api-reference/* !content/docs/integrations/prisma/api-reference/meta.json +content/docs/integrations/supabase/api-reference/* +!content/docs/integrations/supabase/api-reference/meta.json +content/docs/reference/stack/api-reference/* +!content/docs/reference/stack/api-reference/meta.json .tmp-* .env.local diff --git a/IA.md b/IA.md index 1b7436f..38a9f69 100644 --- a/IA.md +++ b/IA.md @@ -415,13 +415,9 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). rewritten for v3 upstream (v3 branch folded it into database-indexes.md; verify nothing from the v2 guide on main was lost) — see CIP-3351 - **Stack SDK:** -- [ ] `/reference/stack` — client + configuration (port encryption/* pages) -- [ ] `/reference/stack/schema` -- [ ] `/reference/stack/encrypt-decrypt` (+ bulk, models) -- [x] `/reference/stack/supabase` — THE canonical `encryptedSupabase` page, ONE signature (CIP-3328) -- [ ] `/reference/stack/drizzle-operators` -- [ ] `/reference/stack/errors` — port error-handling; miette catalog later (CIP-3338) -- [ ] `/reference/stack/upgrading-from-protect` (retitled package-rename guide) +- [x] `/reference/stack` — core package overview and usage +- [x] `/reference/stack/api-reference` — generated `@cipherstash/stack` API +- [x] `/integrations/supabase/api-reference` — generated `@cipherstash/stack-supabase` API (CIP-3328) - **Auth (CIP-3330):** - [ ] `/reference/auth/lock-contexts` - [ ] `/reference/auth/cts-tokens` diff --git a/content/docs/concepts/compare/index.mdx b/content/docs/concepts/compare/index.mdx index 5c34ec1..0615aa1 100644 --- a/content/docs/concepts/compare/index.mdx +++ b/content/docs/concepts/compare/index.mdx @@ -1,5 +1,6 @@ --- title: Comparisons +navTitle: Overview description: "How CipherStash compares to other approaches to protecting data." type: concept --- diff --git a/content/docs/concepts/compare/meta.json b/content/docs/concepts/compare/meta.json index 76e9696..3e374e5 100644 --- a/content/docs/concepts/compare/meta.json +++ b/content/docs/concepts/compare/meta.json @@ -1,5 +1,5 @@ { "title": "Comparisons", "icon": "Scale", - "pages": ["..."] + "pages": ["index", "..."] } diff --git a/content/docs/concepts/index.mdx b/content/docs/concepts/index.mdx index 3d36567..8fc5128 100644 --- a/content/docs/concepts/index.mdx +++ b/content/docs/concepts/index.mdx @@ -1,5 +1,6 @@ --- title: Concepts +navTitle: Overview description: "How CipherStash works and how to think about searchable encryption, keys, and identity." type: concept --- diff --git a/content/docs/concepts/meta.json b/content/docs/concepts/meta.json index 49d9122..a5e37c2 100644 --- a/content/docs/concepts/meta.json +++ b/content/docs/concepts/meta.json @@ -1,5 +1,5 @@ { "title": "Concepts", "icon": "Lightbulb", - "pages": ["...", "compare"] + "pages": ["index", "...", "compare"] } diff --git a/content/docs/guides/deployment/index.mdx b/content/docs/guides/deployment/index.mdx index e5ef18e..12b5ade 100644 --- a/content/docs/guides/deployment/index.mdx +++ b/content/docs/guides/deployment/index.mdx @@ -1,5 +1,6 @@ --- title: Deployment +navTitle: Overview description: "Deploy CipherStash changes safely across environments, with explicit credential, migration, rollout, monitoring, and rollback gates." type: guide components: [encryption, eql, cli] diff --git a/content/docs/guides/deployment/meta.json b/content/docs/guides/deployment/meta.json index e2ffe90..0bbd244 100644 --- a/content/docs/guides/deployment/meta.json +++ b/content/docs/guides/deployment/meta.json @@ -1,4 +1,4 @@ { "title": "Deployment", - "pages": ["..."] + "pages": ["index", "..."] } diff --git a/content/docs/guides/development/index.mdx b/content/docs/guides/development/index.mdx index 3ac286f..b1a735e 100644 --- a/content/docs/guides/development/index.mdx +++ b/content/docs/guides/development/index.mdx @@ -1,5 +1,6 @@ --- title: Development +navTitle: Overview description: "Development documentation — being built as part of the docs V2 overhaul." --- diff --git a/content/docs/guides/development/meta.json b/content/docs/guides/development/meta.json index 203f9c9..24f8878 100644 --- a/content/docs/guides/development/meta.json +++ b/content/docs/guides/development/meta.json @@ -1,4 +1,4 @@ { "title": "Development", - "pages": ["..."] + "pages": ["index", "..."] } diff --git a/content/docs/guides/index.mdx b/content/docs/guides/index.mdx index 8d6647e..32279bf 100644 --- a/content/docs/guides/index.mdx +++ b/content/docs/guides/index.mdx @@ -1,5 +1,6 @@ --- title: Guides +navTitle: Overview description: "Task-oriented guides: development workflow, data migration, deployment, and troubleshooting." type: guide --- diff --git a/content/docs/guides/meta.json b/content/docs/guides/meta.json index 498dd61..810cf95 100644 --- a/content/docs/guides/meta.json +++ b/content/docs/guides/meta.json @@ -1,5 +1,5 @@ { "title": "Guides", "icon": "Wrench", - "pages": ["..."] + "pages": ["index", "..."] } diff --git a/content/docs/guides/migration/index.mdx b/content/docs/guides/migration/index.mdx index 6741cf4..5820d97 100644 --- a/content/docs/guides/migration/index.mdx +++ b/content/docs/guides/migration/index.mdx @@ -1,5 +1,6 @@ --- title: Data migration +navTitle: Overview description: "Safely introduce CipherStash encryption to existing schemas and populated production data." type: guide components: [encryption, eql, cli] diff --git a/content/docs/guides/migration/meta.json b/content/docs/guides/migration/meta.json index 941c504..db4e68b 100644 --- a/content/docs/guides/migration/meta.json +++ b/content/docs/guides/migration/meta.json @@ -1,4 +1,4 @@ { "title": "Data migration", - "pages": ["..."] + "pages": ["index", "..."] } diff --git a/content/docs/guides/troubleshooting/index.mdx b/content/docs/guides/troubleshooting/index.mdx index d049ef4..b49feca 100644 --- a/content/docs/guides/troubleshooting/index.mdx +++ b/content/docs/guides/troubleshooting/index.mdx @@ -1,5 +1,6 @@ --- title: Troubleshooting +navTitle: Overview description: "Troubleshooting documentation — being built as part of the docs V2 overhaul." --- diff --git a/content/docs/guides/troubleshooting/meta.json b/content/docs/guides/troubleshooting/meta.json index 82c3c83..e5715ad 100644 --- a/content/docs/guides/troubleshooting/meta.json +++ b/content/docs/guides/troubleshooting/meta.json @@ -1,4 +1,4 @@ { "title": "Troubleshooting", - "pages": ["..."] + "pages": ["index", "..."] } diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index 050b058..04359af 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -1,5 +1,6 @@ --- title: Integrations +navTitle: Overview description: "Every CipherStash integration, by category: the Postgres platforms encrypted data lives in, and the query layers that read and write it." type: concept components: [encryption, eql, platform] diff --git a/content/docs/integrations/meta.json b/content/docs/integrations/meta.json index bfb94b1..15136e6 100644 --- a/content/docs/integrations/meta.json +++ b/content/docs/integrations/meta.json @@ -1,5 +1,5 @@ { "title": "Integrations", "icon": "Blocks", - "pages": ["!index", "supabase", "prisma", "..."] + "pages": ["index", "supabase", "prisma", "..."] } diff --git a/content/docs/integrations/supabase/api-reference/meta.json b/content/docs/integrations/supabase/api-reference/meta.json new file mode 100644 index 0000000..dd99951 --- /dev/null +++ b/content/docs/integrations/supabase/api-reference/meta.json @@ -0,0 +1,4 @@ +{ + "title": "API reference", + "pages": ["index"] +} diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index cd3ad17..f35e189 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -76,7 +76,7 @@ Federation authenticates *as* the user. **Lock context** goes further: it bakes Lock context requires the client to be authenticated with `OidcFederationStrategy` (above). It cannot be used with `AccessKeyStrategy`, which authenticates a *service*, not a user — there is no user `sub` claim to bind to. Lock context also requires a Business or Enterprise workspace plan. </Callout> -Attach a lock context to any [`encryptedSupabase`](/reference/stack/supabase) query with `.withLockContext()`. `sub` is the Supabase user's UUID: +Attach a lock context to any [`encryptedSupabase`](/integrations/supabase/api-reference) query with `.withLockContext()`. `sub` is the Supabase user's UUID: ```typescript import { db } from "./lib/db" @@ -120,7 +120,7 @@ Both federation and lock context surface failures as values, not throws. | Provider not registered with the workspace | Federation fails — register the Supabase OIDC issuer first | | Expired or invalid Supabase session | `getJwt` throws / returns no session; federation cannot proceed | | CipherStash token expired mid-request | Strategy re-federates automatically via `getJwt` | -| Decrypting another user's locked value | `encryptionError` on the [query response](/reference/stack/supabase#responses-and-errors) | +| Decrypting another user's locked value | `encryptionError` on the [query response](/integrations/supabase/supabase-js#responses-and-errors) | The strategy's own factory and token errors follow the `@cipherstash/auth` `Result` shape (`failure.type`); see the [auth reference](/reference/auth). @@ -133,7 +133,7 @@ The strategy's own factory and token errors follow the `@cipherstash/auth` `Resu <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> Run the federation strategy server-side in Supabase Edge Functions. </Card> - <Card title="encryptedSupabase reference" href="/reference/stack/supabase"> + <Card title="encryptedSupabase reference" href="/integrations/supabase/api-reference"> `.withLockContext()` and `.audit()` on the query builder. </Card> <Card title="Auth reference" href="/reference/auth"> diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index c26fce0..dba917b 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -22,11 +22,11 @@ Unlike ordinary application-level encryption, protected columns remain queryable CipherStash has two parts: 1. [Encrypt Query Language (EQL)](/reference/eql) adds encrypted column types, operators, and functions to your Supabase Postgres database. -2. [`encryptedSupabase`](/reference/stack/supabase) wraps the Supabase JavaScript client and performs encryption and decryption in your application. +2. [`encryptedSupabase`](/integrations/supabase/api-reference) wraps the Supabase JavaScript client and performs encryption and decryption in your application. The EQL type assigned to a column declares what can be queried. For example, an equality column supports `.eq()` and `.in()`, while an ordered column also supports ranges and `.order()`. Choose only the capabilities you need, because searchable encryption has defined leakage characteristics. See [EQL core concepts](/reference/eql/core-concepts) for the complete model. -With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ordering queries. Encrypted free-text and JSON queries require an adapter such as Drizzle or Prisma ORM 8 because PostgREST cannot express the typed operands those operations require. The [wrapper reference](/reference/stack/supabase#free-text-and-json-need-a-different-adapter) documents the limitation. +With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ordering queries. Encrypted free-text and JSON queries require an adapter such as Drizzle or Prisma ORM 8 because PostgREST cannot express the typed operands those operations require. The [supabase-js guide](/integrations/supabase/supabase-js#free-text-and-encrypted-json-queries) documents the limitation. ## Choose your path @@ -34,7 +34,7 @@ With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ord | --- | --- | | Encrypt and query your first Supabase column | [Supabase Quickstart](/integrations/supabase/quickstart) | | Use the Supabase JavaScript client | [supabase-js guide](/integrations/supabase/supabase-js) | -| Look up the complete wrapper API | [`encryptedSupabase` reference](/reference/stack/supabase) | +| Look up the complete wrapper API | [`encryptedSupabase` API reference](/integrations/supabase/api-reference) | | Bind decryption to the signed-in user | [Supabase Auth](/integrations/supabase/auth) | | Encrypt inside Supabase Edge Functions | [Edge Functions](/integrations/supabase/edge-functions) | | Choose local or deployment credentials | [Workspace credentials](/reference/workspace/configuration#credentials) | diff --git a/content/docs/integrations/supabase/meta.json b/content/docs/integrations/supabase/meta.json index f03d6df..a94eedf 100644 --- a/content/docs/integrations/supabase/meta.json +++ b/content/docs/integrations/supabase/meta.json @@ -1,5 +1,12 @@ { "title": "Supabase", "icon": "Supabase", - "pages": ["index", "quickstart", "supabase-js", "auth", "edge-functions"] + "pages": [ + "index", + "quickstart", + "supabase-js", + "auth", + "edge-functions", + "api-reference" + ] } diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index da64681..7480ee7 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -159,7 +159,7 @@ The Table Editor cannot decrypt or meaningfully filter the encrypted value becau ## Next steps - Learn the supported mutations, filters, ordering, response types, and errors in the [supabase-js guide](/integrations/supabase/supabase-js). -- Use the complete [`encryptedSupabase` API reference](/reference/stack/supabase) when you need method-level detail. +- Use the complete [`encryptedSupabase` API reference](/integrations/supabase/api-reference) when you need method-level detail. - Add functional indexes when the table reaches meaningful row counts by following [EQL indexes](/reference/eql/indexes). - For a populated table, follow the safe dual-write and backfill process in [Encrypt existing data](/guides/migration/encrypt-existing-data). - To use a direct Postgres ORM connection, continue with [Drizzle](/integrations/drizzle) or [Prisma ORM 8](/integrations/prisma). diff --git a/content/docs/integrations/supabase/supabase-js.mdx b/content/docs/integrations/supabase/supabase-js.mdx index e198479..b4408c2 100644 --- a/content/docs/integrations/supabase/supabase-js.mdx +++ b/content/docs/integrations/supabase/supabase-js.mdx @@ -229,7 +229,7 @@ Chain `.throwOnError()` when the surrounding code prefers exceptions. Chain `.au <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> Run encryption in Deno with the WebAssembly build. </Card> - <Card title="Supabase wrapper reference" href="/reference/stack/supabase"> + <Card title="Supabase wrapper API reference" href="/integrations/supabase/api-reference"> The complete query-builder API, response types, and implementation details. </Card> </Cards> diff --git a/content/docs/reference/auth/index.mdx b/content/docs/reference/auth/index.mdx index 9bea074..220fa84 100644 --- a/content/docs/reference/auth/index.mdx +++ b/content/docs/reference/auth/index.mdx @@ -1,5 +1,6 @@ --- title: Auth +navTitle: Overview description: "Auth documentation — being built as part of the docs V2 overhaul." --- diff --git a/content/docs/reference/auth/meta.json b/content/docs/reference/auth/meta.json index d801d12..943c560 100644 --- a/content/docs/reference/auth/meta.json +++ b/content/docs/reference/auth/meta.json @@ -1,4 +1,4 @@ { "title": "Auth", - "pages": ["..."] + "pages": ["index", "..."] } diff --git a/content/docs/reference/cli/index.mdx b/content/docs/reference/cli/index.mdx index 88764db..b8f6a0a 100644 --- a/content/docs/reference/cli/index.mdx +++ b/content/docs/reference/cli/index.mdx @@ -1,5 +1,6 @@ --- title: CLI +navTitle: Overview description: "Command reference for the stash CLI, generated from v0.17.0." type: reference components: [cli] diff --git a/content/docs/reference/cli/meta.json b/content/docs/reference/cli/meta.json index 6b90890..86e9f17 100644 --- a/content/docs/reference/cli/meta.json +++ b/content/docs/reference/cli/meta.json @@ -1,6 +1,7 @@ { "title": "CLI", "pages": [ + "index", "---Setup & workflow---", "init", "plan", diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index 92291db..d09cd07 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -1,5 +1,6 @@ --- title: EQL +navTitle: Overview description: "Encrypt Query Language (EQL) installs encrypted column types and operators into Postgres as plain SQL — encryption itself happens in your client." type: reference components: [eql] diff --git a/content/docs/reference/eql/meta.json b/content/docs/reference/eql/meta.json index 6d448c7..d432349 100644 --- a/content/docs/reference/eql/meta.json +++ b/content/docs/reference/eql/meta.json @@ -1,6 +1,7 @@ { "title": "EQL", "pages": [ + "index", "core-concepts", "---Types---", "numbers", diff --git a/content/docs/reference/eql/v2/index.mdx b/content/docs/reference/eql/v2/index.mdx index 9095659..228407e 100644 --- a/content/docs/reference/eql/v2/index.mdx +++ b/content/docs/reference/eql/v2/index.mdx @@ -1,5 +1,6 @@ --- title: EQL v2 +navTitle: Overview description: PostgreSQL types, operators, and functions for querying encrypted data with EQL v2 (v2.2) — the eql_v2_encrypted type and searchable index types. type: reference components: [eql] diff --git a/content/docs/reference/eql/v2/meta.json b/content/docs/reference/eql/v2/meta.json index 68333fd..c86899c 100644 --- a/content/docs/reference/eql/v2/meta.json +++ b/content/docs/reference/eql/v2/meta.json @@ -1,4 +1,4 @@ { "title": "EQL v2", - "pages": ["indexes", "queries", "payload"] + "pages": ["index", "indexes", "queries", "payload"] } diff --git a/content/docs/reference/index.mdx b/content/docs/reference/index.mdx index 997dff4..2f6f2d3 100644 --- a/content/docs/reference/index.mdx +++ b/content/docs/reference/index.mdx @@ -1,5 +1,6 @@ --- title: Reference +navTitle: Overview description: "Precise API documentation for EQL, the Stack SDK, Auth, the CLI, and Proxy." type: reference --- diff --git a/content/docs/reference/proxy/index.mdx b/content/docs/reference/proxy/index.mdx index f468666..446c501 100644 --- a/content/docs/reference/proxy/index.mdx +++ b/content/docs/reference/proxy/index.mdx @@ -1,5 +1,6 @@ --- title: Proxy +navTitle: Overview description: "Configuration, message flow, multitenant operation, and error reference for CipherStash Proxy." type: reference components: [proxy] diff --git a/content/docs/reference/stack/api-reference/meta.json b/content/docs/reference/stack/api-reference/meta.json new file mode 100644 index 0000000..45717c6 --- /dev/null +++ b/content/docs/reference/stack/api-reference/meta.json @@ -0,0 +1,17 @@ +{ + "title": "API reference", + "pages": [ + "index", + "Package-exports", + "adapter-kit", + "dynamodb", + "encryption", + "encryption.v3", + "eql.v3", + "errors", + "identity", + "schema", + "types-public", + "wasm-inline" + ] +} diff --git a/content/docs/reference/stack/index.mdx b/content/docs/reference/stack/index.mdx index edac1c3..4b60194 100644 --- a/content/docs/reference/stack/index.mdx +++ b/content/docs/reference/stack/index.mdx @@ -1,8 +1,33 @@ --- -title: Stack SDK -description: "Stack SDK documentation — being built as part of the docs V2 overhaul." +title: Overview +description: "The core @cipherstash/stack package for client-side encryption, searchable schemas, identity controls, and encrypted query operands." +type: reference +components: [encryption, eql] +audience: [developer] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +`@cipherstash/stack` is the core TypeScript SDK for CipherStash. It encrypts and decrypts values in your application, defines the searchable capabilities of encrypted columns, and creates encrypted operands for queries against [EQL](/reference/eql). -Until it lands, current documentation lives in the [existing docs](/stack). +Database and framework wrappers are separate packages. Use the [Supabase](/integrations/supabase), [Prisma ORM 8](/integrations/prisma), or [Drizzle](/integrations/drizzle) integration when you want encryption built into that library's query flow. + +## What the package provides + +| Area | Purpose | +| --- | --- | +| Encryption client | Encrypt and decrypt individual values, batches, and models. | +| Schema builders | Describe tables, columns, value types, and searchable capabilities. | +| Query encryption | Produce typed encrypted operands for equality, range, and search queries. | +| Identity controls | Bind encryption and decryption to federated identity claims. | +| DynamoDB helpers | Encrypt and decrypt DynamoDB attributes and expressions. | +| Error types | Inspect operation failures without parsing error messages. | + +## Start here + +<Cards> + <Card title="Usage" href="/reference/stack/usage"> + Install the package, define an encrypted schema, and encrypt, query, and decrypt a value. + </Card> + <Card title="API reference" href="/reference/stack/api-reference"> + Browse the generated functions, classes, interfaces, and type aliases exported by the package. + </Card> +</Cards> diff --git a/content/docs/reference/stack/meta.json b/content/docs/reference/stack/meta.json index d0f86af..1f08609 100644 --- a/content/docs/reference/stack/meta.json +++ b/content/docs/reference/stack/meta.json @@ -1,4 +1,4 @@ { "title": "Stack SDK", - "pages": ["..."] + "pages": ["index", "usage", "api-reference"] } diff --git a/content/docs/reference/stack/supabase.mdx b/content/docs/reference/stack/supabase.mdx deleted file mode 100644 index c05e347..0000000 --- a/content/docs/reference/stack/supabase.mdx +++ /dev/null @@ -1,291 +0,0 @@ ---- -title: Supabase wrapper -description: "The canonical encryptedSupabase reference: connect-time introspection, the full query-builder surface, and how each filter maps to an encrypted index term." -type: reference -components: [encryption, eql] -audience: [developer] -verifiedAgainst: - stack: "1.0.0" - eql: "3.0.4" ---- - -`encryptedSupabase` wraps a `@supabase/supabase-js` client so that queries on encrypted columns work like queries on plaintext ones. Mutations are encrypted before they leave your app, filter values are encrypted into the matching index term, and results are decrypted on the way back. You keep writing `.eq()`, `.gt()`, `.order()`, and the wrapper handles the encryption on both sides of every call. - -This page is the single source of truth for the wrapper's API. The [Supabase integration](/integrations/supabase) shows it in context; the [EQL reference](/reference/eql) covers the database side it queries against. - -The wrapper ships as its own package, `@cipherstash/stack-supabase`, which depends on `@cipherstash/stack`: - -```bash -npm install @cipherstash/stack @cipherstash/stack-supabase @supabase/supabase-js -``` - -## Setup - -`encryptedSupabase` **introspects your database when you call it**. It reads the column types, finds the ones typed as EQL v3 domains, and derives each column's encryption config from the domain. The database already records which columns are encrypted and what they can do, so you do not declare it a second time. - -That makes it async, and it makes `.from()` take a table name and nothing else. - -```typescript -import { encryptedSupabase } from "@cipherstash/stack-supabase" - -const supabase = await encryptedSupabase( - process.env.SUPABASE_URL!, - process.env.SUPABASE_ANON_KEY!, -) - -const { data, error } = await supabase - .from("users") - .select("id, email") - .eq("email", "alice@example.com") -``` - -Introspection needs a direct Postgres connection, which is a different credential from the Supabase URL and anon key. It reads `DATABASE_URL` from the environment, or `options.databaseUrl` if you pass it. - -```typescript -const supabase = await encryptedSupabase(supabaseUrl, supabaseKey, { - databaseUrl: process.env.PG_URL, -}) -``` - -Pass an existing client instead of a URL and key when you already build one, for example to attach a Supabase Auth session: - -```typescript -const supabase = await encryptedSupabase(supabaseClient, { - databaseUrl: process.env.PG_URL, -}) -``` - -### Options - -| Option | Type | Purpose | -| --- | --- | --- | -| `databaseUrl` | `string` | Postgres connection string used for introspection. Defaults to `process.env.DATABASE_URL`. | -| `config` | `ClientConfig` | Passed through to the encryption client. `eqlVersion` is forced to `3`. | -| `schemas` | `Record<string, V3Table>` | Optional declared tables. Adds compile-time types and startup verification. | - -### `.from(tableName)` - -Returns a query builder that mirrors the supabase-js builder. Columns that are not EQL domains pass through untouched, so mixed plaintext and encrypted tables are the normal case. - -<Callout type="warn"> -A table containing an EQL column that this SDK cannot model throws when you name it in `.from()`. The introspector identifies EQL domains by their Postgres comment, so an EQL column from a newer bundle than your SDK is detected, reported, and refused rather than silently read back as raw ciphertext. -</Callout> - -## Declaring columns in the database - -The column's domain type is the schema. Declare the capability you query on and nothing more, because each capability stores an extra index term alongside the ciphertext. - -```sql -CREATE TABLE users ( - id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, - email public.eql_v3_text_search, -- equality, ordering, free-text match - age public.eql_v3_integer_ord, -- equality, ordering - name text -- plaintext, untouched -); -``` - -The capability model is the same one the database enforces through [EQL's domain variants](/reference/eql/core-concepts): - -| Domain | Enables | EQL term | -| --- | --- | --- | -| `public.eql_v3_<T>` | Store and decrypt only | none | -| `public.eql_v3_<T>_eq` | `.eq()`, `.neq()`, `.in()` | `hm` | -| `public.eql_v3_<T>_ord` | `.gt()`, `.gte()`, `.lt()`, `.lte()`, `.order()`, plus equality | `op` | -| `public.eql_v3_text_match` | `.matches()` | `bf` | -| `public.eql_v3_text_search` | All of the above, on text | `hm`, `op`, `bf` | -| `public.eql_v3_json` | Encrypted JSON documents | `sv` | - -## Optional schemas: types and startup verification - -Without `schemas`, rows are `Record<string, unknown>` and any table name is accepted. Declare a table and `.from()` returns a typed builder for it, with row types, filter-value types, and capability-narrowed methods. Declared tables are also verified against the live database before the client is handed back, so a column that was dropped or retyped fails at startup rather than at the first query. - -```typescript -import { encryptedSupabase } from "@cipherstash/stack-supabase" -import { encryptedTable, types } from "@cipherstash/stack/eql/v3" - -const users = encryptedTable("users", { - email: types.TextSearch("email"), - age: types.IntegerOrd("age"), -}) - -const supabase = await encryptedSupabase(supabaseUrl, supabaseKey, { - schemas: { users }, -}) - -// `.gt` is offered on `age`, and rejected on `email`, at compile time -await supabase.from("users").select("id, email").gt("age", 21) -``` - -Each key in `schemas` must equal its table's name. Declaring a table changes what TypeScript knows about it, never how its values are encrypted: a declared and an introspected column build byte-identically. - -## Writing data - -`insert`, `update`, and `upsert` encrypt every encrypted column before the request leaves your process. All values in a batch are encrypted in a single ZeroKMS round trip, so large inserts do not multiply key-service calls. - -```typescript -await supabase.from("users").insert({ - email: "alice@example.com", // encrypted - age: 30, // encrypted - name: "Alice Chen", // plaintext column, passes through -}) - -await supabase.from("users").update({ age: 31 }).eq("email", "alice@example.com") - -await supabase.from("users").delete().eq("email", "alice@example.com") -``` - -`insert` and `upsert` accept a single row or an array. `upsert` supports `onConflict` and `ignoreDuplicates` as in supabase-js. - -## Reading data - -Encrypted columns in the result are decrypted before `data` is returned to you. `select('*')` and a no-argument `select()` both work: the wrapper expands them from the column list it introspected. - -```typescript -const { data, error } = await supabase - .from("users") - .select("*") - .eq("email", "alice@example.com") -``` - -## Filters - -Every filter value on an encrypted column is encrypted client-side into the term that capability queries, then sent in place of the plaintext. The database only ever compares ciphertext. Filters on plaintext columns pass through to supabase-js unchanged. - -| Method | Requires | What the database compares | -| --- | --- | --- | -| `.eq()` / `.neq()` | `_eq`, `_ord`, or `text_search` | Equality terms | -| `.in(col, values)` | `_eq`, `_ord`, or `text_search` | Each element encrypted separately | -| `.gt()` `.gte()` `.lt()` `.lte()` | `_ord` or `text_search` | Ordering terms | -| `.matches(col, value)` | `text_match` or `text_search` | Bloom-filter token containment — **unavailable through PostgREST with EQL 3.0.4, [see below](#free-text-and-json-need-a-different-adapter)** | -| `.contains(col, value)` | `json`, or a plaintext array | Sub-document containment, not free-text. Encrypted JSON is **unavailable through PostgREST with EQL 3.0.4** | -| `.selectorEq(col, path, value)` / `.selectorNe()` | `json` | One JSON field's value, by path — **unavailable through PostgREST with EQL 3.0.4** | -| `.is(col, null)` | any column | Passed through. SQL `NULL` is never encrypted | -| `.match({ col: value })` | per column | Each pair applied as `.eq()` | -| `.or(filters)` | per column | Encrypted values inside the filter string are encrypted in place | -| `.not(col, op, value)` | per operator | Value is encrypted, operator passes through | -| `.filter(col, op, value)` | per operator | Escape hatch, same as `.not()` | - -```typescript -// Range on an _ord column -await supabase.from("users").select("id, age").gt("age", 21) - -// Encrypted and plaintext filters compose freely -await supabase - .from("users") - .select("id, email") - .eq("email", "alice@example.com") // encrypted comparison - .eq("name", "Alice Chen") // ordinary supabase-js filter -``` - -### Free-text and JSON need a different adapter [#free-text-and-json-need-a-different-adapter] - -<Callout type="warn"> -**With the current EQL 3.0.4 release, this wrapper cannot run encrypted free-text search or encrypted-JSON queries.** Every spelling raises: - -``` -[supabase v3]: matches() on encrypted column "email" is unavailable with EQL -3.0.2+: the SQL operator requires an eql_v3.query_* cast that PostgREST cannot -express. Use the Drizzle or Prisma ORM 8 adapter, or a scoped SQL/RPC function. -``` - -The error says `3.0.2+` because EQL 3.0.2 introduced this query-domain requirement. EQL 3.0.4 retains it. - -The limit is PostgREST's, not the encryption's. Those operators need a typed `eql_v3.query_*` operand, and PostgREST has no syntax for the cast — so the wrapper refuses rather than send an operand the database would compare wrongly. It fails closed on an unknown EQL version too. - -This applies to `.matches()`, `.contains()` on a `json` column, `.selectorEq()` / `.selectorNe()`, and the same terms reached through `.not()`, `.or()`, or a raw `.filter()`. **Equality, ordering, and range are unaffected** — `.eq()`, `.neq()`, `.in()`, `.gt()` / `.gte()` / `.lt()` / `.lte()`, and `.order()` all work, as do inserts, updates, and decryption on select. - -To search encrypted text with EQL 3.0.4, use the [Drizzle](/integrations/drizzle) or [Prisma ORM 8](/integrations/prisma) adapter for that query, or put it behind a scoped SQL or RPC function. Everything else on this page still applies. -</Callout> - -On EQL 3.0.1 and earlier, `.matches()` tests whether the stored value's encrypted token set contains the search string's — case-insensitive, and false positives are possible while false negatives are not: - -```typescript -await supabase.from("users").select("*").matches("email", "alice@example.com") -``` - -It is **not** `.contains()`. On an encrypted text column `.contains()` raises regardless of EQL version — containment promises exactness, which bloom-filter matching cannot deliver, so the wrapper refuses rather than quietly answering a different question. `.contains()` is the right method for encrypted JSON documents and plaintext arrays. - -### `.like()` and `.ilike()` are approximate - -On a plaintext column they are ordinary SQL `LIKE`, unaffected by any of the above. On an **encrypted** column they are a compatibility shim that reduces the pattern to a needle and delegates to `.matches()` — so with EQL 3.0.4 they raise for the same reason it does. - -Where they do run, the result is *approximate*: matching becomes case-insensitive and one-sided (it may return false positives), and anchoring is lost. Leading and trailing `%` are stripped, since fuzzy matching subsumes them. A pattern that cannot be approximated — an internal `%`, or any `_` — raises instead of guessing. - -```typescript -// Reduced to matches("email", "@example.com") -await supabase.from("users").select("*").like("email", "%@example.com") - -// ❌ raises: an internal wildcard has no trigram equivalent -await supabase.from("users").select("*").like("email", "a%e@example.com") -``` - -Prefer `.matches()` in new code — it is the operation that actually runs, and it does not imply SQL semantics the database is not applying. - -## Ordering and pagination - -`.order()` on an `_ord` or `text_search` column sorts on the encrypted ordering terms, which is exactly what that capability exists for. See [ordering encrypted values](/reference/eql/sorting). `.limit()`, `.range()`, `.single()`, and `.maybeSingle()` behave as in supabase-js. - -```typescript -await supabase.from("users").select("id, email, age").order("age", { ascending: false }).limit(20) -``` - -Ordering a storage-only, equality-only, match-only, or `_ord_ore` encrypted column throws instead of sorting the raw stored payload. `.csv()` also throws because PostgREST serializes the rows before the wrapper can decrypt them; select rows normally and serialize the plaintext result in your application. - -## Identity and audit - -Two methods have no supabase-js equivalent: - -```typescript -await supabase - .from("users") - .select("id, email") - .eq("email", "alice@example.com") - .withLockContext(lockContext) - .audit({ metadata: { reason: "support-lookup" } }) -``` - -`.withLockContext(lockContext)` scopes every encrypt and decrypt in the query to an identity-locked context. See the [Supabase Auth integration](/integrations/supabase/auth) for wiring it to Supabase Auth sessions. `.audit(config)` attaches metadata to the query's decryption events in the [audit log](/security/audit-logging). - -`.abortSignal()`, `.throwOnError()`, and `.returns<T>()` pass through as in supabase-js. - -## Responses and errors - -Awaiting the builder resolves to the supabase-js response shape, extended with encryption context: - -```typescript -type EncryptedSupabaseResponse<T> = { - data: T | null - error: EncryptedSupabaseError | null - count: number | null - status: number - statusText: string -} - -type EncryptedSupabaseError = { - message: string - details?: string - hint?: string - code?: string - encryptionError?: EncryptionError // set when encrypt/decrypt failed, not the query -} -``` - -Check `error.encryptionError` to distinguish an encryption failure (bad workspace credentials, unreachable ZeroKMS, a payload that fails validation) from an ordinary PostgREST error. - -## How it works - -The builder is deferred: method calls record intent, and nothing executes until you `await`. At that point the wrapper, in order: - -1. Encrypts mutation payloads, all rows in one ZeroKMS call -2. Encrypts every filter value on an encrypted column into its index term -3. Adds `::jsonb` casts to encrypted columns in the `select` list -4. Replays the recorded calls onto the real supabase-js builder -5. Decrypts encrypted columns in the response - -Because the wrapped client is your own `createClient(...)` instance, Supabase Auth sessions and **Row Level Security policies apply unchanged**. RLS decides which rows come back; encryption decides whether what is in them can be read. Database-side setup (installing EQL, column types, grants, indexes) is covered in the [Supabase overview](/integrations/supabase). - -## Two names, one function - -`encryptedSupabase` and `encryptedSupabaseV3` are the **same function**, and either import works. The `V3` suffix dates from when this package also shipped an EQL v2 dialect; now that EQL v3 is the only generation the wrapper authors, the suffix is redundant, so `encryptedSupabase` is the preferred spelling and `encryptedSupabaseV3` is a deprecated alias kept for existing imports. - -The type names work the same way: `EncryptedSupabaseOptions`, `EncryptedSupabaseInstance`, and `TypedEncryptedSupabaseInstance`, with their `…V3…` forms as deprecated aliases. diff --git a/content/docs/reference/stack/usage.mdx b/content/docs/reference/stack/usage.mdx new file mode 100644 index 0000000..6e84cfc --- /dev/null +++ b/content/docs/reference/stack/usage.mdx @@ -0,0 +1,87 @@ +--- +title: Usage +description: "Install @cipherstash/stack and use its core encryption client with an EQL v3 encrypted column." +type: reference +components: [encryption, eql] +audience: [developer] +--- + +## Install + +```bash cta cta-type="install" example-id="install-stack" +npm install @cipherstash/stack +``` + +Authenticate locally with `stash auth login`, or configure the `CS_*` machine credentials described in [workspace configuration](/reference/workspace/configuration). + +## Define a schema and client + +The application schema tells Stack which columns are encrypted and which query capabilities they need. It must match the [EQL domain](/reference/eql/core-concepts) used by the database column. + +```typescript filename="src/encryption.ts" +import { Encryption, encryptedColumn, encryptedTable } from "@cipherstash/stack" + +export const users = encryptedTable("users", { + email: encryptedColumn("email").equality(), +}) + +export const encryption = await Encryption({ schemas: [users] }) +``` + +An equality-enabled text column uses the corresponding EQL type: + +```sql +CREATE TABLE users ( + id bigint GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email public.eql_v3_text_eq +); +``` + +## Encrypt and store + +Stack operations return a `Result` with either `data` or `failure`: + +```typescript +const encrypted = await encryption.encrypt("alice@example.com", { + table: users, + column: users.email, +}) + +if (encrypted.failure) throw encrypted.failure + +await db.query("INSERT INTO users (email) VALUES ($1)", [encrypted.data]) +``` + +Encryption happens before the value leaves the application process. + +## Query an encrypted column + +Encrypt the operand with the same table and column definition, then cast it to the column's EQL domain in SQL: + +```typescript +const term = await encryption.encryptQuery("alice@example.com", { + table: users, + column: users.email, +}) + +if (term.failure) throw term.failure + +const result = await db.query( + "SELECT id, email FROM users WHERE email = $1::public.eql_v3_text_eq", + [term.data], +) +``` + +The database compares encrypted terms and never receives the plaintext operand. See [EQL filtering](/reference/eql/filtering) for the available query forms. + +## Decrypt a result + +```typescript +const decrypted = await encryption.decrypt(result.rows[0].email) + +if (decrypted.failure) throw decrypted.failure + +console.log(decrypted.data) +``` + +For every exported signature and option, use the [generated API reference](/reference/stack/api-reference). For an end-to-end project setup, follow the [quickstart](/get-started/quickstart). diff --git a/content/docs/reference/workspace/index.mdx b/content/docs/reference/workspace/index.mdx index d4414b5..e2b4693 100644 --- a/content/docs/reference/workspace/index.mdx +++ b/content/docs/reference/workspace/index.mdx @@ -1,5 +1,6 @@ --- title: Workspace & account +navTitle: Overview description: "Workspace configuration, organization and workspace members, and per-workspace billing." type: reference components: [platform] diff --git a/content/docs/security/compliance/index.mdx b/content/docs/security/compliance/index.mdx index 9af190d..8875fd7 100644 --- a/content/docs/security/compliance/index.mdx +++ b/content/docs/security/compliance/index.mdx @@ -1,5 +1,6 @@ --- title: Compliance +navTitle: Overview description: "Compliance documentation — being built as part of the docs V2 overhaul." --- diff --git a/content/docs/security/compliance/meta.json b/content/docs/security/compliance/meta.json index e7c6fa5..346ed94 100644 --- a/content/docs/security/compliance/meta.json +++ b/content/docs/security/compliance/meta.json @@ -1,4 +1,4 @@ { "title": "Compliance", - "pages": ["..."] + "pages": ["index", "..."] } diff --git a/content/docs/solutions/index.mdx b/content/docs/solutions/index.mdx index c04d308..df8c976 100644 --- a/content/docs/solutions/index.mdx +++ b/content/docs/solutions/index.mdx @@ -1,5 +1,6 @@ --- title: Solutions +navTitle: Overview description: "What CipherStash solves: protecting sensitive data, AI and RAG pipelines, data residency, and provable access." type: concept audience: [cto, ciso] diff --git a/content/stack/cipherstash/encryption/bulk-operations.mdx b/content/stack/cipherstash/encryption/bulk-operations.mdx index 5a6d823..550ce58 100644 --- a/content/stack/cipherstash/encryption/bulk-operations.mdx +++ b/content/stack/cipherstash/encryption/bulk-operations.mdx @@ -9,7 +9,7 @@ description: Encrypt and decrypt arrays of raw values in a single ZeroKMS round- This page covers the raw-value variants. If you want to encrypt whole objects (records with multiple fields), see [Model operations](/stack/cipherstash/encryption/models) instead. -For full method signatures, see the [`EncryptionClient` API reference](/stack/reference/stack/latest/packages/stack/src/encryption/classes/EncryptionClient). +For full method signatures, see the [`EncryptionClient` API reference](/reference/stack/api-reference). ## Why bulk matters diff --git a/content/stack/cipherstash/encryption/models.mdx b/content/stack/cipherstash/encryption/models.mdx index 54d30f7..b7287ad 100644 --- a/content/stack/cipherstash/encryption/models.mdx +++ b/content/stack/cipherstash/encryption/models.mdx @@ -9,7 +9,7 @@ Model methods encrypt or decrypt an entire object in one call. The SDK inspects This is the recommended approach when working with database records: pass the object in, get the encrypted (or decrypted) version back, and write it to the database. -For full method signatures, see the [`EncryptionClient` API reference](/stack/reference/stack/latest/packages/stack/src/encryption/classes/EncryptionClient). +For full method signatures, see the [`EncryptionClient` API reference](/reference/stack/api-reference). ## How schema-driven selection works diff --git a/content/stack/cipherstash/kms/oidc.mdx b/content/stack/cipherstash/kms/oidc.mdx index f4ffefc..581aaae 100644 --- a/content/stack/cipherstash/kms/oidc.mdx +++ b/content/stack/cipherstash/kms/oidc.mdx @@ -6,7 +6,7 @@ description: Register an identity provider so end users can authenticate cryptog OIDC Providers let you federate your existing identity provider (IdP) with CipherStash. Once registered, end users can authenticate cryptographic operations using the identity tokens your IdP issues, not just application credentials. -This pairs with [identity-aware encryption](/stack/reference/stack/latest/packages/stack/src/identity/classes/LockContext) via `LockContext`, which binds encryption operations to a specific user identity. +This pairs with [identity-aware encryption](/reference/stack/api-reference) via `LockContext`, which binds encryption operations to a specific user identity. <Callout type="info"> If you are only encrypting data at rest with application credentials, you do not need an OIDC provider. @@ -61,4 +61,4 @@ No client secret or shared key is stored. CipherStash validates tokens by fetchi ## Using it from code Once a provider is registered, use `LockContext` in the Encryption SDK to bind encryption operations to a user's identity token. -See the [`LockContext` API reference](/stack/reference/stack/latest/packages/stack/src/identity/classes/LockContext) for the full API. +See the [Stack API reference](/reference/stack/api-reference) for the full `LockContext` API. diff --git a/content/stack/reference/encryption-sdk.mdx b/content/stack/reference/encryption-sdk.mdx index 1abfb63..ef036e0 100644 --- a/content/stack/reference/encryption-sdk.mdx +++ b/content/stack/reference/encryption-sdk.mdx @@ -3,18 +3,18 @@ title: Encryption SDK reference description: Public entry points, supported data types, and configuration highlights for @cipherstash/stack field-level encryption. --- -`@cipherstash/stack` is CipherStash's field-level encryption SDK for TypeScript. It encrypts individual column values client-side using per-value keys derived from ZeroKMS (backed by AWS KMS), before data leaves the application. This page summarises the public surface, data type rules, and configuration options. Full type signatures live in the [auto-generated API reference](/stack/reference/stack/latest/packages/stack/src/encryption). +`@cipherstash/stack` is CipherStash's field-level encryption SDK for TypeScript. It encrypts individual column values client-side using per-value keys derived from ZeroKMS (backed by AWS KMS), before data leaves the application. This page summarises the public surface, data type rules, and configuration options. Full type signatures live in the [auto-generated API reference](/reference/stack/api-reference). ## Public entry points | Export | Import path | Purpose | |---|---|---| -| `Encryption(config)` | `@cipherstash/stack` | Factory function. Returns a `Promise<EncryptionClient>`. [Reference](/stack/reference/stack/latest/packages/stack/src/encryption/functions/Encryption) | -| `EncryptionClient` | `@cipherstash/stack/encryption` | Class with all encrypt/decrypt methods. Obtain via `Encryption()`, not `new`. [Reference](/stack/reference/stack/latest/packages/stack/src/encryption/classes/EncryptionClient) | -| `encryptedTable` / `encryptedColumn` / `encryptedField` | `@cipherstash/stack/schema` | Schema builders. Define which tables and columns to encrypt, and which search indexes to create. [Reference](/stack/reference/stack/latest/packages/stack/src/schema) | -| `LockContext` | `@cipherstash/stack/identity` | Identity-aware encryption. Ties an encrypted value to a specific JWT identity. [Reference](/stack/reference/stack/latest/packages/stack/src/identity) | -| `Secrets` | `@cipherstash/stack/secrets` | End-to-end encrypted secret storage. Separate from field-level encryption. [Reference](/stack/reference/stack/latest/packages/stack/src/types-public) | -| Error types | `@cipherstash/stack/errors` | `StackError`, `EncryptionErrorTypes`, `getErrorMessage`. [Reference](/stack/reference/stack/latest/packages/stack/src/types-public) | +| `Encryption(config)` | `@cipherstash/stack` | Factory function. Returns a `Promise<EncryptionClient>`. [Reference](/reference/stack/api-reference) | +| `EncryptionClient` | `@cipherstash/stack/encryption` | Class with all encrypt/decrypt methods. Obtain via `Encryption()`, not `new`. [Reference](/reference/stack/api-reference) | +| `encryptedTable` / `encryptedColumn` / `encryptedField` | `@cipherstash/stack/schema` | Schema builders. Define which tables and columns to encrypt, and which search indexes to create. [Reference](/reference/stack/api-reference) | +| `LockContext` | `@cipherstash/stack/identity` | Identity-aware encryption. Ties an encrypted value to a specific JWT identity. [Reference](/reference/stack/api-reference) | +| `Secrets` | `@cipherstash/stack/secrets` | End-to-end encrypted secret storage. Separate from field-level encryption. [Reference](/reference/stack/api-reference) | +| Error types | `@cipherstash/stack/errors` | `StackError`, `EncryptionErrorTypes`, `getErrorMessage`. [Reference](/reference/stack/api-reference) | ## Adapter packages @@ -75,7 +75,7 @@ Some numeric inputs are invalid for encryption. The following table covers the b | `clientKey` | `CS_CLIENT_KEY` | Client key material used for ZeroKMS encryption operations | | `keyset` | (none) | Multi-tenant isolation. Specify `{ name: "tenant-a" }` or `{ id: "<uuid>" }` | -See the full type at [EncryptionClientConfig](/stack/reference/stack/latest/packages/stack/src/types-public/type-aliases/EncryptionClientConfig) and [ClientConfig](/stack/reference/stack/latest/packages/stack/src/types-public/type-aliases/ClientConfig). +See [the generated API reference](/reference/stack/api-reference) for the complete `EncryptionClientConfig` and `ClientConfig` types. ```typescript filename="init.ts" import { Encryption } from "@cipherstash/stack" @@ -110,7 +110,4 @@ Set `STASH_STACK_LOG` to control log verbosity. The SDK never logs plaintext dat Everything else is in the auto-generated TypeDoc reference: -- [Encryption module](/stack/reference/stack/latest/packages/stack/src/encryption) — `Encryption()`, `EncryptionClient` class, all methods -- [Schema module](/stack/reference/stack/latest/packages/stack/src/schema) — `encryptedTable`, `encryptedColumn`, `encryptedField`, type inference helpers -- [Identity module](/stack/reference/stack/latest/packages/stack/src/identity) — `LockContext` -- [Types](/stack/reference/stack/latest/packages/stack/src/types-public) — `EncryptionClientConfig`, `ClientConfig`, `EncryptOptions`, `BulkEncryptPayload`, and more +- [Generated API reference](/reference/stack/api-reference) — encryption, schema, identity, configuration, and error exports diff --git a/content/stack/reference/index.mdx b/content/stack/reference/index.mdx index 5acc9a0..75fd1a7 100644 --- a/content/stack/reference/index.mdx +++ b/content/stack/reference/index.mdx @@ -11,7 +11,7 @@ Auto-generated TypeDoc reference for CipherStash packages. For hand-written guid The core CipherStash SDK. Includes Encryption (`Encryption()`, `EncryptionClient`, schema builders, type inference, Lock Context), Secrets API, and integrations (Drizzle, Supabase, DynamoDB, and more). -[Browse @cipherstash/stack reference](/stack/reference/stack/latest) +[Browse @cipherstash/stack reference](/reference/stack/api-reference) ### EQL API diff --git a/next.config.mjs b/next.config.mjs index efdadca..c526466 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -262,10 +262,10 @@ const config = { destination: "/stack/reference/proxy-reference", permanent: true, }, - // Reference section index → latest + // Legacy generated Stack reference → the V2 API reference { source: "/stack/reference/stack", - destination: "/stack/reference/stack/latest", + destination: "/reference/stack/api-reference", permanent: false, }, // === AI-cited URLs orphaned by the restructure === diff --git a/package.json b/package.json index db688e4..2b9a412 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "prebuild": "bun run generate-docs && bun run generate-docs:prisma && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-mermaid && bun run validate-links && bun run validate-redirects", + "prebuild": "bun run generate-docs && bun run generate-docs:supabase && bun run generate-docs:prisma && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-mermaid && bun run validate-links && bun run validate-redirects", "build": "next build", "dev": "next dev -p 3001", "start": "next start", @@ -12,6 +12,7 @@ "lint": "biome check", "format": "biome format --write", "generate-docs": "tsx scripts/generate-docs.ts", + "generate-docs:supabase": "tsx scripts/generate-supabase-docs.ts", "generate-docs:prisma": "tsx scripts/generate-prisma-docs.ts", "generate-docs:eql": "tsx scripts/generate-eql-docs.ts", "generate-docs:eql-api": "tsx scripts/generate-eql-api-docs.ts", diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index 84c7dcf..05bffbe 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -306,6 +306,7 @@ function renderIndex( const frontmatter = [ "---", "title: CLI", + "navTitle: Overview", `description: "Command reference for the ${CLI_NAME} CLI, generated from v${CLI_VERSION}."`, "type: reference", "components: [cli]", @@ -345,7 +346,7 @@ ${sections} } function renderMeta(manifest: Manifest, groups: Map<string, string[]>): string { - const pages: string[] = []; + const pages: string[] = ["index"]; for (const g of manifest.groupOrder) { const groupPages = groups.get(g); if (!groupPages) continue; diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 697624c..98d2c45 100644 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -2,7 +2,7 @@ /** * Main orchestrator for generating TypeDoc API reference documentation. * - * Generates docs for @cipherstash/stack (which includes all integrations). + * Generates docs for the core @cipherstash/stack package. * * Set PROTECT_WORKSPACE_PATH to point to a local protectjs checkout * for development (e.g., /Users/cj/Documents/CipherStash/Github/protectjs). @@ -14,36 +14,45 @@ import { type DocsConfig, generateDocs } from "./lib/docs-generator.js"; const stackConfig: DocsConfig = { packageName: "@cipherstash/stack", + projectName: "@cipherstash/stack", repoUrl: "https://github.com/cipherstash/stack.git", + sourceRef: "main", tempDirName: ".tmp-stack", - baseOutputDir: path.join(process.cwd(), "content/stack/reference/stack"), - // Stack 1.0 split the Drizzle and Supabase adapters into their own packages - // (@cipherstash/stack-drizzle, @cipherstash/stack-supabase) and removed the - // secrets module, so those entry points no longer exist under - // packages/stack/src. - // - // `stack-supabase` is documented from its new home. It is a separate npm - // package but the same reference surface to a reader, and without it nothing - // in the Supabase adapter — `encryptedSupabaseV3`, the query builder, the - // EQL-version constraints on its encrypted operators — reaches the generated - // reference at all. + baseOutputDir: path.join( + process.cwd(), + "content/docs/reference/stack/api-reference", + ), + publicPath: "/reference/stack/api-reference", + metaTitle: "API reference", + versionedOutput: false, + entryPointBasePath: "packages/stack/src", + router: "module", + flattenOutputFiles: true, + generatedSources: { + "packages/stack/src/package-exports.ts": + '/** Exports available from the `@cipherstash/stack` package root.\n * @module Package exports\n */\nexport * from "./index.js"\n', + }, entryPoints: [ + "./packages/stack/src/package-exports.ts", "./packages/stack/src/encryption/index.ts", "./packages/stack/src/schema/index.ts", + "./packages/stack/src/eql/v3/index.ts", + "./packages/stack/src/encryption/v3.ts", "./packages/stack/src/dynamodb/index.ts", "./packages/stack/src/identity/index.ts", "./packages/stack/src/types-public.ts", - "./packages/stack/src/client.ts", "./packages/stack/src/errors/index.ts", - "./packages/stack-supabase/src/index.ts", + "./packages/stack/src/adapter-kit.ts", + "./packages/stack/src/wasm-inline.ts", ], - tsconfigInclude: [ - "packages/stack/src/**/*", - "packages/stack-supabase/src/**/*", - ], - tagFilter: (tag: string) => - tag.includes("@cipherstash/stack@") && !tag.includes("stack-"), + tsconfigInclude: ["packages/stack/src/**/*"], + tagFilter: () => false, referencePathSegment: "stack", + frontmatterGlobals: { + type: "reference", + components: ["encryption", "eql"], + audience: ["developer"], + }, }; async function main() { diff --git a/scripts/generate-supabase-docs.ts b/scripts/generate-supabase-docs.ts new file mode 100644 index 0000000..a25c917 --- /dev/null +++ b/scripts/generate-supabase-docs.ts @@ -0,0 +1,37 @@ +#!/usr/bin/env tsx +/** Generate the Supabase integration's API reference from Stack main. */ +import path from "node:path"; +import { type DocsConfig, generateDocs } from "./lib/docs-generator.js"; + +const supabaseConfig: DocsConfig = { + packageName: "@cipherstash/stack-supabase", + projectName: "@cipherstash/stack-supabase", + repoUrl: "https://github.com/cipherstash/stack.git", + sourceRef: "main", + tempDirName: ".tmp-stack-supabase", + baseOutputDir: path.join( + process.cwd(), + "content/docs/integrations/supabase/api-reference", + ), + publicPath: "/integrations/supabase/api-reference", + metaTitle: "API reference", + versionedOutput: false, + entryPointBasePath: "packages/stack-supabase/src", + entryModule: "index", + router: "module", + flattenOutputFiles: true, + entryPoints: ["./packages/stack-supabase/src/index.ts"], + tsconfigInclude: ["packages/stack-supabase/src/**/*"], + tagFilter: () => false, + referencePathSegment: "supabase", + frontmatterGlobals: { + type: "reference", + components: ["encryption", "eql", "platform"], + audience: ["developer"], + }, +}; + +generateDocs(supabaseConfig).catch((error) => { + console.error("Failed to generate the Supabase API reference:", error); + process.exit(1); +}); diff --git a/scripts/lib/docs-generator.ts b/scripts/lib/docs-generator.ts index ef29cdc..ce45804 100644 --- a/scripts/lib/docs-generator.ts +++ b/scripts/lib/docs-generator.ts @@ -40,6 +40,10 @@ export interface DocsConfig { router?: "member" | "module"; /** Write generated module pages into one directory. */ flattenOutputFiles?: boolean; + /** Promote one TypeDoc entry module into the generated root page. */ + entryModule?: string; + /** Synthetic source entry points written into the temporary checkout. */ + generatedSources?: Record<string, string>; } /** @@ -213,11 +217,16 @@ export async function generateMetaJson(dir: string): Promise<void> { } const metaPath = path.join(dir, "meta.json"); - await fs.writeFile( - metaPath, - `${JSON.stringify({ pages }, null, 2)}\n`, - "utf8", + await fs.writeFile(metaPath, serializeMetaJson({ pages }), "utf8"); +} + +/** Keep generated metadata aligned with Biome's compact single-item arrays. */ +function serializeMetaJson(meta: { title?: string; pages: string[] }): string { + const json = JSON.stringify(meta, null, 2).replace( + /"pages": \[\n {4}"([^"]+)"\n {2}\]/, + '"pages": ["$1"]', ); + return `${json}\n`; } /** @@ -375,6 +384,17 @@ export async function generateDocsForTag( // Create output directory await fs.mkdir(outputDir, { recursive: true }); + // A package root named `index.ts` collides with TypeDoc's own `index.mdx`. + // Callers can add a synthetic, clearly named re-export module so the root + // package surface is documented without changing the source repository. + for (const [relativePath, source] of Object.entries( + config.generatedSources ?? {}, + )) { + const generatedPath = path.join(workingDir, relativePath); + await fs.mkdir(path.dirname(generatedPath), { recursive: true }); + await fs.writeFile(generatedPath, source, "utf8"); + } + // Create a custom tsconfig for TypeDoc const typedocTsConfig = { extends: "./tsconfig.json", @@ -510,6 +530,7 @@ export async function generateDocsForTag( entryFileName: "index", router: config.router, flattenOutputFiles: config.flattenOutputFiles, + entryModule: config.entryModule, // Type errors fail the build, deliberately. This was `true` to tolerate // "cross-package type references unresolved even though the source is // correct" — but that diagnosis was wrong, and tolerating it was not free: @@ -683,11 +704,7 @@ export async function generateDocs(config: DocsConfig): Promise<void> { ...(config.metaTitle ? { title: config.metaTitle } : {}), pages: generatedVersions.map(({ dirName }) => dirName), }; - await fs.writeFile( - packageMetaPath, - `${JSON.stringify(packageMeta, null, 2)}\n`, - "utf8", - ); + await fs.writeFile(packageMetaPath, serializeMetaJson(packageMeta), "utf8"); // Clean up temp directory console.log("\nCleaning up..."); diff --git a/scripts/plugins/fumadocs-frontmatter.mjs b/scripts/plugins/fumadocs-frontmatter.mjs index 30dbc46..730c3ab 100644 --- a/scripts/plugins/fumadocs-frontmatter.mjs +++ b/scripts/plugins/fumadocs-frontmatter.mjs @@ -113,6 +113,7 @@ export function load(app) { page.frontmatter = { ...meta, + ...(isRoot ? { navTitle: "Overview" } : {}), // Author-provided frontmatter (e.g. @description comment tags, // frontmatterGlobals) still wins. ...page.frontmatter, diff --git a/scripts/validate-content-api.ts b/scripts/validate-content-api.ts index a421360..56fff7c 100644 --- a/scripts/validate-content-api.ts +++ b/scripts/validate-content-api.ts @@ -35,7 +35,8 @@ import path from "node:path"; /** Generated by scripts/*, or a version reference that documents old syntax on purpose. */ const SKIP_PATHS = [ "content/stack/reference/stack/", // TypeDoc output - "content/docs/reference/stack/", // TypeDoc output (post-repoint) + "content/docs/reference/stack/api-reference/", // TypeDoc output + "content/docs/integrations/supabase/api-reference/", // TypeDoc output "content/docs/integrations/prisma/api-reference/", // TypeDoc output "content/stack/reference/eql/index.mdx", // generated EQL API reference "content/docs/reference/eql/functions.mdx", // generated @@ -218,7 +219,7 @@ if (findings.length > 0) { // Say what was actually checked. This gate is a DENYLIST: it can only catch the // APIs listed in RULES, so an unqualified "no non-existent API found" overstates -// it — and did, while `content/docs/reference/stack/supabase.mdx` taught +// it — and did, while the Supabase wrapper reference taught // `.contains()` for encrypted free-text, which raises. Reporting the rule count // makes the coverage legible at a glance, so the next reader can tell the // difference between "verified" and "matched nothing on a short list". diff --git a/scripts/validate-links.ts b/scripts/validate-links.ts index c33b356..1ba7014 100644 --- a/scripts/validate-links.ts +++ b/scripts/validate-links.ts @@ -359,7 +359,8 @@ allBroken.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line); * spurious errors imply the docs are falling apart. */ const GENERATED = [ - "content/stack/reference/stack/latest", + "content/docs/reference/stack/api-reference/index.mdx", + "content/docs/integrations/supabase/api-reference/index.mdx", "content/docs/integrations/prisma/api-reference/index.mdx", ]; const missing = GENERATED.filter((d) => !fs.existsSync(path.join(ROOT, d))); diff --git a/v2-redirects.mjs b/v2-redirects.mjs index 5c93da1..34258f8 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -68,7 +68,7 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/encryption/supabase", - destination: "/reference/stack/supabase", + destination: "/integrations/supabase/api-reference", permanent: false, }, { @@ -377,7 +377,7 @@ export const v2Redirects = [ // Generated TypeDoc API reference (scripts/generate-docs.ts output) { source: "/stack/reference/stack/:path*", - destination: "/reference/stack/:path*", + destination: "/reference/stack/api-reference", permanent: false, }, ]; From f9d045806794d7801236f459f0b9271826497f1f Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Thu, 30 Jul 2026 22:52:04 +1000 Subject: [PATCH 145/151] docs(drizzle): add integration API reference --- .github/workflows/docs.yml | 3 + .gitignore | 2 + IA.md | 6 +- .../docs/get-started/choose-your-stack.mdx | 2 +- content/docs/get-started/quickstart.mdx | 2 +- .../drizzle/api-reference/meta.json | 4 ++ .../{drizzle.mdx => drizzle/index.mdx} | 68 +++++++++---------- content/docs/integrations/drizzle/meta.json | 5 ++ content/docs/integrations/meta.json | 2 +- package.json | 3 +- scripts/generate-drizzle-docs.ts | 37 ++++++++++ scripts/validate-content-api.ts | 1 + scripts/validate-links.ts | 1 + src/components/icons/drizzle.tsx | 37 ++++++++++ src/lib/source.ts | 2 + 15 files changed, 134 insertions(+), 41 deletions(-) create mode 100644 content/docs/integrations/drizzle/api-reference/meta.json rename content/docs/integrations/{drizzle.mdx => drizzle/index.mdx} (69%) create mode 100644 content/docs/integrations/drizzle/meta.json create mode 100644 scripts/generate-drizzle-docs.ts create mode 100644 src/components/icons/drizzle.tsx diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index 08b68f9..bdf3caf 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -52,6 +52,9 @@ jobs: - name: Generate the Supabase reference run: bun run generate-docs:supabase + - name: Generate the Drizzle reference + run: bun run generate-docs:drizzle + - name: Generate the Prisma reference run: bun run generate-docs:prisma diff --git a/.gitignore b/.gitignore index 641a8b8..ac2a70f 100644 --- a/.gitignore +++ b/.gitignore @@ -41,6 +41,8 @@ content/docs/integrations/prisma/api-reference/* !content/docs/integrations/prisma/api-reference/meta.json content/docs/integrations/supabase/api-reference/* !content/docs/integrations/supabase/api-reference/meta.json +content/docs/integrations/drizzle/api-reference/* +!content/docs/integrations/drizzle/api-reference/meta.json content/docs/reference/stack/api-reference/* !content/docs/reference/stack/api-reference/meta.json .tmp-* diff --git a/IA.md b/IA.md index 38a9f69..c3ef001 100644 --- a/IA.md +++ b/IA.md @@ -159,7 +159,7 @@ Solutions └─ Protecting PII · Healthcare/HIPAA · AI & RAG · Data residency · Provable access Reference ├─ EQL core-concepts · numbers · dates · text · json · … · joins -├─ Stack SDK client · schema · encrypt-decrypt · supabase · drizzle-operators · errors +├─ Stack SDK overview · usage · generated package API ├─ Auth lock-contexts · cts-tokens · oidc · access-keys ├─ CLI · Proxy · Workspace └─ Benchmarks · Agent skills · Glossary @@ -200,7 +200,7 @@ layer, not a layer every Stack page sits on. - Start here: Quickstart · Reference → Stack SDK (client + configuration) - Concepts: application-level encryption · searchable encryption · identity-aware encryption - Guides: schema design · encrypt existing data · testing & CI · serverless & bundling -- Reference: `/reference/stack/*` (schema · encrypt-decrypt · supabase · drizzle-operators · errors) +- Reference: `/reference/stack/*` (overview · usage · generated package API) - Security: `/security/stack-sdk` - Integrations (auto): Supabase · Drizzle · Prisma · DynamoDB · Next.js … @@ -308,7 +308,7 @@ Two notes: - [x] `/integrations/supabase/dashboard-experience` — Table Editor, expose eql schema - [ ] ⛔ `/integrations/supabase/edge-functions` — pending Deno/FFI answer - [ ] ⛔ `/integrations/supabase/realtime` — pending product verification -- [x] `/integrations/drizzle` +- [x] `/integrations/drizzle` — overview and generated `@cipherstash/stack-drizzle` API reference - [x] `/integrations/prisma` — Prisma ORM 8 RC, EQL v3, Prisma Postgres, Prisma Compute, and generated API reference - [ ] `/integrations/aws/rds-aurora` — Proxy path - [ ] `/integrations/aws/dynamodb` diff --git a/content/docs/get-started/choose-your-stack.mdx b/content/docs/get-started/choose-your-stack.mdx index e2c4963..b6cc077 100644 --- a/content/docs/get-started/choose-your-stack.mdx +++ b/content/docs/get-started/choose-your-stack.mdx @@ -44,7 +44,7 @@ Managed platforms usually block custom operator class creation. That's why the d | Query layer | Path | What it looks like | |---|---|---| -| Drizzle | [Drizzle integration](/stack/cipherstash/encryption/drizzle) | An `encryptedType` column and typed query operators. Your Drizzle code keeps its shape. | +| Drizzle | [Drizzle integration](/integrations/drizzle) | Encrypted column types and typed query operators. Your Drizzle code keeps its shape. | | Supabase JS | [Supabase integration](/integrations/supabase) | `encryptedSupabase` wraps the client. `.eq()`, `.gt()`, `.order()` keep working. | | Prisma ORM 8 RC | [Prisma integration](/integrations/prisma) | Encrypted fields and query operators are generated from `schema.prisma`. | | Raw SQL | [Quickstart](/get-started/quickstart) | Encrypt the value, insert it, cast the query operand. | diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx index 086fec5..3368e3d 100644 --- a/content/docs/get-started/quickstart.mdx +++ b/content/docs/get-started/quickstart.mdx @@ -179,7 +179,7 @@ You encrypted a field, stored it, queried it without decrypting, and read it bac ## Next steps -- **Using an ORM or Supabase?** The [Drizzle](/stack/cipherstash/encryption/drizzle) and [Supabase](/integrations/supabase) integrations wrap your existing client so queries look normal. +- **Using an ORM or Supabase?** The [Drizzle](/integrations/drizzle) and [Supabase](/integrations/supabase) integrations wrap your existing client so queries look normal. - **No app changes possible?** [CipherStash Proxy](/reference/proxy) sits in front of Postgres and does this transparently. - **Bind decryption to a user.** [Provable access control](/solutions/provable-access) ties a value to the identity that encrypted it. - **Ready to deploy?** [Deployment](/guides/deployment) covers credential choices, environment promotion, and production rollout gates. diff --git a/content/docs/integrations/drizzle/api-reference/meta.json b/content/docs/integrations/drizzle/api-reference/meta.json new file mode 100644 index 0000000..dd99951 --- /dev/null +++ b/content/docs/integrations/drizzle/api-reference/meta.json @@ -0,0 +1,4 @@ +{ + "title": "API reference", + "pages": ["index"] +} diff --git a/content/docs/integrations/drizzle.mdx b/content/docs/integrations/drizzle/index.mdx similarity index 69% rename from content/docs/integrations/drizzle.mdx rename to content/docs/integrations/drizzle/index.mdx index e099aca..7900097 100644 --- a/content/docs/integrations/drizzle.mdx +++ b/content/docs/integrations/drizzle/index.mdx @@ -1,5 +1,5 @@ --- -title: Drizzle +title: Overview description: "Encrypted columns with Drizzle ORM: pick a concrete EQL column type, and capability-checked operators encrypt your query operands for you." type: tutorial components: [encryption, eql] @@ -9,8 +9,8 @@ integration: setup: code-only pairsWith: [supabase, prisma] verifiedAgainst: - stack: "1.0.0-rc.0" - eql: "3.0.0" + stack: "1.0.0-rc.4" + eql: "3.0.4" --- Drizzle keeps its shape. You declare each encrypted column with a concrete EQL type, and a set of query operators encrypt their operands before Drizzle builds the SQL. Your `select`, `where`, and `orderBy` read as they always did, and the database only ever compares ciphertext. @@ -39,19 +39,23 @@ The native Stack client used below discovers the four `CS_*` variables first, th ## Declare the table -The column type *is* the capability. There are no flags to configure. `TextEq` answers equality and nothing else, `IntegerOrd` answers ranges and ordering, `TextMatch` answers free-text containment, and a bare `Text` or `Bigint` is storage-only. +The column type *is* the capability. There are no flags to configure. `TextEq` answers equality and nothing else, `IntegerOrd` answers ranges and ordering, `TextMatch` answers free-text matching, and a bare `Text` or `Bigint` is storage-only. ```typescript filename="src/schema.ts" import { pgTable, integer } from "drizzle-orm/pg-core" -import { types } from "@cipherstash/stack-drizzle/v3" - -export const users = pgTable("users", { - id: integer("id").primaryKey().generatedAlwaysAsIdentity(), - email: types.TextEq("email"), // equality - age: types.IntegerOrd("age"), // ranges, ordering, and equality - bio: types.TextMatch("bio"), // free-text containment - balance: types.Bigint("balance"), // storage only -}) +import { encryptedIndexes, types } from "@cipherstash/stack-drizzle" + +export const users = pgTable( + "users", + { + id: integer("id").primaryKey().generatedAlwaysAsIdentity(), + email: types.TextEq("email"), // equality + age: types.IntegerOrd("age"), // ranges, ordering, and equality + bio: types.TextMatch("bio"), // free-text token matching + balance: types.Bigint("balance"), // storage only + }, + (table) => [...encryptedIndexes(table)], +) ``` Each factory maps to the matching EQL domain, so `types.TextEq("email")` types the column as `public.eql_v3_text_eq`. The variant model behind those names is in [core concepts](/reference/eql/core-concepts). @@ -61,7 +65,7 @@ Each factory maps to the matching EQL domain, so `types.TextEq("email")` types t | `types.Text(name)` | Store and decrypt only | `public.eql_v3_text` | | `types.TextEq(name)` | `eq`, `ne`, `inArray`, `notInArray` | `public.eql_v3_text_eq` | | `types.TextOrd(name)` | Ranges, ordering, plus equality | `public.eql_v3_text_ord` | -| `types.TextMatch(name)` | `contains` | `public.eql_v3_text_match` | +| `types.TextMatch(name)` | `matches` | `public.eql_v3_text_match` | | `types.TextSearch(name)` | All of the above, on text | `public.eql_v3_text_search` | | `types.IntegerOrd(name)` | Ranges, ordering, plus equality | `public.eql_v3_integer_ord` | @@ -76,21 +80,21 @@ Derive the encryption schema from the Drizzle table, build a typed client, and c ```typescript filename="src/db.ts" import { drizzle } from "drizzle-orm/postgres-js" import { - createEncryptionOperatorsV3, - extractEncryptionSchemaV3, -} from "@cipherstash/stack-drizzle/v3" -import { EncryptionV3 } from "@cipherstash/stack/v3" + createEncryptionOperators, + extractEncryptionSchema, +} from "@cipherstash/stack-drizzle" +import { Encryption } from "@cipherstash/stack" import { users } from "./schema" -export const usersSchema = extractEncryptionSchemaV3(users) +export const usersSchema = extractEncryptionSchema(users) -export const client = await EncryptionV3({ schemas: [usersSchema] }) -export const ops = createEncryptionOperatorsV3(client) +export const client = await Encryption({ schemas: [usersSchema] }) +export const ops = createEncryptionOperators(client) export const db = drizzle({ client: sqlClient }) ``` -`extractEncryptionSchemaV3` reads the encryption config straight off the column types, so there is no second schema to keep in sync with the first. +`extractEncryptionSchema` reads the encryption config straight off the column types, so there is no second schema to keep in sync with the first. ## Query @@ -118,15 +122,15 @@ const listed = await db.select().from(users) // Free-text token containment — bio is TextMatch const coffee = await db.select().from(users) - .where(await ops.contains(users.bio, "coffee")) + .where(await ops.matches(users.bio, "coffee")) ``` -The full operator set is `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `between`, `notBetween`, `inArray`, `notInArray`, `contains`, `exists`, `notExists`, `and`, `or`, `not`, `isNull`, `isNotNull`, `asc`, and `desc`. Null checks need no encryption, because a SQL `NULL` is never encrypted. +The full operator set is `eq`, `ne`, `gt`, `gte`, `lt`, `lte`, `between`, `notBetween`, `matches`, `contains`, `selector`, `inArray`, `notInArray`, `exists`, `notExists`, `and`, `or`, `not`, `isNull`, `isNotNull`, `asc`, and `desc`. Null checks need no encryption, because a SQL `NULL` is never encrypted. See the [API reference](/integrations/drizzle/api-reference#createencryptionoperators) for signatures and per-operator capability requirements. Applying an operator the column's type cannot answer throws `EncryptionOperatorError` rather than silently returning wrong rows. Ordering a `TextEq` column, for instance, has no ordering term to compare. <Callout type="warn"> -There is no `like` or `ilike`. SQL pattern matching is meaningless on ciphertext, so free-text search is `ops.contains`, which compares encrypted token sets. It matches whole indexed tokens rather than arbitrary substrings. +There is no `like` or `ilike`. SQL pattern matching is meaningless on ciphertext, so free-text search is `ops.matches`, which compares encrypted token sets. It matches whole indexed tokens rather than arbitrary substrings. `ops.contains` is reserved for encrypted JSON containment. </Callout> ## Insert and read @@ -156,20 +160,16 @@ await db.insert(users).values(rows.data) ## Indexes -At real row counts, add a functional index for each capability you query. The encrypted operators inline into these extractor functions, so an ordinary `CREATE INDEX` is all it takes: - -```sql filename="indexes.sql" -CREATE INDEX users_email_eq ON users USING hash (eql_v3.eq_term(email)); -CREATE INDEX users_age_ord ON users USING btree (eql_v3.ord_term(age)); -CREATE INDEX users_bio_match ON users USING gin (eql_v3.match_term(bio)); -ANALYZE users; -``` +`encryptedIndexes(table)` derives the recommended functional indexes from each encrypted column's capabilities. In the schema above it produces equality, ordering, and free-text indexes while ignoring the storage-only `balance` column. Generate and apply the result through your normal `drizzle-kit` migration workflow, then run `ANALYZE users`. -Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes). +See [`encryptedIndexes`](/integrations/drizzle/api-reference#encryptedindexes) for the emitted index forms. Index selection, `EXPLAIN` verification, and large-table build guidance are in [EQL indexes](/reference/eql/indexes). ## Where to next <Cards> + <Card title="API reference" href="/integrations/drizzle/api-reference"> + Exported column types, schema helpers, codecs, indexes, and encrypted query operators. + </Card> <Card title="Supabase" href="/integrations/supabase"> Drizzle over a Supabase Postgres connection. </Card> diff --git a/content/docs/integrations/drizzle/meta.json b/content/docs/integrations/drizzle/meta.json new file mode 100644 index 0000000..d185819 --- /dev/null +++ b/content/docs/integrations/drizzle/meta.json @@ -0,0 +1,5 @@ +{ + "title": "Drizzle", + "icon": "Drizzle", + "pages": ["index", "api-reference"] +} diff --git a/content/docs/integrations/meta.json b/content/docs/integrations/meta.json index 15136e6..78d30fa 100644 --- a/content/docs/integrations/meta.json +++ b/content/docs/integrations/meta.json @@ -1,5 +1,5 @@ { "title": "Integrations", "icon": "Blocks", - "pages": ["index", "supabase", "prisma", "..."] + "pages": ["index", "supabase", "prisma", "drizzle", "..."] } diff --git a/package.json b/package.json index 2b9a412..f851fd1 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "version": "0.0.0", "private": true, "scripts": { - "prebuild": "bun run generate-docs && bun run generate-docs:supabase && bun run generate-docs:prisma && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-mermaid && bun run validate-links && bun run validate-redirects", + "prebuild": "bun run generate-docs && bun run generate-docs:supabase && bun run generate-docs:drizzle && bun run generate-docs:prisma && bun run generate-docs:eql && bun run generate-docs:eql-api && bun run generate-docs:cli && bun run validate-content && bun run validate-mermaid && bun run validate-links && bun run validate-redirects", "build": "next build", "dev": "next dev -p 3001", "start": "next start", @@ -13,6 +13,7 @@ "format": "biome format --write", "generate-docs": "tsx scripts/generate-docs.ts", "generate-docs:supabase": "tsx scripts/generate-supabase-docs.ts", + "generate-docs:drizzle": "tsx scripts/generate-drizzle-docs.ts", "generate-docs:prisma": "tsx scripts/generate-prisma-docs.ts", "generate-docs:eql": "tsx scripts/generate-eql-docs.ts", "generate-docs:eql-api": "tsx scripts/generate-eql-api-docs.ts", diff --git a/scripts/generate-drizzle-docs.ts b/scripts/generate-drizzle-docs.ts new file mode 100644 index 0000000..a66af22 --- /dev/null +++ b/scripts/generate-drizzle-docs.ts @@ -0,0 +1,37 @@ +#!/usr/bin/env tsx +/** Generate the Drizzle ORM integration's API reference from Stack main. */ +import path from "node:path"; +import { type DocsConfig, generateDocs } from "./lib/docs-generator.js"; + +const drizzleConfig: DocsConfig = { + packageName: "@cipherstash/stack-drizzle", + projectName: "@cipherstash/stack-drizzle", + repoUrl: "https://github.com/cipherstash/stack.git", + sourceRef: "main", + tempDirName: ".tmp-stack-drizzle", + baseOutputDir: path.join( + process.cwd(), + "content/docs/integrations/drizzle/api-reference", + ), + publicPath: "/integrations/drizzle/api-reference", + metaTitle: "API reference", + versionedOutput: false, + entryPointBasePath: "packages/stack-drizzle/src", + entryModule: "index", + router: "module", + flattenOutputFiles: true, + entryPoints: ["./packages/stack-drizzle/src/index.ts"], + tsconfigInclude: ["packages/stack-drizzle/src/**/*"], + tagFilter: () => false, + referencePathSegment: "drizzle", + frontmatterGlobals: { + type: "reference", + components: ["encryption", "eql"], + audience: ["developer"], + }, +}; + +generateDocs(drizzleConfig).catch((error) => { + console.error("Failed to generate the Drizzle API reference:", error); + process.exit(1); +}); diff --git a/scripts/validate-content-api.ts b/scripts/validate-content-api.ts index 56fff7c..4490f1b 100644 --- a/scripts/validate-content-api.ts +++ b/scripts/validate-content-api.ts @@ -37,6 +37,7 @@ const SKIP_PATHS = [ "content/stack/reference/stack/", // TypeDoc output "content/docs/reference/stack/api-reference/", // TypeDoc output "content/docs/integrations/supabase/api-reference/", // TypeDoc output + "content/docs/integrations/drizzle/api-reference/", // TypeDoc output "content/docs/integrations/prisma/api-reference/", // TypeDoc output "content/stack/reference/eql/index.mdx", // generated EQL API reference "content/docs/reference/eql/functions.mdx", // generated diff --git a/scripts/validate-links.ts b/scripts/validate-links.ts index 1ba7014..b4c34e9 100644 --- a/scripts/validate-links.ts +++ b/scripts/validate-links.ts @@ -361,6 +361,7 @@ allBroken.sort((a, b) => a.file.localeCompare(b.file) || a.line - b.line); const GENERATED = [ "content/docs/reference/stack/api-reference/index.mdx", "content/docs/integrations/supabase/api-reference/index.mdx", + "content/docs/integrations/drizzle/api-reference/index.mdx", "content/docs/integrations/prisma/api-reference/index.mdx", ]; const missing = GENERATED.filter((d) => !fs.existsSync(path.join(ROOT, d))); diff --git a/src/components/icons/drizzle.tsx b/src/components/icons/drizzle.tsx new file mode 100644 index 0000000..9c4ee5e --- /dev/null +++ b/src/components/icons/drizzle.tsx @@ -0,0 +1,37 @@ +export function DrizzleIcon(props: React.SVGProps<SVGSVGElement>) { + return ( + <svg + viewBox="13 12.5 64 35" + fill="none" + xmlns="http://www.w3.org/2000/svg" + role="img" + aria-label="Drizzle" + {...props} + > + <rect + width="5.41766" + height="22.979" + transform="matrix(0.873028 0.48767 -0.497212 0.867629 24.459 24.3583)" + className="fill-black dark:fill-[#C5F74F]" + /> + <rect + width="5.41766" + height="22.979" + transform="matrix(0.873028 0.48767 -0.497212 0.867629 43.2793 12.6755)" + className="fill-black dark:fill-[#C5F74F]" + /> + <rect + width="5.41766" + height="22.979" + transform="matrix(0.873028 0.48767 -0.497212 0.867629 72.2383 12.676)" + className="fill-black dark:fill-[#C5F74F]" + /> + <rect + width="5.41766" + height="22.979" + transform="matrix(0.873028 0.48767 -0.497212 0.867629 53.4121 24.3583)" + className="fill-black dark:fill-[#C5F74F]" + /> + </svg> + ); +} diff --git a/src/lib/source.ts b/src/lib/source.ts index 6c2080d..7c990b3 100644 --- a/src/lib/source.ts +++ b/src/lib/source.ts @@ -3,10 +3,12 @@ import type * as PageTree from "fumadocs-core/page-tree"; import { type InferPageType, loader } from "fumadocs-core/source"; import { icons } from "lucide-react"; import { createElement } from "react"; +import { DrizzleIcon } from "@/components/icons/drizzle"; import { PrismaIcon } from "@/components/icons/prisma"; import { SupabaseIcon } from "@/components/icons/supabase"; const customIcons: Record<string, () => React.ReactElement> = { + Drizzle: () => createElement(DrizzleIcon, { width: 16, height: 16 }), Prisma: () => createElement(PrismaIcon, { width: 16, height: 16 }), Supabase: () => createElement(SupabaseIcon, { width: 16, height: 16 }), }; From 9eec8a41c9b567bb0f930c80bdfc33fb23ce8633 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 31 Jul 2026 00:11:48 +1000 Subject: [PATCH 146/151] docs: align references with Stack 1.0 --- IA.md | 13 +- content/docs/get-started/quickstart.mdx | 8 +- content/docs/integrations/drizzle/index.mdx | 12 +- .../integrations/supabase/edge-functions.mdx | 6 +- content/docs/reference/agent-skills.mdx | 121 ++++------ content/docs/reference/cli/auth.mdx | 41 ++-- content/docs/reference/cli/db.mdx | 41 +--- content/docs/reference/cli/doctor.mdx | 6 +- content/docs/reference/cli/encrypt.mdx | 24 +- content/docs/reference/cli/env.mdx | 36 ++- content/docs/reference/cli/eql.mdx | 93 ++++++-- content/docs/reference/cli/impl.mdx | 6 +- content/docs/reference/cli/index.mdx | 20 +- content/docs/reference/cli/init.mdx | 17 +- content/docs/reference/cli/manifest.mdx | 11 +- content/docs/reference/cli/meta.json | 3 +- content/docs/reference/cli/plan.mdx | 10 +- content/docs/reference/cli/schema.mdx | 8 +- content/docs/reference/cli/status.mdx | 6 +- content/docs/reference/cli/telemetry.mdx | 34 +++ content/docs/reference/cli/wizard.mdx | 6 +- content/docs/reference/eql/index.mdx | 35 ++- content/docs/solutions/data-residency.mdx | 2 +- content/docs/solutions/provable-access.mdx | 2 +- scripts/cli-supplements/auth.md | 27 +-- scripts/fixtures/stash-manifest.json | 222 +++++++++--------- scripts/generate-cli-docs.ts | 20 +- scripts/generate-docs.ts | 2 +- scripts/generate-drizzle-docs.ts | 4 +- scripts/generate-prisma-docs.ts | 4 +- scripts/generate-supabase-docs.ts | 4 +- 31 files changed, 442 insertions(+), 402 deletions(-) create mode 100644 content/docs/reference/cli/telemetry.mdx diff --git a/IA.md b/IA.md index c3ef001..6f51750 100644 --- a/IA.md +++ b/IA.md @@ -443,13 +443,10 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). - [ ] OG images for v2 pages (route only covers legacy tree) - [ ] Correctness CI: snippet type-checking, SQL-vs-EQL-Docker, terminology lint (CIP-3337) - [ ] llms.txt curation + Cloudflare AI crawl policy + md-degradation check (CIP-3339) -- [ ] ⛔ EQL 3.0.0 release alignment (CIP-3352, blocks CIP-3335) — the EQL reference - documents the release as decided, ahead of the eql_v3 branch: payload `v: 3`, - OPE SEM specifier, Docker tag `:17-3.0.0`, `version()` output, schema files. - Each must land upstream or be walked back in the docs before merge -- [ ] ⛔ Stack SDK Supabase-wrapper v3 alignment (CIP-3355, blocks CIP-3335) — the - Supabase section documents the 0.18 wrapper API with v3 wire semantics; the - wrapper itself is still v2 (composite type, `like` wire op, v2 payloads) and - the SDK's v3 branches don't touch `src/supabase/` yet +- [x] EQL 3.0.4 release alignment (CIP-3352) — the EQL reference and CLI target + the released v3 schema and payload. +- [x] Stack SDK and Supabase-wrapper v3 alignment (CIP-3355) — + `@cipherstash/stack` and `@cipherstash/stack-supabase` 1.0.0 are released, + and the integration docs target their stable v3 surfaces. - [ ] Flip `ENABLE_V2_REDIRECTS=1`, delete `content/stack` + `/stack` routes + legacy loader (CIP-3335) - [ ] Consistency sweep + Supabase listing v3 revision (CIP-3335) diff --git a/content/docs/get-started/quickstart.mdx b/content/docs/get-started/quickstart.mdx index 3368e3d..c1175c0 100644 --- a/content/docs/get-started/quickstart.mdx +++ b/content/docs/get-started/quickstart.mdx @@ -5,9 +5,9 @@ type: tutorial components: [encryption, eql, cli, platform] audience: [developer] verifiedAgainst: - stack: "1.0.0-rc.0" - cli: "1.0.0-rc.0" - eql: "3.0.0" + stack: "1.0.0" + cli: "1.0.0" + eql: "3.0.4" --- CipherStash encrypts your data at the field level. Every value gets its own encryption key, and the database never sees plaintext. A breach, a compromised agent, or a curious insider sees ciphertext. @@ -16,7 +16,7 @@ By the end of this page you will have encrypted a field, stored it in Postgres, ## Before you start -- Node.js 18 or later. +- Node.js 22 or later. - A Postgres database you can connect to. - A [CipherStash account](https://dashboard.cipherstash.com/sign-up). The free plan is enough. diff --git a/content/docs/integrations/drizzle/index.mdx b/content/docs/integrations/drizzle/index.mdx index 7900097..9e28935 100644 --- a/content/docs/integrations/drizzle/index.mdx +++ b/content/docs/integrations/drizzle/index.mdx @@ -9,7 +9,7 @@ integration: setup: code-only pairsWith: [supabase, prisma] verifiedAgainst: - stack: "1.0.0-rc.4" + stack: "1.0.0" eql: "3.0.4" --- @@ -19,16 +19,18 @@ Drizzle keeps its shape. You declare each encrypted column with a concrete EQL t ```bash cta cta-type="install" example-id="install-drizzle" npm install @cipherstash/stack @cipherstash/stack-drizzle drizzle-orm +npm install --save-dev drizzle-kit ``` -Then install EQL into your database: +Add EQL to your Drizzle migration history: ```bash -npx stash eql install +npx stash eql migration --drizzle +npx drizzle-kit migrate ``` -<Callout type="warn"> -The v3 install (the default) runs directly against the database and cannot generate a Drizzle migration: `--drizzle` is rejected for a v3 install. EQL is therefore not part of your migration history, so a database rebuilt from migrations will not have it. Re-run the install after a rebuild. +<Callout type="info"> +`stash eql migration --drizzle` uses your project-local `drizzle-kit` to create a custom migration, then fills it with the EQL v3 install SQL. Pass `--out` if your migration directory is not `drizzle/`. For a direct, out-of-band install instead, run `npx stash eql install`. </Callout> ## Credentials diff --git a/content/docs/integrations/supabase/edge-functions.mdx b/content/docs/integrations/supabase/edge-functions.mdx index 84969c0..079f141 100644 --- a/content/docs/integrations/supabase/edge-functions.mdx +++ b/content/docs/integrations/supabase/edge-functions.mdx @@ -22,9 +22,9 @@ Map the `wasm-inline` entries in your function's `deno.json`: ```jsonc title="supabase/functions/encrypt/deno.json" { "imports": { - "@cipherstash/stack/wasm-inline": "npm:@cipherstash/stack@^0.18/wasm-inline", - "@cipherstash/auth/wasm-inline": "npm:@cipherstash/auth@^0.41/wasm-inline", - "@cipherstash/auth/cookies": "npm:@cipherstash/auth@^0.41/cookies" + "@cipherstash/stack/wasm-inline": "npm:@cipherstash/stack@^1.0.0/wasm-inline", + "@cipherstash/auth/wasm-inline": "npm:@cipherstash/auth@^0.42/wasm-inline", + "@cipherstash/auth/cookies": "npm:@cipherstash/auth@^0.42/cookies" } } ``` diff --git a/content/docs/reference/agent-skills.mdx b/content/docs/reference/agent-skills.mdx index 88eb5e5..887f6ba 100644 --- a/content/docs/reference/agent-skills.mdx +++ b/content/docs/reference/agent-skills.mdx @@ -1,109 +1,74 @@ --- title: Agent skills -description: "Install CipherStash agent skills to give your AI coding assistant accurate knowledge of encryption setup, schema building, and integrations." +description: "Install CipherStash agent skills to give your AI coding assistant accurate knowledge of encryption setup, schema building, deployment, and integrations." type: reference components: [encryption, cli] +verifiedAgainst: + stack: "1.0.0" + cli: "1.0.0" --- -CipherStash publishes a set of [agent skills](https://skills.sh/) that give AI coding assistants deep knowledge of the Stack SDK, CLI, and integrations. When installed, your agent can generate encryption schemas, write integration code, and guide you through database setup without hallucinating API surfaces. +CipherStash Stack 1.0 publishes 13 [agent skills](https://skills.sh/) covering the stable SDK, CLI, database surfaces, deployment workflow, and integrations. The skills give an AI coding assistant the exact APIs, commands, constraints, and rollout sequence it needs without making your application code part of the prompt. -Skills work with any AI coding tool that supports the skills protocol, including Claude Code, Cursor, GitHub Copilot, Windsurf, Cline, Gemini, AMP, Goose, Roo, and Trae. +Skills work with AI coding tools that support the skills protocol, including Claude Code, Codex, Cursor, GitHub Copilot, Windsurf, Cline, Gemini, AMP, Goose, Roo, and Trae. -## Install skills +## Install every skill -Skills are installed per project. Run this in your project root: +Install the complete collection in your project root: ```bash cta cta-type="install" example-id="install-agent-skills" npx skills add cipherstash/stack ``` -This installs all six CipherStash skills. Your agent activates the relevant skill based on what you are working on. +This installs all 13 skills. Your agent activates the relevant ones from the task and code it is working on. -### Install via the wizard +## Install through the Stash workflow -`@cipherstash/wizard` offers to copy integration-appropriate skills into `./.claude/skills/` after its post-agent steps: +The `stash` 1.0 CLI bundles the skills and selects a smaller set for the integration detected by `stash init`. When `stash impl` hands the reviewed plan to an agent, it copies the selected skills into the tool's skill directory or includes their guidance in the generated agent instructions. -| Integration | Skills installed | -|---|---| -| Drizzle | `stash-encryption`, `stash-drizzle`, `stash-cli` | -| Supabase | `stash-encryption`, `stash-supabase`, `stash-cli` | -| Prisma or generic | `stash-encryption`, `stash-cli` | +| Integration | Skills selected | +| --- | --- | +| Drizzle | `stash-encryption`, `stash-drizzle`, `stash-indexing`, `stash-deployment`, `stash-zerokms`, `stash-auth`, `stash-cli` | +| Supabase | `stash-encryption`, `stash-supabase`, `stash-indexing`, `stash-postgres`, `stash-edge`, `stash-deployment`, `stash-zerokms`, `stash-auth`, `stash-cli` | +| Prisma ORM 8 | `stash-encryption`, `stash-prisma`, `stash-indexing`, `stash-deployment`, `stash-zerokms`, `stash-auth`, `stash-cli` | +| PostgreSQL | `stash-encryption`, `stash-indexing`, `stash-postgres`, `stash-edge`, `stash-deployment`, `stash-zerokms`, `stash-auth`, `stash-cli` | -## Available skills - -### stash-encryption - -Core field-level encryption with `@cipherstash/stack`. The foundational skill, covering the full encryption API. - -**Covers:** schema definition with `encryptedTable` and `encryptedColumn`; single and bulk encrypt/decrypt; model operations (`encryptModel`, `decryptModel`, `bulkEncryptModels`, `bulkDecryptModels`); searchable encryption (equality, free-text search, range queries, encrypted JSONB); identity-aware encryption with `LockContext`; multi-tenant isolation with keysets; error handling with the `Result` pattern; migration from `@cipherstash/protect`. - -**Activates when:** you are defining encrypted schemas, writing encrypt/decrypt logic, or working with the `@cipherstash/stack` package. - -**Related docs:** [Stack SDK](/reference/stack) - -### stash-cli - -The CipherStash CLI (`stash`) for database setup, schema management, and project initialization. - -**Covers:** `stash.config.ts` configuration; the setup lifecycle (`init`, `plan`, `impl`, `status`); database commands (`db install`, `db upgrade`, `db push`, `db validate`, `db status`, `db test-connection`); `schema build`; `auth login`; the programmatic API (`EQLInstaller`, `loadStashConfig`, `defineConfig`, `loadBundledEqlSql`); Drizzle migration mode (`--drizzle`); Supabase-compatible installs (`--supabase`); automatic Supabase and Drizzle detection; automatic OPE fallback on managed databases. - -**Activates when:** you are working with `stash.config.ts`, running CLI commands, or setting up EQL in a database. - -**Related docs:** [CLI reference](/reference/cli) - -### stash-drizzle - -Drizzle ORM integration using `@cipherstash/stack-drizzle`, covering both EQL v2 and the EQL v3 dialect on `@cipherstash/stack-drizzle/v3`. - -**Covers:** the `encryptedType<T>()` column type; `extractEncryptionSchema()`; `createEncryptionOperators()`; query operators (`eq`, `ne`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`, `between`, `inArray`, `asc`, `desc`); encrypted JSONB operators (`jsonbPathExists`, `jsonbPathQueryFirst`, `jsonbGet`); batched `and()` / `or()` conditions; EQL migration generation; non-encrypted column fallback; Express, Hono, and Next.js examples. - -**Activates when:** you are using Drizzle ORM with encrypted columns, or importing from `@cipherstash/stack-drizzle`. +Claude Code receives skills under `.claude/skills/`; Codex receives them under `.codex/skills/`. Handoffs to tools that do not load a skill directory receive the same guidance through the generated agent instructions. -**Related docs:** [Drizzle integration](/integrations/drizzle) - -### stash-supabase - -Supabase integration using `@cipherstash/stack-supabase`. - -**Covers:** the `encryptedSupabase()` wrapper; transparent encryption on `insert`, `update`, and `upsert`; transparent decryption on `select`, `single`, and `maybeSingle`; encrypted query filters (`eq`, `neq`, `like`, `ilike`, `gt`, `gte`, `lt`, `lte`, `in`, `match`, `or`, `not`, `filter`); identity-aware encryption with `.withLockContext()`; audit logging with `.audit()`; response types and error handling; Supabase-specific database setup. - -**Activates when:** you are using Supabase with encrypted columns, or importing from `@cipherstash/stack-supabase`. - -**Related docs:** [Supabase integration](/integrations/supabase) - -### stash-dynamodb - -Amazon DynamoDB integration using `@cipherstash/stack/dynamodb`. - -**Covers:** the `encryptedDynamoDB()` helper; attribute naming conventions (`__source` and `__hmac` suffixes); single and bulk encrypt/decrypt model operations; querying encrypted partition keys, sort keys, and GSI keys via HMAC attributes; nested object encryption with `encryptedField`; audit logging; table design patterns; examples with `PutCommand`, `GetCommand`, `QueryCommand`, and `BatchWriteCommand`. - -**Activates when:** you are using DynamoDB with encrypted attributes, or importing from `@cipherstash/stack/dynamodb`. - -**Related docs:** [DynamoDB integration](/stack/cipherstash/encryption/dynamodb) - -### stash-supply-chain-security - -Supply-chain security controls for a project that depends on `@cipherstash/stack`. - -**Covers:** post-install script policy (`onlyBuiltDependencies`); install cooldown (`minimumReleaseAge`); lockfile integrity (`blockExoticSubdeps` and the lockfile registry check); frozen-lockfile CI; registry pinning via `.npmrc`; Dependabot cooldown; and `CODEOWNERS`. +## Available skills -**Activates when:** you are modifying CI workflows, pnpm config, dependency updates, `.github/dependabot.yml`, or anything that changes how packages enter your build. +| Skill | What it covers | +| --- | --- | +| `stash-encryption` | The stable `@cipherstash/stack` EQL v3 typed schema, `EncryptionClient`, encryption and model operations, searchable fields, encrypted JSON, bulk operations, and migration lifecycle. | +| `stash-auth` | Credentials, `AutoStrategy`, `AccessKeyStrategy`, `OidcFederationStrategy`, `DeviceSessionStrategy`, the four `CS_*` variables, lock contexts, and authentication failures. | +| `stash-zerokms` | Keysets, clients, client keys, grants, revocation, key hierarchy, multi-tenant isolation, and diagnosing keyset mismatches. | +| `stash-indexing` | Functional indexes over EQL v3 term extractors, managed-Postgres constraints, `ORDER BY` and `GROUP BY` shapes, and `EXPLAIN` verification. | +| `stash-deployment` | The safe multi-deploy encryption rollout, credentials, backfill, read cutover, rollback, Prisma Compute, and preview environments. | +| `stash-cli` | `init`, `plan`, `impl`, `status`, authentication, `eql install/migration/repair/upgrade/status`, validation, backfill, drop, schema generation, and the agent interface. | +| `stash-drizzle` | `@cipherstash/stack-drizzle` 1.0 column factories, schema extraction, indexes, EQL v3 migration generation, and encrypted query operators such as `eq`, `matches`, `contains`, and `selector`. | +| `stash-supabase` | The `encryptedSupabase` wrapper, encrypted mutations and reads, filters and ordering, identity-aware encryption, and PostgREST limitations. | +| `stash-prisma` | `@cipherstash/stack-prisma` 1.0, encrypted Prisma column types, runtime envelopes, `decryptAll`, `eql*` query operators, and Prisma-owned EQL migrations. | +| `stash-postgres` | Hand-written EQL v3 SQL with `pg` or `postgres`, typed bind parameters, operator selection, `encryptQuery`, and double-encoding failures. | +| `stash-edge` | The `@cipherstash/stack/wasm-inline` entry for Deno, Supabase Edge Functions, Cloudflare Workers, and Bun, including explicit credentials and WASM-specific client behavior. | +| `stash-dynamodb` | The `@cipherstash/stack/dynamodb` surface, encrypted attributes, HMAC query attributes, nested values, bulk operations, and DynamoDB table design. | +| `stash-supply-chain-security` | Dependency admission, install cooldowns, lockfile integrity, frozen CI installs, registry pinning, Dependabot, `CODEOWNERS`, and npm provenance. | ## How skills work -When you ask your agent to help with a CipherStash task, it checks which skills are installed and activates the relevant one. The skill supplies the agent with the complete API surface (method signatures, types, return values), code examples matching the current SDK version, integration-specific patterns, and known limitations. +An installed skill activates when the task matches its description. Integration skills link back to the cross-cutting skills instead of duplicating their rules: authentication questions route to `stash-auth`, index design to `stash-indexing`, production rollout to `stash-deployment`, and key access to `stash-zerokms`. -This means your agent writes accurate CipherStash code on the first try, rather than guessing at API shapes or generating outdated patterns. +That separation keeps the guidance consistent. A Drizzle, Supabase, Prisma, or raw PostgreSQL task uses the same released encryption model and deployment safety rules while adding only the query and schema behavior specific to that integration. ## Typical workflow -1. **Initialize your project.** Ask your agent to set up CipherStash and it runs `stash init`, which authenticates you, installs EQL, scaffolds the encryption client, and writes `.cipherstash/context.json`. -2. **Draft a plan.** `stash plan` produces `.cipherstash/plan.md`, listing the tables and columns to encrypt. Review it before proceeding. -3. **Execute the plan.** `stash impl` reads the plan and wires up `encryptModel` and `decryptModel` in your codebase. -4. **Handle edge cases.** The agent knows about searchable encryption constraints, operator family limitations, identity-aware encryption, and multi-tenant keysets. +1. **Initialize the project.** Run `npx stash init` with `--drizzle`, `--supabase`, or `--prisma` when appropriate. The CLI authenticates, inspects the project, installs compatible packages, and records context under `.cipherstash/`. +2. **Draft a plan.** Run `npx stash plan`. The selected skills help the agent produce a reviewable `.cipherstash/plan.md` without changing the application. +3. **Review the plan.** Confirm the selected columns, capabilities, indexes, migration sequence, and deployment gates. +4. **Implement it.** Run `npx stash impl`. The CLI hands the plan and integration-specific skill set to your chosen agent. +5. **Track the rollout.** Run `npx stash status` as schema changes, dual writes, backfill, read cutover, and plaintext removal progress. ## Requirements -- An AI coding tool that supports the [skills protocol](https://skills.sh/) -- Node.js 18 or later +- Node.js 22 or later +- An AI coding tool that supports skills or generated agent instructions - A CipherStash account ([sign up](https://dashboard.cipherstash.com/sign-up)) diff --git a/content/docs/reference/cli/auth.mdx b/content/docs/reference/cli/auth.mdx index 2ba2a00..c0963c0 100644 --- a/content/docs/reference/cli/auth.mdx +++ b/content/docs/reference/cli/auth.mdx @@ -4,20 +4,25 @@ description: "Reference for the `stash auth` commands." type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> The `stash auth` command group. ### `auth login` -Authenticate with CipherStash +Runs the OAuth 2.0 device authorization flow: +1. Pick a region for your workspace. +2. Approve in the browser — the URL is printed, so it works over SSH/headless. +3. The CLI polls until you approve, then stores a short-lived token. +4. Your device is bound to the workspace's default keyset, so later + commands authenticate without a fresh login. ```bash npx stash auth login [flags] @@ -32,6 +37,7 @@ npx stash auth login [flags] | `--no-open` | Don't auto-open the verification URL in a browser (already implied by --json). | | `--supabase` | Track Supabase as the referrer. | | `--drizzle` | Track Drizzle as the referrer. | +| `--prisma` | Track Prisma as the referrer. | #### Examples @@ -65,24 +71,13 @@ npx stash auth regions npx stash auth regions --json ``` -## How authentication works +## Switching workspaces -`stash auth login` runs the OAuth 2.0 **device authorization flow**: +`stash` 1.0.0 keeps one active device-session profile at +`~/.cipherstash/auth.json`. To switch workspaces, run `npx stash auth login` +again and complete authorization for the target workspace. The new login +replaces the active session. -1. You pick a **region** for your CipherStash workspace. -2. The CLI opens your browser to a verification URL (and prints it, so it also - works over SSH or in a headless/agent environment) where you approve the - request. -3. Meanwhile the CLI polls CipherStash until you approve, then receives a - short-lived access token (it reports the token's expiry). -4. Your device is **bound to the workspace's default keyset**, so later commands - (`stash eql install`, `stash db push`, …) authenticate without a fresh login. - -<Callout title="Good to know"> -Login is device- and workspace-scoped. Authenticating from a new machine, or for a different workspace, re-runs the device flow. -</Callout> - -{/* TODO(verify with product): profiles, multiple workspaces, and switching -between them (where they're stored and how they're selected) belong here, or -in a linked CLI concept page. The CLI currently exposes only `auth login`; -confirm the profile / workspace-switching surface before documenting it. */} +`stash init` reuses the active session when it is still valid, so switch +workspaces before running `init`. There is no separate profile manager or +workspace-switch command in `stash` 1.0.0. diff --git a/content/docs/reference/cli/db.mdx b/content/docs/reference/cli/db.mdx index e0c26b2..0d0e6ca 100644 --- a/content/docs/reference/cli/db.mdx +++ b/content/docs/reference/cli/db.mdx @@ -4,48 +4,17 @@ description: "Reference for the `stash db` commands." type: reference components: [cli, eql] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> The `stash db` command group. -### `db push` - -Push encryption schema (writes pending if active config already exists) - -```bash -npx stash db push [flags] -``` - -#### Flags - -| Flag | Description | -| --- | --- | -| `--dry-run` | Show what would happen without making changes. | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | - - -### `db activate` - -Promote pending → active without renames (use after additive db push) - -```bash -npx stash db activate [flags] -``` - -#### Flags - -| Flag | Description | -| --- | --- | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | - - ### `db validate` Validate encryption schema @@ -60,7 +29,7 @@ npx stash db validate [flags] | --- | --- | | `--supabase` | Use Supabase-compatible mode. | | `--exclude-operator-family` | Skip operator family creation. | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | +| `--database-url <url>` | Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these. (env: `DATABASE_URL`) | ### `db migrate` @@ -83,4 +52,4 @@ npx stash db test-connection [flags] | Flag | Description | | --- | --- | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | +| `--database-url <url>` | Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these. (env: `DATABASE_URL`) | diff --git a/content/docs/reference/cli/doctor.mdx b/content/docs/reference/cli/doctor.mdx index 1c6efb8..176e425 100644 --- a/content/docs/reference/cli/doctor.mdx +++ b/content/docs/reference/cli/doctor.mdx @@ -4,13 +4,13 @@ description: "Diagnose install problems (native binaries, runtime)" type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> Diagnose install problems (native binaries, runtime) diff --git a/content/docs/reference/cli/encrypt.mdx b/content/docs/reference/cli/encrypt.mdx index 9c03ae8..126a6c8 100644 --- a/content/docs/reference/cli/encrypt.mdx +++ b/content/docs/reference/cli/encrypt.mdx @@ -4,13 +4,13 @@ description: "Reference for the `stash encrypt` commands." type: reference components: [cli, eql] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> The `stash encrypt` command group. @@ -53,24 +53,6 @@ npx stash encrypt backfill [flags] | `--force` | Proceed past non-fatal safety checks. | -### `encrypt cutover` - -Rename swap encrypted → primary column - -```bash -npx stash encrypt cutover [flags] -``` - -#### Flags - -| Flag | Description | -| --- | --- | -| `--table <name>` | Target table. | -| `--column <name>` | Target column. | -| `--proxy-url <url>` | Proxy URL to verify against. | -| `--migrations-dir <path>` | Directory to write the rename migration into. | - - ### `encrypt drop` Generate a migration to drop the plaintext column diff --git a/content/docs/reference/cli/env.mdx b/content/docs/reference/cli/env.mdx index fe277a9..4cf0a15 100644 --- a/content/docs/reference/cli/env.mdx +++ b/content/docs/reference/cli/env.mdx @@ -1,19 +1,31 @@ --- title: stash env -description: "(experimental) Print production env vars for deployment" +description: "Mint deployment credentials and print them as env vars" type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> -(experimental) Print production env vars for deployment +Mints a fresh ZeroKMS client and a CipherStash access key from your +device-code session (`stash auth login`), then prints the four env +vars a deployed app needs: CS_WORKSPACE_CRN, CS_CLIENT_ID, +CS_CLIENT_KEY, CS_CLIENT_ACCESS_KEY. + +The access key is created with the member role (the CLI never mints +admin keys) and is shown exactly once — pipe the output into your +deployment secret store. Creating access keys requires your user to +have the admin role in the workspace. + +Stdout carries only the dotenv block (or the --json events); +progress UI goes to stderr, so `stash env --name x > prod.env` +and pipes into secret stores are safe. ```bash npx stash env [flags] @@ -23,4 +35,16 @@ npx stash env [flags] | Flag | Description | | --- | --- | -| `--write` | Write the vars to a file instead of printing them. | +| `--name <name>` | Name for the minted access key and ZeroKMS client. Prompted for interactively; required in non-interactive runs. | +| `--write [path]` | Write the vars to a file (default .env.production.local, mode 0600) instead of printing them. An existing file prompts before overwriting — and is refused non-interactively — before anything is minted. | +| `--json` | Emit machine-readable NDJSON (a \{ status: "minted" \} object, or \{ status: "written" \} with --write — deliberately secret-free since the secrets are in the file; failures are \{ status: "error" \}). Implies no prompts. | + + +## Examples + +```bash +npx stash env --name my-app-prod +npx stash env --name my-app-prod --write +npx stash env --name staging --write .env.staging.local +npx stash env --name edge-dev --json +``` diff --git a/content/docs/reference/cli/eql.mdx b/content/docs/reference/cli/eql.mdx index 63bf8be..813e1bb 100644 --- a/content/docs/reference/cli/eql.mdx +++ b/content/docs/reference/cli/eql.mdx @@ -4,13 +4,13 @@ description: "Reference for the `stash eql` commands." type: reference components: [cli, eql] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> The `stash eql` command group. @@ -30,18 +30,78 @@ npx stash eql install [flags] | `--force` | Reinstall / overwrite even if already installed. | | `--dry-run` | Show what would happen without making changes. | | `--supabase` | Use Supabase-compatible mode (auto-detected from DATABASE_URL). | -| `--drizzle` | Generate a Drizzle migration instead of direct install (auto-detected from project). | -| `--migration` | Write a Supabase migration file instead of running SQL directly (requires --supabase). | -| `--direct` | Run the SQL directly against the database (requires --supabase; mutually exclusive with --migration). | -| `--migrations-dir <path>` | Override the Supabase migrations directory (requires --supabase). (default: `supabase/migrations`) | -| `--exclude-operator-family` | Skip operator family creation. | -| `--eql-version <2\|3>` | EQL generation to target. v3 is the native eql_v3.* domain schema (direct install only for now). (default: `2`) | -| `--latest` | Fetch the latest EQL from GitHub (v2 only). | -| `--name <name>` | With --drizzle: name for the generated migration (defaults to a scaffold name). | -| `--out <path>` | With --drizzle: directory to write the generated migration into. | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | +| `--database-url <url>` | Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these. (env: `DATABASE_URL`) | +### `eql migration` + +Generate an EQL v3 install migration for your ORM (Drizzle; Prisma Next installs EQL through its own migrations) + +```bash +npx stash eql migration [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--drizzle` | Emit a Drizzle custom migration containing the EQL v3 install SQL. | +| `--prisma` | Not needed: Prisma Next installs EQL through its own migration framework — run `prisma-next migrate` instead. | +| `--supabase` | Append the Supabase role grants (eql_v3 + eql_v3_internal for anon/authenticated/service_role). | +| `--name <name>` | Name for the generated migration (Drizzle). Letters, numbers, dashes, underscores only. Defaults to `install-eql`. | +| `--out <path>` | Directory drizzle-kit writes the migration into (passed to `drizzle-kit generate --out`). Defaults to `drizzle`; set it to match your drizzle.config.ts. | +| `--dry-run` | Show what would happen without making changes. | + + +#### Examples + +```bash +npx stash eql migration --drizzle +npx stash eql migration --drizzle --supabase +``` + +### `eql repair` + +Sweep an existing Drizzle output directory for in-place +`ALTER COLUMN ... SET DATA TYPE <eql domain>` statements — which cannot run, +because Postgres has no cast from text/numeric to an EQL domain — and rewrite +each into an additive encrypted column that preserves the source column. + +This is the same sweep `eql migration --drizzle` runs, without having to +generate an EQL install migration you do not want just to trigger it. + +Migrations the database has already applied are reported and left alone: +rewriting one would leave its .sql describing a shape that database never got +from it, so a fresh CI or staging database replaying the file would silently +diverge. Pass --database-url so that check can run; without it the repair +proceeds and warns that applied state could not be verified. If your +drizzle.config.ts overrides `migrations.table` / `migrations.schema`, name +the ledger with --migrations-table — otherwise the check queries the default +relation, finds nothing, and reports applied state as unverified. + +```bash +npx stash eql repair [flags] +``` + +#### Flags + +| Flag | Description | +| --- | --- | +| `--drizzle` | Repair a Drizzle migration directory. | +| `--out <path>` | Directory holding the migrations to sweep. Defaults to `drizzle`; set it to match your drizzle.config.ts. | +| `--migrations-table <[schema.]table>` | Drizzle's migration ledger, when drizzle.config.ts overrides `migrations.table` / `migrations.schema`. Defaults to `drizzle.__drizzle_migrations`. Only read with --database-url. | +| `--dry-run` | Show what would happen without making changes. | +| `--database-url <url>` | Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these. (env: `DATABASE_URL`) | + + +#### Examples + +```bash +npx stash eql repair --drizzle +npx stash eql repair --drizzle --dry-run +npx stash eql repair --drizzle --out db/migrations --database-url postgres://… +``` + ### `eql upgrade` Upgrade EQL extensions to the latest version @@ -56,10 +116,7 @@ npx stash eql upgrade [flags] | --- | --- | | `--dry-run` | Show what would happen without making changes. | | `--supabase` | Use Supabase-compatible mode. | -| `--exclude-operator-family` | Skip operator family creation. | -| `--eql-version <2\|3>` | EQL generation to target. (default: `2`) | -| `--latest` | Fetch the latest EQL from GitHub (v2 only). | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | +| `--database-url <url>` | Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these. (env: `DATABASE_URL`) | ### `eql status` @@ -74,4 +131,4 @@ npx stash eql status [flags] | Flag | Description | | --- | --- | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | +| `--database-url <url>` | Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these. (env: `DATABASE_URL`) | diff --git a/content/docs/reference/cli/impl.mdx b/content/docs/reference/cli/impl.mdx index b3ce114..af1fbd0 100644 --- a/content/docs/reference/cli/impl.mdx +++ b/content/docs/reference/cli/impl.mdx @@ -4,13 +4,13 @@ description: "Execute the plan with a local agent" type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> Execute the plan with a local agent diff --git a/content/docs/reference/cli/index.mdx b/content/docs/reference/cli/index.mdx index b8f6a0a..eadd67e 100644 --- a/content/docs/reference/cli/index.mdx +++ b/content/docs/reference/cli/index.mdx @@ -1,20 +1,20 @@ --- title: CLI navTitle: Overview -description: "Command reference for the stash CLI, generated from v0.17.0." +description: "Command reference for the stash CLI, generated from v1.0.0." type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> -The `stash` CLI. Install with `npx stash@0.17.0`. Every command accepts `--help` and `--version`. +The `stash` CLI. Install with `npx stash@1.0.0`. Every command accepts `--help` and `--version`. ### Setup & workflow @@ -27,6 +27,7 @@ The `stash` CLI. Install with `npx stash@0.17.0`. Every command accepts `--help` | [`wizard`](/reference/cli/wizard) | AI-guided encryption setup (reads your codebase) | | [`doctor`](/reference/cli/doctor) | Diagnose install problems (native binaries, runtime) | | [`manifest`](/reference/cli/manifest) | Print the structured, versioned command surface | +| [`telemetry`](/reference/cli/telemetry) | Manage anonymous usage analytics | ### Auth @@ -40,6 +41,8 @@ The `stash` CLI. Install with `npx stash@0.17.0`. Every command accepts `--help` | Command | Description | | --- | --- | | [`eql install`](/reference/cli/eql#eql-install) | Scaffold stash.config.ts (if missing) and install EQL extensions | +| [`eql migration`](/reference/cli/eql#eql-migration) | Generate an EQL v3 install migration for your ORM (Drizzle; Prisma Next installs EQL through its own migrations) | +| [`eql repair`](/reference/cli/eql#eql-repair) | Repair migrations drizzle-kit generated with an un-runnable ALTER COLUMN to an encrypted type | | [`eql upgrade`](/reference/cli/eql#eql-upgrade) | Upgrade EQL extensions to the latest version | | [`eql status`](/reference/cli/eql#eql-status) | Show EQL installation status | @@ -47,8 +50,6 @@ The `stash` CLI. Install with `npx stash@0.17.0`. Every command accepts `--help` | Command | Description | | --- | --- | -| [`db push`](/reference/cli/db#db-push) | Push encryption schema (writes pending if active config already exists) | -| [`db activate`](/reference/cli/db#db-activate) | Promote pending → active without renames (use after additive db push) | | [`db validate`](/reference/cli/db#db-validate) | Validate encryption schema | | [`db migrate`](/reference/cli/db#db-migrate) | Run pending encrypt config migrations (not yet implemented) | | [`db test-connection`](/reference/cli/db#db-test-connection) | Test database connectivity | @@ -66,11 +67,10 @@ The `stash` CLI. Install with `npx stash@0.17.0`. Every command accepts `--help` | [`encrypt status`](/reference/cli/encrypt#encrypt-status) | Show per-column migration status (phase, progress, drift) | | [`encrypt plan`](/reference/cli/encrypt#encrypt-plan) | Diff intent (.cipherstash/migrations.json) vs observed state | | [`encrypt backfill`](/reference/cli/encrypt#encrypt-backfill) | Resumably encrypt plaintext into the encrypted column | -| [`encrypt cutover`](/reference/cli/encrypt#encrypt-cutover) | Rename swap encrypted → primary column | | [`encrypt drop`](/reference/cli/encrypt#encrypt-drop) | Generate a migration to drop the plaintext column | -### Experimental +### Deployment | Command | Description | | --- | --- | -| [`env`](/reference/cli/env) | (experimental) Print production env vars for deployment | +| [`env`](/reference/cli/env) | Mint deployment credentials and print them as env vars | diff --git a/content/docs/reference/cli/init.mdx b/content/docs/reference/cli/init.mdx index 518544b..e7fc9ef 100644 --- a/content/docs/reference/cli/init.mdx +++ b/content/docs/reference/cli/init.mdx @@ -4,16 +4,19 @@ description: "Initialize CipherStash for your project" type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> -Initialize CipherStash for your project +Set up CipherStash end-to-end: authenticate, introspect your database, +install dependencies, install EQL, and hand off the rest to your local +coding agent. Every prompt has a non-interactive escape hatch, so init +never blocks waiting on a TTY (CI, agents, pipes). ```bash npx stash init [flags] @@ -25,9 +28,7 @@ npx stash init [flags] | --- | --- | | `--supabase` | Use Supabase-specific setup flow. | | `--drizzle` | Use Drizzle-specific setup flow. | -| `--prisma-next` | Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migration apply). | -| `--proxy` | Query encrypted data via CipherStash Proxy. | -| `--no-proxy` | Query encrypted data directly via the SDK. (default: `true`) | +| `--prisma` | Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migrate). | | `--region <slug>` | Region to authenticate against (e.g. us-east-1). Skips the interactive region picker. Required for non-interactive init when not already logged in. (env: `STASH_REGION`) | @@ -36,6 +37,6 @@ npx stash init [flags] ```bash npx stash init npx stash init --supabase -npx stash init --prisma-next +npx stash init --prisma npx stash init --region us-east-1 ``` diff --git a/content/docs/reference/cli/manifest.mdx b/content/docs/reference/cli/manifest.mdx index 4c7578d..0ccb5aa 100644 --- a/content/docs/reference/cli/manifest.mdx +++ b/content/docs/reference/cli/manifest.mdx @@ -4,16 +4,19 @@ description: "Print the structured, versioned command surface" type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> -Print the structured, versioned command surface +Emit the CLI command surface as data. `--json` produces the machine- +readable manifest the docs generator and agents consume; without it a +grouped command list is printed. The manifest is stamped with the CLI +version, so a page generated from it always names the version it describes. ```bash npx stash manifest [flags] diff --git a/content/docs/reference/cli/meta.json b/content/docs/reference/cli/meta.json index 86e9f17..93463e4 100644 --- a/content/docs/reference/cli/meta.json +++ b/content/docs/reference/cli/meta.json @@ -10,6 +10,7 @@ "wizard", "doctor", "manifest", + "telemetry", "---Auth---", "auth", "---EQL---", @@ -20,7 +21,7 @@ "schema", "---Encrypt---", "encrypt", - "---Experimental---", + "---Deployment---", "env" ] } diff --git a/content/docs/reference/cli/plan.mdx b/content/docs/reference/cli/plan.mdx index 4904f7a..082ec50 100644 --- a/content/docs/reference/cli/plan.mdx +++ b/content/docs/reference/cli/plan.mdx @@ -4,13 +4,13 @@ description: "Draft a reviewable encryption plan at .cipherstash/plan.md" type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> Draft a reviewable encryption plan at .cipherstash/plan.md @@ -23,7 +23,8 @@ npx stash plan [flags] | Flag | Description | | --- | --- | -| `--complete-rollout` | Plan the entire encryption lifecycle (schema-add through drop) in one document. Skips the production-deploy gate; only safe when this database is not backing a deployed application. | +| `--complete-rollout` | Plan the entire encryption lifecycle (schema-add through drop) in one document. Skips the production-deploy gate; only safe when this database is not backing a deployed application. Needs confirmation — an interactive prompt, or --yes non-interactively (else it exits non-zero without drafting). | +| `--yes` | Confirm --complete-rollout's gate-skip without a prompt (for automation / CI). No effect without --complete-rollout. | | `--target <name>` | Skip the agent-target picker and hand off directly to one of claude-code \| codex \| agents-md \| wizard. Safe in non-TTY contexts. | @@ -32,4 +33,5 @@ npx stash plan [flags] ```bash npx stash plan npx stash plan --target claude-code +npx stash plan --complete-rollout --yes --target claude-code ``` diff --git a/content/docs/reference/cli/schema.mdx b/content/docs/reference/cli/schema.mdx index 9b5e360..ada1471 100644 --- a/content/docs/reference/cli/schema.mdx +++ b/content/docs/reference/cli/schema.mdx @@ -4,13 +4,13 @@ description: "Reference for the `stash schema` commands." type: reference components: [cli, eql] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> The `stash schema` command group. @@ -28,4 +28,4 @@ npx stash schema build [flags] | Flag | Description | | --- | --- | | `--supabase` | Use Supabase-compatible mode. | -| `--database-url <url>` | Override DATABASE_URL for this run only — never written to disk. (env: `DATABASE_URL`) | +| `--database-url <url>` | Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these. (env: `DATABASE_URL`) | diff --git a/content/docs/reference/cli/status.mdx b/content/docs/reference/cli/status.mdx index ba033d7..9fcd239 100644 --- a/content/docs/reference/cli/status.mdx +++ b/content/docs/reference/cli/status.mdx @@ -4,13 +4,13 @@ description: "Displays implementation status" type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> Displays implementation status diff --git a/content/docs/reference/cli/telemetry.mdx b/content/docs/reference/cli/telemetry.mdx new file mode 100644 index 0000000..3eaebce --- /dev/null +++ b/content/docs/reference/cli/telemetry.mdx @@ -0,0 +1,34 @@ +--- +title: stash telemetry +description: "Manage anonymous usage analytics" +type: reference +components: [cli] +verifiedAgainst: + cli: "1.0.0" +--- + +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} + +<Callout type="info"> +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. +</Callout> + +Manage the anonymous, opt-out usage analytics the CLI collects to +improve the tool. `status` (the default) reports whether telemetry is +on and which setting governs it; `enable` / `disable` write your saved +preference. Telemetry is also disabled by the DO_NOT_TRACK or +STASH_TELEMETRY_DISABLED environment variables and automatically in CI. +No plaintext, schema, table/column names, or connection details are +ever collected. See https://cipherstash.com/docs/reference/cli. + +```bash +npx stash telemetry +``` + +## Examples + +```bash +npx stash telemetry status +npx stash telemetry disable +npx stash telemetry enable +``` diff --git a/content/docs/reference/cli/wizard.mdx b/content/docs/reference/cli/wizard.mdx index 05678ed..f3e6956 100644 --- a/content/docs/reference/cli/wizard.mdx +++ b/content/docs/reference/cli/wizard.mdx @@ -4,13 +4,13 @@ description: "AI-guided encryption setup (reads your codebase)" type: reference components: [cli] verifiedAgainst: - cli: "0.17.0" + cli: "1.0.0" --- -{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v0.17.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} +{/* GENERATED — do not edit. Produced by scripts/generate-cli-docs.ts from `stash manifest --json` (v1.0.0). Re-run `bun run generate-docs:cli` to refresh from the latest published CLI. */} <Callout type="info"> -Generated from **`stash` v0.17.0** via `npx stash@0.17.0 manifest --json`. Run `npx stash@0.17.0 --help` to see the live command surface. +Generated from **`stash` v1.0.0** via `npx stash@1.0.0 manifest --json`. Run `npx stash@1.0.0 --help` to see the live command surface. </Callout> AI-guided encryption setup (reads your codebase) diff --git a/content/docs/reference/eql/index.mdx b/content/docs/reference/eql/index.mdx index d09cd07..0b1bebe 100644 --- a/content/docs/reference/eql/index.mdx +++ b/content/docs/reference/eql/index.mdx @@ -5,7 +5,7 @@ description: "Encrypt Query Language (EQL) installs encrypted column types and o type: reference components: [eql] verifiedAgainst: - eql: "3.0.0" + eql: "3.0.4" --- <EqlVersion /> @@ -26,13 +26,13 @@ Every encrypted column is a `jsonb`-backed domain type in the `public` schema (t Point the [Stash CLI](/reference/cli) at your database and install the `eql_v3` schema: ```bash -npx stash eql install --eql-version 3 +npx stash eql install ``` `stash eql install` scaffolds a [`stash.config.ts`](#configuration) if your project doesn't have one, then installs the `eql_v3` schema — all domain types, operators, functions, and aggregates — along with the `cs_migrations` tracking schema that the `stash encrypt` commands depend on. It is idempotent: re-running reports that EQL is already installed and changes nothing. Pass `--force` to reinstall in place. -<Callout> -`--eql-version 3` selects the native `eql_v3` domain schema this reference documents. Without it the CLI installs EQL v2. v3 installs directly against the database, so the `--drizzle`, `--migration`, and `--latest` flags — all v2-only — don't apply. +<Callout type="info"> +EQL v3 is the only installation target in `stash` 1.0.0, so no version flag is required. The [EQL v2 reference](/reference/eql/v2) remains available for applications maintaining an existing v2 deployment. </Callout> </Step> @@ -43,7 +43,7 @@ npx stash eql install --eql-version 3 The CLI reads the connection string from `DATABASE_URL` (your environment or a `.env` file) and prompts if it can't find one. Override it for a single run — handy when installing across several databases — with `--database-url`, which is used for that run only and never written to disk: ```bash -npx stash eql install --eql-version 3 \ +npx stash eql install \ --database-url postgres://user:pass@host:5432/mydb ``` @@ -62,13 +62,13 @@ Or check directly from SQL: ```sql SELECT eql_v3.version(); --- '3.0.0' +-- '3.0.4' ``` </Step> </Steps> -To pull in a newer EQL release later, run `npx stash eql upgrade --eql-version 3`. +To pull in a newer EQL release later, run `npx stash eql upgrade`. <Callout type="warn"> To uninstall, drop both EQL schemas: `DROP SCHEMA eql_v3, eql_v3_internal CASCADE`. This removes the encrypted operators and functions, so queries against encrypted columns stop resolving — but your data survives: the `public.*` domain types (and the columns typed as them) live in the `public` schema and are left untouched. Remove those separately only if you intend to drop or re-type the columns. @@ -92,6 +92,25 @@ export default defineConfig({ }); ``` +### Drizzle migration history + +For a Drizzle project, generate a custom migration instead of installing EQL directly: + +```bash +npx stash eql migration --drizzle +npx drizzle-kit migrate +``` + +The command runs your project-local `drizzle-kit`, creates a custom migration, and writes the same EQL v3 SQL that `stash eql install` applies directly. Add `--supabase` when the database is also reached through Supabase PostgREST, and use `--out` when your Drizzle migration directory is not `drizzle/`. + +If `drizzle-kit generate` has already emitted an in-place `ALTER COLUMN ... SET DATA TYPE` for an encrypted domain, repair the unapplied migration before running it: + +```bash +npx stash eql repair --drizzle --database-url "$DATABASE_URL" +``` + +See the [`eql migration`](/reference/cli/eql#eql-migration) and [`eql repair`](/reference/cli/eql#eql-repair) references for all options. Prisma ORM 8 installs EQL through its own migration graph and does not use either command. + ### dbdev EQL is also published to [dbdev](https://database.dev/cipherstash/eql). The dbdev release can lag behind GitHub releases, so prefer `stash eql install` when you need the latest version. @@ -105,7 +124,7 @@ docker run --rm -p 5432:5432 -e POSTGRES_PASSWORD=postgres \ ghcr.io/cipherstash/postgres-eql:17 ``` -EQL installs automatically on first boot. Images are available for PostgreSQL 14–17 (`:14` through `:17`), and you can pin a specific EQL version with a suffixed tag (for example `:17-3.0.0`). +EQL installs automatically on first boot. Images are available for PostgreSQL 14–17 (`:14` through `:17`), and you can pin a specific EQL version with a suffixed tag (for example `:17-3.0.4`). ## Permissions diff --git a/content/docs/solutions/data-residency.mdx b/content/docs/solutions/data-residency.mdx index 74effb9..6c24689 100644 --- a/content/docs/solutions/data-residency.mdx +++ b/content/docs/solutions/data-residency.mdx @@ -5,7 +5,7 @@ type: concept components: [platform, encryption] audience: [cto, ciso] verifiedAgainst: - stack: "0.18.0" + stack: "1.0.0" --- CipherStash provides data residency guarantees through regional key management, encryption that happens entirely in your infrastructure, and cryptographic key splitting. This page covers the deployment patterns for organizations with cross-border data requirements. diff --git a/content/docs/solutions/provable-access.mdx b/content/docs/solutions/provable-access.mdx index 84875fd..950b917 100644 --- a/content/docs/solutions/provable-access.mdx +++ b/content/docs/solutions/provable-access.mdx @@ -5,7 +5,7 @@ type: concept components: [platform, encryption] audience: [ciso, cto] verifiedAgainst: - stack: "0.19.0" + stack: "1.0.0" auth: "0.42.0" --- diff --git a/scripts/cli-supplements/auth.md b/scripts/cli-supplements/auth.md index b17fc57..aa87664 100644 --- a/scripts/cli-supplements/auth.md +++ b/scripts/cli-supplements/auth.md @@ -1,21 +1,10 @@ -## How authentication works +## Switching workspaces -`stash auth login` runs the OAuth 2.0 **device authorization flow**: +`stash` 1.0.0 keeps one active device-session profile at +`~/.cipherstash/auth.json`. To switch workspaces, run `npx stash auth login` +again and complete authorization for the target workspace. The new login +replaces the active session. -1. You pick a **region** for your CipherStash workspace. -2. The CLI opens your browser to a verification URL (and prints it, so it also - works over SSH or in a headless/agent environment) where you approve the - request. -3. Meanwhile the CLI polls CipherStash until you approve, then receives a - short-lived access token (it reports the token's expiry). -4. Your device is **bound to the workspace's default keyset**, so later commands - (`stash eql install`, `stash db push`, …) authenticate without a fresh login. - -<Callout title="Good to know"> -Login is device- and workspace-scoped. Authenticating from a new machine, or for a different workspace, re-runs the device flow. -</Callout> - -{/* TODO(verify with product): profiles, multiple workspaces, and switching -between them (where they're stored and how they're selected) belong here, or -in a linked CLI concept page. The CLI currently exposes only `auth login`; -confirm the profile / workspace-switching surface before documenting it. */} +`stash init` reuses the active session when it is still valid, so switch +workspaces before running `init`. There is no separate profile manager or +workspace-switch command in `stash` 1.0.0. diff --git a/scripts/fixtures/stash-manifest.json b/scripts/fixtures/stash-manifest.json index 8190378..9c54546 100644 --- a/scripts/fixtures/stash-manifest.json +++ b/scripts/fixtures/stash-manifest.json @@ -1,6 +1,6 @@ { "name": "stash", - "version": "0.17.0", + "version": "1.0.0", "groups": [ { "title": "Setup & workflow", @@ -12,7 +12,7 @@ "examples": [ "init", "init --supabase", - "init --prisma-next", + "init --prisma", "init --region us-east-1" ], "flags": [ @@ -25,17 +25,8 @@ "description": "Use Drizzle-specific setup flow." }, { - "name": "--prisma-next", - "description": "Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migration apply)." - }, - { - "name": "--proxy", - "description": "Query encrypted data via CipherStash Proxy." - }, - { - "name": "--no-proxy", - "description": "Query encrypted data directly via the SDK.", - "default": "true" + "name": "--prisma", + "description": "Use Prisma Next-specific setup flow (EQL bundle installed via prisma-next migrate)." }, { "name": "--region", @@ -48,11 +39,19 @@ { "name": "plan", "summary": "Draft a reviewable encryption plan at .cipherstash/plan.md", - "examples": ["plan", "plan --target claude-code"], + "examples": [ + "plan", + "plan --target claude-code", + "plan --complete-rollout --yes --target claude-code" + ], "flags": [ { "name": "--complete-rollout", - "description": "Plan the entire encryption lifecycle (schema-add through drop) in one document. Skips the production-deploy gate; only safe when this database is not backing a deployed application." + "description": "Plan the entire encryption lifecycle (schema-add through drop) in one document. Skips the production-deploy gate; only safe when this database is not backing a deployed application. Needs confirmation — an interactive prompt, or --yes non-interactively (else it exits non-zero without drafting)." + }, + { + "name": "--yes", + "description": "Confirm --complete-rollout's gate-skip without a prompt (for automation / CI). No effect without --complete-rollout." }, { "name": "--target", @@ -118,6 +117,16 @@ "description": "Emit the structured JSON manifest instead of a text list." } ] + }, + { + "name": "telemetry", + "summary": "Manage anonymous usage analytics", + "long": "Manage the anonymous, opt-out usage analytics the CLI collects to\nimprove the tool. `status` (the default) reports whether telemetry is\non and which setting governs it; `enable` / `disable` write your saved\npreference. Telemetry is also disabled by the DO_NOT_TRACK or\nSTASH_TELEMETRY_DISABLED environment variables and automatically in CI.\nNo plaintext, schema, table/column names, or connection details are\never collected. See https://cipherstash.com/docs/reference/cli.", + "examples": [ + "telemetry status", + "telemetry disable", + "telemetry enable" + ] } ] }, @@ -156,6 +165,10 @@ { "name": "--drizzle", "description": "Track Drizzle as the referrer." + }, + { + "name": "--prisma", + "description": "Track Prisma as the referrer." } ] }, @@ -191,52 +204,82 @@ "name": "--supabase", "description": "Use Supabase-compatible mode (auto-detected from DATABASE_URL)." }, + { + "name": "--database-url", + "value": "<url>", + "description": "Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these.", + "env": "DATABASE_URL" + } + ] + }, + { + "name": "eql migration", + "summary": "Generate an EQL v3 install migration for your ORM (Drizzle; Prisma Next installs EQL through its own migrations)", + "examples": [ + "eql migration --drizzle", + "eql migration --drizzle --supabase" + ], + "flags": [ { "name": "--drizzle", - "description": "Generate a Drizzle migration instead of direct install (auto-detected from project)." + "description": "Emit a Drizzle custom migration containing the EQL v3 install SQL." }, { - "name": "--migration", - "description": "Write a Supabase migration file instead of running SQL directly (requires --supabase)." + "name": "--prisma", + "description": "Not needed: Prisma Next installs EQL through its own migration framework — run `prisma-next migrate` instead." }, { - "name": "--direct", - "description": "Run the SQL directly against the database (requires --supabase; mutually exclusive with --migration)." + "name": "--supabase", + "description": "Append the Supabase role grants (eql_v3 + eql_v3_internal for anon/authenticated/service_role)." }, { - "name": "--migrations-dir", - "value": "<path>", - "description": "Override the Supabase migrations directory (requires --supabase).", - "default": "supabase/migrations" + "name": "--name", + "value": "<name>", + "description": "Name for the generated migration (Drizzle). Letters, numbers, dashes, underscores only. Defaults to `install-eql`." }, { - "name": "--exclude-operator-family", - "description": "Skip operator family creation." + "name": "--out", + "value": "<path>", + "description": "Directory drizzle-kit writes the migration into (passed to `drizzle-kit generate --out`). Defaults to `drizzle`; set it to match your drizzle.config.ts." }, { - "name": "--eql-version", - "value": "<2|3>", - "description": "EQL generation to target. v3 is the native eql_v3.* domain schema (direct install only for now).", - "default": "2" + "name": "--dry-run", + "description": "Show what would happen without making changes." + } + ] + }, + { + "name": "eql repair", + "summary": "Repair migrations drizzle-kit generated with an un-runnable ALTER COLUMN to an encrypted type", + "long": "Sweep an existing Drizzle output directory for in-place\n`ALTER COLUMN ... SET DATA TYPE <eql domain>` statements — which cannot run,\nbecause Postgres has no cast from text/numeric to an EQL domain — and rewrite\neach into an additive encrypted column that preserves the source column.\n\nThis is the same sweep `eql migration --drizzle` runs, without having to\ngenerate an EQL install migration you do not want just to trigger it.\n\nMigrations the database has already applied are reported and left alone:\nrewriting one would leave its .sql describing a shape that database never got\nfrom it, so a fresh CI or staging database replaying the file would silently\ndiverge. Pass --database-url so that check can run; without it the repair\nproceeds and warns that applied state could not be verified. If your\ndrizzle.config.ts overrides `migrations.table` / `migrations.schema`, name\nthe ledger with --migrations-table — otherwise the check queries the default\nrelation, finds nothing, and reports applied state as unverified.", + "examples": [ + "eql repair --drizzle", + "eql repair --drizzle --dry-run", + "eql repair --drizzle --out db/migrations --database-url postgres://…" + ], + "flags": [ + { + "name": "--drizzle", + "description": "Repair a Drizzle migration directory." }, { - "name": "--latest", - "description": "Fetch the latest EQL from GitHub (v2 only)." + "name": "--out", + "value": "<path>", + "description": "Directory holding the migrations to sweep. Defaults to `drizzle`; set it to match your drizzle.config.ts." }, { - "name": "--name", - "value": "<name>", - "description": "With --drizzle: name for the generated migration (defaults to a scaffold name)." + "name": "--migrations-table", + "value": "<[schema.]table>", + "description": "Drizzle's migration ledger, when drizzle.config.ts overrides `migrations.table` / `migrations.schema`. Defaults to `drizzle.__drizzle_migrations`. Only read with --database-url." }, { - "name": "--out", - "value": "<path>", - "description": "With --drizzle: directory to write the generated migration into." + "name": "--dry-run", + "description": "Show what would happen without making changes." }, { "name": "--database-url", "value": "<url>", - "description": "Override DATABASE_URL for this run only — never written to disk.", + "description": "Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these.", "env": "DATABASE_URL" } ] @@ -253,24 +296,10 @@ "name": "--supabase", "description": "Use Supabase-compatible mode." }, - { - "name": "--exclude-operator-family", - "description": "Skip operator family creation." - }, - { - "name": "--eql-version", - "value": "<2|3>", - "description": "EQL generation to target.", - "default": "2" - }, - { - "name": "--latest", - "description": "Fetch the latest EQL from GitHub (v2 only)." - }, { "name": "--database-url", "value": "<url>", - "description": "Override DATABASE_URL for this run only — never written to disk.", + "description": "Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these.", "env": "DATABASE_URL" } ] @@ -282,7 +311,7 @@ { "name": "--database-url", "value": "<url>", - "description": "Override DATABASE_URL for this run only — never written to disk.", + "description": "Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these.", "env": "DATABASE_URL" } ] @@ -292,34 +321,6 @@ { "title": "Database", "commands": [ - { - "name": "db push", - "summary": "Push encryption schema (writes pending if active config already exists)", - "flags": [ - { - "name": "--dry-run", - "description": "Show what would happen without making changes." - }, - { - "name": "--database-url", - "value": "<url>", - "description": "Override DATABASE_URL for this run only — never written to disk.", - "env": "DATABASE_URL" - } - ] - }, - { - "name": "db activate", - "summary": "Promote pending → active without renames (use after additive db push)", - "flags": [ - { - "name": "--database-url", - "value": "<url>", - "description": "Override DATABASE_URL for this run only — never written to disk.", - "env": "DATABASE_URL" - } - ] - }, { "name": "db validate", "summary": "Validate encryption schema", @@ -335,7 +336,7 @@ { "name": "--database-url", "value": "<url>", - "description": "Override DATABASE_URL for this run only — never written to disk.", + "description": "Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these.", "env": "DATABASE_URL" } ] @@ -351,7 +352,7 @@ { "name": "--database-url", "value": "<url>", - "description": "Override DATABASE_URL for this run only — never written to disk.", + "description": "Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these.", "env": "DATABASE_URL" } ] @@ -372,7 +373,7 @@ { "name": "--database-url", "value": "<url>", - "description": "Override DATABASE_URL for this run only — never written to disk.", + "description": "Database URL for this run only — never written to disk. Highest precedence in the resolution order: --database-url flag → DATABASE_URL env → supabase status → interactive prompt. A stash.config.ts is not a separate tier (its default databaseUrl re-runs this same chain); a hand-set literal databaseUrl in the config bypasses the resolver and wins over all of these.", "env": "DATABASE_URL" } ] @@ -434,32 +435,6 @@ } ] }, - { - "name": "encrypt cutover", - "summary": "Rename swap encrypted → primary column", - "flags": [ - { - "name": "--table", - "value": "<name>", - "description": "Target table." - }, - { - "name": "--column", - "value": "<name>", - "description": "Target column." - }, - { - "name": "--proxy-url", - "value": "<url>", - "description": "Proxy URL to verify against." - }, - { - "name": "--migrations-dir", - "value": "<path>", - "description": "Directory to write the rename migration into." - } - ] - }, { "name": "encrypt drop", "summary": "Generate a migration to drop the plaintext column", @@ -484,15 +459,32 @@ ] }, { - "title": "Experimental", + "title": "Deployment", "commands": [ { "name": "env", - "summary": "(experimental) Print production env vars for deployment", + "summary": "Mint deployment credentials and print them as env vars", + "long": "Mints a fresh ZeroKMS client and a CipherStash access key from your\ndevice-code session (`stash auth login`), then prints the four env\nvars a deployed app needs: CS_WORKSPACE_CRN, CS_CLIENT_ID,\nCS_CLIENT_KEY, CS_CLIENT_ACCESS_KEY.\n\nThe access key is created with the member role (the CLI never mints\nadmin keys) and is shown exactly once — pipe the output into your\ndeployment secret store. Creating access keys requires your user to\nhave the admin role in the workspace.\n\nStdout carries only the dotenv block (or the --json events);\nprogress UI goes to stderr, so `stash env --name x > prod.env`\nand pipes into secret stores are safe.", + "examples": [ + "env --name my-app-prod", + "env --name my-app-prod --write", + "env --name staging --write .env.staging.local", + "env --name edge-dev --json" + ], "flags": [ + { + "name": "--name", + "value": "<name>", + "description": "Name for the minted access key and ZeroKMS client. Prompted for interactively; required in non-interactive runs." + }, { "name": "--write", - "description": "Write the vars to a file instead of printing them." + "value": "[path]", + "description": "Write the vars to a file (default .env.production.local, mode 0600) instead of printing them. An existing file prompts before overwriting — and is refused non-interactively — before anything is minted." + }, + { + "name": "--json", + "description": "Emit machine-readable NDJSON (a { status: \"minted\" } object, or { status: \"written\" } with --write — deliberately secret-free since the secrets are in the file; failures are { status: \"error\" }). Implies no prompts." } ] } diff --git a/scripts/generate-cli-docs.ts b/scripts/generate-cli-docs.ts index 05bffbe..3a017fc 100644 --- a/scripts/generate-cli-docs.ts +++ b/scripts/generate-cli-docs.ts @@ -82,6 +82,7 @@ interface Command { sub?: string; // "install" group: string; // nav group title, from the manifest summary: string; + long?: string; flags: Flag[]; examples: string[]; } @@ -177,6 +178,7 @@ function toManifest(m: CliManifest): Manifest { sub: rest.length ? rest.join(" ") : undefined, group: group.title, summary: c.summary, + long: c.long, flags: (c.flags ?? []).map(mapFlag), examples: (c.examples ?? []).map((e) => `${RUNNER} ${CLI_NAME} ${e}`), }); @@ -199,15 +201,21 @@ Generated from **\`${CLI_NAME}\` v${CLI_VERSION}** via \`${RUNNER} ${CLI_NAME}@$ // e.g. the `auth regions` flag description "[{ slug, label }]" would otherwise // evaluate `slug` and crash the prerender) and stray `<` (tags). Flag names and // values render inside code spans, which are literal, so this only applies to -// manifest-derived prose (descriptions, summaries). -const escapeMdxText = (s: string): string => s.replace(/([{}<])/g, "\\$1"); +// manifest-derived prose (descriptions, summaries, and long help). +const escapeMdxText = (s: string): string => + s + .split(/(`[^`\n]*`)/g) + .map((part) => + part.startsWith("`") ? part : part.replace(/([{}<])/g, "\\$1"), + ) + .join(""); function flagsTable(flags: Flag[]): string { if (!flags.length) return ""; const rows = flags .map((f) => { - // Escape pipes (e.g. the `<2|3>` in `--eql-version`) so they don't read - // as table-column separators, even inside the code span. + // Escape pipes in option values so they don't read as table-column + // separators, even inside the code span. const opt = `\`${f.name}${f.value ? ` ${f.value}` : ""}\``.replace( /\|/g, "\\|", @@ -224,7 +232,7 @@ function commandSection(cmd: Command, level: "##" | "###"): string { const parts = [ `${level} \`${cmd.path}\``, "", - escapeMdxText(cmd.summary), + escapeMdxText(cmd.long ?? cmd.summary), "", "```bash", synopsis, @@ -276,7 +284,7 @@ function renderPage( } else { const c = cmds[0]; parts.push( - escapeMdxText(c.summary), + escapeMdxText(c.long ?? c.summary), "", "```bash", `${RUNNER} ${CLI_NAME} ${c.path}${c.flags.length ? " [flags]" : ""}`, diff --git a/scripts/generate-docs.ts b/scripts/generate-docs.ts index 98d2c45..fb0d205 100644 --- a/scripts/generate-docs.ts +++ b/scripts/generate-docs.ts @@ -16,7 +16,7 @@ const stackConfig: DocsConfig = { packageName: "@cipherstash/stack", projectName: "@cipherstash/stack", repoUrl: "https://github.com/cipherstash/stack.git", - sourceRef: "main", + sourceRef: "@cipherstash/stack@1.0.0", tempDirName: ".tmp-stack", baseOutputDir: path.join( process.cwd(), diff --git a/scripts/generate-drizzle-docs.ts b/scripts/generate-drizzle-docs.ts index a66af22..37498e1 100644 --- a/scripts/generate-drizzle-docs.ts +++ b/scripts/generate-drizzle-docs.ts @@ -1,5 +1,5 @@ #!/usr/bin/env tsx -/** Generate the Drizzle ORM integration's API reference from Stack main. */ +/** Generate the Drizzle integration's API reference from its Stack 1.0 tag. */ import path from "node:path"; import { type DocsConfig, generateDocs } from "./lib/docs-generator.js"; @@ -7,7 +7,7 @@ const drizzleConfig: DocsConfig = { packageName: "@cipherstash/stack-drizzle", projectName: "@cipherstash/stack-drizzle", repoUrl: "https://github.com/cipherstash/stack.git", - sourceRef: "main", + sourceRef: "@cipherstash/stack-drizzle@1.0.0", tempDirName: ".tmp-stack-drizzle", baseOutputDir: path.join( process.cwd(), diff --git a/scripts/generate-prisma-docs.ts b/scripts/generate-prisma-docs.ts index 9675aa4..f9f8618 100644 --- a/scripts/generate-prisma-docs.ts +++ b/scripts/generate-prisma-docs.ts @@ -1,5 +1,5 @@ #!/usr/bin/env tsx -/** Generate the Prisma ORM integration's API reference from Stack main. */ +/** Generate the Prisma integration's API reference from its Stack 1.0 tag. */ import path from "node:path"; import { type DocsConfig, generateDocs } from "./lib/docs-generator.js"; @@ -7,7 +7,7 @@ const prismaConfig: DocsConfig = { packageName: "@cipherstash/stack-prisma", projectName: "@cipherstash/stack-prisma", repoUrl: "https://github.com/cipherstash/stack.git", - sourceRef: "main", + sourceRef: "@cipherstash/stack-prisma@1.0.0", tempDirName: ".tmp-stack-prisma", baseOutputDir: path.join( process.cwd(), diff --git a/scripts/generate-supabase-docs.ts b/scripts/generate-supabase-docs.ts index a25c917..175bcd9 100644 --- a/scripts/generate-supabase-docs.ts +++ b/scripts/generate-supabase-docs.ts @@ -1,5 +1,5 @@ #!/usr/bin/env tsx -/** Generate the Supabase integration's API reference from Stack main. */ +/** Generate the Supabase integration's API reference from its Stack 1.0 tag. */ import path from "node:path"; import { type DocsConfig, generateDocs } from "./lib/docs-generator.js"; @@ -7,7 +7,7 @@ const supabaseConfig: DocsConfig = { packageName: "@cipherstash/stack-supabase", projectName: "@cipherstash/stack-supabase", repoUrl: "https://github.com/cipherstash/stack.git", - sourceRef: "main", + sourceRef: "@cipherstash/stack-supabase@1.0.0", tempDirName: ".tmp-stack-supabase", baseOutputDir: path.join( process.cwd(), From e854c273122c94d62ddaccb4f3bad3d8a4ae2b18 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 31 Jul 2026 01:13:18 +1000 Subject: [PATCH 147/151] docs(concepts): add encryption foundations --- IA.md | 14 +- .../concepts/identity-aware-encryption.mdx | 9 - content/docs/concepts/index.mdx | 11 +- content/docs/concepts/key-management.mdx | 176 +++++++++++++++ content/docs/concepts/meta.json | 8 +- .../docs/concepts/searchable-encryption.mdx | 204 +++++++++++++++++- content/docs/get-started/index.mdx | 2 +- .../docs/get-started/what-is-cipherstash.mdx | 2 +- content/docs/index.mdx | 2 +- content/docs/integrations/supabase/auth.mdx | 2 +- content/docs/security/cryptography.mdx | 8 +- next.config.mjs | 7 + v2-redirects.mjs | 2 +- 13 files changed, 412 insertions(+), 35 deletions(-) delete mode 100644 content/docs/concepts/identity-aware-encryption.mdx create mode 100644 content/docs/concepts/key-management.mdx diff --git a/IA.md b/IA.md index 6f51750..8ba7d33 100644 --- a/IA.md +++ b/IA.md @@ -141,7 +141,6 @@ Concepts ├─ Searchable encryption canonical leakage model ├─ EQL typed-column model ├─ Key management -├─ Identity-aware encryption ├─ Threat modelling └─ Compare aws-kms · fhe · rls-and-tde · hashicorp-vault Guides @@ -198,7 +197,7 @@ layer, not a layer every Stack page sits on. ciphertext queryable there — but Stack also encrypts general-purpose values and non-Postgres stores (e.g. DynamoDB) with no EQL at all. - Start here: Quickstart · Reference → Stack SDK (client + configuration) -- Concepts: application-level encryption · searchable encryption · identity-aware encryption +- Concepts: application-level encryption · searchable encryption · key management - Guides: schema design · encrypt existing data · testing & CI · serverless & bundling - Reference: `/reference/stack/*` (overview · usage · generated package API) - Security: `/security/stack-sdk` @@ -232,7 +231,7 @@ layer, not a layer every Stack page sits on. - Locator: the base everything relies on — key management (ZeroKMS) and identity-bound access (CTS). - Start here: Security → Architecture · Concepts → Key management -- Concepts: key management · identity-aware encryption +- Concepts: key management - Reference: `/reference/auth/*` (lock-contexts · cts-tokens · oidc · access-keys) - Security: architecture · zerokms · cts · availability · audit logging · key ownership - Integrations (auto): Clerk · Auth0 · Okta @@ -261,8 +260,8 @@ queries, not by a subtree: - The Platform hub gathers all of it — everything above carries `platform`. - Faceted search on `integration.category: auth-provider` gives the providers. -- `/concepts/identity-aware-encryption` is the one explanatory page that ties the - concept together in prose; everything else links to it (anti-drift rule). +- `/solutions/provable-access` is the explanatory page that ties identity-bound + access together in prose; everything else links to it (anti-drift rule). Naming caution: `/reference/auth/*` means the CTS _service_; the `@cipherstash/auth` _package_ lives at `/reference/stack/auth`. Two different things both called @@ -325,10 +324,9 @@ Two notes: - [x] Section scaffold 🚧 - [ ] `/concepts/privacy-first-design` - [ ] `/concepts/application-level-encryption` — vs TDE/pgcrypto/RLS -- [ ] `/concepts/searchable-encryption` — REWRITE with honest leakage model (canonical leakage page) +- [x] `/concepts/searchable-encryption` — REWRITE with honest leakage model (canonical leakage page) - [ ] `/concepts/eql` — the typed-column model (declare capability in the schema) -- [ ] `/concepts/key-management` — per-value keys, rotation, crypto-shredding -- [ ] `/concepts/identity-aware-encryption` — lock contexts, CTS (CIP-3330) +- [x] `/concepts/key-management` — per-value keys, split control, revocation, isolation, and audit - [ ] `/concepts/threat-modelling` ## Comparisons — CIP-3333 diff --git a/content/docs/concepts/identity-aware-encryption.mdx b/content/docs/concepts/identity-aware-encryption.mdx deleted file mode 100644 index 3f11530..0000000 --- a/content/docs/concepts/identity-aware-encryption.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Identity-aware encryption -description: "Lock contexts and CTS: binding encrypted values to a user identity so only that identity can decrypt them." -type: concept ---- - -This page is being built as part of the docs V2 overhaul ([CIP-3330](https://linear.app/cipherstash/issue/CIP-3330)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, the current version lives in the [existing docs](/stack/cipherstash/encryption/identity). diff --git a/content/docs/concepts/index.mdx b/content/docs/concepts/index.mdx index 8fc5128..922af97 100644 --- a/content/docs/concepts/index.mdx +++ b/content/docs/concepts/index.mdx @@ -1,10 +1,11 @@ --- title: Concepts -navTitle: Overview -description: "How CipherStash works and how to think about searchable encryption, keys, and identity." +description: "How CipherStash keeps encrypted data useful and controls access to plaintext." type: concept --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, current documentation lives in the [existing docs](/stack). +{/* + Fumadocs requires an index document when generating a metadata-backed folder. + meta.json excludes this file from the page tree, and Next redirects its route + to the first visible Concepts page. +*/} diff --git a/content/docs/concepts/key-management.mdx b/content/docs/concepts/key-management.mdx new file mode 100644 index 0000000..136897f --- /dev/null +++ b/content/docs/concepts/key-management.mdx @@ -0,0 +1,176 @@ +--- +title: Key management +description: "How ZeroKMS makes unique per-value keys practical: split control, client-side derivation, bounded compromise, immediate revocation, and batch performance without data-key caching." +type: concept +components: [encryption, platform] +audience: [developer, cto, ciso] +verifiedAgainst: + stack: "1.0.0" +--- + +Encryption is only as strong as the system that controls its keys. If an application keeps one long-lived key beside the data it protects, encrypting the database changes its appearance without meaningfully changing who can unlock it. + +ZeroKMS takes a different approach. Every encrypted value gets a unique data key. No data key is stored, transmitted, or reused, and neither CipherStash nor your application holds enough long-lived material to derive one alone. + +This gives CipherStash three properties that are difficult to combine with conventional key management: + +- **Fine-grained protection:** compromising one derived data key exposes one value, not a table or batch. +- **Split control:** CipherStash holds one side of the key relationship and your application holds the other. Neither side is sufficient by itself. +- **Production performance:** bulk operations derive unique keys locally after one ZeroKMS interaction instead of making one network request per value. + +## The problem with conventional envelope encryption + +Cloud key-management services commonly use envelope encryption. The KMS generates a data encryption key, returns the plaintext key to the application, and returns a second copy wrapped by a root key. The application encrypts the data, discards the plaintext key, and stores the wrapped key beside the ciphertext. + +On read, the application sends the wrapped key back to the KMS and receives the plaintext data key again. + +That works well for individual objects. It becomes difficult at database scale. A result containing 100 rows with two independently encrypted fields needs 200 data keys. Using one unique key per value means hundreds of KMS requests; reusing and caching a key makes the application faster but expands the amount of data that key can decrypt. + +Caching also weakens observability. Once one cached key unlocks thousands of values, the key service can record that the key was used but cannot tell which individual value the application accessed. + +The usual design therefore trades among: + +- how much data one key can decrypt; +- how many network calls an operation can tolerate; and +- how precisely key use can be audited. + +ZeroKMS is designed to remove that tradeoff. + +## The ZeroKMS mental model + +A usable data key is never handed from one system to another. It comes into existence only inside your application, when material from ZeroKMS is processed with material that never leaves your environment. + +Four pieces have distinct jobs: + +| Material | Where it exists | What it can do alone | +|---|---|---| +| **Authority key** | ZeroKMS, encrypted at rest under an AWS KMS root key | Produce a key seed; it cannot derive your data keys without the client key | +| **Client key** | Your application environment | Process a key seed; it cannot derive a data key without ZeroKMS | +| **Key seed** | Returned by ZeroKMS for a key ID and held for the operation | Nothing useful without the client key | +| **Data key** | Your application's memory for one operation | Encrypt or decrypt one value; then it is discarded | + +The authority key and client key form a split. They are never brought together. ZeroKMS never receives the client key, and your application never receives the authority key. + +```mermaid +flowchart LR + keyid["Key ID"] --> zerokms["ZeroKMS<br/>authority key"] + zerokms --> seed["Key seed"] + + subgraph app["Your application"] + client["Client key<br/>never leaves"] + combine["Process seed + derive"] + datakey["Unique data key<br/>one value, one operation"] + value["Encrypt or decrypt value"] + discard["Discard data key"] + + client --> combine + combine --> datakey --> value --> discard + end + + seed --> combine +``` + +CipherStash uses proxy symmetric re-encryption to produce the seed on the ZeroKMS side. The application then processes that seed with its client key and uses an HMAC-based key derivation function to produce the data key. [Cryptography](/security/cryptography) is the canonical technical description of both layers. + +## A unique key for every value + +Each encrypted value carries a key ID. That ID is not secret and is not key material; it tells ZeroKMS which reproducible seed the client needs for that value. + +### Encrypt + +1. The client creates a new key ID. +2. ZeroKMS authorizes the request and produces the corresponding key seed. +3. The application processes the seed with its client key and derives a unique data key. +4. The data key encrypts one value, then is discarded. +5. The key ID travels with the ciphertext. The data key does not. + +### Decrypt + +1. The client reads the key ID from the encrypted payload. +2. ZeroKMS authorizes a request for that ID and reproduces the same seed. +3. The application processes it with the client key and derives the same data key. +4. The value is decrypted and the data key is discarded again. + +There is no database of per-value data keys to protect or restore. The persistent state is the much smaller authority/client relationship from which a data key can be reproduced only when both sides participate. + +## Why split control changes application compromise + +A compromised application is serious, but it is not equivalent to losing a permanent master key. + +**The client key is insufficient on its own.** Stealing it does not let an attacker derive historical data keys offline. The encrypted payload contains a key ID, not a seed or wrapped data key. ZeroKMS must still authorize and participate in each derivation. + +**There is no cache of reusable data keys to steal.** A data key exists only while one value is being processed. Capturing it does not unlock the next row. + +**Access has a server-side off switch.** Revoking a client's access key or its grant to a keyset prevents future seed requests. Because the decision is made during derivation, revocation does not depend on a compromised process voluntarily honoring a new policy. + +**The blast radius is scoped.** A client can derive keys only for the keysets it has been granted. Separate keysets create cryptographic boundaries between tenants, environments, regions, or workloads. + +**Identity can narrow it further.** A lock context can bind derivation to a claim from an authenticated end user. Possessing the service's client key is then not enough to decrypt a value locked to a different identity. See [Provable access control](/solutions/provable-access). + +**Derivation is observed outside the application.** ZeroKMS records the operation before returning the material required for decryption. An attacker operating only inside the application cannot edit or suppress that service-side record in the way they could alter application logs. + +An attacker controlling a live, authorized process may still request the operations available to that process while access remains valid. The important difference is that the capability is **scoped, observable, and revocable**—not a reusable master key that can be copied once and used forever offline. + +## Keysets define the isolation boundary + +A keyset is an independent authority-key scope. The same key ID under two keysets produces unrelated data keys, so ciphertext created under one keyset cannot be decrypted through another. + +Common boundaries include: + +- one keyset per customer in a multi-tenant application; +- separate keysets for development, staging, and production; +- regional keysets for data-residency requirements; and +- separate keysets for business units or workloads with different operators. + +Client access is granted per keyset. Revoking that grant stops the client from deriving any more keys in that boundary without changing database permissions or rewriting the ciphertext. + +Keyset design also controls intentional correlation. Encrypted equality and joins work only across compatible values under the same cryptographic scope; separating keysets prevents both decryption and cross-boundary encrypted comparison. + +The default workspace keyset is sufficient for many applications. Add more when your security boundary is narrower than the workspace. + +## Bulk performance without data-key caching + +The data-key-per-value model would be impractical if every value needed an independent network and HSM round trip. + +ZeroKMS batches the server-side work. A bulk operation can obtain the seed material it needs in one interaction, then derive each value's unique data key locally. Increasing a batch from ten values to a thousand increases local cryptographic work, but does not turn into a thousand sequential requests to the key service. + +This is why the Stack SDK's bulk operations are both the performance path and the strongest key-granularity path. They do not improve throughput by reusing a data key. + +<Callout type="info"> +No **data key** is cached. CipherStash Proxy does cache bounded, keyset-scoped cipher objects so it does not reinitialize them for every statement. Those objects still require the client side of the split, and every value still receives its own derived data key. See [what is cached](/security/cryptography#what-is-cached-and-what-is-not). +</Callout> + +## Authorization and audit are part of derivation + +With a policy check in application code, authorization happens first and decryption happens later. A bug or compromised process can create a gap between the decision and the use of the key. + +ZeroKMS evaluates authorization while producing the key seed. The authorization decision and the cryptographic operation are therefore part of the same event: if ZeroKMS does not authorize the request, the application does not receive the material required to derive the data key. + +That event also creates an independent audit record. Depending on how the client authenticated, it can identify the service or federated end user, the keyset, the operation, and the time. Lock contexts add the identity claim bound to the value. + +This is more useful than a log that says a SQL query ran. It records the operation that made plaintext recovery possible, at the system that had to participate in it. + +## What is stored + +The design deliberately keeps the durable pieces small and separated: + +| Location | Stored | +|---|---| +| Your database | Ciphertext, key ID, and any searchable index terms | +| Your application environment | Client key and credentials used to authenticate to ZeroKMS | +| ZeroKMS | Authority keys and access-control state | +| Nowhere | Plaintext data keys | + +Your encrypted data stays in your database. ZeroKMS handles key material, not application data. This separation also shapes recovery: restoring ZeroKMS restores the ability to reproduce keys; it does not require CipherStash to restore or move your encrypted database. See [Disaster recovery](/stack/cipherstash/kms/disaster-recovery). + +## ZeroKMS and searchable encryption + +ZeroKMS protects the keys used by the [Stack SDK](/reference/stack) and [CipherStash Proxy](/reference/proxy). Searchable encryption adds purpose-built terms so PostgreSQL can locate ciphertext without those keys. + +The responsibilities remain separate: + +- ZeroKMS participates in encryption and decryption key derivation. +- The client creates ciphertext and searchable terms in your environment. +- PostgreSQL compares terms but cannot derive a data key or decrypt a result. + +Start with [Searchable encryption](/concepts/searchable-encryption) for the query model. Continue to [Cryptography](/security/cryptography) for algorithms, trust boundaries, and the precise data flow. diff --git a/content/docs/concepts/meta.json b/content/docs/concepts/meta.json index a5e37c2..a2add10 100644 --- a/content/docs/concepts/meta.json +++ b/content/docs/concepts/meta.json @@ -1,5 +1,11 @@ { "title": "Concepts", "icon": "Lightbulb", - "pages": ["index", "...", "compare"] + "pages": [ + "!index", + "searchable-encryption", + "key-management", + "...", + "compare" + ] } diff --git a/content/docs/concepts/searchable-encryption.mdx b/content/docs/concepts/searchable-encryption.mdx index 689d1fd..ed6bee3 100644 --- a/content/docs/concepts/searchable-encryption.mdx +++ b/content/docs/concepts/searchable-encryption.mdx @@ -1,9 +1,207 @@ --- title: Searchable encryption -description: "How querying encrypted data works, and exactly what each index term reveals." +description: "How CipherStash keeps encrypted data useful: query capabilities, the write and query flow, PostgreSQL indexes, and the security tradeoffs." type: concept +components: [encryption, eql] +audience: [developer, cto, ciso] +verifiedAgainst: + stack: "1.0.0" + eql: "3.0.4" --- -This page is being rewritten as part of the docs V2 overhaul ([CIP-3333](https://linear.app/cipherstash/issue/CIP-3333)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +Searchable encryption lets you encrypt sensitive data before it reaches PostgreSQL **without giving up the queries your application depends on**. -Until it lands, the current version lives in the [existing docs](/stack/cipherstash/encryption/searchable-encryption). +Your application can still look up a customer by email, order transactions by date, filter records by a range, match text, and query structured JSON. PostgreSQL answers those queries using encrypted indexes. It never receives the plaintext or the keys that decrypt it. + +That changes field-level encryption from an archival control into something you can use on live application data. + +## What it makes possible + +**A database breach yields ciphertext.** Backups, replicas, database consoles, and direct SQL access no longer expose the protected fields. Encryption happens in your application, outside the database trust boundary. + +**Your product keeps working.** `WHERE`, ranges, ordering, grouping, joins, fuzzy text matching, and JSON containment remain available. Existing PostgreSQL indexes continue to do the heavy lifting. + +**Search does not grant decryption.** PostgreSQL can find matching rows but returns ciphertext. Decryption is a separate operation performed by an authorized application, and can be bound to an end-user identity with [provable access control](/solutions/provable-access). + +**You decrypt less data.** The database narrows millions of encrypted rows to the small result set the application asked for. Only those returned values need to be decrypted. + +**Sensitive access becomes auditable.** Every decryption requires key derivation through ZeroKMS. When the client authenticates as the end user, the audit trail records whose identity authorized that operation—not merely which SQL statement ran. + +These properties are especially useful for applications and AI agents that need to locate sensitive records without receiving blanket access to every value in the table. + +## Why ordinary encryption breaks queries + +Modern authenticated encryption is randomized. Encrypting `ava@example.com` twice produces different ciphertexts, even with the same key. This prevents an observer from recognizing repeated plaintext, but it also means ordinary database operations stop working: + +```sql +WHERE email = 'ava@example.com' +ORDER BY date_of_birth +WHERE name LIKE '%martin%' +``` + +Two ciphertexts cannot be compared for plaintext equality, and sorting random-looking bytes does not sort the underlying values. Decrypting every row inside PostgreSQL would expose the plaintext and turn an indexed lookup into a full-table scan. + +Searchable encryption solves this by separating **the value** from **the information needed to query it**. + +## How it works + +CipherStash stores a randomized ciphertext together with one or more encrypted index terms. Each term has one job: equality, ordering, text matching, or structured JSON search. + +For an email column that supports equality, the stored value is conceptually: + +```json +{ + "ciphertext": "randomized encryption of ava@example.com", + "equalityTerm": "keyed deterministic term" +} +``` + +The real [EQL payload](/reference/eql/core-concepts#anatomy-of-an-encrypted-value) also carries the metadata needed to validate and decrypt it. PostgreSQL never compares the randomized ciphertext. It extracts and compares the purpose-built term. + +```mermaid +flowchart LR + subgraph app["Your application"] + value["Plaintext value"] --> encrypt["Encrypt"] + needle["Plaintext query"] --> queryterm["Create query term"] + decrypt["Decrypt returned values"] + end + + subgraph db["Your PostgreSQL"] + payload["Ciphertext + index terms"] + index["Normal PostgreSQL index"] + match["Matching ciphertexts"] + payload --> index --> match + end + + encrypt --> payload + queryterm --> index + match --> decrypt +``` + +### Write path + +1. The Stack SDK or CipherStash Proxy receives a plaintext value in your application environment. +2. It encrypts the value with a unique data key and creates the terms declared for that column. +3. Your application sends the encrypted payload to PostgreSQL. +4. PostgreSQL stores the payload and indexes its terms. It never sees the plaintext or data key. + +### Query path + +1. The application turns the plaintext query operand into a term using the same cryptographic scope as the column. +2. It sends that term as a bound query parameter. +3. [EQL](/reference/eql) routes the comparison to the matching term, and PostgreSQL uses the appropriate functional index. +4. PostgreSQL returns only the matching ciphertexts. + +### Read path + +1. The application passes a returned payload to the SDK or Proxy. +2. ZeroKMS authorizes the key derivation and returns the material the client needs. +3. The client derives the data key locally, decrypts the value, and discards the key. + +Search and decryption are deliberately separate. PostgreSQL can find records, but it cannot decrypt them. + +## A concrete equality lookup + +The column's EQL type declares its capability. An equality-searchable email uses `public.eql_v3_text_eq`: + +```sql filename="schema.sql" +CREATE TABLE users ( + id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY, + email public.eql_v3_text_eq +); + +CREATE INDEX users_email_eq + ON users USING hash (eql_v3.eq_term(email)); +``` + +The application encrypts both stored values and query operands: + +```typescript filename="lookup.ts" +const term = await encryptionClient.encryptQuery("ava@example.com", { + column: users.email, + table: users, +}) + +if (term.failure) { + throw new Error(term.failure.message) +} + +const rows = await db.query( + "SELECT id, email FROM users WHERE email = $1::jsonb::eql_v3.query_text_eq", + [term.data], +) +``` + +PostgreSQL uses `users_email_eq` to locate the matching term. The result still contains an encrypted email; the application calls `decrypt` only if it is authorized to reveal it. The [Quickstart](/get-started/quickstart) walks through the complete setup. + +## Query capabilities + +You select capabilities per column, so a lookup field does not need to carry the machinery for range or text search. + +| Capability | What it enables | Typical uses | EQL term | +|---|---|---|---| +| Storage only | Store and decrypt | Secrets or fields never filtered in SQL | None | +| Equality | `=`, `<>`, `IN`, grouping, uniqueness, equijoins | Email lookup, customer IDs, external references | Keyed HMAC (`hm`) | +| Ordering and range | Equality, `<`, `>`, `BETWEEN`, `ORDER BY`, `MIN`, `MAX` | Dates, amounts, scores, measurements | OPE (`op`) or block ORE (`ob`) | +| Free-text match | Probabilistic n-gram matching with `@@` | Names, descriptions, addresses | Encrypted Bloom filter (`bf`) | +| Searchable JSON | Path access, exact containment, ordered leaf comparisons | Flexible metadata and nested application records | Deterministic selectors and ordered leaf terms | + +EQL exposes these as concrete domain variants such as `text_eq`, `integer_ord`, and `text_match`. Your ORM integration maps its encrypted column types to the same model. See [EQL core concepts](/reference/eql/core-concepts#variants-declare-capability) for the full matrix. + +## It still uses PostgreSQL indexes + +Searchable encryption is practical because the encrypted terms fit PostgreSQL's existing index machinery: + +- hash or B-tree indexes serve exact matching; +- B-tree indexes serve ranges and ordering; +- GIN indexes serve encrypted text matching and JSON containment. + +PostgreSQL does not scan and decrypt the table. Once the query operand has been converted to a term, the query follows the same broad execution shape as an indexed plaintext query. + +In CipherStash's reference benchmarks at one million rows, exact matching and OPE range queries both run at about **0.12 ms**, within **1.2–1.4×** of equivalent plaintext PostgreSQL queries. Free-text matching is **100–400× faster** with its GIN index than with a sequential scan. Hardware and workloads vary; [Benchmarks](/reference/benchmarks) contains the environment, query plans, and reproducible suite. + +## Search and access control reinforce each other + +Database access and plaintext access are different permissions: + +| Operation | Where it happens | What is required | +|---|---|---| +| Find matching rows | PostgreSQL | Encrypted query term and the matching EQL operator | +| Read stored values | PostgreSQL | Database permission; the result is ciphertext | +| Reveal plaintext | Your application | Client key plus an authorized ZeroKMS derivation | + +With [provable access control](/solutions/provable-access), decryption can also require the signed-in user's identity. An application or agent can query a shared encrypted dataset, receive candidate rows, and decrypt only the values that identity is permitted to access. ZeroKMS records the derivation that made each decryption possible. + +Searchable encryption is what makes that model usable: applications can locate the right protected records before asking to reveal them. + +## Choosing capabilities + +Start from the behavior your product needs: + +- Use equality for identifiers and lookup fields. +- Use ordering for values that must support ranges or sorting. +- Use free-text match for human-entered text where token matching is useful. +- Use searchable JSON when flexible document structure is part of the data model. +- Use storage-only encryption when the application reads a field by some other key and never filters on it. + +The narrower type is often also the clearest schema. A `text_eq` column tells future maintainers that it is a lookup field; a `text_match` column says it supports token matching but not sorting. Unsupported operations fail rather than silently returning an incorrect result. + +## The security tradeoff + +The database needs some information to answer a query. Searchable terms expose defined relationships between encrypted values while keeping the values themselves secret. The capability you select determines that relationship: + +| Capability | What a database observer can infer | +|---|---| +| Storage only | Table shape, row count, nullness, update timing, and approximate value size—but no equality or ordering term | +| Equality | Which comparable values are equal, and therefore their frequency | +| Ordering | Equality, frequency, and the relative order of values | +| Free-text match | Probabilistic token overlap, repeated token sets, and approximate token-set size | +| Searchable JSON | Repeated paths and structures, equality of path/value pairs, document shape, and ordering of searchable leaves | + +The terms are keyed. Someone who steals an equality term cannot hash a plaintext dictionary and compare it without the key. However, frequency distributions, known records, and other auxiliary information can still make likely values easier to infer—particularly in small or predictable domains. + +Queries add their own observable patterns. A database operator can see repeated searches, which rows match, and where range boundaries fall. This is known as search-pattern and access-pattern leakage. The database still does not receive the plaintext query, but logs, endpoint behavior, or known test records can sometimes label an otherwise encrypted term. + +This is why capabilities are selected per column instead of enabled globally. If relative order is sensitive but exact lookup is acceptable, choose equality rather than ordering. If even equality groups are sensitive, use storage-only encryption and filter a smaller candidate set after decryption in the application. + +For the application and key-management trust boundary, see [Cryptography](/security/cryptography). For the exact payload fields and EQL operators behind each capability, see [EQL core concepts](/reference/eql/core-concepts). diff --git a/content/docs/get-started/index.mdx b/content/docs/get-started/index.mdx index 14f25bc..fd8bc9b 100644 --- a/content/docs/get-started/index.mdx +++ b/content/docs/get-started/index.mdx @@ -20,5 +20,5 @@ This section gets you from nothing to an encrypted, queryable field. It owns no - **Adopting CipherStash into an existing app?** [Integrations](/integrations) covers the platforms, ORMs, frameworks, and auth providers that wrap your existing client, so your queries keep the shape they already have. - **Can't change the application?** [CipherStash Proxy](/reference/proxy) sits in front of Postgres and encrypts on the wire. -- **Want to understand it before you install it?** [Concepts](/concepts) explains searchable encryption, key management, and identity-aware encryption. +- **Want to understand it before you install it?** [Searchable encryption](/concepts/searchable-encryption) explains how encrypted queries work and what each query capability enables. - **Evaluating for a security review?** [Architecture & security](/security) is written to be read end to end, starting with [Cryptography](/security/cryptography). diff --git a/content/docs/get-started/what-is-cipherstash.mdx b/content/docs/get-started/what-is-cipherstash.mdx index 49d4fe1..032df5d 100644 --- a/content/docs/get-started/what-is-cipherstash.mdx +++ b/content/docs/get-started/what-is-cipherstash.mdx @@ -87,7 +87,7 @@ So the goal is not to eliminate leakage. It is to choose capabilities whose leak **You are evaluating.** [Architecture & security](/security) is self-contained for a vendor review, starting with [cryptography](/security/cryptography). [Solutions](/solutions) covers the problems teams bring us. -**You are deciding whether this is the right tool.** [Concepts](/concepts) explains how it works and where it does not apply. The [comparisons](/concepts/compare) are written to be honest about what CipherStash is not. +**You are deciding whether this is the right tool.** Start with [searchable encryption](/concepts/searchable-encryption) to understand how encrypted queries work. The [comparisons](/concepts/compare) are written to be honest about what CipherStash is not. ## Performance diff --git a/content/docs/index.mdx b/content/docs/index.mdx index 8d82072..216b22a 100644 --- a/content/docs/index.mdx +++ b/content/docs/index.mdx @@ -23,7 +23,7 @@ agent, a curious insider: they all see ciphertext with no key. <Cards> <Card title="Integrations" href="/integrations" description="Platforms, ORMs, frameworks, auth providers, and runtimes." /> - <Card title="Concepts" href="/concepts" description="How searchable encryption, key management, and identity-aware encryption work." /> + <Card title="Searchable encryption" href="/concepts/searchable-encryption" description="How encrypted queries work and what each query capability enables." /> <Card title="Guides" href="/guides" description="Development workflow, data migration, deployment, and troubleshooting." /> <Card title="Architecture & security" href="/security" description="Trust model, components, availability, audit, and compliance, for security review." /> <Card title="Solutions" href="/solutions" description="PII protection, HIPAA, AI/RAG, data residency, and provable access." /> diff --git a/content/docs/integrations/supabase/auth.mdx b/content/docs/integrations/supabase/auth.mdx index f35e189..7aa9f86 100644 --- a/content/docs/integrations/supabase/auth.mdx +++ b/content/docs/integrations/supabase/auth.mdx @@ -127,7 +127,7 @@ The strategy's own factory and token errors follow the `@cipherstash/auth` `Resu ## Where to next <Cards> - <Card title="Identity-aware encryption" href="/concepts/identity-aware-encryption"> + <Card title="Provable access control" href="/solutions/provable-access"> The concept: federation, lock contexts, and what identity binding proves. </Card> <Card title="Edge Functions" href="/integrations/supabase/edge-functions"> diff --git a/content/docs/security/cryptography.mdx b/content/docs/security/cryptography.mdx index 19db2c0..fdfb922 100644 --- a/content/docs/security/cryptography.mdx +++ b/content/docs/security/cryptography.mdx @@ -15,7 +15,7 @@ This page is the single reference for CipherStash's cryptographic design. Every |---|---|---| | Data encryption | AES-256-GCM-SIV | Authenticated encryption with nonce-misuse resistance | | Equality search terms | HMAC-SHA-256 | Deterministic terms for exact-match lookups | -| Range and sorting terms | Block ORE | Order-revealing encryption ([Lewi-Wu 2016](https://eprint.iacr.org/2016/612)), with enhancements from [Bogatov et al. 2018](https://arxiv.org/abs/1810.05135) | +| Range and sorting terms | CLLW OPE or block ORE | EQL defaults to a directly sortable CLLW order-preserving term; block ORE is available as a pinned alternative ([Lewi-Wu 2016](https://eprint.iacr.org/2016/612), [Bogatov et al. 2018](https://arxiv.org/abs/1810.05135)) | | Free-text search terms | Encrypted Bloom filters | Trigram tokenization ([Nojima/Kadobayashi 2009](https://link.springer.com/chapter/10.1007/978-3-642-04474-8_17), [Chum/Zhang 2017](https://link.springer.com/chapter/10.1007/978-3-319-66399-9_15)) | | Payload integrity | BLAKE3 | Structure validation of the encrypted payload | | Payload encoding | MessagePack + Base85 | Compact binary serialization, stored as `jsonb` in PostgreSQL | @@ -130,7 +130,7 @@ An attacker must compromise **both** the ZeroKMS authority key and your client k 3. ZeroKMS re-encrypts under the authority key and returns the key seed for that ID. 4. The SDK processes the seed with the client key, then derives the data key from the result, locally. 5. The SDK encrypts the plaintext with AES-256-GCM-SIV. -6. If the column declares searchable capability, the SDK generates the index terms (HMAC, ORE, Bloom filter). +6. If the column declares searchable capability, the SDK generates the index terms (HMAC, CLLW OPE or block ORE, Bloom filter). 7. The SDK packs ciphertext and index terms into an [EQL payload](/reference/eql/core-concepts). 8. The data key is discarded. 9. The application stores the payload in PostgreSQL. @@ -144,12 +144,12 @@ An attacker must compromise **both** the ZeroKMS authority key and your client k ### Query path 1. The application encrypts a search term. -2. The SDK generates the appropriate index term (HMAC for equality, ORE for range and ordering, Bloom filter for free text). +2. The SDK generates the appropriate index term (HMAC for equality, CLLW OPE or block ORE for range and ordering, Bloom filter for free text). 3. PostgreSQL compares encrypted terms using [EQL](/reference/eql) operators. The database never sees plaintext. ## What querying encrypted data reveals -Searchable encryption is a trade. Each index term reveals bounded information to whoever can read the database: HMAC terms reveal equality and therefore frequency, ORE terms reveal relative order, and Bloom filter terms reveal probabilistic token membership. +Searchable encryption is a trade. Each index term reveals bounded information to whoever can read the database: HMAC terms reveal equality and therefore frequency, OPE and ORE terms reveal relative order, and Bloom filter terms reveal probabilistic token membership. That leakage model is documented once, in [Searchable encryption](/concepts/searchable-encryption), with per-term detail and guidance on when the trade is not worth making. Assess it as part of your threat model. If the ordering or frequency of a column's values is itself sensitive, encrypt that column without a searchable index and filter after decryption. diff --git a/next.config.mjs b/next.config.mjs index c526466..55dc055 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -33,6 +33,13 @@ const config = { destination: "/get-started/quickstart", permanent: false, }, + // Concepts is a non-clickable sidebar group with no landing page. + // Keep its direct URL useful without rendering a synthetic Overview. + { + source: "/concepts", + destination: "/concepts/searchable-encryption", + permanent: false, + }, { source: "/integrations/prisma-next", destination: "/integrations/prisma", diff --git a/v2-redirects.mjs b/v2-redirects.mjs index 34258f8..831684e 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -48,7 +48,7 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/encryption/identity", - destination: "/concepts/identity-aware-encryption", + destination: "/solutions/provable-access", permanent: false, }, { From e5553f754f120995da2d7c6a6517d965d729f129 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 31 Jul 2026 01:33:54 +1000 Subject: [PATCH 148/151] docs(compare): lead with ZeroKMS advantages --- content/docs/concepts/compare/aws-kms.mdx | 2 +- .../docs/concepts/compare/hashicorp-vault.mdx | 116 +++++++++++------- 2 files changed, 70 insertions(+), 48 deletions(-) diff --git a/content/docs/concepts/compare/aws-kms.mdx b/content/docs/concepts/compare/aws-kms.mdx index 8b00ada..bd2a380 100644 --- a/content/docs/concepts/compare/aws-kms.mdx +++ b/content/docs/concepts/compare/aws-kms.mdx @@ -80,12 +80,12 @@ CipherStash moves repeated work into local derivation and supports bulk operatio ### AWS KMS is usually the better fit when - you are encrypting AWS infrastructure such as S3 objects, EBS volumes, or service-managed resources; -- conventional envelope encryption satisfies the required trust model; - AWS IAM, CloudTrail, and regional KMS controls are already the operational standard; or - the application does not need to query encrypted fields. ### CipherStash is usually the better fit when +- performance is a primary requirement: ZeroKMS batches the server-side work and derives per-value keys locally, avoiding one KMS network operation per value; - individual application values need independent keys; - the key service must not be capable of decrypting data by itself; - encrypted PostgreSQL fields still need equality, range, ordering, or fuzzy-match queries; diff --git a/content/docs/concepts/compare/hashicorp-vault.mdx b/content/docs/concepts/compare/hashicorp-vault.mdx index 689ec87..241f5e3 100644 --- a/content/docs/concepts/compare/hashicorp-vault.mdx +++ b/content/docs/concepts/compare/hashicorp-vault.mdx @@ -1,7 +1,7 @@ --- title: CipherStash vs HashiCorp Vault navTitle: HashiCorp Vault -description: "Compare HashiCorp Vault Transit with CipherStash ZeroKMS across direct and envelope encryption, split control, per-value keys, batching, audit, and searchable data." +description: "Why ZeroKMS is a faster and stronger security model than HashiCorp Vault Transit for high-volume application data encryption." type: concept components: [encryption, platform] audience: [developer, cto, ciso] @@ -10,88 +10,110 @@ reviewBy: "2027-01-31" HashiCorp Vault is a broad secrets-management and cryptographic platform. The closest comparison with CipherStash is its **Transit secrets engine**, which offers encryption operations without storing the application data. -CipherStash is narrower. It protects application values through the Stack SDK or CipherStash Proxy, uses ZeroKMS for split key derivation, and includes searchable-encryption support for PostgreSQL. +For high-volume application data encryption, ZeroKMS has two decisive advantages: -Vault Transit can be used in two materially different ways. A fair comparison has to distinguish them. +1. **Performance:** ZeroKMS was designed to derive a unique key for every value in bulk. A batch requires one service interaction, while final key derivation and encryption happen locally and scale with the application. +2. **Security:** Vault either receives the plaintext or holds everything required to unwrap its data keys. ZeroKMS never receives plaintext and cannot derive a usable data key without the client key held in your environment. -## Three operating models +Vault remains a strong general-purpose platform for secrets, PKI, signing, and centralized cryptographic services. ZeroKMS is the stronger fit when the workload is protecting large volumes of application values. -### Vault Transit direct encryption +## Performance is the first difference -The application sends base64-encoded plaintext to Vault's `encrypt` endpoint and receives ciphertext. Decryption sends that ciphertext back to Vault and receives plaintext. +Vault Transit supports batching, but the work still follows one of two centralized models. -This keeps cryptographic implementation and key custody inside Vault, and Transit supports batched encryption and decryption through `batch_input`. The trade-off is that plaintext crosses the Vault service boundary. +### Direct Transit centralizes every cryptographic operation -### Vault Transit envelope encryption +In direct mode, the application sends every plaintext value to Vault. Vault encrypts every value and returns the ciphertext. `batch_input` reduces the number of HTTP round trips, but it does not move the cryptographic work out of the Vault cluster. -The application asks Transit for a data key, encrypts locally, and stores the wrapped data key with the ciphertext. Decryption sends the wrapped key to Vault, receives the plaintext data key, and decrypts locally. +Throughput therefore depends on the capacity of the Vault deployment. Scaling application workers does not scale encryption unless the Vault cluster scales with them. Every byte of plaintext also crosses the service boundary in both directions over its lifetime: into Vault for encryption and out of Vault after decryption. -Vault now documents both a singular `datakey` endpoint and a plural `datakeys` endpoint for generating multiple data-key pairs. That means current Vault deployments can batch data-key generation where the endpoint is available; older comparisons that describe data-key generation as necessarily one request per value are no longer accurate. +### Transit envelope mode still produces complete data keys -### CipherStash ZeroKMS +Envelope mode moves the final encryption into the application. Vault generates a plaintext data key plus a wrapped copy, the application encrypts locally, and the wrapped data key is stored with the ciphertext. Decryption sends that wrapped key back to Vault to recover the plaintext data key. -ZeroKMS returns a key seed rather than a plaintext or wrapped data key. The application combines it with a client key held only in its own environment, derives a unique data key for one value, and discards that key after use. +Current Vault versions document a plural `datakeys` endpoint that can return multiple key pairs in one request. That removes the old one-request-per-key limitation, but Vault must still generate and wrap a complete data key for every independently keyed value. The application must persist every wrapped data key and send it back for unwrapping on reads. -No wrapped data key is stored with the ciphertext. The stored key ID allows the same seed to be reproduced later, but neither the ID, ZeroKMS authority key, nor client key is sufficient alone. +### ZeroKMS was designed for per-value bulk encryption -## Comparison +ZeroKMS returns key seeds rather than complete data keys. One bulk service interaction supplies the material for a batch, then the application combines each seed with its client key and derives each value's unique data key locally. -| Property | Vault direct | Vault envelope | CipherStash ZeroKMS | +The final derivation and AES operations scale horizontally with the application rather than being concentrated in the key-service cluster. No plaintext data key is transmitted, no wrapped data key is persisted, and performance does not depend on reusing or caching a data key across values. + +| Performance property | Vault direct | Vault envelope | ZeroKMS | | --- | --- | --- | --- | -| Where data encryption happens | Vault server | Application | Application | -| Does plaintext cross the key-service boundary? | Yes | No | No | -| Persistent per-value key material | Vault ciphertext contains key version | Wrapped data key stored with ciphertext | Key ID only; no data key is stored | -| Key-service capability | Vault holds and uses the Transit key | Vault can unwrap the data key for an authorized caller | ZeroKMS cannot derive the usable data key without the client key | -| Per-value keys | Possible through derived context or distinct keys | Possible with one data-key pair per value | Default for every value | -| Batching | `batch_input` for encrypt/decrypt | Multiple data-key generation is documented by `datakeys` | Bulk server interaction plus local per-value derivation | -| Searchable PostgreSQL fields | Convergent mode can support deterministic lookup; broader query support is custom | Requires a separate indexing design | EQL equality, ordering, range, fuzzy match, and JSON search | -| Primary operational model | Self-managed Vault or HCP Vault | Self-managed Vault or HCP Vault | Managed ZeroKMS, with client cryptography in the workload | +| Network interactions for a batch | One with `batch_input` | One where plural `datakeys` is available | One bulk interaction | +| Who performs value encryption? | Vault cluster | Application | Application | +| Server-side work per value | Encrypt or decrypt the value | Generate, wrap, or unwrap a complete data key | Produce seed material; final derivation remains local | +| Material stored per value | Vault ciphertext | Ciphertext plus wrapped data key | Ciphertext plus non-secret key ID | +| How encryption throughput scales | Scale the Vault cluster | Scale Vault key generation and application workers | Scale application workers | +| Does performance require data-key reuse? | A named Transit key is normally shared | Reuse is optional but expands key blast radius | No; every value always receives a unique key | -## The trust-model difference +The exact latency of Vault depends on cluster size, storage, seal configuration, network placement, and mode. The architectural distinction is stable: ZeroKMS keeps the network interaction at batch granularity while distributing the final cryptographic work across the application fleet. -Vault's security boundary is the Vault service and its operators. In direct mode, Vault receives plaintext. In envelope mode, Vault returns plaintext data keys to authorized callers. Vault can protect that boundary with policies, audit devices, key rotation, seal mechanisms, and—in Enterprise configurations—managed-key integrations. +## The security model is the second difference -ZeroKMS deliberately divides the boundary. CipherStash controls the authority-key side and the customer workload controls the client-key side. Neither can derive a data key alone, and the two long-lived components are never brought together. +### Vault direct mode sees plaintext -That does not make a compromised application harmless. A live authorized attacker can use the operations granted to the workload until access is revoked. It does mean that copying the client key alone does not create a permanent offline decryption capability. The complete model is in [Cryptography](/security/cryptography#trust-model). +Direct Transit is encryption as a remote service. The application sends plaintext to Vault and Vault returns it during decryption. Anyone who controls the authorized Vault boundary has a path to both keys and data during the operation. -## Key granularity and stored material +Policies, audit devices, HSM-backed seals, and operational controls can harden that boundary. They do not remove it from the plaintext trust model. -Vault Transit keys are named service resources. Derived keys can use a caller-provided context, and envelope mode can generate distinct data keys. The application is responsible for choosing the granularity and correctly storing the wrapped key or context needed later. +### Vault envelope mode can unwrap every data key -CipherStash makes a unique data key per value the fixed model. The application stores ciphertext and a non-secret key ID, not a reusable or wrapped data key. ZeroKMS can reproduce the seed for that ID, but only the client key can finish the derivation. +Envelope encryption keeps application plaintext out of Vault, but Vault still holds the Transit key that unwraps every stored data key. An authorized Vault operation can return a complete plaintext data key without needing cryptographic material held separately by the application. -Both systems can batch work. The meaningful difference is therefore no longer simply “Vault cannot batch data keys.” It is whether the design stores wrapped data keys and places complete unwrapping authority in Vault, or uses split control with no persistent data keys. +Envelope mode also introduces durable wrapped-key material that must be stored and mapped to the correct ciphertext. If a plaintext data key is copied from application memory, it remains usable offline for every value protected by that key. -## Audit and revocation +### ZeroKMS splits the decryption capability -Vault audit devices record requests and responses to the service, subject to Vault's documented hashing rules for sensitive fields. The event identifies the Transit path, operation, and authenticated Vault identity. How that maps to an application row depends on the key, context, and metadata design chosen by the application. +ZeroKMS holds an authority key. The application holds a client key that never leaves its environment. Neither side can derive a data key alone, and the two long-lived components are never brought together. -ZeroKMS ties derivation to a key ID and keyset. A client-key grant can be revoked server-side, preventing future derivation in that keyset. Federated identity and lock contexts can further bind an operation to an authenticated end user. See [Provable access control](/solutions/provable-access). +The encrypted payload contains a key ID, not a wrapped data key. Stealing the client key alone does not permit offline decryption of historical ciphertext; ZeroKMS must still authorize and participate in future derivations. Compromising ZeroKMS alone is also insufficient because it never receives the client key. -## Searching encrypted data +A live attacker controlling an authorized application can use the operations granted to it until access is revoked. The important difference is that the capability remains **scoped, observable, and revocable** rather than becoming a complete key that can be copied and used offline. -Vault's convergent encryption can make the same plaintext and context produce the same ciphertext, which enables limited deterministic lookup. That also exposes equality directly in the ciphertext and does not provide range, ordering, fuzzy matching, or PostgreSQL operator integration by itself. +| Security property | Vault direct | Vault envelope | ZeroKMS | +| --- | --- | --- | --- | +| Plaintext reaches the key service | Yes | No | No | +| Key service can enable decryption alone | Yes | Yes, by unwrapping the data key | No | +| Client-held cryptographic half required | No | No | Yes | +| Complete data key crosses the network | Not exposed to the application in direct mode | Yes | No | +| Per-value key material stored | Ciphertext carries the Transit key version | Wrapped data key | Non-secret key ID | +| Unique key per value | Must be designed through context or separate keys | Must be designed through separate data keys | Always | +| Offline value of a copied application secret | A Vault token still needs the Vault service | A copied plaintext data key can decrypt every value that reused it | The client key alone cannot derive any historical data key | -CipherStash separates the randomized ciphertext from purpose-built search terms. The EQL domain selected for a column declares exactly which operations it supports and which structure the database learns. See [Searchable encryption](/concepts/searchable-encryption) for the leakage model and [EQL core concepts](/reference/eql/core-concepts) for the type system. +The full ZeroKMS mechanism and compromise model are in [Cryptography](/security/cryptography#trust-model). -## Which should you use? +## Audit granularity -### Vault Transit is usually the better fit when +Vault audit devices record requests to the service. In direct mode, a batch records a Transit operation over the batch. In envelope mode, Vault observes data-key generation and unwrapping; how those keys map to application records is left to the application's storage and metadata design. -- Vault is already the organization's standard security platform; -- you need its wider secrets, PKI, signing, HMAC, tokenization, or operational ecosystem; -- direct encryption inside a tightly controlled Vault boundary is acceptable; or -- you want to own the complete key-service deployment and operational lifecycle. +ZeroKMS makes the value's key ID and keyset part of derivation. Every decryption needs server participation before plaintext recovery, so independent audit follows the same per-value boundary as the key model. Federated identity and lock contexts can also bind that operation to an authenticated end user. See [Provable access control](/solutions/provable-access). + +## Searching encrypted data -### CipherStash is usually the better fit when +Vault's convergent encryption can make the same plaintext and context produce the same ciphertext, enabling limited deterministic lookup. It exposes equality directly in the ciphertext and does not provide range, ordering, fuzzy matching, JSON search, or PostgreSQL operator integration by itself. +CipherStash separates randomized ciphertext from purpose-built search terms. The EQL domain selected for a column declares exactly which operations it supports and which structure the database learns. See [Searchable encryption](/concepts/searchable-encryption) for the leakage model and [EQL core concepts](/reference/eql/core-concepts) for the type system. + +## Which should you use? + +### CipherStash ZeroKMS is usually the better fit when + +- **performance is a primary requirement for high-volume field encryption;** - the key service must never receive plaintext or possess enough material to decrypt alone; -- unique per-value keys should be the default rather than an application design choice; +- unique per-value keys must not require key caching or reuse; - PostgreSQL must query protected fields while they remain encrypted; or -- you want key derivation, database types, SDKs, ORM wrappers, and identity binding as one system. +- key derivation, database types, SDKs, ORM wrappers, audit, and identity binding should work as one system. + +### Vault Transit is usually the better fit when + +- Vault is already the organization's standard security platform; +- the workload needs Vault's broader secrets, PKI, signing, HMAC, or tokenization capabilities; +- centralized encryption inside the Vault boundary is acceptable; or +- the organization wants to own and operate the complete cryptographic service. -The products can coexist: Vault can manage infrastructure secrets and other cryptographic workloads while CipherStash protects queryable application data. +The products can coexist: Vault can manage infrastructure secrets and other cryptographic workloads while CipherStash protects high-volume, queryable application data. ## Related From 52cb0522783c27b1cea067f0914eff816bf0af43 Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 31 Jul 2026 02:21:07 +1000 Subject: [PATCH 149/151] docs(v2): make legacy redirects merge-safe - port Auth, DynamoDB, AI/RAG, and hidden security content - collapse guides and remove placeholder pages - validate every legacy redirect destination --- IA.md | 20 ++- content/docs/concepts/key-management.mdx | 2 +- .../docs/get-started/choose-your-stack.mdx | 2 +- .../docs/get-started/what-is-cipherstash.mdx | 4 +- .../{deployment/index.mdx => deployment.mdx} | 90 ++++++++++- content/docs/guides/deployment/meta.json | 4 - content/docs/guides/development/index.mdx | 9 -- content/docs/guides/development/meta.json | 4 - .../docs/guides/development/schema-design.mdx | 9 -- content/docs/guides/index.mdx | 11 +- content/docs/guides/meta.json | 2 +- ...ncrypt-existing-data.mdx => migration.mdx} | 3 +- content/docs/guides/migration/index.mdx | 19 --- content/docs/guides/migration/meta.json | 4 - content/docs/guides/troubleshooting/index.mdx | 9 -- content/docs/guides/troubleshooting/meta.json | 4 - .../troubleshooting/query-performance.mdx | 9 -- content/docs/index.mdx | 4 +- content/docs/integrations/aws/dynamodb.mdx | 143 ++++++++++++++++++ content/docs/integrations/aws/meta.json | 4 + content/docs/integrations/index.mdx | 2 +- .../docs/integrations/prisma/deployment.mdx | 2 +- content/docs/integrations/supabase/index.mdx | 2 +- .../docs/integrations/supabase/quickstart.mdx | 4 +- content/docs/reference/auth/access-keys.mdx | 63 ++++++++ content/docs/reference/auth/clients.mdx | 48 ++++++ content/docs/reference/auth/index.mdx | 28 +++- content/docs/reference/auth/meta.json | 2 +- .../reference/auth/oidc-configuration.mdx | 73 +++++++++ content/docs/reference/eql/indexes.mdx | 2 +- content/docs/reference/eql/v2/index.mdx | 12 +- content/docs/reference/eql/v2/indexes.mdx | 4 +- content/docs/reference/eql/v2/payload.mdx | 8 +- content/docs/reference/eql/v2/queries.mdx | 2 +- content/docs/reference/glossary.mdx | 12 +- content/docs/reference/index.mdx | 9 +- content/docs/reference/meta.json | 2 +- .../docs/reference/proxy/configuration.mdx | 2 +- content/docs/reference/proxy/multitenant.mdx | 2 +- content/docs/reference/stack/usage.mdx | 21 +++ content/docs/reference/workspace/billing.mdx | 2 +- .../reference/workspace/configuration.mdx | 2 +- content/docs/reference/workspace/index.mdx | 2 +- content/docs/reference/workspace/members.mdx | 2 +- content/docs/security/audit-logging.mdx | 51 ++++++- content/docs/security/compliance/index.mdx | 46 +++++- content/docs/security/cryptography.mdx | 6 +- content/docs/security/cts.mdx | 60 +++++++- content/docs/security/meta.json | 9 +- content/docs/solutions/ai-and-rag.mdx | 84 ++++++++++ content/docs/solutions/data-residency.mdx | 6 +- content/docs/solutions/meta.json | 2 +- content/docs/solutions/provable-access.mdx | 6 +- next.config.mjs | 39 ++++- scripts/validate-v2-redirects.ts | 72 ++++++++- v2-redirects.mjs | 101 ++++++++++--- 56 files changed, 959 insertions(+), 187 deletions(-) rename content/docs/guides/{deployment/index.mdx => deployment.mdx} (60%) delete mode 100644 content/docs/guides/deployment/meta.json delete mode 100644 content/docs/guides/development/index.mdx delete mode 100644 content/docs/guides/development/meta.json delete mode 100644 content/docs/guides/development/schema-design.mdx rename content/docs/guides/{migration/encrypt-existing-data.mdx => migration.mdx} (99%) delete mode 100644 content/docs/guides/migration/index.mdx delete mode 100644 content/docs/guides/migration/meta.json delete mode 100644 content/docs/guides/troubleshooting/index.mdx delete mode 100644 content/docs/guides/troubleshooting/meta.json delete mode 100644 content/docs/guides/troubleshooting/query-performance.mdx create mode 100644 content/docs/integrations/aws/dynamodb.mdx create mode 100644 content/docs/integrations/aws/meta.json create mode 100644 content/docs/reference/auth/access-keys.mdx create mode 100644 content/docs/reference/auth/clients.mdx create mode 100644 content/docs/reference/auth/oidc-configuration.mdx create mode 100644 content/docs/solutions/ai-and-rag.mdx diff --git a/IA.md b/IA.md index 8ba7d33..a3b8254 100644 --- a/IA.md +++ b/IA.md @@ -310,7 +310,7 @@ Two notes: - [x] `/integrations/drizzle` — overview and generated `@cipherstash/stack-drizzle` API reference - [x] `/integrations/prisma` — Prisma ORM 8 RC, EQL v3, Prisma Postgres, Prisma Compute, and generated API reference - [ ] `/integrations/aws/rds-aurora` — Proxy path -- [ ] `/integrations/aws/dynamodb` +- [x] `/integrations/aws/dynamodb` — Stack 1.0 helper, equality lookups, and legacy reads - [ ] `/integrations/clerk` - [ ] `/integrations/auth0` — end-to-end example (Clerk parity) - [ ] `/integrations/okta` — end-to-end example (Clerk parity) @@ -349,13 +349,11 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). - [ ] `/guides/development/schema-design` — which encrypted type/variant per column (CIP-3327) - [ ] `/guides/development/testing-and-ci` (port deploy/testing) - [ ] `/guides/development/team-onboarding` (port) -- [ ] `/guides/migration/encrypt-existing-data` — the backfill guide, runnable (CIP-3329) +- [x] `/guides/migration` — the backfill guide, runnable (CIP-3329) - [ ] ⛔ `/guides/migration/upgrading-from-eql-v2` — REQUIRED; mechanics pending product answer (CIP-3329) - [ ] `/guides/migration/adopting-incrementally` (CIP-3329) - [ ] `/guides/migration/key-rotation-operations` -- [ ] `/guides/deployment/going-to-production` (port) -- [ ] `/guides/deployment/serverless-and-bundling` (merge bundling + sst) -- [ ] `/guides/deployment/proxy-deployment` (merge proxy Docker + aws-ecs) +- [x] `/guides/deployment` — production rollout, bundling, CI, onboarding, and Proxy deployment consolidated into one page - [ ] `/guides/troubleshooting` index — symptom-based router - [ ] `/guides/troubleshooting/query-performance` — seq-scan diagnosis, typed-operand gotcha - [ ] `/guides/troubleshooting/runtime-errors` @@ -367,14 +365,14 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). - [x] Section scaffold 🚧 - [x] `/security/cryptography` — ONE reconciled ZeroKMS mechanism story (kills the 3 conflicting accounts) - [ ] `/security/zerokms` -- [ ] `/security/cts` — auth layer architecture (CIP-3330) +- [x] `/security/cts` — auth layer architecture (hidden from nav until the section is expanded) - [ ] `/security/stack-sdk` - [ ] `/security/proxy` - [ ] `/security/threat-scenarios` - [ ] ⛔ `/security/availability-and-continuity` — DR (port) + SLA + exit story; pending SLA answer -- [ ] ⛔ `/security/audit-logging` — pending retention answer +- [x] `/security/audit-logging` — Proxy event mechanics; retention/export remains deployment-specific and the nav stays hidden - [ ] ⛔ `/security/key-ownership` — BYOK/self-hosted; pending product answer -- [ ] `/security/compliance` index — framework mapping (port, good) +- [x] `/security/compliance` index — capability/responsibility mapping (nav remains hidden) - [ ] `/security/compliance/hipaa` — BAA scope, §164.312 mapping (CIP-3332) - [ ] `/security/compliance/soc2` — verify Type II report exists - [ ] `/security/compliance/gdpr` @@ -384,7 +382,7 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). - [x] Section scaffold 🚧 - [ ] `/solutions/protecting-pii` (new) - [ ] `/solutions/healthcare-hipaa` (new; pairs with compliance/hipaa) -- [ ] `/solutions/ai-and-rag` (port use-cases/ai-rag) +- [x] `/solutions/ai-and-rag` — source protection, retrieval flow, and isolation boundaries - [ ] `/solutions/data-residency` (port) - [ ] `/solutions/provable-access` (port) @@ -419,8 +417,8 @@ and the old `/compare/*` paths redirect there (`v2-redirects.mjs`). - **Auth (CIP-3330):** - [ ] `/reference/auth/lock-contexts` - [ ] `/reference/auth/cts-tokens` -- [ ] `/reference/auth/oidc-configuration` -- [ ] `/reference/auth/access-keys` (+ clients) +- [x] `/reference/auth/oidc-configuration` +- [x] `/reference/auth/access-keys` + `/reference/auth/clients` - **CLI / Proxy / Workspace:** - [ ] `/reference/cli/*` (port 9 pages) - [ ] `/reference/proxy/*` (configuration, message-flow, multitenant, errors) diff --git a/content/docs/concepts/key-management.mdx b/content/docs/concepts/key-management.mdx index 136897f..2216f64 100644 --- a/content/docs/concepts/key-management.mdx +++ b/content/docs/concepts/key-management.mdx @@ -161,7 +161,7 @@ The design deliberately keeps the durable pieces small and separated: | ZeroKMS | Authority keys and access-control state | | Nowhere | Plaintext data keys | -Your encrypted data stays in your database. ZeroKMS handles key material, not application data. This separation also shapes recovery: restoring ZeroKMS restores the ability to reproduce keys; it does not require CipherStash to restore or move your encrypted database. See [Disaster recovery](/stack/cipherstash/kms/disaster-recovery). +Your encrypted data stays in your database. ZeroKMS handles key material, not application data. This separation also shapes recovery: restoring ZeroKMS restores the ability to reproduce keys; it does not require CipherStash to restore or move your encrypted database. Multi-region application patterns are covered in [Data residency](/solutions/data-residency#multi-region-with-regional-key-isolation). ## ZeroKMS and searchable encryption diff --git a/content/docs/get-started/choose-your-stack.mdx b/content/docs/get-started/choose-your-stack.mdx index b6cc077..d083f18 100644 --- a/content/docs/get-started/choose-your-stack.mdx +++ b/content/docs/get-started/choose-your-stack.mdx @@ -33,7 +33,7 @@ EQL installs into any Postgres you can connect to. It needs no extension, no sup | Neon, RDS, Aurora, Cloud SQL | Yes | `stash eql install` detects a non-superuser role and adapts. | | Self-hosted Postgres | Yes | Full operator-class support, so the ORE ordering mechanism is available. | | Postgres behind PgBouncer | Yes | Transaction pooling is fine. Proxy has its own pooling. | -| DynamoDB | Yes, without EQL | [DynamoDB integration](/stack/cipherstash/encryption/dynamodb). Encrypted attributes and HMAC key lookups; no EQL, because there's no Postgres. | +| DynamoDB | Yes, without EQL | [DynamoDB integration](/integrations/aws/dynamodb). Encrypted attributes and HMAC key lookups; no EQL, because there's no Postgres. | | MySQL, MongoDB, others | Not yet | The SDK still encrypts values for you, but nothing is queryable server-side. | <Callout type="info"> diff --git a/content/docs/get-started/what-is-cipherstash.mdx b/content/docs/get-started/what-is-cipherstash.mdx index 032df5d..d93efb1 100644 --- a/content/docs/get-started/what-is-cipherstash.mdx +++ b/content/docs/get-started/what-is-cipherstash.mdx @@ -62,7 +62,7 @@ flowchart TB You rarely need all of them at once. The Stack SDK plus EQL is the common case. Proxy is the alternative to the SDK, not an addition to it. -Note that **EQL is only for Postgres**. The SDK also encrypts values that never touch a database, and non-Postgres stores like [DynamoDB](/stack/cipherstash/encryption/dynamodb), with no EQL involved. +Note that **EQL is only for Postgres**. The SDK also encrypts values that never touch a database, and non-Postgres stores like [DynamoDB](/integrations/aws/dynamodb), with no EQL involved. ## Choosing what each column reveals @@ -99,7 +99,7 @@ Encryption in use is usually assumed to be slow. It is, if you do it with fully | vs fully homomorphic encryption | [410,000x faster](https://github.com/cipherstash/tfhe-ore-bench) on the per-row primitives a database actually executes. | | vs AWS KMS | Up to 14x the throughput, because ZeroKMS derives keys in bulk rather than one call per value. | -The FHE comparison is an open benchmark harness you can run yourself. See [CipherStash vs FHE](/stack/reference/comparisons/fhe) for the methodology, and for the workloads where FHE is genuinely the right tool. +The FHE comparison is an open benchmark harness you can run yourself. See [CipherStash vs FHE](/concepts/compare/fhe) for the methodology, and for the workloads where FHE is genuinely the right tool. ## What it protects against diff --git a/content/docs/guides/deployment/index.mdx b/content/docs/guides/deployment.mdx similarity index 60% rename from content/docs/guides/deployment/index.mdx rename to content/docs/guides/deployment.mdx index 12b5ade..49778ca 100644 --- a/content/docs/guides/deployment/index.mdx +++ b/content/docs/guides/deployment.mdx @@ -1,6 +1,5 @@ --- title: Deployment -navTitle: Overview description: "Deploy CipherStash changes safely across environments, with explicit credential, migration, rollout, monitoring, and rollback gates." type: guide components: [encryption, eql, cli] @@ -9,7 +8,7 @@ audience: [developer] CipherStash deployments coordinate application code, database schema, and credentials. Treat each independently deployable stage as a release with its own verification and rollback gate. -For the detailed dual-write, backfill, and cutover procedure for populated columns, follow [Encrypt existing data](/guides/migration/encrypt-existing-data). This page covers the production rollout around that migration. +For the detailed dual-write, backfill, and cutover procedure for populated columns, follow [Data migration](/guides/migration). This page covers the production rollout around that migration. ## Before the first deployment @@ -96,3 +95,90 @@ Test the correctness of returned values, not only request success rates. An inco Prefer application rollbacks while both plaintext and encrypted columns are being maintained. Before plaintext removal, a read cutover can be reversed without changing data: point reads back to the original columns and leave dual-writes running. After plaintext is dropped, rollback becomes a data-recovery operation. Avoid reaching that stage until operational evidence shows the encrypted path is stable and every supported application version has moved forward. + +## Serverless and bundled applications + +`@cipherstash/stack` must remain a runtime dependency when a build tool creates +a server bundle. Configure the bundler to leave the package external, then make +sure the deployment artifact installs it for the target platform. + +For Next.js, use `serverExternalPackages`: + +```typescript filename="next.config.ts" +const nextConfig = { + serverExternalPackages: ["@cipherstash/stack"], +} + +export default nextConfig +``` + +For esbuild, pass `--external:@cipherstash/stack`; for webpack, declare it as a +CommonJS external. An SST function needs both the esbuild exclusion and a +runtime install: + +```typescript filename="sst.config.ts" +{ + nodejs: { + esbuild: { external: ["@cipherstash/stack"] }, + install: ["@cipherstash/stack"], + }, +} +``` + +Build and start the artifact in a Linux container before release when local +development uses macOS or Windows. This catches a lockfile or deployment bundle +that omitted the target platform's runtime package. + +## Testing and CI + +Use a separate workspace and database for integration tests. Supply the test +workspace's four `CS_*` credentials only to the CI job, install the same EQL +release used by production, and test: + +- encryption followed by decryption returns the original typed value; +- every required equality, range, ordering, token, or JSON query returns the + expected records; +- a client without the required keyset grant cannot decrypt the data; +- schema migrations and application code work in both rolling-deployment + orders. + +Mocks are useful for business logic that merely passes encrypted values +through, but they do not test ciphertext compatibility, key access, query +terms, or EQL behavior. Keep at least one real end-to-end test for every +encrypted query capability used in production. + +## Team onboarding + +Invite each developer to the organization and workspace, then have them run: + +```bash +npx stash init +``` + +Each device receives its own developer identity and client key. Do not share +production credentials with developers or copy one developer's local profile +into CI. Remove a departing developer from the workspace and revoke their +device client keys without changing application credentials. + +See [workspace members](/reference/workspace/members) and +[client keys](/reference/auth/clients) for the complete access model. + +## Deploying Proxy + +Run CipherStash Proxy as a container in the same private network as PostgreSQL. +Supply database credentials and CipherStash application credentials from the +platform's secret manager, expose the PostgreSQL listener only to application +clients, and expose health or metrics endpoints only to the monitoring plane. + +For ECS, Kubernetes, or another orchestrator, keep these concerns separate: + +1. Pull the published Proxy image from the approved registry. +2. Grant the task or pod permission to read only its deployment secrets. +3. Configure security groups or network policies for application → Proxy and + Proxy → database traffic. +4. Roll out at least two instances where connection availability requires it. +5. Verify a plaintext write, encrypted database value, encrypted query, and + decrypted read through the deployed endpoint. + +Use the [Proxy configuration reference](/reference/proxy/configuration) for +environment variables, TOML settings, ports, logging, and metrics. diff --git a/content/docs/guides/deployment/meta.json b/content/docs/guides/deployment/meta.json deleted file mode 100644 index 0bbd244..0000000 --- a/content/docs/guides/deployment/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "Deployment", - "pages": ["index", "..."] -} diff --git a/content/docs/guides/development/index.mdx b/content/docs/guides/development/index.mdx deleted file mode 100644 index b1a735e..0000000 --- a/content/docs/guides/development/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Development -navTitle: Overview -description: "Development documentation — being built as part of the docs V2 overhaul." ---- - -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/guides/development/meta.json b/content/docs/guides/development/meta.json deleted file mode 100644 index 24f8878..0000000 --- a/content/docs/guides/development/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "Development", - "pages": ["index", "..."] -} diff --git a/content/docs/guides/development/schema-design.mdx b/content/docs/guides/development/schema-design.mdx deleted file mode 100644 index b11397f..0000000 --- a/content/docs/guides/development/schema-design.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Schema design -description: "Choosing the right encrypted type and capability for each column." -type: guide ---- - -This page is being built as part of the docs V2 overhaul ([CIP-3327](https://linear.app/cipherstash/issue/CIP-3327)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, [EQL core concepts](/reference/eql/core-concepts) covers the capability model, and the per-type pages ([numbers](/reference/eql/numbers), [dates & times](/reference/eql/dates-and-times), [text](/reference/eql/text), [JSON](/reference/eql/json)) cover choosing variants. diff --git a/content/docs/guides/index.mdx b/content/docs/guides/index.mdx index 32279bf..3f85df0 100644 --- a/content/docs/guides/index.mdx +++ b/content/docs/guides/index.mdx @@ -1,10 +1,11 @@ --- title: Guides -navTitle: Overview -description: "Task-oriented guides: development workflow, data migration, deployment, and troubleshooting." +description: "Deployment and data migration guidance for CipherStash." type: guide --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, current documentation lives in the [existing docs](/stack). +{/* + Fumadocs requires an index document when generating a metadata-backed folder. + meta.json excludes this file from the page tree, and Next redirects its route + to Deployment. +*/} diff --git a/content/docs/guides/meta.json b/content/docs/guides/meta.json index 810cf95..1f31180 100644 --- a/content/docs/guides/meta.json +++ b/content/docs/guides/meta.json @@ -1,5 +1,5 @@ { "title": "Guides", "icon": "Wrench", - "pages": ["index", "..."] + "pages": ["!index", "deployment", "migration", "..."] } diff --git a/content/docs/guides/migration/encrypt-existing-data.mdx b/content/docs/guides/migration.mdx similarity index 99% rename from content/docs/guides/migration/encrypt-existing-data.mdx rename to content/docs/guides/migration.mdx index 69c6b0a..7265075 100644 --- a/content/docs/guides/migration/encrypt-existing-data.mdx +++ b/content/docs/guides/migration.mdx @@ -1,5 +1,6 @@ --- -title: Encrypt existing data +title: Data migration +navTitle: Data migration description: "Move populated plaintext columns to searchable encryption with dual-writes, a resumable backfill, and a reversible read cutover." type: guide components: [encryption, eql, cli] diff --git a/content/docs/guides/migration/index.mdx b/content/docs/guides/migration/index.mdx deleted file mode 100644 index 5820d97..0000000 --- a/content/docs/guides/migration/index.mdx +++ /dev/null @@ -1,19 +0,0 @@ ---- -title: Data migration -navTitle: Overview -description: "Safely introduce CipherStash encryption to existing schemas and populated production data." -type: guide -components: [encryption, eql, cli] -audience: [developer] ---- - -Encryption migrations coordinate schema changes, application writes, historical data, and read cutovers. Keep each stage independently verifiable and reversible until the plaintext data is intentionally removed. - -<Cards> - <Card title="Encrypt existing data" href="/guides/migration/encrypt-existing-data"> - Add encrypted mirrors, deploy dual-writes, backfill historical rows, cut reads over, and remove plaintext safely. - </Card> - <Card title="Deployment" href="/guides/deployment"> - Plan environment promotion, credentials, release gates, monitoring, and rollback. - </Card> -</Cards> diff --git a/content/docs/guides/migration/meta.json b/content/docs/guides/migration/meta.json deleted file mode 100644 index db4e68b..0000000 --- a/content/docs/guides/migration/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "Data migration", - "pages": ["index", "..."] -} diff --git a/content/docs/guides/troubleshooting/index.mdx b/content/docs/guides/troubleshooting/index.mdx deleted file mode 100644 index b49feca..0000000 --- a/content/docs/guides/troubleshooting/index.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Troubleshooting -navTitle: Overview -description: "Troubleshooting documentation — being built as part of the docs V2 overhaul." ---- - -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, current documentation lives in the [existing docs](/stack). diff --git a/content/docs/guides/troubleshooting/meta.json b/content/docs/guides/troubleshooting/meta.json deleted file mode 100644 index e5715ad..0000000 --- a/content/docs/guides/troubleshooting/meta.json +++ /dev/null @@ -1,4 +0,0 @@ -{ - "title": "Troubleshooting", - "pages": ["index", "..."] -} diff --git a/content/docs/guides/troubleshooting/query-performance.mdx b/content/docs/guides/troubleshooting/query-performance.mdx deleted file mode 100644 index a128a95..0000000 --- a/content/docs/guides/troubleshooting/query-performance.mdx +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Query performance -description: "Diagnosing and fixing slow queries on encrypted columns." -type: guide ---- - -This page is being built as part of the docs V2 overhaul ([CIP-3351](https://linear.app/cipherstash/issue/CIP-3351)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, the EQL reference covers the essentials: [Indexes](/reference/eql/indexes) walks through `EXPLAIN` verification and large-table index builds, and [Sorting](/reference/eql/sorting) covers extractor-form sort keys. diff --git a/content/docs/index.mdx b/content/docs/index.mdx index 216b22a..8f3f6f7 100644 --- a/content/docs/index.mdx +++ b/content/docs/index.mdx @@ -24,10 +24,10 @@ agent, a curious insider: they all see ciphertext with no key. <Cards> <Card title="Integrations" href="/integrations" description="Platforms, ORMs, frameworks, auth providers, and runtimes." /> <Card title="Searchable encryption" href="/concepts/searchable-encryption" description="How encrypted queries work and what each query capability enables." /> - <Card title="Guides" href="/guides" description="Development workflow, data migration, deployment, and troubleshooting." /> + <Card title="Guides" href="/guides/deployment" description="Deployment and data migration guidance for CipherStash." /> <Card title="Architecture & security" href="/security" description="Trust model, components, availability, audit, and compliance, for security review." /> <Card title="Solutions" href="/solutions" description="PII protection, HIPAA, AI/RAG, data residency, and provable access." /> - <Card title="Reference" href="/reference" description="EQL, the Stack SDK, Auth, the CLI, and Proxy: precise API documentation." /> + <Card title="Reference" href="/reference/eql" description="EQL, the Stack SDK, Auth, the CLI, and Proxy: precise API documentation." /> </Cards> ## AI-ready documentation diff --git a/content/docs/integrations/aws/dynamodb.mdx b/content/docs/integrations/aws/dynamodb.mdx new file mode 100644 index 0000000..4a9bb1a --- /dev/null +++ b/content/docs/integrations/aws/dynamodb.mdx @@ -0,0 +1,143 @@ +--- +title: DynamoDB +description: "Encrypt DynamoDB attributes with @cipherstash/stack, including bulk operations and equality lookups over HMAC attributes." +type: guide +components: [encryption, platform] +audience: [developer] +integration: + category: platform + setup: code-only +verifiedAgainst: + stack: "1.0.0" +--- + +CipherStash's DynamoDB helper encrypts and decrypts items without wrapping the +AWS SDK. Your application keeps control of every `PutCommand`, `GetCommand`, +and `QueryCommand`; `encryptedDynamoDB` transforms the item immediately before +a write and after a read. + +DynamoDB does not use EQL. Equality-enabled attributes store an HMAC search +term alongside the ciphertext so they can participate in key conditions. + +## Install + +```bash cta cta-type="install" example-id="install-dynamodb" +npm install @cipherstash/stack @aws-sdk/client-dynamodb @aws-sdk/lib-dynamodb +``` + +## Define the encrypted attributes + +Use the v3 schema builder. `TextEq` produces an equality term; `Text` is +storage-only. + +```typescript filename="encryption.ts" +import { Encryption } from "@cipherstash/stack" +import { encryptedDynamoDB } from "@cipherstash/stack/dynamodb" +import { encryptedTable, types } from "@cipherstash/stack/v3" + +export const users = encryptedTable("users", { + email: types.TextEq("email"), + name: types.Text("name"), +}) + +export const encryptionClient = await Encryption({ schemas: [users] }) +export const dynamo = encryptedDynamoDB({ encryptionClient }) +``` + +For an equality-enabled `email`, the encrypted item contains: + +| Attribute | Purpose | +| --- | --- | +| `email__source` | Ciphertext used for decryption | +| `email__hmac` | Equality term used in a partition key, sort key, or GSI | + +Non-encrypted attributes pass through unchanged. Ordering and free-text terms +have no DynamoDB query surface and are not stored. + +## Encrypt and write an item + +```typescript filename="write-user.ts" +import { PutCommand } from "@aws-sdk/lib-dynamodb" +import { docClient } from "./aws" +import { dynamo, users } from "./encryption" + +const encrypted = await dynamo.encryptModel( + { pk: "user#1", email: "alice@example.com", name: "Alice", role: "admin" }, + users, +) + +if (encrypted.failure) throw encrypted.failure + +await docClient.send(new PutCommand({ + TableName: "Users", + Item: encrypted.data, +})) +``` + +The result retains `pk` and `role`, replaces `email` with `email__source` and +`email__hmac`, and replaces `name` with `name__source`. + +## Read and decrypt + +```typescript filename="read-user.ts" +import { GetCommand } from "@aws-sdk/lib-dynamodb" + +const stored = await docClient.send(new GetCommand({ + TableName: "Users", + Key: { pk: "user#1" }, +})) + +const decrypted = await dynamo.decryptModel(stored.Item ?? {}, users) +if (decrypted.failure) throw decrypted.failure + +console.log(decrypted.data.email) +``` + +Use `bulkEncryptModels` and `bulkDecryptModels` before `BatchWriteCommand` and +after `BatchGetCommand` to process many items in one ZeroKMS round trip. + +## Query an equality-enabled attribute + +Encrypt the operand with the same table and column definition, then use its +HMAC as the DynamoDB key value: + +```typescript filename="find-by-email.ts" +import { QueryCommand } from "@aws-sdk/lib-dynamodb" + +const term = await encryptionClient.encryptQuery("alice@example.com", { + table: users, + column: users.email, +}) + +if (term.failure) throw term.failure + +const result = await docClient.send(new QueryCommand({ + TableName: "Users", + IndexName: "EmailIndex", + KeyConditionExpression: "email__hmac = :email", + ExpressionAttributeValues: { ":email": term.data.hm }, +})) + +const decrypted = await dynamo.bulkDecryptModels(result.Items ?? [], users) +if (decrypted.failure) throw decrypted.failure +``` + +An encrypted HMAC attribute can back a table key or GSI. Ciphertext source +attributes do not support ranges, `begins_with`, or `contains`. + +## Read items written by EQL v2 + +Keep the current v3 table declaration and opt into legacy decoding while old +items remain: + +```typescript +const decrypted = await dynamo.decryptModel(storedItem, users, { + storedEqlVersion: 2, +}) +``` + +New writes always use the current format. Remove the option after every legacy +item has been rewritten. + +For every method, option, and return type, see the generated +[DynamoDB API reference](/reference/stack/api-reference/dynamodb). diff --git a/content/docs/integrations/aws/meta.json b/content/docs/integrations/aws/meta.json new file mode 100644 index 0000000..12b54e1 --- /dev/null +++ b/content/docs/integrations/aws/meta.json @@ -0,0 +1,4 @@ +{ + "title": "AWS", + "pages": ["dynamodb"] +} diff --git a/content/docs/integrations/index.mdx b/content/docs/integrations/index.mdx index 04359af..346f52b 100644 --- a/content/docs/integrations/index.mdx +++ b/content/docs/integrations/index.mdx @@ -39,7 +39,7 @@ How your application queries it. </Cards> <Callout type="info"> -Not on this list? Any ORM works without an integration — encrypt before a write and decrypt after a read with the [Stack SDK](/reference/stack), which is what the integrations do for you. [CipherStash Proxy](/reference/proxy) covers the case where you cannot change the application at all, and the SDK also encrypts values that never reach Postgres, including non-Postgres stores like [DynamoDB](/stack/cipherstash/encryption/dynamodb). +Not on this list? Any ORM works without an integration — encrypt before a write and decrypt after a read with the [Stack SDK](/reference/stack), which is what the integrations do for you. [CipherStash Proxy](/reference/proxy) covers the case where you cannot change the application at all, and the SDK also encrypts values that never reach Postgres, including non-Postgres stores like [DynamoDB](/integrations/aws/dynamodb). </Callout> ## Still deciding diff --git a/content/docs/integrations/prisma/deployment.mdx b/content/docs/integrations/prisma/deployment.mdx index 8bc63cc..f5d24a9 100644 --- a/content/docs/integrations/prisma/deployment.mdx +++ b/content/docs/integrations/prisma/deployment.mdx @@ -15,7 +15,7 @@ verifiedAgainst: Prisma owns the complete database migration graph for this integration, including the EQL bundle, encrypted columns, and their functional indexes. Application releases still need to be staged carefully when a plaintext column already contains data. -For the reasoning, rollback rules, and adapter-independent sequence, read [Encrypt existing data](/guides/migration/encrypt-existing-data) and the [deployment guide](/guides/deployment). This page maps that process to Prisma ORM 8. +For the reasoning, rollback rules, and adapter-independent sequence, read [Data migration](/guides/migration) and the [deployment guide](/guides/deployment). This page maps that process to Prisma ORM 8. ## New tables and empty columns diff --git a/content/docs/integrations/supabase/index.mdx b/content/docs/integrations/supabase/index.mdx index dba917b..89289a5 100644 --- a/content/docs/integrations/supabase/index.mdx +++ b/content/docs/integrations/supabase/index.mdx @@ -39,7 +39,7 @@ With EQL 3.0.4, the Supabase wrapper supports encrypted equality, range, and ord | Encrypt inside Supabase Edge Functions | [Edge Functions](/integrations/supabase/edge-functions) | | Choose local or deployment credentials | [Workspace credentials](/reference/workspace/configuration#credentials) | | Use an ORM against Supabase Postgres | [Drizzle](/integrations/drizzle) or [Prisma ORM 8](/integrations/prisma) | -| Encrypt columns that already contain data | [Encrypt existing data](/guides/migration/encrypt-existing-data) | +| Encrypt columns that already contain data | [Data migration](/guides/migration) | | Plan a production rollout or rollback | [Deployment guide](/guides/deployment) | ## Supabase, Drizzle, and Prisma diff --git a/content/docs/integrations/supabase/quickstart.mdx b/content/docs/integrations/supabase/quickstart.mdx index 7480ee7..c85343d 100644 --- a/content/docs/integrations/supabase/quickstart.mdx +++ b/content/docs/integrations/supabase/quickstart.mdx @@ -15,7 +15,7 @@ verifiedAgainst: This tutorial creates a Supabase table with one encrypted column, writes a value through the Supabase JavaScript client, and queries it without sending plaintext to Postgres. -It is designed for a new table or an empty column. If the column already contains production data, use [Encrypt existing data](/guides/migration/encrypt-existing-data) instead. +It is designed for a new table or an empty column. If the column already contains production data, use [Data migration](/guides/migration) instead. ## Before you start @@ -161,5 +161,5 @@ The Table Editor cannot decrypt or meaningfully filter the encrypted value becau - Learn the supported mutations, filters, ordering, response types, and errors in the [supabase-js guide](/integrations/supabase/supabase-js). - Use the complete [`encryptedSupabase` API reference](/integrations/supabase/api-reference) when you need method-level detail. - Add functional indexes when the table reaches meaningful row counts by following [EQL indexes](/reference/eql/indexes). -- For a populated table, follow the safe dual-write and backfill process in [Encrypt existing data](/guides/migration/encrypt-existing-data). +- For a populated table, follow the safe dual-write and backfill process in [Data migration](/guides/migration). - To use a direct Postgres ORM connection, continue with [Drizzle](/integrations/drizzle) or [Prisma ORM 8](/integrations/prisma). diff --git a/content/docs/reference/auth/access-keys.mdx b/content/docs/reference/auth/access-keys.mdx new file mode 100644 index 0000000..90cf000 --- /dev/null +++ b/content/docs/reference/auth/access-keys.mdx @@ -0,0 +1,63 @@ +--- +title: Access keys +description: "Create and manage access keys for production applications, CI, and workspace automation." +type: reference +components: [platform] +audience: [developer] +--- + +Access keys authenticate non-interactive requests to CipherStash services such +as ZeroKMS and CTS. A deployed Stack SDK or Proxy client uses an access key +alongside its [client key](/reference/auth/clients). + +Local development normally does not need one. `stash init` creates a +device-backed session and client key for the current developer. Use access +keys for production, CI, or workspace automation where an interactive login is +not available. + +## Create an access key + +Open **Access Keys** for the workspace in the +[CipherStash Dashboard](https://dashboard.cipherstash.com/workspaces/_/access-keys), +select **Create access key**, and choose the least-privileged role that covers +the workload. + +The key value is shown when it is created. Store it in the deployment's secret +manager as `CS_CLIENT_ACCESS_KEY`; do not commit it or share a developer key +with production. + +## Roles + +### Member + +Use `member` for applications performing cryptographic operations. It can list +keysets and generate or retrieve data-key material: + +```text +keyset:list +data_key:generate +data_key:retrieve +``` + +### Control + +Use `control` for workspace automation that manages keysets and client access. +It can create, list, enable, disable, grant, modify, and revoke keysets, and +list clients. It cannot derive data keys. + +### Admin + +`admin` combines service administration and cryptographic permissions. Avoid +it in production applications: use `member` for runtime operations and +`control` for automation so a compromised credential has the smallest useful +scope. + +## Rotate or revoke a key + +Create the replacement first, update every consumer, verify that the new key +is in use, and then delete the old key from the Dashboard. Rotating an access +key changes authentication; it does not re-encrypt stored data. + +See [workspace configuration](/reference/workspace/configuration) for the full +production credential set and [Deployment](/guides/deployment) for rollout +gates. diff --git a/content/docs/reference/auth/clients.mdx b/content/docs/reference/auth/clients.mdx new file mode 100644 index 0000000..0cc78aa --- /dev/null +++ b/content/docs/reference/auth/clients.mdx @@ -0,0 +1,48 @@ +--- +title: Client keys +description: "Understand device-backed and application client keys, keyset grants, revocation, and deployment use." +type: reference +components: [platform, encryption] +audience: [developer] +--- + +A client key is the application-held half of CipherStash's split key +architecture. It identifies a developer device or deployed application and is +granted access to one or more keysets. ZeroKMS never receives the client key. + +## Client key types + +### Device-backed client keys + +`stash init` creates a device-backed client key for the current developer and +grants it access to the workspace's default keyset. + +- Use it for local development only. +- Each developer and device gets a distinct key. +- Revoking one device does not affect other developers or production. +- No `CS_*` environment variables are required while the device session is + active. + +### Application client keys + +Create an application client key for production, CI, background jobs, or +Proxy—any environment without an interactive device login. + +Open **Clients** in the +[CipherStash Dashboard](https://dashboard.cipherstash.com/workspaces/_/clients), +select **Create a new client**, and grant only the keysets that workload needs. +Store its ID and key value as `CS_CLIENT_ID` and `CS_CLIENT_KEY`. + +## Keyset access + +A client can use only the keysets it has been granted. Separate keysets are a +cryptographic isolation boundary: a client without the grant cannot derive the +keys required to decrypt that data. + +Grant access before deploying a workload. To revoke it, remove the client from +the keyset or delete the client. Revocation prevents future key derivation but +does not modify ciphertext already stored in your database. + +See [key management](/concepts/key-management#keysets-define-the-isolation-boundary) +for the isolation model and [workspace configuration](/reference/workspace/configuration) +for production environment variables. diff --git a/content/docs/reference/auth/index.mdx b/content/docs/reference/auth/index.mdx index 220fa84..afd6298 100644 --- a/content/docs/reference/auth/index.mdx +++ b/content/docs/reference/auth/index.mdx @@ -1,9 +1,31 @@ --- title: Auth navTitle: Overview -description: "Auth documentation — being built as part of the docs V2 overhaul." +description: "Authentication and credential reference for local development, production services, and identity-bound encryption." +type: reference +components: [platform] --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash separates the credentials used by developers, deployed services, +and signed-in end users. Choose the mechanism that matches who is performing +the cryptographic operation. -Until it lands, current documentation lives in the [existing docs](/stack). +| Context | Authentication | Use it for | +| --- | --- | --- | +| Local development | Device session created by `stash init` | Per-developer access without shared environment variables | +| Production and CI | Application client key plus access key | Non-interactive SDK and Proxy deployments | +| Signed-in end user | OIDC federation | Identity-bound encryption and user-attributed key derivation | + +## In this section + +- [Access keys](/reference/auth/access-keys) authenticate programmatic requests + to CipherStash services and define their service-level permissions. +- [Client keys](/reference/auth/clients) supply the client-held half of the + ZeroKMS key split and scope access to keysets. +- [OIDC providers](/reference/auth/oidc-configuration) register an identity + provider for end-user federation. + +For the four environment variables used by deployed applications, see +[workspace configuration](/reference/workspace/configuration). For the +cryptographic effect of binding a value to an identity claim, see +[provable access control](/solutions/provable-access). diff --git a/content/docs/reference/auth/meta.json b/content/docs/reference/auth/meta.json index 943c560..96450d9 100644 --- a/content/docs/reference/auth/meta.json +++ b/content/docs/reference/auth/meta.json @@ -1,4 +1,4 @@ { "title": "Auth", - "pages": ["index", "..."] + "pages": ["index", "access-keys", "clients", "oidc-configuration"] } diff --git a/content/docs/reference/auth/oidc-configuration.mdx b/content/docs/reference/auth/oidc-configuration.mdx new file mode 100644 index 0000000..79a3462 --- /dev/null +++ b/content/docs/reference/auth/oidc-configuration.mdx @@ -0,0 +1,73 @@ +--- +title: OIDC providers +description: "Register an identity provider so cryptographic operations can be authenticated as the signed-in end user." +type: reference +components: [platform, encryption] +audience: [developer] +verifiedAgainst: + auth: "0.42.0" +--- + +Register an OpenID Connect provider when encryption or decryption must be +performed as the signed-in user. CipherStash federates the provider's JWT into +a short-lived service token; the application does not send an OIDC client +secret to CipherStash. + +OIDC is optional. Applications that authenticate only as a deployed service +use an [application client key](/reference/auth/clients) and +[access key](/reference/auth/access-keys) instead. + +## Supported providers + +- Auth0 +- Clerk +- Okta +- Supabase Auth + +## Register a provider + +1. Open **Authentication → OIDC Providers** for the workspace in the + [Dashboard](https://dashboard.cipherstash.com/workspaces/_/oidc-providers). +2. Select **Add OIDC Provider**. +3. Choose the vendor and enter the issuer URL from the provider's OIDC + discovery document. + +| Provider | Example issuer | +| --- | --- | +| Auth0 | `https://your-tenant.auth0.com/` | +| Clerk | `https://your-app.clerk.accounts.dev/` | +| Okta | `https://your-org.okta.com/` | +| Supabase | `https://project-ref.supabase.co/auth/v1` | + +For Supabase, the [Dashboard integration](/integrations/supabase) can register +the project issuer for you. + +CipherStash stores the provider vendor and issuer. Token signatures are +validated using the issuer's published JWKS; no provider client secret is +stored. + +## Use the provider from Stack + +Configure `OidcFederationStrategy` with a callback that returns the current +user's JWT: + +```typescript filename="encryption.ts" +import { Encryption, OidcFederationStrategy } from "@cipherstash/stack" + +const encryption = await Encryption({ + schemas: [patients], + config: { + authStrategy: OidcFederationStrategy.create( + process.env.CS_WORKSPACE_CRN, + () => getCurrentUserJwt(), + ), + }, +}) +``` + +The callback must return the current token rather than a token captured once +at startup, because the strategy invokes it again when federation needs to be +renewed. + +Continue with [provable access control](/solutions/provable-access) to bind +encryption to an identity claim using a lock context. diff --git a/content/docs/reference/eql/indexes.mdx b/content/docs/reference/eql/indexes.mdx index 6313b49..f0fab93 100644 --- a/content/docs/reference/eql/indexes.mdx +++ b/content/docs/reference/eql/indexes.mdx @@ -156,7 +156,7 @@ The first move on a slow query is `EXPLAIN (COSTS OFF)`: - **`Filter:` showing the raw operator** — inlining did not happen. Usual causes: a pinned `search_path` on a customised function, or the planner judging another plan cheaper. - **`Sort` node above an Index Scan** — natural-form `ORDER BY`. Switch the sort key to `eql_v3.ord_term(col)` to eliminate it. -Once the plan looks right, repeat with `EXPLAIN ANALYZE` to measure actual timings. For a full diagnosis walkthrough, see [query performance troubleshooting](/guides/troubleshooting/query-performance). +Once the plan looks right, repeat with `EXPLAIN ANALYZE` to measure actual timings. Compare estimated and actual row counts as well as the chosen scan; a large mismatch usually means the planner needs fresh statistics before the index definition itself is changed. ## Building indexes on large tables diff --git a/content/docs/reference/eql/v2/index.mdx b/content/docs/reference/eql/v2/index.mdx index 228407e..f406579 100644 --- a/content/docs/reference/eql/v2/index.mdx +++ b/content/docs/reference/eql/v2/index.mdx @@ -18,7 +18,7 @@ This section documents **EQL v2** (v2.2), the release existing CipherStash deplo EQL provides the database-side components needed to query encrypted data. Unlike traditional PostgreSQL extensions, EQL is implemented as a collection of types, operators, and functions, making it compatible with managed database providers like AWS RDS that restrict extension installation. -When combined with the [Encryption SDK](/stack/cipherstash/encryption) or [CipherStash Proxy](/stack/cipherstash/proxy), EQL enables: +When combined with the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy), EQL enables: - **Exact match queries** using encrypted equality operators - **Range queries** with order-preserving encryption @@ -67,7 +67,7 @@ EQL ships in the `eql_v2` schema, with functions in three groups: - **Index-term extraction** — `eql_v2.hmac_256()` (exact match), `eql_v2.bloom_filter()` (pattern matching), and `eql_v2.ore_block_u64_8_256()` (range) extract a searchable term from an encrypted value. These back the functional indexes — see [Setting up indexes](/reference/eql/v2/indexes). - **Comparison** — operators (`=`, `<`, `LIKE`, `@>`, …) are the query surface over encrypted columns. -For the complete, per-version function reference — every signature, parameter, and return type — see the [EQL API reference](/stack/reference/eql/), generated from each EQL release. +For the complete function reference — every signature, parameter, and return type — see [EQL functions](/reference/eql/functions). ## Index types @@ -77,19 +77,19 @@ EQL supports multiple searchable encryption index types. Each index type enables Enables exact equality queries and unique constraints using HMAC-SHA256. -[Learn more about exact indexes](/stack/cipherstash/encryption/searchable-encryption#exact-matching) +[Learn more about equality queries](/concepts/searchable-encryption#query-capabilities) ### `ore`: Range queries Enables range comparisons (`<`, `>`, `BETWEEN`) and ordering (`ORDER BY`) using Order Revealing Encryption. -[Learn more about range indexes](/stack/cipherstash/encryption/searchable-encryption#sorting-and-range-queries) +[Learn more about range queries](/concepts/searchable-encryption#query-capabilities) ### `match`: Pattern matching Enables substring and full-text search (`LIKE`, `ILIKE`) using encrypted Bloom filters with trigrams. -[Learn more about match indexes](/stack/cipherstash/encryption/searchable-encryption#free-text-search) +[Learn more about token matching](/concepts/searchable-encryption#query-capabilities) ### `ste_vec`: Structured data @@ -120,4 +120,4 @@ Unlike PostgreSQL extensions that require `CREATE EXTENSION`, EQL types and func ## Related documentation - [CipherCell format](/reference/eql/v2/payload): The data structure used by EQL -- [Supported queries](/stack/cipherstash/encryption/searchable-encryption): Available searchable encryption schemes +- [Searchable encryption](/concepts/searchable-encryption): Available encrypted query capabilities diff --git a/content/docs/reference/eql/v2/indexes.mdx b/content/docs/reference/eql/v2/indexes.mdx index 6a84ca4..0bbccab 100644 --- a/content/docs/reference/eql/v2/indexes.mdx +++ b/content/docs/reference/eql/v2/indexes.mdx @@ -149,6 +149,6 @@ CREATE INDEX users_age_range_idx ON users USING btree (age); ## Related - [Searchable encryption queries](/reference/eql/v2/queries): Query patterns for each index type -- [Searchable encryption overview](/stack/cipherstash/encryption/searchable-encryption): How searchable indexes work -- [Supabase integration](/stack/cipherstash/supabase): Supabase-specific setup and limitations +- [Searchable encryption overview](/concepts/searchable-encryption): How searchable indexes work +- [Supabase integration](/integrations/supabase): Supabase-specific setup and limitations - [EQL guide](/reference/eql/v2): Full reference for EQL types and functions diff --git a/content/docs/reference/eql/v2/payload.mdx b/content/docs/reference/eql/v2/payload.mdx index 3e7503a..a086ec0 100644 --- a/content/docs/reference/eql/v2/payload.mdx +++ b/content/docs/reference/eql/v2/payload.mdx @@ -157,7 +157,7 @@ Enables exact match queries using HMAC-SHA256. **Type**: Hex-encoded string (64 characters) -**Index Type**: [Exact](/stack/cipherstash/encryption/searchable-encryption#exact-matching) +**Index Type**: [Equality](/concepts/searchable-encryption#query-capabilities) ```json { @@ -171,7 +171,7 @@ Enables range queries and ordering using Order Revealing Encryption. **Type**: Array of strings -**Index Type**: [Order / Range](/stack/cipherstash/encryption/searchable-encryption#sorting-and-range-queries) +**Index Type**: [Order / Range](/concepts/searchable-encryption#query-capabilities) ```json { @@ -188,7 +188,7 @@ Enables substring and pattern matching queries using encrypted Bloom filters wit **Type**: Array of integers -**Index Type**: [Match](/stack/cipherstash/encryption/searchable-encryption#free-text-search) +**Index Type**: [Match](/concepts/searchable-encryption#query-capabilities) ```json { @@ -306,4 +306,4 @@ The CipherCell format is consistent across all CipherStash SDKs and tools, ensur ## Database storage CipherCells can be stored as JSON in any database that supports JSON data types. -However, for search to be supported using the [Encryption SDK](/stack/cipherstash/encryption) or [CipherStash Proxy](/stack/cipherstash/proxy), the `eql_v2.encrypted` database type must be used which is available when the Encrypt Query Language (EQL) helpers have been installed. +However, for search to be supported using the [Stack SDK](/reference/stack) or [CipherStash Proxy](/reference/proxy), the `eql_v2.encrypted` database type must be used which is available when the Encrypt Query Language (EQL) helpers have been installed. diff --git a/content/docs/reference/eql/v2/queries.mdx b/content/docs/reference/eql/v2/queries.mdx index cbf0f81..8bc39d8 100644 --- a/content/docs/reference/eql/v2/queries.mdx +++ b/content/docs/reference/eql/v2/queries.mdx @@ -15,7 +15,7 @@ This page covers the three query families available for encrypted columns: equal For index creation (the `CREATE INDEX` statements your database needs), see [Setting up indexes](/reference/eql/v2/indexes). -For a conceptual overview of how searchable encryption works, see [Searchable encryption](/stack/cipherstash/encryption/searchable-encryption). +For a conceptual overview of how searchable encryption works, see [Searchable encryption](/concepts/searchable-encryption). ## Equality diff --git a/content/docs/reference/glossary.mdx b/content/docs/reference/glossary.mdx index 3a75a94..616dbf3 100644 --- a/content/docs/reference/glossary.mdx +++ b/content/docs/reference/glossary.mdx @@ -12,7 +12,7 @@ A dynamic security model that makes access decisions based on a variety of attri ### Access key -A persistent authentication credential used for communication with [ZeroKMS](#zerokms) or [CTS](#cts-cipherstash-token-service). See [access keys](/stack/cipherstash/kms/access-keys). +A persistent authentication credential used for communication with [ZeroKMS](#zerokms) or [CTS](#cts-cipherstash-token-service). See [access keys](/reference/auth/access-keys). ### Account management @@ -43,7 +43,7 @@ There are two types: - **Device-backed client keys** are created automatically by `stash init` and tied to a developer's [device](#device). Used for local development. - **Application client keys** are created in the Dashboard for production and CI/CD. Identified by a [client ID](#client-id) and client key value, set via environment variables. -See [client keys](/stack/cipherstash/kms/clients). +See [client keys](/reference/auth/clients). ### Client ID @@ -55,7 +55,7 @@ The secret credential set via `CS_CLIENT_KEY`. Together with the [client ID](#cl ### CTS (CipherStash Token Service) -CTS manages the trust relationships between a workspace and third-party or customer identity providers. It brokers secure access to CipherStash services such as ZeroKMS, ensuring that only authenticated and authorized users gain entry. See [CTS](/stack/cipherstash/kms/cts). +CTS manages the trust relationships between a workspace and third-party or customer identity providers. It brokers secure access to CipherStash services such as ZeroKMS, ensuring that only authenticated and authorized users gain entry. See [CTS](/security/cts). ## D @@ -73,7 +73,7 @@ An event triggered by execution of SQL statements by CipherStash Proxy. Includes A unique identity tied to a developer's device and user account, created by `stash init`. Each device has an associated [client key](#client-key) that is automatically granted access to the default [keyset](#keyset). -Devices are used for local development authentication, with no environment variables required. Production environments use application [client keys](#client-key) instead. See the [quickstart](/stack/quickstart). +Devices are used for local development authentication, with no environment variables required. Production environments use application [client keys](#client-key) instead. See the [quickstart](/get-started/quickstart). ## E @@ -109,7 +109,7 @@ A core CipherStash Cloud primitive for cryptographic isolation, managed by [Zero Use keysets for tenant isolation, environment separation, regional compliance, or any cryptographic boundary your architecture requires. A [client key](#client-key) can access many keysets, and a keyset can be shared by multiple client keys. In the Secrets SDK, environments map directly to keysets. -See [keysets](/stack/cipherstash/kms/keysets). +See [key management](/concepts/key-management#keysets-define-the-isolation-boundary). ## O @@ -153,4 +153,4 @@ See [workspace and account](/reference/workspace). ### ZeroKMS -CipherStash's key management service. ZeroKMS provides high-performance batch encryption and decryption, enabling a unique encryption key per field. See [ZeroKMS](/stack/cipherstash/kms). +CipherStash's key management service. ZeroKMS provides high-performance batch encryption and decryption, enabling a unique encryption key per field. See [key management](/concepts/key-management). diff --git a/content/docs/reference/index.mdx b/content/docs/reference/index.mdx index 2f6f2d3..f734fde 100644 --- a/content/docs/reference/index.mdx +++ b/content/docs/reference/index.mdx @@ -1,10 +1,11 @@ --- title: Reference -navTitle: Overview description: "Precise API documentation for EQL, the Stack SDK, Auth, the CLI, and Proxy." type: reference --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). - -Until it lands, current documentation lives in the [existing docs](/stack). +{/* + Fumadocs requires an index document when generating a metadata-backed folder. + meta.json excludes this file from the page tree, and Next redirects its route + to the first visible Reference page. +*/} diff --git a/content/docs/reference/meta.json b/content/docs/reference/meta.json index 83f32fd..fc7918c 100644 --- a/content/docs/reference/meta.json +++ b/content/docs/reference/meta.json @@ -2,7 +2,7 @@ "title": "Reference", "icon": "Library", "pages": [ - "index", + "!index", "eql", "stack", "auth", diff --git a/content/docs/reference/proxy/configuration.mdx b/content/docs/reference/proxy/configuration.mdx index 2eac736..d49e9e2 100644 --- a/content/docs/reference/proxy/configuration.mdx +++ b/content/docs/reference/proxy/configuration.mdx @@ -299,7 +299,7 @@ cipherstash-proxy [OPTIONS] [DBNAME] [COMMAND] | `encrypt` | Encrypt existing plaintext data in the database | | `help` | Print help information | -The `encrypt` command encrypts existing plaintext data in place. See [the encrypt tool](/stack/cipherstash/proxy/encrypt-tool). +The `encrypt` command encrypts existing plaintext data in place. Follow the safeguards in [Data migration](/guides/migration) before running it against populated production data. ### Arguments and options diff --git a/content/docs/reference/proxy/multitenant.mdx b/content/docs/reference/proxy/multitenant.mdx index 9a7c2e8..9bc91c4 100644 --- a/content/docs/reference/proxy/multitenant.mdx +++ b/content/docs/reference/proxy/multitenant.mdx @@ -73,5 +73,5 @@ This behaviour is expected. When a client prepares a statement, it sends the SQL ## Related -- [Keysets](/stack/cipherstash/kms/keysets) for the cryptographic isolation model. +- [Key management](/concepts/key-management#keysets-define-the-isolation-boundary) for the cryptographic isolation model. - [Proxy configuration](/reference/proxy/configuration) for `CS_DEFAULT_KEYSET_ID`. diff --git a/content/docs/reference/stack/usage.mdx b/content/docs/reference/stack/usage.mdx index 6e84cfc..51ff988 100644 --- a/content/docs/reference/stack/usage.mdx +++ b/content/docs/reference/stack/usage.mdx @@ -85,3 +85,24 @@ console.log(decrypted.data) ``` For every exported signature and option, use the [generated API reference](/reference/stack/api-reference). For an end-to-end project setup, follow the [quickstart](/get-started/quickstart). + +## Upgrading from `@cipherstash/protect` + +The current package is `@cipherstash/stack`. Replace the retired package and +rename its schema builders: + +| Retired API | Stack API | +| --- | --- | +| `protect(config)` | `Encryption(config)` | +| `csTable(name, columns)` | `encryptedTable(name, columns)` | +| `csColumn(name)` | A typed column from `types`, such as `types.TextEq(name)` | + +```bash +npm uninstall @cipherstash/protect +npm install @cipherstash/stack +``` + +Use the v3 exports shown above for new schemas. Data already written in an +older format needs an explicit migration plan; do not change the package and +database column format in a single irreversible deployment. Follow +[Data migration](/guides/migration) for the staged rollout. diff --git a/content/docs/reference/workspace/billing.mdx b/content/docs/reference/workspace/billing.mdx index 4079457..2ad28ca 100644 --- a/content/docs/reference/workspace/billing.mdx +++ b/content/docs/reference/workspace/billing.mdx @@ -11,7 +11,7 @@ CipherStash uses a **per-workspace billing model**. Each workspace has its own p ## Plans -Each workspace is on a plan. Plans differ in their usage limits and in which features they unlock, such as keyset isolation and [lock contexts](/stack/cipherstash/encryption/identity). See [pricing](https://cipherstash.com/pricing) for the current plans, their prices, and their limits. +Each workspace is on a plan. Plans differ in their usage limits and in which features they unlock, such as keyset isolation and [lock contexts](/solutions/provable-access). See [pricing](https://cipherstash.com/pricing) for the current plans, their prices, and their limits. Enterprise is an organization-level plan with custom pricing and dedicated support. Enterprise organizations bypass per-workspace billing entirely. Contact [sales@cipherstash.com](mailto:sales@cipherstash.com). diff --git a/content/docs/reference/workspace/configuration.mdx b/content/docs/reference/workspace/configuration.mdx index 74fa37d..e7701b7 100644 --- a/content/docs/reference/workspace/configuration.mdx +++ b/content/docs/reference/workspace/configuration.mdx @@ -41,5 +41,5 @@ Proxy scopes keysets per connection instead. See [multitenant operation](/refere ## Related -- [Keysets](/stack/cipherstash/kms/keysets) for the isolation model. +- [Key management](/concepts/key-management#keysets-define-the-isolation-boundary) for the isolation model. - [Billing](/reference/workspace/billing) for the plans and how per-workspace billing works. diff --git a/content/docs/reference/workspace/index.mdx b/content/docs/reference/workspace/index.mdx index e2b4693..1f484f8 100644 --- a/content/docs/reference/workspace/index.mdx +++ b/content/docs/reference/workspace/index.mdx @@ -18,5 +18,5 @@ Use workspaces to separate environments (development from production), to scope ## Related -- [Access keys](/stack/cipherstash/kms/access-keys) for the credentials that authenticate to ZeroKMS and CTS. +- [Access keys](/reference/auth/access-keys) for the credentials that authenticate to ZeroKMS and CTS. - [Glossary](/reference/glossary) for the difference between a workspace, a keyset, a client key, and a device. diff --git a/content/docs/reference/workspace/members.mdx b/content/docs/reference/workspace/members.mdx index 2e11803..afa3a4e 100644 --- a/content/docs/reference/workspace/members.mdx +++ b/content/docs/reference/workspace/members.mdx @@ -29,4 +29,4 @@ npx stash init This creates a unique [device](/reference/glossary#device) and [client key](/reference/glossary#client-key) for that developer, with automatic access to the default [keyset](/reference/glossary#keyset). No environment variables are needed for local development. -See [team onboarding](/stack/deploy/team-onboarding) for the full workflow. +See [team onboarding](/guides/deployment#team-onboarding) for the full workflow. diff --git a/content/docs/security/audit-logging.mdx b/content/docs/security/audit-logging.mdx index ae1bba0..5a8a406 100644 --- a/content/docs/security/audit-logging.mdx +++ b/content/docs/security/audit-logging.mdx @@ -1,9 +1,54 @@ --- title: Audit logging -description: "Decryption-event logging: what's recorded, and how to attach query metadata." +description: "How CipherStash Proxy identifies query patterns, redacts SQL, and associates access events with records and identities." type: concept +components: [proxy, platform] +audience: [ciso, developer] --- -This page is being built as part of the docs V2 overhaul ([CIP-3331](https://linear.app/cipherstash/issue/CIP-3331)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash Proxy can produce data-access events without requiring application +queries to be instrumented. Its audit pipeline identifies the query pattern, +removes literal values, determines which records were accessed, and associates +the event with the authenticated client or identity context. -Until it lands, the current version lives in the [existing docs](/stack/cipherstash/proxy/audit). +This page describes what Proxy contributes to an event. Retention, export, and +SIEM integration depend on the audit service and deployment configuration. + +## Statement fingerprinting + +Proxy fingerprints the parsed SQL statement so semantically equivalent query +shapes can be grouped across parameter values and environments. The fingerprint +identifies a query pattern without using the literal values supplied by the +application. + +## SQL redaction + +Literal values are stripped before SQL is included in an event. Table, column, +and function names remain so the event is useful for investigation. If Proxy +cannot safely parse and redact a statement, it does not transmit the statement +text. + +Parameterized queries sent through PostgreSQL's extended protocol already +keep bound values separate from the SQL text; redaction also covers literals +embedded directly in a statement. + +## Record identification + +Proxy can add missing primary-key columns to an internal form of the query, +then reconcile returned identifiers with their source tables. Injected columns +are removed before the result is returned to the application, so the result +shape remains unchanged. + +## Event pipeline + +1. **Fingerprint** the parsed query shape. +2. **Redact** static values from the SQL representation. +3. **Identify** primary keys for records touched by the query. +4. **Reconcile** identifiers with tables and remove injected fields from the + application result. +5. **Attribute** the event to the client and, when OIDC federation is used, the + authenticated identity. + +For cryptographic identity binding and SDK audit metadata, see +[provable access control](/solutions/provable-access#audit-logging). For Proxy +operation and configuration, see the [Proxy reference](/reference/proxy). diff --git a/content/docs/security/compliance/index.mdx b/content/docs/security/compliance/index.mdx index 8875fd7..98b0846 100644 --- a/content/docs/security/compliance/index.mdx +++ b/content/docs/security/compliance/index.mdx @@ -1,9 +1,49 @@ --- title: Compliance navTitle: Overview -description: "Compliance documentation — being built as part of the docs V2 overhaul." +description: "How CipherStash capabilities support a compliance control design, and which responsibilities remain with the customer." +type: concept +components: [encryption, platform, proxy] +audience: [ciso, cto] +reviewBy: "2027-01-31" --- -This section is being built as part of the docs V2 overhaul ([CIP-3307](https://linear.app/cipherstash/issue/CIP-3307)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash supplies technical controls that can support a compliance program: +field-level encryption, regional key management, cryptographic isolation, +identity-bound decryption, and data-access evidence. A framework outcome still +depends on how those controls are configured and on the surrounding application, +cloud, operational, and organizational controls. -Until it lands, current documentation lives in the [existing docs](/stack). +## Capability map + +| Requirement area | Relevant CipherStash capability | Customer responsibility | +| --- | --- | --- | +| Protect sensitive stored data | Application-level field encryption | Classify fields and ensure every write path encrypts them | +| Restrict key access | Client keys, access-key roles, and keyset grants | Apply least privilege, rotate credentials, and control the deployment secret store | +| Isolate tenants or environments | Separate keysets or workspaces | Define and enforce the boundary consistently in application and database access | +| Attribute access to a user | OIDC federation and lock contexts | Configure the identity provider and choose stable, appropriate claims | +| Produce data-access evidence | ZeroKMS derivation context and Proxy audit events | Configure retention, review, alerting, and SIEM ingestion | +| Keep key material regional | Region-bound workspaces | Deploy applications and databases in the intended region and govern cross-border access | +| Remove access to encrypted data | Revoke client grants or destroy the relevant key boundary | Confirm scope, backups, legal holds, and recovery requirements before destructive action | + +## Common frameworks + +These capabilities can contribute evidence or control implementation for +frameworks such as SOC 2, HIPAA, GDPR, PCI DSS, ISO 27001, and regional privacy +laws. They do not by themselves make a workload compliant, and the exact +mapping depends on the organization's scope and assessor interpretation. + +Use the following pages when building a control narrative: + +- [Cryptography](/security/cryptography) for algorithms, key hierarchy, data + flow, and trust boundaries. +- [Key management](/concepts/key-management) for per-value keys, split control, + keysets, and revocation. +- [Data residency](/solutions/data-residency) for regional deployment patterns. +- [Provable access control](/solutions/provable-access) and + [audit logging](/security/audit-logging) for identity and evidence. +- [Access keys](/reference/auth/access-keys) and + [client keys](/reference/auth/clients) for least-privilege credentials. + +Contact [support@cipherstash.com](mailto:support@cipherstash.com) for current +assurance reports, contractual documents, or framework-specific questions. diff --git a/content/docs/security/cryptography.mdx b/content/docs/security/cryptography.mdx index fdfb922..35c4474 100644 --- a/content/docs/security/cryptography.mdx +++ b/content/docs/security/cryptography.mdx @@ -119,7 +119,7 @@ An attacker must compromise **both** the ZeroKMS authority key and your client k ### Blast radius -[Keysets](/stack/cipherstash/kms/keysets) scope keys. Each keyset is a full cryptographic boundary: one tenant's keyset cannot decrypt another's data. Compromising a client key affects only the keysets that application can reach, and revoking its access key stops further key derivation immediately. +[Keysets](/concepts/key-management#keysets-define-the-isolation-boundary) scope keys. Each keyset is a full cryptographic boundary: one tenant's keyset cannot decrypt another's data. Compromising a client key affects only the keysets that application can reach, and revoking its access key stops further key derivation immediately. ## Data flow @@ -161,7 +161,7 @@ All communication between the SDK and CipherStash services uses TLS 1.2 or later - SDK to CTS, for token exchange during identity-aware encryption. - SDK to your database: your existing connection. CipherStash does not proxy it. -Key material does not leave the region your workspace is configured in. See [regions](/stack/cipherstash/kms/regions). +Key material does not leave the region your workspace is configured in. See [data residency](/solutions/data-residency#regional-zerokms-deployment). ## Open-source components @@ -176,6 +176,6 @@ The core cryptographic implementations are open source and independently auditab ## Related - [Searchable encryption](/concepts/searchable-encryption) for the canonical index-term leakage model. -- [Keysets](/stack/cipherstash/kms/keysets) for the isolation boundary. +- [Key management](/concepts/key-management) for the isolation boundary. - [Proxy configuration](/reference/proxy/configuration) for the cipher cache settings. - [Provable access control](/solutions/provable-access) for binding decryption to an authenticated identity. diff --git a/content/docs/security/cts.mdx b/content/docs/security/cts.mdx index 23e541d..bd5074a 100644 --- a/content/docs/security/cts.mdx +++ b/content/docs/security/cts.mdx @@ -1,9 +1,61 @@ --- -title: CTS -description: "The CipherStash Token Service: exchanging identity-provider JWTs for tokens that gate decryption." +title: CipherStash Token Service +navTitle: CTS +description: "How CTS authenticates client keys and federated identities, then issues short-lived tokens for ZeroKMS." type: concept +components: [platform] +audience: [developer, ciso] --- -This page is being built as part of the docs V2 overhaul ([CIP-3330](https://linear.app/cipherstash/issue/CIP-3330)). Track progress in [IA.md](https://github.com/cipherstash/docs/blob/v2/IA.md). +CipherStash Token Service (CTS) is the authentication and identity-federation +layer in front of ZeroKMS. It converts a persistent application credential or +a trusted identity-provider token into a short-lived token scoped to +cryptographic service access. -Until it lands, the current version lives in the [existing docs](/stack/cipherstash/kms/cts). +CTS plays a role similar to AWS STS: the long-lived credential proves who the +caller is, while the issued token is temporary and is what the caller presents +to ZeroKMS. + +## Request flow + +```mermaid +sequenceDiagram + participant App as Stack SDK or Proxy + participant IdP as Identity provider + participant CTS + participant ZK as ZeroKMS + + alt Application authentication + App->>CTS: Client ID + access key + else End-user federation + App->>IdP: Obtain user JWT + IdP-->>App: Signed JWT + App->>CTS: Federate JWT + end + CTS-->>App: Short-lived CTS token + App->>ZK: Key-seed request + CTS token + ZK-->>App: Key seed +``` + +The Stack SDK refreshes service tokens as required. Application code normally +selects an auth strategy rather than calling CTS directly. + +## Authentication modes + +### Application credentials + +A production service or Proxy instance uses a +[client key](/reference/auth/clients) and +[access key](/reference/auth/access-keys). This authenticates the workload as +an application rather than as a particular end user. + +### OIDC federation + +Register a trusted issuer and use `OidcFederationStrategy` when each request +should carry the signed-in user's identity. CTS validates the provider JWT and +issues the temporary service token. See +[OIDC providers](/reference/auth/oidc-configuration). + +Federated identity can also be used with a lock context so key derivation +depends on a JWT claim. That cryptographic binding is described in +[provable access control](/solutions/provable-access). diff --git a/content/docs/security/meta.json b/content/docs/security/meta.json index ea315bc..6348a13 100644 --- a/content/docs/security/meta.json +++ b/content/docs/security/meta.json @@ -1,5 +1,12 @@ { "title": "Architecture & security", "icon": "Shield", - "pages": ["index", "cryptography", "...", "compliance"] + "pages": [ + "index", + "cryptography", + "!audit-logging", + "!cts", + "!compliance", + "..." + ] } diff --git a/content/docs/solutions/ai-and-rag.mdx b/content/docs/solutions/ai-and-rag.mdx new file mode 100644 index 0000000..745612e --- /dev/null +++ b/content/docs/solutions/ai-and-rag.mdx @@ -0,0 +1,84 @@ +--- +title: AI and RAG +description: "Protect sensitive source text and metadata in AI and retrieval-augmented generation pipelines without giving the database plaintext." +type: concept +components: [encryption, platform] +audience: [developer, cto, ciso] +verifiedAgainst: + stack: "1.0.0" +--- + +Retrieval-augmented generation pipelines often store document chunks, +customer metadata, access labels, and vector embeddings in the same database. +The source text may contain PII, financial records, health information, or +confidential business material that should not become plaintext merely because +an application needs semantic retrieval. + +CipherStash encrypts sensitive fields in the application before they reach the +database. The vector store can continue retrieving candidate rows while the +application decrypts only the records selected for the prompt. + +## What to encrypt + +Treat each part of the RAG record according to how it is used: + +| Field | Typical treatment | +| --- | --- | +| Source chunk | Encrypt; decrypt only after retrieval and authorization | +| Document title or filename | Encrypt if it contains customer or case information | +| Tenant, owner, or policy ID | Encrypt with equality when the database must filter on it | +| Access labels | Encrypt with the narrowest query capability the filter needs | +| Embedding | Keep separate from source text; assess whether the embedding itself is sensitive | + +Embeddings are derived data, not ciphertext. They may reveal properties of the +source and should be covered by the application's data classification and +threat model. Encrypting the source text does not make an exposed embedding +harmless. + +## Retrieval flow + +```mermaid +sequenceDiagram + participant App as Application + participant Vector as Vector store + participant DB as Encrypted record store + participant ZK as ZeroKMS + participant LLM as Model + + App->>Vector: Search with query embedding + Vector-->>App: Candidate record IDs + App->>DB: Fetch authorized encrypted records + DB-->>App: Ciphertext + App->>ZK: Request key seeds for selected values + ZK-->>App: Key seeds + Note over App: Derive keys and decrypt locally + App->>LLM: Minimum required plaintext context +``` + +The database and vector service do not receive the source plaintext. The model +still receives whichever context the application sends, so model-provider +retention, logging, prompt injection, and authorization remain separate design +decisions. + +## Tenant and user isolation + +Use a separate [keyset](/concepts/key-management#keysets-define-the-isolation-boundary) +when tenants or environments require a cryptographic boundary. Use +[identity-bound encryption](/solutions/provable-access) when decryption should +require claims from the signed-in user. + +Apply authorization before decryption and again before assembling the prompt. +Vector similarity alone is not an authorization decision: a candidate from +another tenant must be discarded before its ciphertext is decrypted. + +## Searchable metadata + +If the metadata lives in Postgres, EQL can filter equality, ranges, token +matches, and JSON containment without decrypting every row. Declare only the +capabilities the retrieval pipeline uses; each capability has a documented +leakage profile. See [searchable encryption](/concepts/searchable-encryption) +and [EQL filtering](/reference/eql/filtering). + +For implementation, begin with the [Stack SDK](/reference/stack), then follow +the [Data migration](/guides/migration) rollout when existing records must be +encrypted without downtime. diff --git a/content/docs/solutions/data-residency.mdx b/content/docs/solutions/data-residency.mdx index 6c24689..497328a 100644 --- a/content/docs/solutions/data-residency.mdx +++ b/content/docs/solutions/data-residency.mdx @@ -26,7 +26,7 @@ ZeroKMS is deployed on AWS only. A workspace is tied to one region, and its regi Selecting a ZeroKMS region controls where authority keys are managed. Combined with your application's deployment region, that determines where all key material exists. -Need a region that is not listed? Contact [support@cipherstash.com](mailto:support@cipherstash.com). See the [regions reference](/stack/cipherstash/kms/regions) for more. +Need a region that is not listed? Contact [support@cipherstash.com](mailto:support@cipherstash.com). ## Dual-party key split @@ -128,6 +128,6 @@ This architecture supports compliance with GDPR, regional data protection laws, ## Next steps -- [Configure ZeroKMS regions](/stack/cipherstash/kms/regions) for your workspaces. +- Review [regional ZeroKMS deployment](#regional-zerokms-deployment) for your workspaces. - [Set up provable access control](/solutions/provable-access) to bind decryption to an identity. -- [Review disaster recovery](/stack/cipherstash/kms/disaster-recovery) for multi-region key backup. +- Review [key management](/concepts/key-management) when designing recovery and revocation procedures. diff --git a/content/docs/solutions/meta.json b/content/docs/solutions/meta.json index 866869f..fedb529 100644 --- a/content/docs/solutions/meta.json +++ b/content/docs/solutions/meta.json @@ -1,5 +1,5 @@ { "title": "Solutions", "icon": "Target", - "pages": ["index", "...", "data-residency", "provable-access"] + "pages": ["index", "ai-and-rag", "data-residency", "provable-access", "..."] } diff --git a/content/docs/solutions/provable-access.mdx b/content/docs/solutions/provable-access.mdx index 950b917..16f0c6b 100644 --- a/content/docs/solutions/provable-access.mdx +++ b/content/docs/solutions/provable-access.mdx @@ -126,7 +126,7 @@ Every encryption and decryption through ZeroKMS produces an audit event: ### Combining with Proxy audit -[CipherStash Proxy](/reference/proxy) adds statement-level audit on top: statement fingerprinting to identify unique query patterns against encrypted data, SQL redaction to strip sensitive values from logged queries, primary key injection to track which records were touched, and record reconciliation to map access events back to rows. See [Proxy audit](/stack/cipherstash/proxy/audit). +[CipherStash Proxy](/reference/proxy) adds statement-level audit on top: statement fingerprinting to identify unique query patterns against encrypted data, SQL redaction to strip sensitive values from logged queries, primary key injection to track which records were touched, and record reconciliation to map access events back to rows. See [Audit logging](/security/audit-logging). Together these answer who accessed what data, when, and using which query. @@ -142,7 +142,7 @@ Encrypt audit records under a compliance-team member's identity. Someone on the ### Multi-tenant SaaS: tenant isolation -Bind encryption to a per-user claim so only that user's identity can decrypt their data. For coarser isolation that does not depend on a signed-in end user, separate [keysets](/stack/cipherstash/kms/keysets) usually fit better: a keyset boundary is per-client or per-connection, where a lock context is per-identity. +Bind encryption to a per-user claim so only that user's identity can decrypt their data. For coarser isolation that does not depend on a signed-in end user, separate [keysets](/concepts/key-management#keysets-define-the-isolation-boundary) usually fit better: a keyset boundary is per-client or per-connection, where a lock context is per-identity. ## Compared to application-level access control @@ -156,5 +156,5 @@ Bind encryption to a per-user claim so only that user's identity can decrypt the ## Next steps - [Data residency](/solutions/data-residency) for revoking access per region. -- [Proxy audit](/stack/cipherstash/proxy/audit) for statement-level audit logging. +- [Audit logging](/security/audit-logging) for statement-level access evidence. - [Compliance](/security/compliance) for GDPR, HIPAA, and PCI-DSS mapping. diff --git a/next.config.mjs b/next.config.mjs index 55dc055..a0e4cfc 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -10,6 +10,27 @@ const withMDX = createMDX(); // `bun run validate-redirects` regardless of the flag. const enableV2Redirects = process.env.ENABLE_V2_REDIRECTS === "1"; +// Migrated legacy sections redirect as soon as their replacements are +// complete, without waiting for the root-level v2 IA cutover. The two legacy +// landing pages remain available until ENABLE_V2_REDIRECTS is flipped. +const enabledV2RedirectPrefixes = [ + "/stack/quickstart", + "/stack/cipherstash/postgres", + "/stack/cipherstash/supabase", + "/stack/cipherstash/encryption", + "/stack/cipherstash/kms", + "/stack/cipherstash/proxy", + "/stack/cipherstash/cli", + "/stack/deploy", + "/stack/reference", +]; + +function isEnabledV2Redirect(source) { + return enabledV2RedirectPrefixes.some( + (prefix) => source === prefix || source.startsWith(`${prefix}/`), + ); +} + /** @type {import('next').NextConfig} */ const config = { basePath: "/docs", @@ -40,12 +61,28 @@ const config = { destination: "/concepts/searchable-encryption", permanent: false, }, + // Guides is a non-clickable sidebar group with no landing page. + // Keep its direct URL useful without rendering a synthetic Overview. + { + source: "/guides", + destination: "/guides/deployment", + permanent: false, + }, + // Reference is a non-clickable sidebar group with no landing page. + // Keep its direct URL useful without rendering a synthetic Overview. + { + source: "/reference", + destination: "/reference/eql", + permanent: false, + }, { source: "/integrations/prisma-next", destination: "/integrations/prisma", permanent: true, }, - ...(enableV2Redirects ? v2Redirects : []), + ...v2Redirects.filter( + ({ source }) => enableV2Redirects || isEnabledV2Redirect(source), + ), // === 4-section consolidation: product sections under /cipherstash/ === { source: "/stack/encryption/:path*", diff --git a/scripts/validate-v2-redirects.ts b/scripts/validate-v2-redirects.ts index 97c90d0..da28ad1 100644 --- a/scripts/validate-v2-redirects.ts +++ b/scripts/validate-v2-redirects.ts @@ -3,13 +3,9 @@ * V2 redirect gate (CIP-3325 / CIP-3337 item 7). * * Every page in the legacy tree (content/stack) must be covered by an entry - * in v2-redirects.mjs — exact match or `:path*` wildcard — so that no URL is - * orphaned when the v2 IA ships. Run via `bun run validate-redirects`; wired - * into prebuild so a page added to content/stack without a mapping fails CI. - * - * This checks map *coverage*, not destination existence — destinations are - * stubs until each section's migration ticket lands. CIP-3335 verifies - * destinations resolve before merge. + * in v2-redirects.mjs — exact match or `:path*` wildcard — and every resolved + * destination must be a real v2 page. Run via `bun run validate-redirects`; + * wired into prebuild so an orphaned source or a redirect-to-404 fails CI. */ import fs from "node:fs"; import path from "node:path"; @@ -17,6 +13,15 @@ import path from "node:path"; import { v2Redirects } from "../v2-redirects.mjs"; const LEGACY_DIR = path.join(process.cwd(), "content/stack"); +const V2_DIR = path.join(process.cwd(), "content/docs"); + +// These indexes are generated during prebuild and intentionally ignored by +// git. Their tracked meta files establish the output roots so the redirect +// validator can also run before generation in a clean checkout. +const GENERATED_PAGE_ROOTS = new Set([ + "/integrations/supabase/api-reference", + "/reference/stack/api-reference", +]); function collectSlugs(dir: string, prefix: string[] = []): string[] { const slugs: string[] = []; @@ -42,6 +47,32 @@ function matches(url: string, source: string): boolean { return url === source; } +function resolveDestination( + url: string, + redirect: { source: string; destination: string }, +): string { + if (!redirect.source.endsWith("/:path*")) return redirect.destination; + + const base = redirect.source.slice(0, -"/:path*".length); + const suffix = url === base ? "" : url.slice(base.length + 1); + return redirect.destination.replace(":path*", suffix); +} + +function destinationExists(destination: string): boolean { + const route = destination.split(/[?#]/, 1)[0]; + if (route === "/") return fs.existsSync(path.join(V2_DIR, "index.mdx")); + + const relative = route.replace(/^\//, ""); + const page = path.join(V2_DIR, `${relative}.mdx`); + const index = path.join(V2_DIR, relative, "index.mdx"); + if (fs.existsSync(page) || fs.existsSync(index)) return true; + + return ( + GENERATED_PAGE_ROOTS.has(route) && + fs.existsSync(path.join(V2_DIR, relative, "meta.json")) + ); +} + const urls = collectSlugs(LEGACY_DIR); const unmatched = urls.filter( (url) => !v2Redirects.some((r: { source: string }) => matches(url, r.source)), @@ -58,4 +89,29 @@ if (unmatched.length > 0) { process.exit(1); } -console.log(`✓ all ${urls.length} legacy pages covered by v2-redirects.mjs`); +const broken = urls.flatMap((url) => { + const redirect = v2Redirects.find((candidate: { source: string }) => + matches(url, candidate.source), + ); + if (!redirect) return []; + + const destination = resolveDestination(url, redirect); + return destinationExists(destination) ? [] : [{ url, destination }]; +}); + +if (broken.length > 0) { + console.error( + `✗ ${broken.length} legacy redirect(s) resolve to a missing v2 page:\n`, + ); + for (const { url, destination } of broken) { + console.error(` ${url} → ${destination}`); + } + console.error( + "\nCreate the destination or map the legacy URL to an existing canonical page.", + ); + process.exit(1); +} + +console.log( + `✓ all ${urls.length} legacy pages map to existing v2 destinations`, +); diff --git a/v2-redirects.mjs b/v2-redirects.mjs index 831684e..e08dbcb 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -81,17 +81,47 @@ export const v2Redirects = [ destination: "/reference/eql/filtering", permanent: false, }, - // configuration, encrypt-decrypt, bulk-operations, models, schema, storing-data + { + source: "/stack/cipherstash/encryption/configuration", + destination: "/reference/workspace/configuration", + permanent: false, + }, + { + source: "/stack/cipherstash/encryption/encrypt-decrypt", + destination: "/reference/stack/usage", + permanent: false, + }, + { + source: "/stack/cipherstash/encryption/storing-data", + destination: "/reference/stack/usage", + permanent: false, + }, + { + source: "/stack/cipherstash/encryption/schema", + destination: "/reference/stack/api-reference/schema", + permanent: false, + }, + { + source: "/stack/cipherstash/encryption/models", + destination: "/reference/stack/api-reference/encryption", + permanent: false, + }, + { + source: "/stack/cipherstash/encryption/bulk-operations", + destination: "/reference/stack/api-reference/encryption", + permanent: false, + }, + // Any retired Encryption SDK leaf falls back to the current usage guide. { source: "/stack/cipherstash/encryption/:path*", - destination: "/reference/stack/:path*", + destination: "/reference/stack/usage", permanent: false, }, // === KMS section → Security + Reference/auth + Concepts === { source: "/stack/cipherstash/kms", - destination: "/security/zerokms", + destination: "/concepts/key-management", permanent: false, }, { @@ -116,7 +146,7 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/kms/disaster-recovery", - destination: "/security/availability-and-continuity", + destination: "/concepts/key-management", permanent: false, }, { @@ -126,7 +156,7 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/kms/regions", - destination: "/security/zerokms", + destination: "/solutions/data-residency", permanent: false, }, { @@ -148,12 +178,12 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/proxy/getting-started", - destination: "/integrations/aws/rds-aurora", + destination: "/reference/proxy", permanent: false, }, { source: "/stack/cipherstash/proxy/encrypt-tool", - destination: "/guides/migration/encrypt-existing-data", + destination: "/guides/migration", permanent: false, }, { @@ -163,7 +193,7 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/proxy/troubleshooting", - destination: "/guides/troubleshooting/proxy", + destination: "/reference/proxy/errors", permanent: false, }, // configuration, message-flow, multitenant @@ -181,7 +211,27 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/cli/troubleshooting", - destination: "/guides/troubleshooting/cli", + destination: "/reference/cli/doctor", + permanent: false, + }, + { + source: "/stack/cipherstash/cli/api", + destination: "/reference/cli", + permanent: false, + }, + { + source: "/stack/cipherstash/cli/install", + destination: "/reference/cli/eql", + permanent: false, + }, + { + source: "/stack/cipherstash/cli/push", + destination: "/reference/cli", + permanent: false, + }, + { + source: "/stack/cipherstash/cli/validate", + destination: "/reference/cli/db", permanent: false, }, { @@ -198,42 +248,46 @@ export const v2Redirects = [ }, { source: "/stack/deploy/going-to-production", - destination: "/guides/deployment/going-to-production", + destination: "/guides/deployment", permanent: false, }, { source: "/stack/deploy/aws-ecs", - destination: "/guides/deployment/proxy-deployment", + destination: "/guides/deployment", permanent: false, }, { source: "/stack/deploy/bundling", - destination: "/guides/deployment/serverless-and-bundling", + destination: "/guides/deployment", permanent: false, }, { source: "/stack/deploy/sst", - destination: "/guides/deployment/serverless-and-bundling", + destination: "/guides/deployment", permanent: false, }, { source: "/stack/deploy/testing", - destination: "/guides/development/testing-and-ci", + destination: "/guides/deployment", permanent: false, }, { source: "/stack/deploy/team-onboarding", - destination: "/guides/development/team-onboarding", + destination: "/guides/deployment", permanent: false, }, { source: "/stack/deploy/troubleshooting", - destination: "/guides/troubleshooting", + destination: "/guides/deployment", permanent: false, }, // === Reference section === - { source: "/stack/reference", destination: "/reference", permanent: false }, + { + source: "/stack/reference", + destination: "/reference/eql", + permanent: false, + }, { source: "/stack/reference/what-is-cipherstash", destination: "/get-started/what-is-cipherstash", @@ -269,7 +323,7 @@ export const v2Redirects = [ // it can be republished), so send its legacy URL to the Solutions index // rather than a page that does not exist. source: "/stack/reference/use-cases/ai-rag", - destination: "/solutions", + destination: "/solutions/ai-and-rag", permanent: false, }, { @@ -319,14 +373,14 @@ export const v2Redirects = [ }, { source: "/stack/reference/error-handling", - destination: "/reference/stack/errors", + destination: "/reference/stack/api-reference/errors", permanent: false, }, // NOTE: legacy "migration" page is the @cipherstash/protect→stack package // rename guide, NOT data migration (see IA.md). { source: "/stack/reference/migration", - destination: "/reference/stack/upgrading-from-protect", + destination: "/reference/stack/usage", permanent: false, }, { @@ -375,6 +429,13 @@ export const v2Redirects = [ permanent: false, }, // Generated TypeDoc API reference (scripts/generate-docs.ts output) + // The legacy generator placed the Supabase wrapper beneath Stack. Its v2 + // reference is owned by the Supabase integration instead. + { + source: "/stack/reference/stack/latest/packages/stack-supabase/:path*", + destination: "/integrations/supabase/api-reference", + permanent: false, + }, { source: "/stack/reference/stack/:path*", destination: "/reference/stack/api-reference", From de2ce189611323ab39d7c9721c2826eb3cc64ebe Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 31 Jul 2026 02:27:20 +1000 Subject: [PATCH 150/151] fix(redirects): route Supabase to overview --- v2-redirects.mjs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/v2-redirects.mjs b/v2-redirects.mjs index e08dbcb..20dba75 100644 --- a/v2-redirects.mjs +++ b/v2-redirects.mjs @@ -68,7 +68,7 @@ export const v2Redirects = [ }, { source: "/stack/cipherstash/encryption/supabase", - destination: "/integrations/supabase/api-reference", + destination: "/integrations/supabase", permanent: false, }, { From 6badc9f37b5bb4c87cfb35e76f3f545f8194d80a Mon Sep 17 00:00:00 2001 From: Dan Draper <dan@cipherstash.com> Date: Fri, 31 Jul 2026 02:35:30 +1000 Subject: [PATCH 151/151] docs(nav): restore CTS --- content/docs/security/meta.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/content/docs/security/meta.json b/content/docs/security/meta.json index 6348a13..30977ec 100644 --- a/content/docs/security/meta.json +++ b/content/docs/security/meta.json @@ -5,7 +5,7 @@ "index", "cryptography", "!audit-logging", - "!cts", + "cts", "!compliance", "..." ]