From 9e225a279b33e4e6e1452e573a40a6a25aa2cb2f Mon Sep 17 00:00:00 2001 From: "Andrey A." <56412611+aantti@users.noreply.github.com> Date: Mon, 3 Aug 2026 18:21:35 +0200 Subject: [PATCH 1/7] chore(self-hosted): update 2026-08-03 (#48649) --- docker/CHANGELOG.md | 40 ++++++++++++++++++++++++++++++--- docker/docker-compose.envoy.yml | 2 +- docker/docker-compose.nginx.yml | 2 +- docker/docker-compose.yml | 4 ++-- docker/versions.md | 6 ++++- 5 files changed, 46 insertions(+), 8 deletions(-) diff --git a/docker/CHANGELOG.md b/docker/CHANGELOG.md index 20b48fe1c1467..96081665b1633 100644 --- a/docker/CHANGELOG.md +++ b/docker/CHANGELOG.md @@ -11,8 +11,42 @@ See per-service updates below for details. Only the most important changes relev --- ## Unreleased +- Self-hosted Supabase: Envoy becomes the default API gateway (breaking change) [#48048](https://github.com/orgs/supabase/discussions/48048) (PR [#48153](https://github.com/supabase/supabase/pull/48153)) -Check the main Supabase [changelog](https://github.com/orgs/supabase/discussions/categories/changelog?discussions_q=is%3Aopen+category%3AChangelog+label%3Aself-hosted) for updates. +--- + +## [0.7.1](https://github.com/supabase/supabase/releases/tag/self-hosted/v0.7.1) - 2026-08-03 + +### Configuration +- Added `SUPABASE_JWKS` configuration for Edge Functions to `docker-compose.yml` - PR [#45635](https://github.com/supabase/supabase/pull/45635) +- Added `upgrades.json` - a version-keyed manifest to gate breaking changes (required for `update.sh`) - PR [#47851](https://github.com/supabase/supabase/pull/47851) +- Updated `.gitignore` (required for `update.sh`) + +### Documentation +- Added new how-to guides ([Custom Postgres Extensions](https://supabase.com/docs/guides/self-hosting/custom-postgres-extensions) and [Update Your Self-Hosted Deployment](https://supabase.com/docs/guides/self-hosting/updating)) - PR [#48203](https://github.com/supabase/supabase/pull/48203), PR [#48535](https://github.com/supabase/supabase/pull/48535) + +### Utils and tests +- Added base version stamp to `setup.sh` (saved in `.supabase-version`, required for `update.sh`) - PR [#47848](https://github.com/supabase/supabase/pull/47848) +- Added `update.sh`. Refer to [Update Your Self-Hosted Deployment](https://supabase.com/docs/guides/self-hosting/updating) - PR [#47851](https://github.com/supabase/supabase/pull/47851) +- Added `SUPABASE_JWKS` configuration for Edge Functions to `utils/add-new-auth-keys.sh` - PR [#45635](https://github.com/supabase/supabase/pull/45635) +- Updated `tests/test-s3.sh` and `test-s3-backend.sh` - PR [#48500](https://github.com/supabase/supabase/pull/48500) + +### API gateway +- Updated Kong to `3.9.3` +- Added `KONG_DNS_VALID_TTL` configuration environment variable (requires `docker-compose.yml` update) - PR [#47846](https://github.com/supabase/supabase/pull/47846) +- Updated Envoy to `1.39.0` (requires `docker-compose.envoy.yml` update) +- Updated [nginx-certbot](https://github.com/JonasAlfredsson/docker-nginx-certbot) to `6.2.0-nginx1.31.3` (requires `docker-compose.nginx.yml` update) + +### Studio +- Updated to `2026.08.03-sha-022b374` +- Fixed URL generation for Edge Functions - PR [#47861](https://github.com/supabase/supabase/pull/47861) (via [@7ttp](https://github.com/7ttp)) +- Fixed the Logs tab visibility in **Auth > Users** - PR [#48122](https://github.com/supabase/supabase/pull/48122) (via [@luizfelmach](https://github.com/luizfelmach/)) + +### Storage +- Changed RustFS image to `1.0.0-beta.11` temporarily (requires `docker-compose.rustfs.yml` update) - PR [#48500](https://github.com/supabase/supabase/pull/48500) + +### Edge Runtime +- Changed JWKS configuration mechanism for main worker (requires `docker-compose.yml` and `volumes/functions/main/index.ts` update) - PR [#45635](https://github.com/supabase/supabase/pull/45635) --- @@ -42,8 +76,8 @@ Check the main Supabase [changelog](https://github.com/orgs/supabase/discussions ### Studio - Updated to `2026.07.07-sha-a6a04f2` - Fixed the local SQL snippets not being shown in the SQL Editor - PR [#47403](https://github.com/supabase/supabase/pull/47403), PR [#47409](https://github.com/supabase/supabase/pull/47409) -- Fixed the exposed schemas and tables UI to properly reflect non-platform configuration (Data API > Settings) - PR [#47511](https://github.com/supabase/supabase/pull/47511) -- Fixed the behavior of the type generator (Data API > Docs) - PR [#47577](https://github.com/supabase/supabase/pull/47577) +- Fixed the exposed schemas and tables UI to properly reflect non-platform configuration (**Data API > Settings**) - PR [#47511](https://github.com/supabase/supabase/pull/47511) +- Fixed the behavior of the type generator (**Data API > Docs**) - PR [#47577](https://github.com/supabase/supabase/pull/47577) ### Auth - ⚠️ Changed Auth configuration placeholders to match the new default `API_EXTERNAL_URL` (requires `docker-compose.yml` update) - PR [#47640](https://github.com/supabase/supabase/pull/47640) diff --git a/docker/docker-compose.envoy.yml b/docker/docker-compose.envoy.yml index 38391afd7cdcb..8a2d706ffdba3 100644 --- a/docker/docker-compose.envoy.yml +++ b/docker/docker-compose.envoy.yml @@ -16,7 +16,7 @@ services: # Envoy API gateway api-gw: container_name: supabase-envoy - image: envoyproxy/envoy:v1.38.0 + image: envoyproxy/envoy:v1.39.0 restart: unless-stopped ports: - ${KONG_HTTP_PORT}:8000/tcp diff --git a/docker/docker-compose.nginx.yml b/docker/docker-compose.nginx.yml index 412f2fb50a495..7c1f915d7e88e 100644 --- a/docker/docker-compose.nginx.yml +++ b/docker/docker-compose.nginx.yml @@ -20,7 +20,7 @@ services: nginx: container_name: supabase-nginx - image: jonasal/nginx-certbot:6.2.0-nginx1.31.0 + image: jonasal/nginx-certbot:6.2.0-nginx1.31.3 restart: unless-stopped ports: - "80:80" diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml index 12b7efe9d0549..d34a43fe75597 100644 --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -14,7 +14,7 @@ services: studio: container_name: supabase-studio - image: supabase/studio:2026.07.07-sha-a6a04f2 + image: supabase/studio:2026.08.03-sha-022b374 restart: unless-stopped healthcheck: test: @@ -67,7 +67,7 @@ services: kong: container_name: supabase-kong - image: kong/kong:3.9.1 + image: kong/kong:3.9.3 restart: unless-stopped networks: default: diff --git a/docker/versions.md b/docker/versions.md index c3714f7e6baa2..36792c99c0976 100644 --- a/docker/versions.md +++ b/docker/versions.md @@ -1,4 +1,8 @@ -# Docker Image Versions +# Docker image version updates in docker-compose.yml + +## 2026-08-03 +- supabase/studio:2026.08.03-sha-022b374 (prev supabase/studio:2026.07.07-sha-a6a04f2) +- kong/kong:3.9.3 (prev kong/kong:3.9.1) ## 2026-07-07 - supabase/studio:2026.07.07-sha-a6a04f2 (prev supabase/studio:2026.06.03-sha-0bca601) From ae1c260a1fe63946676a5d1b75a830f2f751f1e8 Mon Sep 17 00:00:00 2001 From: Rand Arete Date: Mon, 3 Aug 2026 10:55:02 -0600 Subject: [PATCH 2/7] Add Rand Arete to humans.txt (#48658) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Just adding myself to humans.txt ## Summary by CodeRabbit * **Documentation** * Updated the team information page to include Rand Arete as a member of the Supabase remote team. --- apps/docs/public/humans.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt index dfba1de529876..990fd6c989ee7 100644 --- a/apps/docs/public/humans.txt +++ b/apps/docs/public/humans.txt @@ -241,6 +241,7 @@ Qiao Han Quintin Willison Rafael Chacón Raminder Singh +Rand Arete Raúl Barroso Riccardo Busetti Richard Kasprzak From 56946d8171d873c3295842828dc78e8b2830dbda Mon Sep 17 00:00:00 2001 From: Laurence Isla Date: Mon, 3 Aug 2026 17:21:02 +0000 Subject: [PATCH 3/7] docs: add workaround to avoid noisy logs when PostgREST is disabled (#48021) --- ...grst_no_exposed_schemas-does-not-exist.mdx | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/apps/docs/content/troubleshooting/schema-pg_pgrst_no_exposed_schemas-does-not-exist.mdx b/apps/docs/content/troubleshooting/schema-pg_pgrst_no_exposed_schemas-does-not-exist.mdx index 41e41acd67ebb..3124757bbf0f2 100644 --- a/apps/docs/content/troubleshooting/schema-pg_pgrst_no_exposed_schemas-does-not-exist.mdx +++ b/apps/docs/content/troubleshooting/schema-pg_pgrst_no_exposed_schemas-does-not-exist.mdx @@ -19,3 +19,38 @@ PostgREST logs showing the error: - Currently, we don't really shutdown PostgREST when the Data API is disabled. You will see a schema called `pg_pgrst_no_exposed_schemas` added in the exposed schemas. - This should not adversely affect the project, although it may result in additional entries in your logs. - We're aware of this issue and are working on it. + +## Workaround + +To stop the missing-schema log entries: + +1. Open the SQL Editor. +2. Run the following statements: + + ```sql + -- Create a schema with nothing inside + create schema pgrst_no_exposed_schemas; + + -- Set the db-schemas configuration + alter role authenticator set pgrst.db_schemas = 'pgrst_no_exposed_schemas'; + + -- Reload PostgREST's schema cache and configuration + notify pgrst; + ``` + +PostgREST now exposes an empty schema, which stops the missing-schema errors. + +## Re-enable the Data API + +Before you re-enable the data API: + +1. Open the SQL Editor. +2. Run the following statements: + + ```sql + -- Reset the db-schemas configuration + alter role authenticator reset pgrst.db_schemas; + + -- Reload PostgREST's schema cache and configuration + notify pgrst; + ``` From 405d789e275a567549be3b7b4dc5878bf2b03116 Mon Sep 17 00:00:00 2001 From: Ana <30495040+ana1337x@users.noreply.github.com> Date: Mon, 3 Aug 2026 13:54:28 -0400 Subject: [PATCH 4/7] docs(www): add launch video to Supabase Pipelines feature page (#48654) ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? - Sets `heroImage` on the `supabase-pipelines` entry in `apps/www/data/features.tsx` to the "Introducing Supabase Pipelines" YouTube embed ## What is the current behavior? `/features/supabase-pipelines` has an empty `heroImage`, so the hero renders the fallback icon block instead of media. ## What is the new behavior? - The feature page hero renders the launch video, using the same `youtube-nocookie.com/embed/` format as the other 22 feature entries with video heroes ## Additional context N/A ## Summary by CodeRabbit * **Content Updates** * Updated the Supabase Pipelines feature presentation to display a YouTube video as its hero visual. Co-authored-by: Ana --- apps/www/data/features.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/www/data/features.tsx b/apps/www/data/features.tsx index 0d9c62aaa1420..328b9db7630f3 100644 --- a/apps/www/data/features.tsx +++ b/apps/www/data/features.tsx @@ -672,7 +672,7 @@ Schema change support is currently in beta and limited to supported BigQuery cha Pipelines keeps the current destination table state synchronized. It does not automatically create a queryable history of every row version.`, icon: CloudCog, products: [PRODUCT_SHORTNAMES.DATABASE], - heroImage: '', + heroImage: 'https://www.youtube-nocookie.com/embed/8o3duiYqppA', docsUrl: 'https://supabase.com/docs/guides/database/replication/pipelines', slug: 'supabase-pipelines', status: { From 3c903b7dfa4dc9168f487e120baefd16872fecd0 Mon Sep 17 00:00:00 2001 From: Ishleen Kaur <102962586+ishleenk17@users.noreply.github.com> Date: Tue, 4 Aug 2026 00:04:10 +0530 Subject: [PATCH 5/7] Add Elastic Tile to Supabase Metrics API page (#48564) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Feature ## What is the current behavior? Elastic is not added as a tile in metrics API page. ## What is the new behavior? Now Elastic is supporting Supabase metrcis ingestion, hence it should be listed in the Metrics page. ![Uploading Screenshot 2026-08-03 at 4.31.46 PM.png…]() ## Summary by CodeRabbit - **New Features** - Added Elastic as a supported metrics integration in the documentation. - Added an Elastic integration card with community labeling and a link to Elastic’s documentation. - Added Elastic to the monitoring metrics navigation and Metrics API guide resources. - Added Elastic branding and iconography to the metrics integration listings for easier recognition. --------- Co-authored-by: Miranda Limonczenko --- .../docs/components/MetricsStackCards.data.ts | 12 ++- apps/docs/components/MetricsStackCards.tsx | 3 +- .../NavigationMenu.constants.ts | 4 + .../monitoring-and-debugging/metrics.mdx | 1 + packages/icons/__registry__/index.tsx | 10 +++ packages/icons/src/icons/elastic.ts | 80 +++++++++++++++++++ packages/icons/src/icons/index.ts | 1 + packages/icons/src/raw-icons/elastic.svg | 8 ++ 8 files changed, 117 insertions(+), 2 deletions(-) create mode 100644 packages/icons/src/icons/elastic.ts create mode 100644 packages/icons/src/raw-icons/elastic.svg diff --git a/apps/docs/components/MetricsStackCards.data.ts b/apps/docs/components/MetricsStackCards.data.ts index d9217a230195d..04c76f26e0267 100644 --- a/apps/docs/components/MetricsStackCards.data.ts +++ b/apps/docs/components/MetricsStackCards.data.ts @@ -2,7 +2,7 @@ export type MetricsStackOption = { title: string description: string href: string - iconKind: 'grafana' | 'datadog' | 'flame' + iconKind: 'grafana' | 'datadog' | 'elastic' | 'flame' iconColor: string iconBg: string badges: { label: string; variant: 'default' | 'community' }[] @@ -39,6 +39,16 @@ export const metricsStackOptions: MetricsStackOption[] = [ iconBg: 'rgba(99,44,166,0.1)', badges: [{ label: 'Community', variant: 'community' }], }, + { + title: 'Elastic', + description: + "Use Elastic's managed Supabase integration to scrape metrics. The integration automatically installs dashboards, alert templates, and SLO templates as data arrives.", + href: 'https://www.elastic.co/docs/reference/integrations/supabase', + iconKind: 'elastic', + iconColor: '#00BFB3', + iconBg: 'rgba(0,191,179,0.1)', + badges: [{ label: 'Community', variant: 'community' }], + }, { title: 'Vendor-agnostic / BYO Prometheus', description: diff --git a/apps/docs/components/MetricsStackCards.tsx b/apps/docs/components/MetricsStackCards.tsx index 895a5b7daee1e..6d02659cfc307 100644 --- a/apps/docs/components/MetricsStackCards.tsx +++ b/apps/docs/components/MetricsStackCards.tsx @@ -1,4 +1,4 @@ -import { Datadog, Grafana } from 'icons' +import { Datadog, Elastic, Grafana } from 'icons' import { Flame } from 'lucide-react' import Link from 'next/link' import type { ReactNode } from 'react' @@ -8,6 +8,7 @@ import { metricsStackOptions, type MetricsStackOption } from './MetricsStackCard const ICONS: Record = { grafana: , datadog: , + elastic: , flame: , } diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index 8f7c97d96f7b6..b0b872ff4e7dc 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -3047,6 +3047,10 @@ export const telemetry: NavMenuConstant = { name: 'Datadog', url: 'https://docs.datadoghq.com/integrations/supabase/' as `/${string}`, }, + { + name: 'Elastic', + url: 'https://www.elastic.co/docs/reference/integrations/supabase' as `/${string}`, + }, { name: 'Vendor-agnostic setup', url: '/guides/monitoring-and-debugging/metrics/vendor-agnostic' as `/${string}`, diff --git a/apps/docs/content/guides/monitoring-and-debugging/metrics.mdx b/apps/docs/content/guides/monitoring-and-debugging/metrics.mdx index 98014a389669a..addbd36aba80a 100644 --- a/apps/docs/content/guides/monitoring-and-debugging/metrics.mdx +++ b/apps/docs/content/guides/monitoring-and-debugging/metrics.mdx @@ -39,5 +39,6 @@ Pick the workflow that best matches your tooling. Cards link to Supabase-authore - [Supabase Grafana repository](https://github.com/supabase/supabase-grafana) for dashboard JSON and alert examples. - [Grafana Cloud’s Supabase integration doc](https://grafana.com/docs/grafana-cloud/monitor-infrastructure/integrations/integration-reference/integration-supabase/) (community-maintained, built on this Metrics API). - [Datadog’s Supabase integration doc](https://docs.datadoghq.com/integrations/supabase/) (community-maintained, built on this Metrics API). +- [Elastic’s Supabase integration doc](https://www.elastic.co/docs/reference/integrations/supabase) (community-maintained). - [Log Drains ](/docs/guides/monitoring-and-debugging/log-drains) for exporting event-based telemetry alongside metrics. - [Query Performance report](/dashboard/project/_/observability/query-performance) for built-in visualizations based on the same underlying metrics. diff --git a/packages/icons/__registry__/index.tsx b/packages/icons/__registry__/index.tsx index ef6d1913e9874..6c75467e9ee6a 100644 --- a/packages/icons/__registry__/index.tsx +++ b/packages/icons/__registry__/index.tsx @@ -154,6 +154,16 @@ export const Index: Record = [ svg: "\n \n \n \n \n", jsx: "import { EdgeFunctions } from \"icons\"\n \n " }, +{ + name: "elastic", + componentName: "Elastic", + deprecated: false, + raw: "import createSupabaseIcon from '../createSupabaseIcon';\n\n/**\n * @component @name Elastic\n * @description Supabase SVG icon component, renders SVG Element with children.\n *\n * @preview ![img](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsPSIjMEI2NEREIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNMjcuNTY1IDExLjI0MmM1LjEgMS45NCA0Ljg3MiA5LjM5Ni0uMjQ1IDExLjEyN2wtLjE2Mi4wNTUtLjE2Ny0uMDM5LTUuMjgtMS4yMzgtLjI2OC0uMDYzLS4xMjctLjI0NC0xLjQtMi42OS0uMjE3LS40MTcuMzUyLS4zMSA2LjkwNC02LjA3LjI3Mi0uMjQuMzM4LjEzWiIvPgo8cGF0aCBmaWxsPSIjOUFEQzMwIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJtMjIuMDQ3IDIxLjIzOSA0LjggMS4xMjUuMzE2LjA3NC4xMS4zMDQuMDY2LjE5Yy42MjMgMS45NjQtLjI2IDMuNzgtMS42NTIgNC43OTctMS40MzQgMS4wNDgtMy41MSAxLjMyLTUuMTgyLjAyMmwtLjI5LS4yMjUuMDY5LS4zNjEgMS4wMzctNS40NTQuMTE3LS42MTUuNjEuMTQzWiIvPgo8cGF0aCBmaWxsPSIjMUJBOUY1IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJtNS4wMSA5LjYzIDUuMjY3IDEuMjU1LjI4My4wNjcuMTIyLjI2NCAxLjIzNSAyLjY1LjE4Ny40LS4zMjguMjk4LTYuNzMzIDYuMS0uMjcyLjI0OC0uMzQ1LS4xMzJDMS45MzkgMTkuODMuNzIgMTcuNDU2Ljc1MiAxNS4xNTNjLjAzMi0yLjMwOCAxLjMyMS00LjY0NCAzLjkzMi01LjUwOGwuMTYyLS4wNTQuMTY1LjAzOVoiLz4KPHBhdGggZmlsbD0iI0YwNEU5OCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMiIgZD0iTTYuMjgxIDQuMzJjMS40MTYtMS4wOCAzLjQ4LTEuMzg3IDUuMjIyLS4wNjlsLjI5Ny4yMjYtLjA3LjM2Ni0xLjA1MyA1LjQ3NC0uMTE4LjYxNS0uNjA5LS4xNDQtNC44LTEuMTM3LS4zMTYtLjA3NS0uMTEtLjMwNmMtLjcwOS0xLjk2Ny4xNDktMy44NzYgMS41NTctNC45NVoiLz4KPHBhdGggZmlsbD0iIzAyQkNCNyIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMiIgZD0ibTEyLjQ2NiAxNC40MzMgNy4wMyAzLjIxMS4xODguMDg2LjA5NS4xODMgMS41NTUgMi45ODUuMDk2LjE4NC0uMDQuMjA2LTEuMTY1IDYuMTAxLS4wMjQuMTIyLS4wNjguMTAzYy0yLjY4IDMuOTU4LTYuOTAyIDQuNzEtMTAuMjY4IDMuMjYtMy4zNTYtMS40NDctNS44MzQtNS4wNy01LjEyNi05LjczNmwuMDMzLS4yMS4xNTgtLjE0NCA2Ljg4NC02LjI1LjI5My0uMjY1LjM2LjE2NFoiLz4KPHBhdGggZmlsbD0iI0ZFQzUxNCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMiIgZD0iTTExLjg5MiA0LjQxQzE0LjQzOC42NzYgMTguNzQxLjEwNSAyMi4xMzQgMS41NGMzLjM5MiAxLjQzMyA1Ljk5IDQuOTIgNS4xMDIgOS4zNjJsLS4wMzkuMi0uMTUzLjEzMy03LjA2NiA2LjIxMy0uMjkzLjI1OC0uMzUzLS4xNjMtNy4wMDItMy4yMS0uMjAxLS4wOTMtLjA5NC0uMi0xLjM4LTIuOTg4LS4wODEtLjE3Ny4wMzctLjE5TDExLjggNC42MzNsLjAyMy0uMTIxLjA3LS4xMDJaIi8+Cjwvc3ZnPgo=)\n *\n * @param {Object} props - Supabase icons props and any valid SVG attribute\n * @returns {JSX.Element} JSX Element\n *\n */\nconst Elastic = createSupabaseIcon(\n 'Elastic',\n [\n [\n 'path',\n {\n fill: '#0B64DD',\n stroke: '#fff',\n 'stroke-width': '1.2',\n d: 'M27.565 11.242c5.1 1.94 4.872 9.396-.245 11.127l-.162.055-.167-.039-5.28-1.238-.268-.063-.127-.244-1.4-2.69-.217-.417.352-.31 6.904-6.07.272-.24.338.13Z',\n key: 'el1',\n },\n ],\n [\n 'path',\n {\n fill: '#9ADC30',\n stroke: '#fff',\n 'stroke-width': '1.2',\n d: 'm22.047 21.239 4.8 1.125.316.074.11.304.066.19c.623 1.964-.26 3.78-1.652 4.797-1.434 1.048-3.51 1.32-5.182.022l-.29-.225.069-.361 1.037-5.454.117-.615.61.143Z',\n key: 'el2',\n },\n ],\n [\n 'path',\n {\n fill: '#1BA9F5',\n stroke: '#fff',\n 'stroke-width': '1.2',\n d: 'm5.01 9.63 5.267 1.255.283.067.122.264 1.235 2.65.187.4-.328.298-6.733 6.1-.272.248-.345-.132C1.939 19.83.72 17.456.752 15.153c.032-2.308 1.321-4.644 3.932-5.508l.162-.054.165.039Z',\n key: 'el3',\n },\n ],\n [\n 'path',\n {\n fill: '#F04E98',\n stroke: '#fff',\n 'stroke-width': '1.2',\n d: 'M6.281 4.32c1.416-1.08 3.48-1.387 5.222-.069l.297.226-.07.366-1.053 5.474-.118.615-.609-.144-4.8-1.137-.316-.075-.11-.306c-.709-1.967.149-3.876 1.557-4.95Z',\n key: 'el4',\n },\n ],\n [\n 'path',\n {\n fill: '#02BCB7',\n stroke: '#fff',\n 'stroke-width': '1.2',\n d: 'm12.466 14.433 7.03 3.211.188.086.095.183 1.555 2.985.096.184-.04.206-1.165 6.101-.024.122-.068.103c-2.68 3.958-6.902 4.71-10.268 3.26-3.356-1.447-5.834-5.07-5.126-9.736l.033-.21.158-.144 6.884-6.25.293-.265.36.164Z',\n key: 'el5',\n },\n ],\n [\n 'path',\n {\n fill: '#FEC514',\n stroke: '#fff',\n 'stroke-width': '1.2',\n d: 'M11.892 4.41C14.438.676 18.741.105 22.134 1.54c3.392 1.433 5.99 4.92 5.102 9.362l-.039.2-.153.133-7.066 6.213-.293.258-.353-.163-7.002-3.21-.201-.093-.094-.2-1.38-2.988-.081-.177.037-.19L11.8 4.633l.023-.121.07-.102Z',\n key: 'el6',\n },\n ],\n ],\n { fill: 'none', stroke: 'none', viewBox: '0 0 32 32' },\n);\n\nexport default Elastic;\n", + component: React.lazy(() => import('icons/src/icons/elastic')), + import: "import { Elastic } from 'icons'", + svg: "\n\n\n\n\n\n\n\n", + jsx: "import { Elastic } from \"icons\"\n \n " +}, { name: "files-bucket", componentName: "FilesBucket", diff --git a/packages/icons/src/icons/elastic.ts b/packages/icons/src/icons/elastic.ts new file mode 100644 index 0000000000000..3363932c4e4a3 --- /dev/null +++ b/packages/icons/src/icons/elastic.ts @@ -0,0 +1,80 @@ +import createSupabaseIcon from '../createSupabaseIcon'; + +/** + * @component @name Elastic + * @description Supabase SVG icon component, renders SVG Element with children. + * + * @preview ![img](data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJub25lIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgo8cGF0aCBmaWxsPSIjMEI2NEREIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJNMjcuNTY1IDExLjI0MmM1LjEgMS45NCA0Ljg3MiA5LjM5Ni0uMjQ1IDExLjEyN2wtLjE2Mi4wNTUtLjE2Ny0uMDM5LTUuMjgtMS4yMzgtLjI2OC0uMDYzLS4xMjctLjI0NC0xLjQtMi42OS0uMjE3LS40MTcuMzUyLS4zMSA2LjkwNC02LjA3LjI3Mi0uMjQuMzM4LjEzWiIvPgo8cGF0aCBmaWxsPSIjOUFEQzMwIiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJtMjIuMDQ3IDIxLjIzOSA0LjggMS4xMjUuMzE2LjA3NC4xMS4zMDQuMDY2LjE5Yy42MjMgMS45NjQtLjI2IDMuNzgtMS42NTIgNC43OTctMS40MzQgMS4wNDgtMy41MSAxLjMyLTUuMTgyLjAyMmwtLjI5LS4yMjUuMDY5LS4zNjEgMS4wMzctNS40NTQuMTE3LS42MTUuNjEuMTQzWiIvPgo8cGF0aCBmaWxsPSIjMUJBOUY1IiBzdHJva2U9IiNmZmYiIHN0cm9rZS13aWR0aD0iMS4yIiBkPSJtNS4wMSA5LjYzIDUuMjY3IDEuMjU1LjI4My4wNjcuMTIyLjI2NCAxLjIzNSAyLjY1LjE4Ny40LS4zMjguMjk4LTYuNzMzIDYuMS0uMjcyLjI0OC0uMzQ1LS4xMzJDMS45MzkgMTkuODMuNzIgMTcuNDU2Ljc1MiAxNS4xNTNjLjAzMi0yLjMwOCAxLjMyMS00LjY0NCAzLjkzMi01LjUwOGwuMTYyLS4wNTQuMTY1LjAzOVoiLz4KPHBhdGggZmlsbD0iI0YwNEU5OCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMiIgZD0iTTYuMjgxIDQuMzJjMS40MTYtMS4wOCAzLjQ4LTEuMzg3IDUuMjIyLS4wNjlsLjI5Ny4yMjYtLjA3LjM2Ni0xLjA1MyA1LjQ3NC0uMTE4LjYxNS0uNjA5LS4xNDQtNC44LTEuMTM3LS4zMTYtLjA3NS0uMTEtLjMwNmMtLjcwOS0xLjk2Ny4xNDktMy44NzYgMS41NTctNC45NVoiLz4KPHBhdGggZmlsbD0iIzAyQkNCNyIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMiIgZD0ibTEyLjQ2NiAxNC40MzMgNy4wMyAzLjIxMS4xODguMDg2LjA5NS4xODMgMS41NTUgMi45ODUuMDk2LjE4NC0uMDQuMjA2LTEuMTY1IDYuMTAxLS4wMjQuMTIyLS4wNjguMTAzYy0yLjY4IDMuOTU4LTYuOTAyIDQuNzEtMTAuMjY4IDMuMjYtMy4zNTYtMS40NDctNS44MzQtNS4wNy01LjEyNi05LjczNmwuMDMzLS4yMS4xNTgtLjE0NCA2Ljg4NC02LjI1LjI5My0uMjY1LjM2LjE2NFoiLz4KPHBhdGggZmlsbD0iI0ZFQzUxNCIgc3Ryb2tlPSIjZmZmIiBzdHJva2Utd2lkdGg9IjEuMiIgZD0iTTExLjg5MiA0LjQxQzE0LjQzOC42NzYgMTguNzQxLjEwNSAyMi4xMzQgMS41NGMzLjM5MiAxLjQzMyA1Ljk5IDQuOTIgNS4xMDIgOS4zNjJsLS4wMzkuMi0uMTUzLjEzMy03LjA2NiA2LjIxMy0uMjkzLjI1OC0uMzUzLS4xNjMtNy4wMDItMy4yMS0uMjAxLS4wOTMtLjA5NC0uMi0xLjM4LTIuOTg4LS4wODEtLjE3Ny4wMzctLjE5TDExLjggNC42MzNsLjAyMy0uMTIxLjA3LS4xMDJaIi8+Cjwvc3ZnPgo=) + * + * @param {Object} props - Supabase icons props and any valid SVG attribute + * @returns {JSX.Element} JSX Element + * + */ +const Elastic = createSupabaseIcon( + 'Elastic', + [ + [ + 'path', + { + fill: '#0B64DD', + stroke: '#fff', + 'stroke-width': '1.2', + d: 'M27.565 11.242c5.1 1.94 4.872 9.396-.245 11.127l-.162.055-.167-.039-5.28-1.238-.268-.063-.127-.244-1.4-2.69-.217-.417.352-.31 6.904-6.07.272-.24.338.13Z', + key: 'el1', + }, + ], + [ + 'path', + { + fill: '#9ADC30', + stroke: '#fff', + 'stroke-width': '1.2', + d: 'm22.047 21.239 4.8 1.125.316.074.11.304.066.19c.623 1.964-.26 3.78-1.652 4.797-1.434 1.048-3.51 1.32-5.182.022l-.29-.225.069-.361 1.037-5.454.117-.615.61.143Z', + key: 'el2', + }, + ], + [ + 'path', + { + fill: '#1BA9F5', + stroke: '#fff', + 'stroke-width': '1.2', + d: 'm5.01 9.63 5.267 1.255.283.067.122.264 1.235 2.65.187.4-.328.298-6.733 6.1-.272.248-.345-.132C1.939 19.83.72 17.456.752 15.153c.032-2.308 1.321-4.644 3.932-5.508l.162-.054.165.039Z', + key: 'el3', + }, + ], + [ + 'path', + { + fill: '#F04E98', + stroke: '#fff', + 'stroke-width': '1.2', + d: 'M6.281 4.32c1.416-1.08 3.48-1.387 5.222-.069l.297.226-.07.366-1.053 5.474-.118.615-.609-.144-4.8-1.137-.316-.075-.11-.306c-.709-1.967.149-3.876 1.557-4.95Z', + key: 'el4', + }, + ], + [ + 'path', + { + fill: '#02BCB7', + stroke: '#fff', + 'stroke-width': '1.2', + d: 'm12.466 14.433 7.03 3.211.188.086.095.183 1.555 2.985.096.184-.04.206-1.165 6.101-.024.122-.068.103c-2.68 3.958-6.902 4.71-10.268 3.26-3.356-1.447-5.834-5.07-5.126-9.736l.033-.21.158-.144 6.884-6.25.293-.265.36.164Z', + key: 'el5', + }, + ], + [ + 'path', + { + fill: '#FEC514', + stroke: '#fff', + 'stroke-width': '1.2', + d: 'M11.892 4.41C14.438.676 18.741.105 22.134 1.54c3.392 1.433 5.99 4.92 5.102 9.362l-.039.2-.153.133-7.066 6.213-.293.258-.353-.163-7.002-3.21-.201-.093-.094-.2-1.38-2.988-.081-.177.037-.19L11.8 4.633l.023-.121.07-.102Z', + key: 'el6', + }, + ], + ], + { fill: 'none', stroke: 'none', viewBox: '0 0 32 32' }, +); + +export default Elastic; diff --git a/packages/icons/src/icons/index.ts b/packages/icons/src/icons/index.ts index 97174acb47c5a..4348e1c6508ba 100644 --- a/packages/icons/src/icons/index.ts +++ b/packages/icons/src/icons/index.ts @@ -13,6 +13,7 @@ export { default as ClickHouse } from './click-house'; export { default as Database } from './database'; export { default as Datadog } from './datadog'; export { default as EdgeFunctions } from './edge-functions'; +export { default as Elastic } from './elastic'; export { default as FilesBucket } from './files-bucket'; export { default as Grafana } from './grafana'; export { default as Graphql } from './graphql'; diff --git a/packages/icons/src/raw-icons/elastic.svg b/packages/icons/src/raw-icons/elastic.svg new file mode 100644 index 0000000000000..d104b19fb9310 --- /dev/null +++ b/packages/icons/src/raw-icons/elastic.svg @@ -0,0 +1,8 @@ + + + + + + + + From b17a33fb269619e193e696c48372e51fc7a11d53 Mon Sep 17 00:00:00 2001 From: Stephen Morgan Date: Tue, 4 Aug 2026 07:23:35 +1200 Subject: [PATCH 6/7] fix: cleanup privatelink documentation (#48466) Some light copy cleanup for privatelink documentation based on feedback. Fixes PRODSEC-232 ## Summary by CodeRabbit * **Documentation** * Updated PrivateLink guidance with revised architecture, supported ports, routing, and security group instructions. * Added labeled connectivity tests for direct PostgreSQL and PgBouncer connections. * Added connection-string examples for both connection methods. * Replaced public-connectivity instructions with optional network restriction steps and reorganized limitations guidance. * Refined PrivateLink availability wording across platform security documentation. --- .../content/guides/platform/privatelink.mdx | 41 ++++++++++++------- .../guides/security/platform-security.mdx | 2 +- 2 files changed, 27 insertions(+), 16 deletions(-) diff --git a/apps/docs/content/guides/platform/privatelink.mdx b/apps/docs/content/guides/platform/privatelink.mdx index 2ccb08fc65f4e..a934dc535bd23 100644 --- a/apps/docs/content/guides/platform/privatelink.mdx +++ b/apps/docs/content/guides/platform/privatelink.mdx @@ -6,7 +6,7 @@ description: 'Secure private network connectivity to your Supabase database usin -PrivateLink is currently in beta and available only to Team and Enterprise customers. +PrivateLink is available only to Team and Enterprise customers. Contact support if you would like to create a PrivateLink connection for a read-only replica. @@ -20,13 +20,12 @@ By enabling PrivateLink, database connections never traverse the public internet Supabase PrivateLink is an organisation level configuration. It works by sharing a [VPC Lattice Resource Configuration](https://docs.aws.amazon.com/vpc-lattice/latest/ug/resource-configuration.html) to any number of AWS Accounts for each of your Supabase projects. Connectivity can be achieved by either associating the Resource Configuration to a PrivateLink endpoint, or a [VPC Lattice Service Network](https://docs.aws.amazon.com/vpc-lattice/latest/ug/service-networks.html). This means: - Database traffic flows through private AWS infrastructure only -- Connection latency is typically reduced compared to public internet routing - Network isolation provides enhanced security posture - Attack surface is minimized by eliminating public exposure The connection architecture changes from public internet routing to a dedicated private path through AWS's secure network backbone. -Supabase PrivateLink currently supports direct database and PgBouncer connections only. It does not support other Supabase services like API, Storage, Auth, or Realtime. These services will continue to operate over public internet connections. +Supabase PrivateLink supports direct database connections on port `5432` and PgBouncer connections on port `6543`. It does not support other Supabase services like API, Storage, Auth, or Realtime. These services will continue to operate over public internet connections. ## Requirements @@ -76,9 +75,11 @@ Ensure your security groups allow traffic on the appropriate ports: 1. Navigate to the [VPC console > Security Groups](https://console.aws.amazon.com/vpcconsole/home#SecurityGroups:) 2. Create a new security group for the endpoint or service network by clicking [Create security group](https://console.aws.amazon.com/vpcconsole/home#CreateSecurityGroup:) 3. Give your security group a descriptive name and select the appropriate VPC -4. Add an inbound rule for: - - Type: Postgres (TCP, port 5432) - - Destination that is appropriate for your network. i.e. the subnet of your VPC or security group of your application instances +4. Add inbound rule(s) for the connection mode you use: + - Direct connection: Postgres (TCP, port `5432`) + - PgBouncer connection: Custom TCP (port `6543`) + - If you use both direct and PgBouncer connections, add both rules + - Set the destination appropriate for your network (for example, your VPC subnet or your application instances' security group) 5. Finish creating the security group by clicking **Create security group** ### Step 4: Create connection @@ -127,7 +128,11 @@ Verify the private connection is working correctly from your VPC: 3. Test the connection using the private endpoint: ```bash +# Direct connection (Postgres) psql "postgresql://[username]:[password]@[private-endpoint]:5432/postgres" + +# PgBouncer connection +psql "postgresql://[username]:[password]@[private-endpoint]:6543/postgres" ``` You should see a successful connection without any public internet traffic. @@ -141,27 +146,33 @@ Configure your applications to use the private connection details: 3. Update any database connection pooling configurations 4. Test application connectivity thoroughly -Example connection string update: +Example connection string updates: ``` +# Direct connection (Postgres) # Before (public) postgresql://user:pass@db.[project-ref].supabase.co:5432/postgres # After (private) postgresql://user:pass@your-private-endpoint.vpce.amazonaws.com:5432/postgres -``` -### Step 7: Disable public connectivity (optional) +# PgBouncer connection +# Before (public) +postgresql://user:pass@db.[project-ref].supabase.co:6543/postgres + +# After (private) +postgresql://user:pass@your-private-endpoint.vpce.amazonaws.com:6543/postgres +``` -For maximum security, you can disable public internet access for your database: +### Step 7: Restrict public database access (optional) -1. Contact Supabase support to disable public connectivity -2. Ensure all applications are successfully using the private connection -3. Update any monitoring or backup tools to use the private endpoint +For maximum security, you can restrict public database access in your project settings: -## Beta limitations +1. Go to [**Database** > **Settings**](/dashboard/project/_/database/settings) +2. In **Network Restrictions**, enable **Restrict all access** +3. Ensure all applications, monitoring, and backup tools are using the private endpoint before enabling this setting -During the beta phase: +## Limitations - **Read Replicas**: To establish PrivateLink with a Read Replica, reach out to your account rep. - **Feature Evolution**: The setup process and capabilities may evolve as we refine the offering diff --git a/apps/docs/content/guides/security/platform-security.mdx b/apps/docs/content/guides/security/platform-security.mdx index 43003089c3b1d..e6ed64b34c023 100644 --- a/apps/docs/content/guides/security/platform-security.mdx +++ b/apps/docs/content/guides/security/platform-security.mdx @@ -61,6 +61,6 @@ For configuration information, see [PrivateLink](/docs/guides/platform/privateli -PrivateLink is currently in beta. To establish PrivateLink with a Read Replica, reach out to your account rep. +To establish PrivateLink with a Read Replica, reach out to your account rep. From 1123a74813cee1847bbcd404cf647e1122365c45 Mon Sep 17 00:00:00 2001 From: Nik Richers Date: Mon, 3 Aug 2026 14:03:06 -0700 Subject: [PATCH 7/7] spike(docs): chunk Management API reference into one page per endpoint (#48547) 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? This is an experimental spike that splits the Management API reference into one statically-generated page per endpoint, instead of the single monolithic page that currently renders all ~172 operations at `/reference/api`. Relates to DOCS-1268. ## What is the current behavior? - Linear item: Spike: chunk Management API reference into one page per endpoint - `/reference/api/introduction` (and every other API deep link) renders one ~35MB page containing all 172 endpoints, per `known-issues.md`'s "Reference page length" note — a known UX/LLM issue with no per-endpoint pages today - All API reference "navigation" is actually `preventDefault` + `pushState` + `scrollIntoView` within that one page (see `Reference.navigation.client.tsx`) ## What is the new behavior? - New `generateStaticParamsForApi()` in `Reference.utils.ts` emits one static param per API operation slug (~172 pages), independent of the SDK static-params generator - Fixed the permanent `/docs/reference/api` -> `/docs/reference/api/start` redirect in `apps/www/lib/redirects.js` (`start` was never a real content slug — it only worked because the old routing collapsed every sub-path to the monolith); now points straight at `introduction`, and `/start` itself still redirects there so old links/bookmarks don't 404 - `middleware.ts` only normalizes the bare `/reference/api` request now; `/reference/api/` falls through to the real per-operation page (or 404s if the slug is unknown) - `Reference.apiPage.tsx` branches on the resolved slug: no slug now redirects to `/reference/api/introduction` (the monolith-rendering branch is removed entirely — `ClientLibIntroduction`/`RefSections` are no longer used in this file), a slug renders just that one section via the existing `SectionSwitch`/`ApiEndpointSection`/`MarkdownSection` — no duplicated rendering logic - `Reference.navigation.tsx` / `Reference.navigation.client.tsx` gained an opt-in `realNavigation` prop; only the API reference's two `` call sites set it, so SDK/CLI/self-hosting sidebar behavior is byte-for-byte unchanged - Per-operation page metadata (title/description/canonical URL) ### Explicitly out of scope for this spike - `internals/generate-reference-markdown.ts` (the LLM `api.md` export) — still a single file, not split per endpoint - Any change to SDK, CLI, or self-hosting reference rendering or navigation - A hypothetical 2+-segment API path (`/reference/api/foo/bar`) previously collapsed silently to the monolith; it now 404s. Not reachable by any existing internal link today. ## Additional context - Worktree: `~/GitHub/supabase/supabase-worktrees/nrichers/nikrichers/docs-1268-spike-chunk-management-api-reference-into-one-page-per` - Verification: | Check | Result | | --- | --- | | `pnpm typecheck` (apps/docs) | ✅ pass | | `GET /reference/api` (bare) | ✅ 307, redirects to `/reference/api/introduction` (monolith removed) | | `GET /reference/api/introduction` | ✅ 200, new chunked page | | `GET /reference/api/v1-get-performance-advisors` | ✅ 200, new chunked page — confirmed via content size (~1.5MB vs ~35.5MB monolith) and heading-count diffing that only one operation renders | | `GET /reference/api/not-a-real-slug` | ✅ 404, confirms new static params + `dynamicParams=false` work as designed | | `GET /reference/cli`, `GET /reference/self-hosting-storage` | ✅ 200, unaffected — same shared nav components, no `realNavigation` passed | | `GET /reference/javascript`, `GET /reference/python` | ⚠️ 404 locally — not a regression; these need `codegen:references:new` output + `dev:secrets:pull` (internal env vars) that weren't run in this sandbox, unrelated to any file this PR touches | ### Before & After **Example (left: prod; right: PR)** image Preview is deployed: https://vercel.com/supabase/docs/43RzVCY6MkAbUuaDxdf9dPz7qsBu | Before (production) | After (PR preview) | | --- | --- | | - [Bare `/reference/api` (redirects to Introduction)](https://supabase.com/docs/reference/api)
- [Introduction](https://supabase.com/docs/reference/api/introduction)
- [Get performance advisors](https://supabase.com/docs/reference/api/v1-get-performance-advisors)
- [Get security advisors](https://supabase.com/docs/reference/api/v1-get-security-advisors)
- [Create log drain](https://supabase.com/docs/reference/api/v2-create-log-drain)
- [Delete log drain](https://supabase.com/docs/reference/api/v2-delete-log-drain)
- [Get project function combined stats](https://supabase.com/docs/reference/api/v1-get-project-function-combined-stats)
- [Get project logs](https://supabase.com/docs/reference/api/v1-get-project-logs)
- [Get project logs all](https://supabase.com/docs/reference/api/v1-get-project-logs-all)
- [Get project usage api count](https://supabase.com/docs/reference/api/v1-get-project-usage-api-count)
- [Get project usage request count](https://supabase.com/docs/reference/api/v1-get-project-usage-request-count)
- [List log drains](https://supabase.com/docs/reference/api/v2-list-log-drains)
- [Update log drain](https://supabase.com/docs/reference/api/v2-update-log-drain)
- [Create a sso provider](https://supabase.com/docs/reference/api/v1-create-a-sso-provider)
- [Create legacy signing key](https://supabase.com/docs/reference/api/v1-create-legacy-signing-key)
- [Create project signing key](https://supabase.com/docs/reference/api/v1-create-project-signing-key)
- [Create project tpa integration](https://supabase.com/docs/reference/api/v1-create-project-tpa-integration)
- [Delete a sso provider](https://supabase.com/docs/reference/api/v1-delete-a-sso-provider)
- [Delete project tpa integration](https://supabase.com/docs/reference/api/v1-delete-project-tpa-integration)
- [Get a sso provider](https://supabase.com/docs/reference/api/v1-get-a-sso-provider)
- [Get auth service config](https://supabase.com/docs/reference/api/v1-get-auth-service-config)
- [Get legacy signing key](https://supabase.com/docs/reference/api/v1-get-legacy-signing-key)
- [Get project signing key](https://supabase.com/docs/reference/api/v1-get-project-signing-key)
- [Get project signing keys](https://supabase.com/docs/reference/api/v1-get-project-signing-keys)
- [Get project tpa integration](https://supabase.com/docs/reference/api/v1-get-project-tpa-integration)
- [List all sso provider](https://supabase.com/docs/reference/api/v1-list-all-sso-provider)
- [List project tpa integrations](https://supabase.com/docs/reference/api/v1-list-project-tpa-integrations)
- [Remove project signing key](https://supabase.com/docs/reference/api/v1-remove-project-signing-key)
- [Update a sso provider](https://supabase.com/docs/reference/api/v1-update-a-sso-provider)
- [Update auth service config](https://supabase.com/docs/reference/api/v1-update-auth-service-config)
- [Update project signing key](https://supabase.com/docs/reference/api/v1-update-project-signing-key)
- [Apply project addon](https://supabase.com/docs/reference/api/v1-apply-project-addon)
- [List project addons](https://supabase.com/docs/reference/api/v1-list-project-addons)
- [Remove project addon](https://supabase.com/docs/reference/api/v1-remove-project-addon)
- [Accept invite external jit access](https://supabase.com/docs/reference/api/v1-accept-invite-external-jit-access)
- [Apply a migration](https://supabase.com/docs/reference/api/v1-apply-a-migration)
- [Authorize jit access](https://supabase.com/docs/reference/api/v1-authorize-jit-access)
- [Create login role](https://supabase.com/docs/reference/api/v1-create-login-role)
- [Delete invite external jit access](https://supabase.com/docs/reference/api/v1-delete-invite-external-jit-access)
- [Delete jit access](https://supabase.com/docs/reference/api/v1-delete-jit-access)
- [Delete login roles](https://supabase.com/docs/reference/api/v1-delete-login-roles)
- [Disable readonly mode temporarily](https://supabase.com/docs/reference/api/v1-disable-readonly-mode-temporarily)
- [Enable database webhook](https://supabase.com/docs/reference/api/v1-enable-database-webhook)
- [Generate typescript types](https://supabase.com/docs/reference/api/v1-generate-typescript-types)
- [Get a migration](https://supabase.com/docs/reference/api/v1-get-a-migration)
- [Get a snippet](https://supabase.com/docs/reference/api/v1-get-a-snippet)
- [Get backup schedule](https://supabase.com/docs/reference/api/v1-get-backup-schedule)
- [Get database metadata](https://supabase.com/docs/reference/api/v1-get-database-metadata)
- [Get database openapi](https://supabase.com/docs/reference/api/v1-get-database-openapi)
- [Get jit access](https://supabase.com/docs/reference/api/v1-get-jit-access)
- [Get jit access config](https://supabase.com/docs/reference/api/v1-get-jit-access-config)
- [Get pooler config](https://supabase.com/docs/reference/api/v1-get-pooler-config)
- [Get postgres config](https://supabase.com/docs/reference/api/v1-get-postgres-config)
- [Get project pgbouncer config](https://supabase.com/docs/reference/api/v1-get-project-pgbouncer-config)
- [Get readonly mode status](https://supabase.com/docs/reference/api/v1-get-readonly-mode-status)
- [Get ssl enforcement config](https://supabase.com/docs/reference/api/v1-get-ssl-enforcement-config)
- [Invite external jit access](https://supabase.com/docs/reference/api/v1-invite-external-jit-access)
- [List all backups](https://supabase.com/docs/reference/api/v1-list-all-backups)
- [List all snippets](https://supabase.com/docs/reference/api/v1-list-all-snippets)
- [List jit access](https://supabase.com/docs/reference/api/v1-list-jit-access)
- [List migration history](https://supabase.com/docs/reference/api/v1-list-migration-history)
- [Patch a migration](https://supabase.com/docs/reference/api/v1-patch-a-migration)
- [Read only query](https://supabase.com/docs/reference/api/v1-read-only-query)
- [Remove a read replica](https://supabase.com/docs/reference/api/v1-remove-a-read-replica)
- [Restore pitr backup](https://supabase.com/docs/reference/api/v1-restore-pitr-backup)
- [Rollback migrations](https://supabase.com/docs/reference/api/v1-rollback-migrations)
- [Run a query](https://supabase.com/docs/reference/api/v1-run-a-query)
- [Setup a read replica](https://supabase.com/docs/reference/api/v1-setup-a-read-replica)
- [Update backup schedule](https://supabase.com/docs/reference/api/v1-update-backup-schedule)
- [Update database password](https://supabase.com/docs/reference/api/v1-update-database-password)
- [Update jit access](https://supabase.com/docs/reference/api/v1-update-jit-access)
- [Update jit access config](https://supabase.com/docs/reference/api/v1-update-jit-access-config)
- [Update pooler config](https://supabase.com/docs/reference/api/v1-update-pooler-config)
- [Update postgres config](https://supabase.com/docs/reference/api/v1-update-postgres-config)
- [Update ssl enforcement config](https://supabase.com/docs/reference/api/v1-update-ssl-enforcement-config)
- [Upsert a migration](https://supabase.com/docs/reference/api/v1-upsert-a-migration)
- [Activate custom hostname](https://supabase.com/docs/reference/api/v1-activate-custom-hostname)
- [Activate vanity subdomain config](https://supabase.com/docs/reference/api/v1-activate-vanity-subdomain-config)
- [Check vanity subdomain availability](https://supabase.com/docs/reference/api/v1-check-vanity-subdomain-availability)
- [Deactivate vanity subdomain config](https://supabase.com/docs/reference/api/v1-deactivate-vanity-subdomain-config)
- [Get hostname config](https://supabase.com/docs/reference/api/v1-get-hostname-config)
- [Get vanity subdomain config](https://supabase.com/docs/reference/api/v1-get-vanity-subdomain-config)
- [Update hostname config](https://supabase.com/docs/reference/api/v1-update-hostname-config)
- [Verify dns config](https://supabase.com/docs/reference/api/v1-verify-dns-config)
- [Bulk update functions](https://supabase.com/docs/reference/api/v1-bulk-update-functions)
- [Create a function](https://supabase.com/docs/reference/api/v1-create-a-function)
- [Delete a function](https://supabase.com/docs/reference/api/v1-delete-a-function)
- [Deploy a function](https://supabase.com/docs/reference/api/v1-deploy-a-function)
- [Get a function](https://supabase.com/docs/reference/api/v1-get-a-function)
- [Get a function body](https://supabase.com/docs/reference/api/v1-get-a-function-body)
- [List all functions](https://supabase.com/docs/reference/api/v1-list-all-functions)
- [Update a function](https://supabase.com/docs/reference/api/v1-update-a-function)
- [Count action runs](https://supabase.com/docs/reference/api/v1-count-action-runs)
- [Create a branch](https://supabase.com/docs/reference/api/v1-create-a-branch)
- [Delete a branch](https://supabase.com/docs/reference/api/v1-delete-a-branch)
- [Diff a branch](https://supabase.com/docs/reference/api/v1-diff-a-branch)
- [Disable preview branching](https://supabase.com/docs/reference/api/v1-disable-preview-branching)
- [Get a branch](https://supabase.com/docs/reference/api/v1-get-a-branch)
- [Get a branch config](https://supabase.com/docs/reference/api/v1-get-a-branch-config)
- [Get action run](https://supabase.com/docs/reference/api/v1-get-action-run)
- [Get action run logs](https://supabase.com/docs/reference/api/v1-get-action-run-logs)
- [List action runs](https://supabase.com/docs/reference/api/v1-list-action-runs)
- [List all branches](https://supabase.com/docs/reference/api/v1-list-all-branches)
- [Merge a branch](https://supabase.com/docs/reference/api/v1-merge-a-branch)
- [Push a branch](https://supabase.com/docs/reference/api/v1-push-a-branch)
- [Reset a branch](https://supabase.com/docs/reference/api/v1-reset-a-branch)
- [Restore a branch](https://supabase.com/docs/reference/api/v1-restore-a-branch)
- [Update a branch config](https://supabase.com/docs/reference/api/v1-update-a-branch-config)
- [Update action run status](https://supabase.com/docs/reference/api/v1-update-action-run-status)
- [Authorize user](https://supabase.com/docs/reference/api/v1-authorize-user)
- [Exchange oauth token](https://supabase.com/docs/reference/api/v1-exchange-oauth-token)
- [Oauth authorize project claim](https://supabase.com/docs/reference/api/v1-oauth-authorize-project-claim)
- [Revoke token](https://supabase.com/docs/reference/api/v1-revoke-token)
- [Assign organization member role](https://supabase.com/docs/reference/api/v2-assign-organization-member-role)
- [Create an organization](https://supabase.com/docs/reference/api/v1-create-an-organization)
- [Get an organization](https://supabase.com/docs/reference/api/v1-get-an-organization)
- [Get organization entitlements](https://supabase.com/docs/reference/api/v1-get-organization-entitlements)
- [List all organizations](https://supabase.com/docs/reference/api/v1-list-all-organizations)
- [List organization members](https://supabase.com/docs/reference/api/v1-list-organization-members)
- [List organization members](https://supabase.com/docs/reference/api/v2-list-organization-members)
- [List organization roles](https://supabase.com/docs/reference/api/v2-list-organization-roles)
- [Create organization invitations](https://supabase.com/docs/reference/api/v2-create-organization-invitations)
- [Get profile](https://supabase.com/docs/reference/api/v1-get-profile)
- [Cancel a project restoration](https://supabase.com/docs/reference/api/v1-cancel-a-project-restoration)
- [Create a project](https://supabase.com/docs/reference/api/v1-create-a-project)
- [Create private link association](https://supabase.com/docs/reference/api/v2-create-private-link-association)
- [Delete a project](https://supabase.com/docs/reference/api/v1-delete-a-project)
- [Delete network bans](https://supabase.com/docs/reference/api/v1-delete-network-bans)
- [Delete private link association](https://supabase.com/docs/reference/api/v2-delete-private-link-association)
- [Get all projects for organization](https://supabase.com/docs/reference/api/v1-get-all-projects-for-organization)
- [Get available regions](https://supabase.com/docs/reference/api/v1-get-available-regions)
- [Get database disk](https://supabase.com/docs/reference/api/v1-get-database-disk)
- [Get disk utilization](https://supabase.com/docs/reference/api/v1-get-disk-utilization)
- [Get network restrictions](https://supabase.com/docs/reference/api/v1-get-network-restrictions)
- [Get postgres upgrade eligibility](https://supabase.com/docs/reference/api/v1-get-postgres-upgrade-eligibility)
- [Get postgres upgrade status](https://supabase.com/docs/reference/api/v1-get-postgres-upgrade-status)
- [Get project](https://supabase.com/docs/reference/api/v1-get-project)
- [Get project disk autoscale config](https://supabase.com/docs/reference/api/v1-get-project-disk-autoscale-config)
- [Get services health](https://supabase.com/docs/reference/api/v1-get-services-health)
- [List all network bans](https://supabase.com/docs/reference/api/v1-list-all-network-bans)
- [List all network bans enriched](https://supabase.com/docs/reference/api/v1-list-all-network-bans-enriched)
- [List all projects](https://supabase.com/docs/reference/api/v1-list-all-projects)
- [List available restore versions](https://supabase.com/docs/reference/api/v1-list-available-restore-versions)
- [List private link associations](https://supabase.com/docs/reference/api/v2-list-private-link-associations)
- [Modify database disk](https://supabase.com/docs/reference/api/v1-modify-database-disk)
- [Patch network restrictions](https://supabase.com/docs/reference/api/v1-patch-network-restrictions)
- [Pause a project](https://supabase.com/docs/reference/api/v1-pause-a-project)
- [Preview a project transfer](https://supabase.com/docs/reference/api/v2-preview-a-project-transfer)
- [Restart a project](https://supabase.com/docs/reference/api/v1-restart-a-project)
- [Restore a project](https://supabase.com/docs/reference/api/v1-restore-a-project)
- [Transfer a project](https://supabase.com/docs/reference/api/v2-transfer-a-project)
- [Update a project](https://supabase.com/docs/reference/api/v1-update-a-project)
- [Update network restrictions](https://supabase.com/docs/reference/api/v1-update-network-restrictions)
- [Upgrade postgres version](https://supabase.com/docs/reference/api/v1-upgrade-postgres-version)
- [Get realtime config](https://supabase.com/docs/reference/api/v1-get-realtime-config)
- [Shutdown realtime](https://supabase.com/docs/reference/api/v1-shutdown-realtime)
- [Update realtime config](https://supabase.com/docs/reference/api/v1-update-realtime-config)
- [Get postgrest service config](https://supabase.com/docs/reference/api/v1-get-postgrest-service-config)
- [Update postgrest service config](https://supabase.com/docs/reference/api/v1-update-postgrest-service-config)
- [Bulk create secrets](https://supabase.com/docs/reference/api/v1-bulk-create-secrets)
- [Bulk delete secrets](https://supabase.com/docs/reference/api/v1-bulk-delete-secrets)
- [Create project api key](https://supabase.com/docs/reference/api/v1-create-project-api-key)
- [Delete project api key](https://supabase.com/docs/reference/api/v1-delete-project-api-key)
- [Get pgsodium config](https://supabase.com/docs/reference/api/v1-get-pgsodium-config)
- [Get project api key](https://supabase.com/docs/reference/api/v1-get-project-api-key)
- [Get project api keys](https://supabase.com/docs/reference/api/v1-get-project-api-keys)
- [Get project legacy api keys](https://supabase.com/docs/reference/api/v1-get-project-legacy-api-keys)
- [List all secrets](https://supabase.com/docs/reference/api/v1-list-all-secrets)
- [Update pgsodium config](https://supabase.com/docs/reference/api/v1-update-pgsodium-config)
- [Update project api key](https://supabase.com/docs/reference/api/v1-update-project-api-key)
- [Update project legacy api keys](https://supabase.com/docs/reference/api/v1-update-project-legacy-api-keys)
- [Get storage config](https://supabase.com/docs/reference/api/v1-get-storage-config)
- [List all buckets](https://supabase.com/docs/reference/api/v1-list-all-buckets)
- [Update storage config](https://supabase.com/docs/reference/api/v1-update-storage-config) | - [Bare `/reference/api` (redirects to Introduction)](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api)
- [Introduction](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/introduction)
- [Get performance advisors](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-performance-advisors)
- [Get security advisors](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-security-advisors)
- [Create log drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-log-drain)
- [Delete log drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-delete-log-drain)
- [Get project function combined stats](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-function-combined-stats)
- [Get project logs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-logs)
- [Get project logs all](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-logs-all)
- [Get project usage api count](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-usage-api-count)
- [Get project usage request count](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-usage-request-count)
- [List log drains](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-log-drains)
- [Update log drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-update-log-drain)
- [Create a sso provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-sso-provider)
- [Create legacy signing key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-legacy-signing-key)
- [Create project signing key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-signing-key)
- [Create project tpa integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-tpa-integration)
- [Delete a sso provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-sso-provider)
- [Delete project tpa integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-project-tpa-integration)
- [Get a sso provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-sso-provider)
- [Get auth service config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-auth-service-config)
- [Get legacy signing key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-legacy-signing-key)
- [Get project signing key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-signing-key)
- [Get project signing keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-signing-keys)
- [Get project tpa integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-tpa-integration)
- [List all sso provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-sso-provider)
- [List project tpa integrations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-project-tpa-integrations)
- [Remove project signing key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-project-signing-key)
- [Update a sso provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-sso-provider)
- [Update auth service config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-auth-service-config)
- [Update project signing key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-signing-key)
- [Apply project addon](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-apply-project-addon)
- [List project addons](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-project-addons)
- [Remove project addon](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-project-addon)
- [Accept invite external jit access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-accept-invite-external-jit-access)
- [Apply a migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-apply-a-migration)
- [Authorize jit access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-authorize-jit-access)
- [Create login role](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-login-role)
- [Delete invite external jit access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-invite-external-jit-access)
- [Delete jit access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-jit-access)
- [Delete login roles](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-login-roles)
- [Disable readonly mode temporarily](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-disable-readonly-mode-temporarily)
- [Enable database webhook](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-enable-database-webhook)
- [Generate typescript types](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-generate-typescript-types)
- [Get a migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-migration)
- [Get a snippet](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-snippet)
- [Get backup schedule](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-backup-schedule)
- [Get database metadata](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-metadata)
- [Get database openapi](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-openapi)
- [Get jit access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-jit-access)
- [Get jit access config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-jit-access-config)
- [Get pooler config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-pooler-config)
- [Get postgres config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-config)
- [Get project pgbouncer config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-pgbouncer-config)
- [Get readonly mode status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-readonly-mode-status)
- [Get ssl enforcement config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-ssl-enforcement-config)
- [Invite external jit access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-invite-external-jit-access)
- [List all backups](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-backups)
- [List all snippets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-snippets)
- [List jit access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-jit-access)
- [List migration history](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-migration-history)
- [Patch a migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-patch-a-migration)
- [Read only query](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-read-only-query)
- [Remove a read replica](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-a-read-replica)
- [Restore pitr backup](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-pitr-backup)
- [Rollback migrations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-rollback-migrations)
- [Run a query](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-run-a-query)
- [Setup a read replica](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-setup-a-read-replica)
- [Update backup schedule](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-backup-schedule)
- [Update database password](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-database-password)
- [Update jit access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-jit-access)
- [Update jit access config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-jit-access-config)
- [Update pooler config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-pooler-config)
- [Update postgres config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-postgres-config)
- [Update ssl enforcement config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-ssl-enforcement-config)
- [Upsert a migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-upsert-a-migration)
- [Activate custom hostname](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-activate-custom-hostname)
- [Activate vanity subdomain config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-activate-vanity-subdomain-config)
- [Check vanity subdomain availability](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-check-vanity-subdomain-availability)
- [Deactivate vanity subdomain config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-deactivate-vanity-subdomain-config)
- [Get hostname config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-hostname-config)
- [Get vanity subdomain config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-vanity-subdomain-config)
- [Update hostname config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-hostname-config)
- [Verify dns config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-verify-dns-config)
- [Bulk update functions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-update-functions)
- [Create a function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-function)
- [Delete a function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-function)
- [Deploy a function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-deploy-a-function)
- [Get a function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-function)
- [Get a function body](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-function-body)
- [List all functions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-functions)
- [Update a function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-function)
- [Count action runs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-count-action-runs)
- [Create a branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-branch)
- [Delete a branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-branch)
- [Diff a branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-diff-a-branch)
- [Disable preview branching](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-disable-preview-branching)
- [Get a branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-branch)
- [Get a branch config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-branch-config)
- [Get action run](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-action-run)
- [Get action run logs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-action-run-logs)
- [List action runs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-action-runs)
- [List all branches](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-branches)
- [Merge a branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-merge-a-branch)
- [Push a branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-push-a-branch)
- [Reset a branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-reset-a-branch)
- [Restore a branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-a-branch)
- [Update a branch config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-branch-config)
- [Update action run status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-action-run-status)
- [Authorize user](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-authorize-user)
- [Exchange oauth token](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-exchange-oauth-token)
- [Oauth authorize project claim](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-oauth-authorize-project-claim)
- [Revoke token](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-revoke-token)
- [Assign organization member role](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-assign-organization-member-role)
- [Create an organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-an-organization)
- [Get an organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-an-organization)
- [Get organization entitlements](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-organization-entitlements)
- [List all organizations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-organizations)
- [List organization members](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-organization-members)
- [List organization members](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-organization-members)
- [List organization roles](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-organization-roles)
- [Create organization invitations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-organization-invitations)
- [Get profile](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-profile)
- [Cancel a project restoration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-cancel-a-project-restoration)
- [Create a project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-project)
- [Create private link association](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-private-link-association)
- [Delete a project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-project)
- [Delete network bans](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-network-bans)
- [Delete private link association](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-delete-private-link-association)
- [Get all projects for organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-all-projects-for-organization)
- [Get available regions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-available-regions)
- [Get database disk](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-disk)
- [Get disk utilization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-disk-utilization)
- [Get network restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-network-restrictions)
- [Get postgres upgrade eligibility](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-upgrade-eligibility)
- [Get postgres upgrade status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-upgrade-status)
- [Get project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project)
- [Get project disk autoscale config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-disk-autoscale-config)
- [Get services health](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-services-health)
- [List all network bans](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-network-bans)
- [List all network bans enriched](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-network-bans-enriched)
- [List all projects](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-projects)
- [List available restore versions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-available-restore-versions)
- [List private link associations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-private-link-associations)
- [Modify database disk](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-modify-database-disk)
- [Patch network restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-patch-network-restrictions)
- [Pause a project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-pause-a-project)
- [Preview a project transfer](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-preview-a-project-transfer)
- [Restart a project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restart-a-project)
- [Restore a project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-a-project)
- [Transfer a project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-transfer-a-project)
- [Update a project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-project)
- [Update network restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-network-restrictions)
- [Upgrade postgres version](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-upgrade-postgres-version)
- [Get realtime config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-realtime-config)
- [Shutdown realtime](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-shutdown-realtime)
- [Update realtime config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-realtime-config)
- [Get postgrest service config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgrest-service-config)
- [Update postgrest service config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-postgrest-service-config)
- [Bulk create secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-create-secrets)
- [Bulk delete secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-delete-secrets)
- [Create project api key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-api-key)
- [Delete project api key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-project-api-key)
- [Get pgsodium config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-pgsodium-config)
- [Get project api key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-api-key)
- [Get project api keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-api-keys)
- [Get project legacy api keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-legacy-api-keys)
- [List all secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-secrets)
- [Update pgsodium config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-pgsodium-config)
- [Update project api key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-api-key)
- [Update project legacy api keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-legacy-api-keys)
- [Get storage config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-storage-config)
- [List all buckets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-buckets)
- [Update storage config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-storage-config) | 174 links per column: the bare `/reference/api` route plus all 173 API reference sections (Introduction + 172 operations). The bare-route link now redirects to Introduction on *both* sides (production already did via the `apps/www` fix earlier in this PR; the preview now matches, since the monolith-rendering branch is removed). For the other 173 links, production still resolves every one to today's same ~35MB monolith (all 172 endpoints on one page, regardless of which slug you clicked), while the preview serves each as its own individual per-endpoint page — click through any pair to compare page weight/content directly. ### Test plan - [ ] Open the PR preview and confirm `/reference/api/introduction` and a handful of `/reference/api/` URLs render as individual pages (not the full monolith) - [ ] Confirm the API reference sidebar navigates between real pages (URL changes, page reloads) without console errors - [ ] Confirm `/reference/javascript/...`, `/reference/cli`, and `/reference/self-hosting-*` render exactly as they do on production (no regression) - [ ] Confirm `/reference/api` (bare) now redirects to `/reference/api/introduction` instead of rendering all 172 operations ## Summary by CodeRabbit * **New Features** * Added individual pages for Management API operations with operation-specific titles, descriptions, metadata, and share previews. * API reference navigation now supports full page navigation between sections and operations. * **Bug Fixes** * Updated API reference routing to preserve direct links to operation pages. * Unknown API operations now return a not-found page. * **Documentation** * Updated Management API links and redirects to use the new API introduction page. * Bare API reference URLs now redirect to the introduction. --------- Co-authored-by: Nik Richers --- apps/docs/app/reference/[...slug]/page.tsx | 2 +- .../NavigationMenu.constants.ts | 2 +- apps/docs/features/docs/Reference.apiPage.tsx | 34 ++++++++++---- .../docs/Reference.navigation.client.tsx | 24 +++++++--- .../features/docs/Reference.navigation.tsx | 13 ++++-- apps/docs/features/docs/Reference.utils.ts | 46 ++++++++++++++++++- apps/docs/middleware.ts | 5 +- apps/www/lib/redirects.js | 12 ++++- 8 files changed, 112 insertions(+), 26 deletions(-) diff --git a/apps/docs/app/reference/[...slug]/page.tsx b/apps/docs/app/reference/[...slug]/page.tsx index 0ed5497704c71..560623c640846 100644 --- a/apps/docs/app/reference/[...slug]/page.tsx +++ b/apps/docs/app/reference/[...slug]/page.tsx @@ -46,7 +46,7 @@ export default async function ReferencePage(props: { params: Promise<{ slug: Arr } else if (isCliReference) { return } else if (isApiReference) { - return + return } else if (isSelfHostingReference) { return ( diff --git a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts index b0b872ff4e7dc..08c99b5eed010 100644 --- a/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts +++ b/apps/docs/components/Navigation/NavigationMenu/NavigationMenu.constants.ts @@ -3630,7 +3630,7 @@ export const references = [ label: 'Management API', description: 'something about the reference', icon: '/docs/img/icons/api-icon.svg', - url: '/reference/management-api/start', + url: '/reference/api/introduction', }, ], }, diff --git a/apps/docs/features/docs/Reference.apiPage.tsx b/apps/docs/features/docs/Reference.apiPage.tsx index 3e77558f3e6a0..e8344cb3a8560 100644 --- a/apps/docs/features/docs/Reference.apiPage.tsx +++ b/apps/docs/features/docs/Reference.apiPage.tsx @@ -1,13 +1,32 @@ +import { notFound, redirect } from 'next/navigation' + import { MenuId } from '~/components/Navigation/NavigationMenu/NavigationMenu' import { reference_api } from '~/components/Navigation/NavigationMenu/NavigationMenu.constants' -import { ClientLibIntroduction } from '~/features/docs/Reference.introduction' +import { getSectionsBySlug } from '~/features/docs/Reference.generated.singleton' import { ReferenceNavigation } from '~/features/docs/Reference.navigation' import { ReferenceContentScrollHandler } from '~/features/docs/Reference.navigation.client' -import { RefSections } from '~/features/docs/Reference.sections' +import { SectionSwitch } from '~/features/docs/Reference.sections' import { LayoutMainContent } from '~/layouts/DefaultLayout' import { SidebarSkeleton } from '~/layouts/MainSkeleton' -export async function ApiReferencePage() { +export async function ApiReferencePage({ path }: { path: Array }) { + const operationSlug = path[0] + + if (!operationSlug) { + redirect('/reference/api/introduction') + } + + return +} + +// DOCS-1268: one endpoint per page, reusing the same SectionSwitch (and +// therefore the same ApiEndpointSection/MarkdownSection) that used to render +// every operation on the single monolithic /reference/api page. +async function ApiOperationPage({ operationSlug }: { operationSlug: string }) { + const sectionsBySlug = await getSectionsBySlug('api', 'latest') + const section = sectionsBySlug?.get(operationSlug) + if (!section) notFound() + return ( } >
- - +
diff --git a/apps/docs/features/docs/Reference.navigation.client.tsx b/apps/docs/features/docs/Reference.navigation.client.tsx index 4ddf294fd202b..b676573baaf06 100644 --- a/apps/docs/features/docs/Reference.navigation.client.tsx +++ b/apps/docs/features/docs/Reference.navigation.client.tsx @@ -239,11 +239,16 @@ export function RefLink({ section, skipChildren = false, className, + realNavigation, }: { basePath: string section: AbbrevApiReferenceSection skipChildren?: boolean className?: string + // Spike (DOCS-1268): when true, this link does a real navigation instead of + // the scroll-hijack below — used only by the API reference, whose endpoints + // are now real pages. Undefined everywhere else preserves current behavior. + realNavigation?: boolean }) { const ref = useRef(null) @@ -260,8 +265,11 @@ export function RefLink({ }, [isActive, className]) const onClick = useCallback( - (evt: MouseEvent) => createReferenceSubsectionNavigator(href, section.slug)(evt), - [href, section.slug] + (evt: MouseEvent) => { + if (realNavigation) return + createReferenceSubsectionNavigator(href, section.slug)(evt) + }, + [href, section.slug, realNavigation] ) if (!('title' in section)) return null @@ -272,13 +280,13 @@ export function RefLink({ return ( <> {isCompoundSection ? ( - + ) : ( { return (
  • - +
  • ) })} diff --git a/apps/docs/features/docs/Reference.navigation.tsx b/apps/docs/features/docs/Reference.navigation.tsx index 51e594b2874c2..393624245c307 100644 --- a/apps/docs/features/docs/Reference.navigation.tsx +++ b/apps/docs/features/docs/Reference.navigation.tsx @@ -19,6 +19,10 @@ interface ReferenceNavigationProps { libPath: string version: string isLatestVersion: boolean + // Spike (DOCS-1268): API reference sidebar links navigate to real pages + // instead of scrolling within one giant page. SDK/CLI/self-hosting callers + // never pass this, so their behavior is unchanged. + realNavigation?: boolean } export async function ReferenceNavigation({ @@ -28,6 +32,7 @@ export async function ReferenceNavigation({ libPath, version, isLatestVersion, + realNavigation, }: ReferenceNavigationProps) { const navSections = await getReferenceSections(libraryId, version) const filteredNavSections = navSections?.filter((section) => section.title !== 'Auth') @@ -46,11 +51,11 @@ export async function ReferenceNavigation({ {displayedNavSections?.map((section, index) => section.type === 'category' ? (
  • - +
  • ) : (
  • - +
  • ) )} @@ -64,9 +69,11 @@ const topLvlRefNavItemStyles = 'leading-5' function RefCategory({ basePath, section, + realNavigation, }: { basePath: string section: AbbrevApiReferenceSection + realNavigation?: boolean }) { if (!('items' in section && section.items && section.items.length > 0)) return null @@ -77,7 +84,7 @@ function RefCategory({
      {section.items?.map((item) => (
    • - +
    • ))}
    diff --git a/apps/docs/features/docs/Reference.utils.ts b/apps/docs/features/docs/Reference.utils.ts index 5824f27901afd..5fe986caaee44 100644 --- a/apps/docs/features/docs/Reference.utils.ts +++ b/apps/docs/features/docs/Reference.utils.ts @@ -95,6 +95,21 @@ async function generateStaticParamsForSdkVersion(sdkId: string, version: string) })) } +// Spike (DOCS-1268): one static page per Management API endpoint, in addition +// to the existing bare `/reference/api` monolith. Deliberately does not reuse +// generateStaticParamsForSdkVersion's output shape — that function bakes in a +// 'crawlers' path segment for a separate crawler-only mechanism unrelated to +// these human-facing per-operation URLs. +async function generateStaticParamsForApi() { + const flattenedSections = await getFlattenedSections('api', 'latest') + + return (flattenedSections || []) + .filter((section) => section.type !== 'category' && !!section.slug) + .map((section) => ({ + slug: ['api', section.slug], + })) +} + export async function generateReferenceStaticParams() { const sdkPages = clientSdkIds .flatMap((sdkId) => @@ -117,6 +132,7 @@ export async function generateReferenceStaticParams() { { slug: ['api'], }, + ...(await generateStaticParamsForApi()), ] const selfHostingPages = selfHostingServices.map((service) => ({ @@ -178,9 +194,35 @@ export async function generateReferenceMetadata( description: 'CLI reference for the Supabase CLI', } } else if (isApiReference) { + const { path } = parsedPath + const operationSlug = path[0] + + const flattenedSections = operationSlug + ? await getFlattenedSections('api', 'latest') + : undefined + const sectionTitle = flattenedSections?.find((section) => section.slug === operationSlug)?.title + + const url = [BASE_PATH, 'reference', 'api', operationSlug].filter(Boolean).join('/') + const images = generateOpenGraphImageMeta({ + type: 'API Reference', + title: `Management API${sectionTitle ? `: ${sectionTitle}` : ''}`, + }) + return { - title: 'Management API Reference | Supabase Docs', - description: 'Management API reference for the Supabase API', + title: `${sectionTitle ? `${sectionTitle} | ` : ''}Management API Reference | Supabase Docs`, + description: `Management API reference for the Supabase API${sectionTitle ? `: ${sectionTitle}` : ''}`, + ...(operationSlug + ? { + alternates: { + canonical: url, + }, + } + : {}), + openGraph: { + ...parentOg, + url, + images, + }, } } else if (isSelfHostingReference) { return { diff --git a/apps/docs/middleware.ts b/apps/docs/middleware.ts index fd885725c23be..cd31319d43f1d 100644 --- a/apps/docs/middleware.ts +++ b/apps/docs/middleware.ts @@ -63,7 +63,10 @@ export function middleware(request: NextRequest) { return NextResponse.rewrite(new URL(rewritePath, request.url)) } - if (lib === 'api') { + // Spike (DOCS-1268): only the bare /reference/api needs normalizing now. + // /reference/api/ has its own statically generated page — don't + // collapse it back to the monolith. + if (lib === 'api' && !maybeVersion) { const rewritePath = [REFERENCE_PATH, 'api'].join('/') return NextResponse.rewrite(new URL(rewritePath, request.url)) } diff --git a/apps/www/lib/redirects.js b/apps/www/lib/redirects.js index 2ec7c41125d95..866bef5ec9ebc 100644 --- a/apps/www/lib/redirects.js +++ b/apps/www/lib/redirects.js @@ -2081,7 +2081,17 @@ module.exports = [ { permanent: true, source: '/docs/reference/api', - destination: '/docs/reference/api/start', + destination: '/docs/reference/api/introduction', + }, + // 'start' was never a real API reference slug — it only ever worked because + // the old /reference/api/* routing collapsed every sub-path to the same + // monolith, and the bare /docs/reference/api redirect pointed here for years. + // Keep redirecting so external links and bookmarks don't 404 now that only + // real slugs resolve. + { + permanent: true, + source: '/docs/reference/api/start', + destination: '/docs/reference/api/introduction', }, { permanent: true,