From 6bec90a7443244463778aab59e944f89dc54b69a Mon Sep 17 00:00:00 2001
From: Nik Richers
Date: Mon, 21 Sep 2026 10:50:32 -0700
Subject: [PATCH] docs: unpublish Multigres Public Alpha docs (#50662)
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
## I have read the CONTRIBUTING.md file.
YES
## What kind of change does this PR introduce?
Revert. Removes the Multigres Public Alpha docs section that was
published in #49020.
Linear: MUL-1621 (follow-up to MUL-452).
## What is the current behavior?
- Overview guide live at `/docs/guides/database/multigres`
- Compatibility stub live at
`/docs/guides/database/multigres/compatibility`
- Database sidebar has a Multigres section
- Features table lists Database / Multigres / `public alpha`
- Database "What you get" cards render for Multigres
## What is the new behavior?
Clean revert of #49020: overview and compatibility pages removed,
sidebar entry removed, features table row removed, "What you get" cards
removed. The unrelated `ContentListings` optional-`href` support this PR
introduced is also reverted since nothing else uses it yet.
Docs go back up once Sugu gives the go-ahead to re-publish (tracked in
MUL-1621).
## Additional context
- `pnpm --filter docs exec vitest run lib/content-listings.test.ts` — 20
passed
## Summary by CodeRabbit
- **Documentation**
- Removed Multigres documentation, navigation links, feature listings,
and related references.
- Updated the JavaScript client library link in the getting-started
guide.
- Corrected the High Availability badge’s “Read more” link.
- **Content Listings**
- Content listing entries now require links and consistently render as
linked items.
- Non-linked listing items are no longer displayed as static content.
---------
Co-authored-by: Nik Richers
---
apps/docs/WORD_LIST.md | 13 ----
.../ContentListings.client.tsx | 64 +++++++------------
.../NavigationMenu.constants.ts | 14 ----
.../content/guides/database/multigres.mdx | 60 -----------------
.../database/multigres/compatibility.mdx | 6 --
.../guides/getting-started/features.mdx | 1 -
.../data/content-listings/database.data.ts | 24 -------
apps/docs/data/content-listings/index.ts | 3 +-
.../markdown-schema/ContentListings.ts | 5 --
apps/docs/lib/content-listings.test.ts | 39 +----------
apps/docs/lib/content-listings.zod.mjs | 2 +-
.../ProjectHome/HighAvailabilityBadge.tsx | 2 +-
supa-mdx-lint/Rule001HeadingCase.toml | 1 -
supa-mdx-lint/Rule003Spelling.toml | 3 -
14 files changed, 28 insertions(+), 209 deletions(-)
delete mode 100644 apps/docs/content/guides/database/multigres.mdx
delete mode 100644 apps/docs/content/guides/database/multigres/compatibility.mdx
diff --git a/apps/docs/WORD_LIST.md b/apps/docs/WORD_LIST.md
index 4bdce8533c0..241ed4af6e2 100644
--- a/apps/docs/WORD_LIST.md
+++ b/apps/docs/WORD_LIST.md
@@ -519,10 +519,6 @@ Use _might_ for possibility or an uncertain outcome.
Use _must_ or _need to_ for a requirement. Don't use _must_ for a recommendation.
-### Multigres
-
-Use _Multigres_ for the product name. Don't write _multi-gres_ or _MultiGres_.
-
## N
### native
@@ -681,11 +677,6 @@ Use _setup_ as a noun or adjective and _set up_ as a verb.
- **Recommended**: Complete the setup to set up authentication.
- **Not recommended**: Setup authentication.
-### shard
-
-Use _shard_ as a noun and _sharding_ for the practice of splitting data across
-nodes.
-
### sign in and sign-in
Use _sign in_, _sign out_, and _sign up_ as verbs. Use the hyphenated forms
@@ -834,10 +825,6 @@ self-hosting requirements or a migration VM, and in general CPU discussion.
Write _versus_ in prose, not _vs._ Use `vs` only when it is part of a literal name
or when space is constrained.
-### Vitess
-
-Use _Vitess_ for the product name.
-
## W
### web
diff --git a/apps/docs/components/ContentListings/ContentListings.client.tsx b/apps/docs/components/ContentListings/ContentListings.client.tsx
index b28e1b18841..93086bd588a 100644
--- a/apps/docs/components/ContentListings/ContentListings.client.tsx
+++ b/apps/docs/components/ContentListings/ContentListings.client.tsx
@@ -29,8 +29,6 @@ function useContentListingClickHandler(group: ContentListingGroup) {
const trackClick = useCallback(
(item: ContentListingItem) => {
- if (!item.href) return
-
sendTelemetryEvent({
action: 'docs_content_listing_clicked',
properties: {
@@ -75,45 +73,8 @@ function ContentListingsGroup({ group }: { group: ContentListingGroup }) {
)}
- )
- }
-
const external = isExternalContentListingHref(item.href)
+ const key = `${group.id}-${item.href}`
if (isGrid) {
return (
@@ -126,7 +87,26 @@ function ContentListingsGroup({ group }: { group: ContentListingGroup }) {
target={external ? '_blank' : undefined}
rel={external ? 'noopener noreferrer' : undefined}
>
- {panel}
+ {item.badge}
+ ) : undefined
+ }
+ >
+ {item.badge && item.badgePosition === 'below' && (
+
+ {item.badge}
+
+ )}
+ {item.subtitle && (
+ {item.subtitle}
+ )}
+ {item.description}
+
)
@@ -140,7 +120,7 @@ function ContentListingsGroup({ group }: { group: ContentListingGroup }) {
target={external ? '_blank' : undefined}
rel={external ? 'noopener noreferrer' : undefined}
>
- {listContent}
+ {item.title}: {item.description}
)
diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
index 2470762c40d..52738309d49 100644
--- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
+++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts
@@ -1139,20 +1139,6 @@ export const database: NavMenuConstant = {
},
],
},
- {
- name: 'Multigres',
- url: undefined,
- items: [
- {
- name: 'Overview',
- url: '/guides/database/multigres' as `/${string}`,
- },
- {
- name: 'Compatibility',
- url: '/guides/database/multigres/compatibility' as `/${string}`,
- },
- ],
- },
{
name: 'Access and security',
url: undefined,
diff --git a/apps/docs/content/guides/database/multigres.mdx b/apps/docs/content/guides/database/multigres.mdx
deleted file mode 100644
index 3f0e15ce5c2..00000000000
--- a/apps/docs/content/guides/database/multigres.mdx
+++ /dev/null
@@ -1,60 +0,0 @@
----
-id: 'multigres'
-title: 'Multigres'
-subtitle: 'Horizontally scalable Postgres for high availability'
-description: 'Run high availability Postgres across multiple nodes with automatic failover, using Multigres.'
----
-
-
-
-Multigres is in [Public Alpha](/docs/guides/getting-started/features#feature-status). It's free during the Alpha for organizations on a paid plan, for up to two projects, but pricing may change once it leaves Alpha. It isn't covered by the [uptime SLA](/sla), and Supabase isn't targeting production or mission-critical workloads with it during this stage.
-
-
-
-Multigres gives your project high availability by running Postgres across multiple nodes instead of one, so reads and writes continue if a node fails. It is Supabase's integration of [Multigres](https://multigres.com), an open-source project that brings the same distributed-systems approach Vitess brought to MySQL to Postgres.
-
-
-
-## Eligibility
-
-During the Public Alpha:
-
-- Multigres is available to organizations on a paid plan. It isn't available on the Free plan.
-- Availability is being rolled out gradually, so the option to enable it may not yet appear for every eligible organization.
-- Up to two projects per eligible organization can use Multigres for free during the Alpha.
-
-## Enabling Multigres
-
-In the Dashboard, Multigres appears as **High availability** during project creation:
-
-1. Open [Create a new project](/dashboard/new/_) in the Dashboard.
-2. Under **High availability**, turn on **Enable high availability**.
-3. Finish the remaining fields such as database password, region, and compute size, if shown.
-4. Click **Create new project**.
-
-If your organization isn't eligible or hasn't been rolled out yet, **High availability** won't appear.
-
-## What's not included in the alpha
-
-Some Supabase features and project operations aren't yet available on Multigres-backed projects:
-
-- **Realtime.** Multigres doesn't yet support the logical replication that Realtime depends on, so Realtime is unavailable.
-- **Point-in-Time Recovery.** Only the standard daily backups are available.
-- **Cross-region read replicas.** Multigres projects run in a single region during the Alpha.
-- **OrioleDB.** A project can use Multigres or [OrioleDB](/docs/guides/database/orioledb), not both.
-- **Resizing after creation.** Compute size, disk, and the number of replicas can't be changed after a Multigres project is created.
-- **Sharding and custom durability policies.** These are on the longer-term roadmap but aren't part of the Alpha.
-
-
-
-Enabling Multigres migrates your project's database to run on Multigres. There's currently no managed path to move it back to a standard Postgres project.
-
-
-
-## Compatibility
-
-Multigres aims for full compatibility with standard Postgres, but there are some differences to be aware of. See [Multigres compatibility](/docs/guides/database/multigres/compatibility) for details.
-
-## Resources
-
-[Multigres documentation](https://multigres.com/docs) — architecture, self-hosted deployment, and other technical depth that goes beyond the hosted Supabase integration covered on this page.
diff --git a/apps/docs/content/guides/database/multigres/compatibility.mdx b/apps/docs/content/guides/database/multigres/compatibility.mdx
deleted file mode 100644
index 02a7072e2a4..00000000000
--- a/apps/docs/content/guides/database/multigres/compatibility.mdx
+++ /dev/null
@@ -1,6 +0,0 @@
----
-title: 'Multigres compatibility'
-description: 'Where Multigres-backed Postgres projects differ from standard Postgres.'
----
-
-Multigres targets full compatibility with standard Postgres, verified against the [`pg_regress`](https://www.postgresql.org/docs/current/regress.html) test suite. See the [Multigres documentation](https://multigres.com/docs) for lower-level architecture and compatibility details, and the [Multigres overview](/docs/guides/database/multigres#whats-not-included-in-the-alpha) for what's not yet supported during the Public Alpha.
diff --git a/apps/docs/content/guides/getting-started/features.mdx b/apps/docs/content/guides/getting-started/features.mdx
index 6c4dbc57908..ed3054170aa 100644
--- a/apps/docs/content/guides/getting-started/features.mdx
+++ b/apps/docs/content/guides/getting-started/features.mdx
@@ -208,7 +208,6 @@ In addition to the Beta requirements, features in GA are covered by the [uptime
| Database | Webhooks | `beta` | ✅ |
| Database | Vault | `public alpha` | ✅ |
| Database | Supabase Pipelines | `public alpha` | N/A |
-| Database | Multigres | `public alpha` | N/A |
| Platform | | `GA` | ✅ |
| Platform | Point-in-Time Recovery | `GA` | 🚧 [wal-g](https://github.com/wal-g/wal-g) |
| Platform | Custom Domains | `GA` | N/A |
diff --git a/apps/docs/data/content-listings/database.data.ts b/apps/docs/data/content-listings/database.data.ts
index 65cd98428f1..60c9b4c038e 100644
--- a/apps/docs/data/content-listings/database.data.ts
+++ b/apps/docs/data/content-listings/database.data.ts
@@ -94,27 +94,3 @@ export const databaseNextSteps: ContentListingGroup = {
},
],
}
-
-export const databaseMultigresWhatYouGet: ContentListingGroup = {
- id: 'database-multigres-what-you-get',
- heading: 'What you get',
- description:
- 'When you enable Multigres on a project, your database runs as a small cluster instead of a single instance:',
- type: 'grid',
- items: [
- {
- title: 'Automatic failover',
- description:
- 'If a node fails, another in the cluster is promoted within seconds, without you having to intervene.',
- },
- {
- title: 'No connection changes',
- description:
- 'Use the same connection string. Coordination is transparent to your application.',
- },
- {
- title: 'Consensus-backed durability',
- description: 'Writes are acknowledged only after the cluster agrees they are durable.',
- },
- ],
-}
diff --git a/apps/docs/data/content-listings/index.ts b/apps/docs/data/content-listings/index.ts
index 60e42a382d4..aca30691be8 100644
--- a/apps/docs/data/content-listings/index.ts
+++ b/apps/docs/data/content-listings/index.ts
@@ -2,7 +2,7 @@ import type { ContentListingGroup } from '~/lib/content-listings.schema'
import { aiToolsBuildingIntoApp, aiToolsSupportedAgents } from './ai-tools.data'
import { authGetStarted, authNextSteps, authPricing } from './auth.data'
-import { databaseGetStarted, databaseMultigresWhatYouGet, databaseNextSteps } from './database.data'
+import { databaseGetStarted, databaseNextSteps } from './database.data'
import {
functionsExamplesAiMedia,
functionsExamplesMessaging,
@@ -42,7 +42,6 @@ const ALL_GROUPS: readonly ContentListingGroup[] = [
authPricing,
authNextSteps,
databaseGetStarted,
- databaseMultigresWhatYouGet,
databaseNextSteps,
functionsGetStarted,
functionsExamplesSupabase,
diff --git a/apps/docs/internals/markdown-schema/ContentListings.ts b/apps/docs/internals/markdown-schema/ContentListings.ts
index 56b1c7ba404..6817ce1f919 100644
--- a/apps/docs/internals/markdown-schema/ContentListings.ts
+++ b/apps/docs/internals/markdown-schema/ContentListings.ts
@@ -34,11 +34,6 @@ export function serializeContentListingGroupToMarkdown(
}
for (const item of items) {
- if (!item.href) {
- lines.push(`- **${item.title}:** ${item.description}`)
- continue
- }
-
const href = isExternalContentListingHref(item.href)
? item.href
: `${linkBaseUrl}${withDocsBasePath(item.href)}`
diff --git a/apps/docs/lib/content-listings.test.ts b/apps/docs/lib/content-listings.test.ts
index 1eeb4059884..cd3166285cf 100644
--- a/apps/docs/lib/content-listings.test.ts
+++ b/apps/docs/lib/content-listings.test.ts
@@ -147,27 +147,6 @@ describe('serializeContentListingGroupToMarkdown', () => {
)
})
- it('renders items without href as unlinked list entries', () => {
- const markdown = serializeContentListingGroupToMarkdown(
- {
- id: 'what-you-get',
- heading: 'What you get',
- items: [
- {
- title: 'Automatic failover',
- description: 'Another node is promoted if a node goes down.',
- },
- ],
- },
- 'https://supabase.com'
- )
-
- expect(markdown).toContain(
- '- **Automatic failover:** Another node is promoted if a node goes down.'
- )
- expect(markdown).not.toContain('](')
- })
-
it('omits heading line when heading is not set', () => {
const markdown = serializeContentListingGroupToMarkdown(
{
@@ -281,11 +260,9 @@ describe('dashboard content listing hrefs', () => {
// Root-relative /dashboard hrefs get the docs basePath and 404; use absolute URLs.
it('uses absolute https://supabase.com dashboard URLs', () => {
const dashboardLinks = Object.values(CONTENT_LISTINGS).flatMap((group) =>
- group.items.flatMap((item) =>
- item.href && isDashboardHref(item.href)
- ? [{ listingId: group.id, title: item.title, href: item.href }]
- : []
- )
+ group.items
+ .filter((item) => isDashboardHref(item.href))
+ .map((item) => ({ listingId: group.id, title: item.title, href: item.href }))
)
expect(dashboardLinks.length).toBeGreaterThan(0)
@@ -298,16 +275,6 @@ describe('dashboard content listing hrefs', () => {
})
})
-describe('contentListingItemSchema href', () => {
- it('accepts an item without href', () => {
- const result = contentListingItemSchema.safeParse({
- title: 'Automatic failover',
- description: 'Another node is promoted if a node goes down.',
- })
- expect(result.success).toBe(true)
- })
-})
-
describe('contentListingItemSchema icon', () => {
const baseItem = {
title: 'Datadog',
diff --git a/apps/docs/lib/content-listings.zod.mjs b/apps/docs/lib/content-listings.zod.mjs
index bc9b6de5e2d..decf8220a03 100644
--- a/apps/docs/lib/content-listings.zod.mjs
+++ b/apps/docs/lib/content-listings.zod.mjs
@@ -22,7 +22,7 @@ export const contentListingIconSchema = z.union([z.string().min(1), contentListi
export const contentListingItemSchema = z.object({
title: z.string().min(1),
- href: z.string().min(1).optional(),
+ href: z.string().min(1),
description: z.string().min(1),
/** Shown under the title on grid cards, before the description. */
subtitle: z.string().min(1).optional(),
diff --git a/apps/studio/components/interfaces/ProjectHome/HighAvailabilityBadge.tsx b/apps/studio/components/interfaces/ProjectHome/HighAvailabilityBadge.tsx
index b1b45f29756..15041a5c3c5 100644
--- a/apps/studio/components/interfaces/ProjectHome/HighAvailabilityBadge.tsx
+++ b/apps/studio/components/interfaces/ProjectHome/HighAvailabilityBadge.tsx
@@ -37,7 +37,7 @@ export function HighAvailabilityBadge({ size = 'default' }: HighAvailabilityBadg
globally distributed deployments.