Changelog

Recent changes.

Changes that are actually reflected in the product and site. No vapor, no interpretive roadmap.

Cloudflare Workers, Netlify, and eight languages

  • -Connect a Cloudflare account and CapyDB puts a Hyperdrive config in front of your cell, binds it to your Worker or Pages project, and keeps it current. Credentials stay on Cloudflare's side, so rotating them reaches your Worker without a redeploy.
  • -Hyperdrive origins point at the pooled endpoint with a connection budget sized to your plan, rather than Cloudflare's default - which can be larger than a small plan's entire connection allowance.
  • -A re-sync now changes nothing unless something actually changed. Rotations, restores and imports no longer quietly publish a new version of your Worker.
  • -A CapyDB extension for Netlify: hold one API key at the team level, pick a database per site, and connection strings are resolved at build time. Nothing but a feature flag lands in your site's environment variables.
  • -Databases installed through the Vercel Marketplace can be transferred between Vercel accounts. The cell, its storage and its connection strings move with the project, so deployments keep working; project-scoped API keys are revoked.
  • -The site and dashboard now speak English, German, Spanish, French, Japanese, Korean, Portuguese and Chinese. English URLs did not move.
  • -Corrected the point-in-time recovery window in the docs: it is 7 days, not the ~30 the disaster-recovery page had claimed. The restore path only ever used storage checkpoints, so 7 days was always the real answer.

Verified TLS, warm previews, and published benchmarks

  • -Connection strings now use sslmode=verify-full against the CapyDB root certificate, and existing projects were updated in place - a connection can no longer be quietly intercepted.
  • -Published a benchmarks page with the full methodology and exact percentiles, measured on production nodes through the same TLS proxy every project connects through.
  • -The headline numbers: sub-millisecond p95 for a query on a warm connection, 2,301 transactions per second at 32 clients, and 15 ms to open a fresh pooled connection and get an answer.
  • -Published the noisy-neighbour number as well, which most providers do not: with a neighbouring cell under sustained heavy load, a cell kept 49% of its solo throughput. That is proportional fair share, honestly measured, rather than an unmeasured claim of isolation.
  • -Open-sourced capybench, the harness behind those numbers, so anyone can rerun them against us or against someone else.
  • -Preview databases now start warm - a preview branches from its parent cell's storage, so its first full-table scan ran in 255 ms, the same speed as a warm scan on the parent.
  • -Paused cells resume faster: a wake is anticipated from the cell's own traffic pattern, and a one-off bulk scan no longer pushes a cell's working set out of cache.
  • -Refreshed the client packages - @capydb/sdk 1.5.0, @capydb/mcp 1.4.1, and @capydb/drizzle 1.6.0.

Postgres 18, first class

  • -capydb.uuidv7() now exists on every cell and resolves to the right implementation on Postgres 16, 17, and 18, so a time-sortable UUID default survives a major upgrade instead of breaking on the other side.
  • -Postgres 18 cells run the version's new asynchronous I/O sized to their plan, and its vacuum progress views are available for inspection.
  • -Published a Postgres 18 guide - time-sortable UUIDs, temporal constraints, virtual generated columns, and returning the old row - and how to use them without pinning a schema to one major.
  • -capydb doctor gained rules for the schema decisions that cost the most later: non-portable uuidv7() defaults, and nullable columns that should not be.
  • -Generated columns are now reported by schema introspection and by capydb generate, so generated types match the database.
  • -Pooled connections speak the Postgres 18 wire protocol.

Index advisor and Supabase RLS conversion

  • -Added an index advisor that suggests indexes from the queries your database actually ran, ranked by what they would save.
  • -Every candidate is measured as a hypothetical index - nothing is created and nothing is written - so the advisor is safe to run against production.
  • -The advisor is available in the dashboard, in capydb advisor indexes, in the API, and as an MCP tool for agents.
  • -Added capydb migrate rls, which converts Supabase row-level-security policies to vanilla Postgres and reports exactly which claims your application now has to supply.
  • -Open-sourced capyrls, the converter behind it.
  • -Added a schema page to the dashboard for browsing tables, columns, indexes, and enums of the live database.
  • -@capydb/drizzle gained withAuthContext, a pooler-safe way to run queries under a row-level-security identity.
  • -Alert notifications now also go to the organization billing email, alongside the dashboard and your webhooks.

Version upgrades, webhook deliveries, and repository checks

  • -Minor Postgres upgrades are now yours to time - a paused cell picks one up for free on its next wake, and a running cell reports the pending version and restarts when you say so.
  • -Added a major-version readiness check that reports blockers before anything is built, so a major upgrade does not fail halfway through.
  • -Documented how major upgrades actually work here: a full copy and verification window, a cutover you confirm, and a rollback that stays available afterwards.
  • -Webhook endpoints now keep delivery history with per-attempt status, and a single delivery can be replayed.
  • -Added capydb webhooks test to send a signed test event to an endpoint.
  • -Added capydb doctor, which reads a repository and flags database configuration that bites later - .env files pointing one variable at two different databases, migration tooling mixed in unsafe ways, and drivers aimed at the wrong port.

Postgres 16-18, pooled connections, and a developer tooling wave

  • -Added Postgres major version selection - create projects on Postgres 16, 17, or 18.
  • -Added per-project connection pooling on port 6432, with pool sizes matched to your plan.
  • -Added schema introspection and type generation - capydb generate emits TypeScript, Zod, or Drizzle definitions straight from your live schema.
  • -Released @capydb/drizzle, a Drizzle ORM setup with pooler-safe defaults for CapyDB connections.
  • -Added near-zero-downtime imports with capydb import --follow, which keeps replicating changes from your old database until you cut over.
  • -Added zero-downtime credential rotation - old credentials keep working through a grace window while you roll out the new ones.
  • -Added live log tailing and query insights in the dashboard and via capydb logs.
  • -Postgres extensions now receive updates automatically, surfaced as platform-update notices in the dashboard.

Pause when idle, and confirmation before destructive work

  • -Cells now pause when nothing is querying them and resume on the next connection, in about a third of a second. An idle database stops costing compute.
  • -Paused and resuming states are reported everywhere - dashboard, API, and CLI - so a resuming database reads as resuming rather than as a failure.
  • -Added in-place point-in-time restore over a production database, behind an explicit confirmation.
  • -Destructive operations now require that confirmation to be explicit: an import that would overwrite data, or deleting a production project, fails without it instead of proceeding quietly.
  • -Added pg_cron to the extension catalogue.
  • -Added a project event stream and job history, so a long-running operation can be watched instead of polled.

One Postgres per cell

  • -Every cell now runs as its own Postgres with its own storage and its own CPU and memory limits, instead of sharing one server with other projects.
  • -Connection limits and memory come from your plan rather than from whatever the neighbours left over.
  • -Previews and restores became branches of a cell's storage, which is why they are quick to create regardless of how much data sits behind them.
  • -A new cell is only placed on a node with the headroom to serve it, and per-cell limits mean a neighbour's burst cannot take the whole node.
  • -Dashboard, API, CLI, and the Terraform provider all moved to one vocabulary: cells, on nodes, in regions.

Extensions, usage alerts, and a platform tooling wave

  • -Revamped the dashboard with a project-context sidebar and an onboarding checklist on every new project.
  • -Added Postgres extensions management - enable PostGIS, pgcrypto, and other curated extensions per project from the dashboard.
  • -Added usage threshold alerts on storage and connections, delivered in the dashboard, via webhooks (alert.triggered / alert.resolved), and by email.
  • -Launched a live status page with per-region health.
  • -Expanded the CLI with a new wave of commands for day-2 operations.
  • -Released @capydb/mcp so AI agents can manage projects, previews, and backups over MCP.
  • -Released a Terraform provider for declarative project and preview management.
  • -Hardened the GitHub Action for preview databases per pull request.
  • -Published new docs covering connection pooling, disaster recovery, cutovers, compliance, and llms.txt.

API keys, webhooks, and provider integrations

  • -Added scoped API keys with per-key scopes, listing, and revocation.
  • -Added webhook endpoints with signed events for project and job lifecycle, each with its own secret and rotation.
  • -Added Vercel and Netlify integrations that push connection strings into your project's environment and re-push them after rotations, restores, and imports.
  • -Added user-sync integrations for Clerk, Auth0, and Better Auth.

Brand and marketing refresh

  • -Repositioned the public site around no-BS managed Postgres.
  • -Refreshed pricing, about, contact, docs, and blog copy with a sharper builder-first voice.
  • -Aligned messaging around disposable databases, direct access, and clear product boundaries.

Clerk-backed org auth in the dashboard

  • -Added backend verification of Clerk session tokens.
  • -Mapped active Clerk organizations to CapyDB organizations in metadata.
  • -Removed the frontend requirement for a global admin token on normal dashboard routes.

Admin surface and organization settings

  • -Added admin UI for listing and creating organizations and grid nodes.
  • -Added multi-organization switching through Clerk OrganizationSwitcher.
  • -Added organization billing metadata editing, team management, and API key revocation in settings.

Public-site cleanup

  • -Replaced placeholder docs, blog, legal, about, contact, and changelog routes with real content.
  • -Removed unshipped CLI and coming-soon references from the marketing surface.