<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
  <channel>
    <title>Basin Cloud — Changelog</title>
    <link>https://basin.run/changelog</link>
    <description>Multi-tenant Postgres on object storage. Every shipped feature, dated.</description>
    <language>en-us</language>
    <lastBuildDate>Mon, 11 May 2026 17:43:38 GMT</lastBuildDate>
    <generator>basin-cloud build-changelog-rss</generator>
    <item>
      <title>Account linking + engine version pinning.</title>
      <link>https://basin.run/changelog#2026-05-10-account-linking-and-engine-pinning</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-10-account-linking-and-engine-pinning</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Stack multiple SSO identities on one account. Pin a project to a specific basin engine version with channel + auto-upgrade controls.

Account → Security gains a Linked accounts card listing every identity (email-password, Google, GitHub, OIDC, …) with primary + verified pills, Make-primary, Unlink, and a Set-a-password subsection for SSO-only signups. The unlink path refuses to remove your last verified method. Per-project Engine page surfaces cluster version, drift state, and a versioned catalog grouped by channel; pin manually or follow the recommended tag.</description>
    </item>
    <item>
      <title>Audit log export to S3 / Splunk / Datadog / SFTP.</title>
      <link>https://basin.run/changelog#2026-05-10-audit-log-export</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-10-audit-log-export</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Stream the security_events ledger to your SIEM on a configurable cadence — realtime, 5m, 15m, hourly, or daily.

Org → Audit export configures sinks. Each destination&apos;s secret is sealed with the cluster cipher; only owner/admin can mutate. The exporter is incremental (ULID-cursored) so retries replay the same window without dupes. Per-destination Test and Run buttons fire ad-hoc deliveries and surface bytes-sent + events-count.</description>
    </item>
    <item>
      <title>GitHub integration for migrations.</title>
      <link>https://basin.run/changelog#2026-05-10-github-integration</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-10-github-integration</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Connect a project to a GitHub repo + branch. Commits to the configured branch auto-apply pending SQL migrations.

Project → GitHub takes an installation_id, repo, branch, and migrations path; the cloud generates a webhook secret and the user pastes the URL into GitHub. Each delivery records a run with status, applied files, and a 4 KB log excerpt — failed runs are retryable inline. Webhook signature is HMAC-SHA256 with constant-time compare. The full GitHub-App OAuth install flow is the next phase.</description>
    </item>
    <item>
      <title>Project branches for preview environments.</title>
      <link>https://basin.run/changelog#2026-05-10-project-branches</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-10-project-branches</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>announced</category>
      <description>Spin up a child project as a branch (or preview) of any existing project — separate ref + tenant, parent linkage tracked in the catalog.

Project → Branches manages the tree. v0.1 creates a fresh empty tenant with parent_project_id stamped; the engine clone-tenant RPC arrives in v0.2 to seed branch tenants from parent state. Merge / retire flows emit project.branch_* events that flow through the existing webhooks pipeline.</description>
    </item>
    <item>
      <title>Custom domains per project.</title>
      <link>https://basin.run/changelog#2026-05-10-custom-domains</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-10-custom-domains</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Wire api.acme.com to your project&apos;s basin-rest endpoint with TXT-record verification.

Project → Domains issues a verification token, surfaces the TXT record snippet, and runs a 60-second poller until verified. Cert provisioning is currently operator-driven (one-line fly certs add); automated ACME issuance lands once the operator runtime is wired. Domain status emits to the existing audit stream.</description>
    </item>
    <item>
      <title>basin — terminal client for everything.</title>
      <link>https://basin.run/changelog#2026-05-10-basin-cli</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-10-basin-cli</guid>
      <pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Stdlib-only Go binary. Login, list projects, run SQL, manage tokens, tail logs from your shell.

Pipe queries from stdin or pass --file. Token scoping (read / write / admin + project allowlist + IP allowlist) is enforced server-side, so a CI runner with a read-only token cannot mutate. ~/.config/basin/config.json stores per-org tokens at 0600. Cross-compiles for darwin/amd64, darwin/arm64, linux/amd64, linux/arm64; install via go install or grab a release tarball.</description>
    </item>
    <item>
      <title>Per-project metrics + alert rules.</title>
      <link>https://basin.run/changelog#2026-05-09-observability-and-alerts</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-09-observability-and-alerts</guid>
      <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Live charts for QPS, p50/p90/p99 latency, storage growth, cache hit ratio. Threshold-based alerts fire via webhooks and email.

Project → Metrics shows the four cards on a 1h / 6h / 24h / 7d window with 30-second auto-refresh. Project → Alerts defines triggers (metric + comparator + threshold + N consecutive samples) that flip a rule to firing and emit project.alert_fired events. The same rule can be silenced for 15m / 1h / 4h / 24h or a custom horizon.</description>
    </item>
    <item>
      <title>Backups, PITR, and a curated Postgres extensions catalog.</title>
      <link>https://basin.run/changelog#2026-05-09-backups-pitr-and-extensions</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-09-backups-pitr-and-extensions</guid>
      <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Schedule snapshots, set retention, restore to a snapshot or a timestamp. Enable / disable 20 curated Postgres extensions per project.

Backup policy lives at Project → Backups: hourly / 6h / daily / weekly cadence with a retention slider. PITR toggles a separate retention horizon. Restore confirms by typing the project ref and stamps a pre-restore safety snapshot first. The Extensions page wraps engine-side CREATE EXTENSION / DROP EXTENSION calls; only whitelisted names round-trip.</description>
    </item>
    <item>
      <title>Project webhooks.</title>
      <link>https://basin.run/changelog#2026-05-09-webhooks</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-09-webhooks</guid>
      <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Sign-and-deliver HTTP POSTs on every project event.

Webhooks subscribe to specific event kinds (project.ddl, project.snapshot, project.byo_*, alerts) or wildcard. Delivery is HMAC-SHA256 with retry backoff (30s → 1h, max 5 attempts) and a per-attempt audit.</description>
    </item>
    <item>
      <title>Account 2FA + active sessions + GDPR export. PAT scoping.</title>
      <link>https://basin.run/changelog#2026-05-09-account-security-and-token-scoping</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-09-account-security-and-token-scoping</guid>
      <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>TOTP enrollment with recovery codes. Per-device session list with revoke. Personal-access-token scope bands, project allowlists, IP allowlists.

Account → Security ships TOTP via stdlib RFC 6238, the active session/device list with location chips and one-shot revoke-others, and a GDPR data-export job ledger that produces a gzipped JSON or SQL bundle. Org → API tokens gains per-token scope (read/write/admin), project subset, CIDR allowlist, and explicit expiry — the PATCH path enforces narrowing-only.</description>
    </item>
    <item>
      <title>Cmd+K command palette + first-run onboarding.</title>
      <link>https://basin.run/changelog#2026-05-09-cmd-k-and-onboarding</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-09-cmd-k-and-onboarding</guid>
      <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Global ⌘K jumps to any project, table, settings page, or doc. New users get a 5-step spotlight tour through Connect → SQL → Metrics.

The palette indexes projects, tables in the current project, every dashboard page, the docs nav, and a small set of action verbs. Recent picks persist across reloads. Onboarding fires once per session on a brand-new project and writes its progress to localStorage; you can replay it any time from /account.</description>
    </item>
    <item>
      <title>BYO engine + dedicated clusters for enterprise.</title>
      <link>https://basin.run/changelog#2026-05-09-dedicated-clusters-and-byo-engine</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-09-dedicated-clusters-and-byo-engine</guid>
      <pubDate>Sat, 09 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Self-host the basin engine — cloud becomes pure dashboard + billing. Or get a hardware-isolated Fly app per org on the Enterprise tier.

Project → Compute toggles managed → byo: paste your engine URL, pgwire URL, and admin JWT (sealed with the cluster cipher). The engine resolver dispatches per-project: BYO wins, dedicated clusters next, shared default last. Dedicated clusters spin up as separate Fly apps stamped via /app/admin/dedicated-clusters; pricing is the same engine binary, marked-up infrastructure.</description>
    </item>
    <item>
      <title>Landing page goes live.</title>
      <link>https://basin.run/changelog#2026-05-08-landing-page-live</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-08-landing-page-live</guid>
      <pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Phase 0 ships. Topographic motif, contour-line backgrounds, watershed diagram, cost calculator. The engine is the proof; the landing is the door.

Vite + React 19 + plain CSS. No Tailwind, no UI library, no tracking. Self-hosted everything. The cost calculator on the landing is the same component that lives on /pricing — type three numbers in, watch the gap. Source for the brand kit and the long-form pages goes live alongside the open-source engine docs.</description>
    </item>
    <item>
      <title>basin-auth email-link sign-in.</title>
      <link>https://basin.run/changelog#2026-05-01-basin-auth-email-link</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-05-01-basin-auth-email-link</guid>
      <pubDate>Fri, 01 May 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>The engine ships email-link auth (Phase 5.10). Tokens are scoped to a tenant and a role; expiry is a column, not a clock fudge.

basin-auth is the open-source piece behind cloud sign-up. The email-link flow lands first; OIDC / SAML / SCIM follow on the cloud-only paid tier (engine roadmap Phase 6). The auth surface is a regular pgwire row table — no separate session store, no Redis dependency.</description>
    </item>
    <item>
      <title>basin-rest GA — REST autopipe.</title>
      <link>https://basin.run/changelog#2026-04-22-basin-rest-ga</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-04-22-basin-rest-ga</guid>
      <pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Every table becomes a typed JSON endpoint. OpenAPI 3.1 spec generated from the catalog; CORS and JWT scoping are first-class.

basin-rest reads the catalog and emits an OpenAPI 3.1 document at /openapi.json. Filtering uses Postgres operators (eq, gt, lt, in, like) without inventing a new query DSL. JWT subject resolves to the tenant at connection accept; the same RLS predicates run.</description>
    </item>
    <item>
      <title>Snapshot timeline + PITR.</title>
      <link>https://basin.run/changelog#2026-04-08-snapshot-timeline-pitr</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-04-08-snapshot-timeline-pitr</guid>
      <pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>Iceberg snapshots become a per-tenant timeline you can roll back to. One-second grain, 30 days retained on the free tier.

Every commit produces an Iceberg snapshot. The cloud surface treats the snapshot list as a timeline — pick a snapshot, click rollback, the catalog moves the table head pointer. Storage cost is amortized: snapshots reference the same Parquet files until the next compaction.</description>
    </item>
    <item>
      <title>pgvector compatibility.</title>
      <link>https://basin.run/changelog#2026-03-25-pgvector-compat</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-03-25-pgvector-compat</guid>
      <pubDate>Wed, 25 Mar 2026 00:00:00 GMT</pubDate>
      <category>shipped</category>
      <description>vector(N) columns, ivfflat and hnsw index DDL, the same operators. Embeddings up to 1536 dimensions are first-class.

Same wire format pgvector clients already speak. Storage is Arrow FixedSizeList&lt;Float32&gt;; index DDL accepts the same options. The wedge here is that an embedding column is just a column — no separate vector store to provision, no ANN cluster to babysit.</description>
    </item>
    <item>
      <title>Open-source release.</title>
      <link>https://basin.run/changelog#2026-03-10-open-source-release</link>
      <guid isPermaLink="true">https://basin.run/changelog#2026-03-10-open-source-release</guid>
      <pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate>
      <category>announced</category>
      <description>The engine is public on GitHub. Apache-2.0. Pre-alpha. The hosted product follows when Phase 0 closes.

We ship the engine first because the wedge proof is reproducible: cargo install basin-server, point an S3 bucket at it, watch tenants per dollar do something Postgres-per-project structurally cannot. Cloud is the convenience layer — auth, billing, multi-region routing — that lives on top.</description>
    </item>
  </channel>
</rss>
