You can enable the {title} wrapper right from the Supabase dashboard.
diff --git a/apps/docs/content/_partials/api_settings.mdx b/apps/docs/content/_partials/api_settings.mdx
index 15da66146f340..9479f2e8fac64 100644
--- a/apps/docs/content/_partials/api_settings.mdx
+++ b/apps/docs/content/_partials/api_settings.mdx
@@ -5,7 +5,7 @@ To interact with data in database tables, you use the client libraries that wrap
-
+
[Read the API keys docs](/docs/guides/getting-started/api-keys) for a full explanation of all key types, their uses, and where to find them.
diff --git a/apps/docs/content/_partials/cost_warning.mdx b/apps/docs/content/_partials/cost_warning.mdx
index 6f8c536f5bb24..4ed1c507f0567 100644
--- a/apps/docs/content/_partials/cost_warning.mdx
+++ b/apps/docs/content/_partials/cost_warning.mdx
@@ -1,6 +1,6 @@
-To keep SMS sending costs under control, make sure you adjust your project's rate limits and [configure CAPTCHA](/docs/guides/auth/auth-captcha). See the [Production Checklist](/docs/guides/platform/going-into-prod) to learn more.
+To keep SMS sending costs under control, make sure you adjust your project's rate limits and [configure CAPTCHA](/docs/guides/auth/auth-captcha). See the [Production Checklist](/docs/guides/deployment/going-into-prod) to learn more.
Some countries have special regulations for services that send SMS messages to users, (e.g India's TRAI DLT regulations). Remember to look up and follow the regulations of countries where you operate.
diff --git a/apps/docs/content/_partials/create_client_snippet.mdx b/apps/docs/content/_partials/create_client_snippet.mdx
index 4e2fe443c23f8..cf0699b626000 100644
--- a/apps/docs/content/_partials/create_client_snippet.mdx
+++ b/apps/docs/content/_partials/create_client_snippet.mdx
@@ -1,4 +1,4 @@
-
+
Make sure you're using the right `supabase` client in the following code.
diff --git a/apps/docs/content/_partials/postgres_installation.mdx b/apps/docs/content/_partials/postgres_installation.mdx
index 876b02094f397..0dce71d4d2658 100644
--- a/apps/docs/content/_partials/postgres_installation.mdx
+++ b/apps/docs/content/_partials/postgres_installation.mdx
@@ -47,7 +47,7 @@
psql --version
```
-
+
If you get an error that psql is not available or cannot be found, check that you have correctly added the binary to your system PATH. Also try restarting your terminal.
diff --git a/apps/docs/content/_partials/project_setup.mdx b/apps/docs/content/_partials/project_setup.mdx
index f1601388316c0..d05a5122270a6 100644
--- a/apps/docs/content/_partials/project_setup.mdx
+++ b/apps/docs/content/_partials/project_setup.mdx
@@ -27,7 +27,7 @@ Now set up the database schema. You can use the "User Management Starter" quicks
-You can pull the database schema down to your local project by running the `db pull` command. Read the [local development docs](/docs/guides/cli/local-development#link-your-project) for detailed instructions.
+You can pull the database schema down to your local project by running the `db pull` command. Read the [local development docs](/docs/guides/local-development/database-migrations#link-your-project) for detailed instructions.
```bash
supabase link --project-ref
diff --git a/apps/docs/content/_partials/providers.mdx b/apps/docs/content/_partials/providers.mdx
index bb489af03d916..0c65a75ab1abf 100644
--- a/apps/docs/content/_partials/providers.mdx
+++ b/apps/docs/content/_partials/providers.mdx
@@ -6,7 +6,7 @@ Supabase Auth works with many popular Auth methods, including Social and Phone A
-
+
You can also add any OAuth2 or OIDC-compatible identity provider using [Custom OAuth/OIDC Providers](/docs/guides/auth/custom-oauth-providers).
diff --git a/apps/docs/content/_partials/quickstart_db_setup.mdx b/apps/docs/content/_partials/quickstart_db_setup.mdx
index 08e577f4446c1..4c42ce98745c4 100644
--- a/apps/docs/content/_partials/quickstart_db_setup.mdx
+++ b/apps/docs/content/_partials/quickstart_db_setup.mdx
@@ -29,7 +29,7 @@ To start, you need a Supabase project.
Create a new Supabase project from [the Dashboard of any organization](/dashboard/new/_) you belong to.
-
+
Use [the Management API](/docs/reference/api/v1-create-a-project) or ask [the MCP server](/docs/guides/ai-tools/mcp#account-management) to create a new Supabase project.
@@ -41,13 +41,13 @@ When your Supabase project is up and running, create an `instruments` table with
Do these steps within your project's dashboard by copying and running the snippet in your project's [SQL Editor](/dashboard/project/_/sql/new).
-
+
Save some steps by clicking here to prefill the SQL in the SQL Editor, and then clicking **Run**.
-
+
You can use [the Management API](/docs/reference/api/v1-run-a-query) or ask [the MCP server](/docs/guides/ai-tools/mcp#database) to execute SQL queries.
diff --git a/apps/docs/content/_partials/quickstart_intro.mdx b/apps/docs/content/_partials/quickstart_intro.mdx
index 47fb820ae26a9..9516ac2167d30 100644
--- a/apps/docs/content/_partials/quickstart_intro.mdx
+++ b/apps/docs/content/_partials/quickstart_intro.mdx
@@ -1,5 +1,5 @@
This tutorial demonstrates how to build a basic user management app. The app authenticates and identifies the user, stores their profile information in the database, and allows the user to log in, update their profile details, and upload a profile photo. The app uses:
-- [Supabase Database](/docs/guides/database) - a Postgres database for storing your user data and [Row Level Security](/docs/guides/auth#row-level-security) so data is protected and users can only access their own information.
+- [Supabase Database](/docs/guides/database/overview) - a Postgres database for storing your user data and [Row Level Security](/docs/guides/auth#row-level-security) so data is protected and users can only access their own information.
- [Supabase Auth](/docs/guides/auth) - allow users to sign up and log in.
- [Supabase Storage](/docs/guides/storage) - allow users to upload a profile photo.
diff --git a/apps/docs/content/_partials/uiLibCta.mdx b/apps/docs/content/_partials/uiLibCta.mdx
index 8973997dfc9f3..0457e8e4c0a49 100644
--- a/apps/docs/content/_partials/uiLibCta.mdx
+++ b/apps/docs/content/_partials/uiLibCta.mdx
@@ -1,4 +1,4 @@
-
+
UI components built on shadcn/ui that connect to Supabase via a single command.
diff --git a/apps/docs/content/guides/ai-tools/ai-skills.mdx b/apps/docs/content/guides/ai-tools/ai-skills.mdx
index ef97e0f852a0f..2865ac1bd50f2 100644
--- a/apps/docs/content/guides/ai-tools/ai-skills.mdx
+++ b/apps/docs/content/guides/ai-tools/ai-skills.mdx
@@ -22,7 +22,7 @@ Skills are installed at project scope by default, placing them in your repositor
Add skills for all detected agents at the same time by passing `--all`. See the [skills package](https://github.com/vercel-labs/skills) for more options.
-You can also install the agent skills together with the Supabase MCP server using the [Supabase Plugin for AI Coding Agents](/docs/guides/getting-started/plugins) for a combined one-step setup.
+You can also install the agent skills together with the Supabase MCP server using the [Supabase Plugin for AI Coding Agents](/docs/guides/ai-tools/plugins) for a combined one-step setup.
## Available skills
diff --git a/apps/docs/content/guides/ai-tools/byo-mcp.mdx b/apps/docs/content/guides/ai-tools/byo-mcp.mdx
index 2df8f11ed2309..b56594e57486e 100644
--- a/apps/docs/content/guides/ai-tools/byo-mcp.mdx
+++ b/apps/docs/content/guides/ai-tools/byo-mcp.mdx
@@ -49,7 +49,7 @@ Create a new Edge Function for your MCP server:
supabase functions new mcp
```
-
+
This tutorial uses the [official MCP TypeScript SDK](https://github.com/modelcontextprotocol/typescript-sdk) with the `WebStandardStreamableHTTPServerTransport`, but you can use any MCP framework that's compatible with the [Edge Runtime](/docs/guides/functions), such as [mcp-lite](https://github.com/fiberplane/mcp-lite) or [mcp-handler](https://github.com/vercel/mcp-handler).
diff --git a/apps/docs/content/guides/ai-tools/mcp.mdx b/apps/docs/content/guides/ai-tools/mcp.mdx
index 6e2f5367a4904..799d72aea895c 100644
--- a/apps/docs/content/guides/ai-tools/mcp.mdx
+++ b/apps/docs/content/guides/ai-tools/mcp.mdx
@@ -32,13 +32,13 @@ To verify the client has access to the MCP server tools, try asking it to query
<$Show if="docs:prompts">
-For curated, ready-to-use prompts that work well with IDEs and AI agents, see our [AI Prompts](/docs/guides/getting-started/ai-prompts) collection.
+For curated, ready-to-use prompts that work well with IDEs and AI agents, see our [AI Prompts](/docs/guides/ai-tools/ai-prompts) collection.
$Show>
<$Show if="docs:agent_skills">
-Additionally, you can install Supabase agent skills alongside the MCP server, use the [Supabase Plugin for AI Coding Agents](/docs/guides/getting-started/plugins) for a combined one-step setup.
+Additionally, you can install Supabase agent skills alongside the MCP server, use the [Supabase Plugin for AI Coding Agents](/docs/guides/ai-tools/plugins) for a combined one-step setup.
$Show>
@@ -116,9 +116,9 @@ The [configuration panel above](#configure-your-ai-tool) can set these options f
Parameters can be combined: remote ?project_ref=abc123&read_only=true
-
+
-When using [Supabase CLI](/docs/guides/cli) for local development, the MCP server is available at local .
+When using [Supabase CLI](/docs/guides/local-development) for local development, the MCP server is available at local .
diff --git a/apps/docs/content/guides/ai-tools/plugins.mdx b/apps/docs/content/guides/ai-tools/plugins.mdx
index 03503b91f5cd8..55f9c52c5de57 100644
--- a/apps/docs/content/guides/ai-tools/plugins.mdx
+++ b/apps/docs/content/guides/ai-tools/plugins.mdx
@@ -6,7 +6,7 @@ description: 'The Supabase plugin for AI coding agents bundles the MCP server an
sidebar_label: 'Supabase Plugin for AI Coding Agents'
---
-The Supabase Plugin for AI Coding Agents gives your AI coding agent everything it needs to work with Supabase. It bundles the [Supabase MCP server](/docs/guides/getting-started/mcp) and [Supabase agent skills](/docs/guides/getting-started/ai-skills) so your agent can query your database, manage migrations, deploy Edge Functions, and follow Supabase and Postgres best practices — without manual configuration.
+The Supabase Plugin for AI Coding Agents gives your AI coding agent everything it needs to work with Supabase. It bundles the [Supabase MCP server](/docs/guides/ai-tools/mcp) and [Supabase agent skills](/docs/guides/ai-tools/ai-skills) so your agent can query your database, manage migrations, deploy Edge Functions, and follow Supabase and Postgres best practices — without manual configuration.
## Quick installation
@@ -28,13 +28,13 @@ Plugins for AI coding agents are packages of AI agent extensions. A single plugi
- **Agents** — specialized sub-agents with specific personas and tool configurations
- **Slash commands** — custom commands you can invoke directly in chat
-Bundling the [MCP server](/docs/guides/getting-started/mcp) and [agent skills](/docs/guides/getting-started/ai-skills) into a single plugin means you can set up both in one step. You can also install them separately if you prefer. You can install the plugin globally to use it across all your projects, or per project to keep it isolated.
+Bundling the [MCP server](/docs/guides/ai-tools/mcp) and [agent skills](/docs/guides/ai-tools/ai-skills) into a single plugin means you can set up both in one step. You can also install them separately if you prefer. You can install the plugin globally to use it across all your projects, or per project to keep it isolated.
## What's included
### Supabase MCP server
-The [Supabase MCP server](/docs/guides/getting-started/mcp) connects your AI coding agent directly to your Supabase projects. Once authenticated, your agent can query your database, manage migrations, deploy Edge Functions, and more — see the [full list of available tools](/docs/guides/getting-started/mcp#available-tools).
+The [Supabase MCP server](/docs/guides/ai-tools/mcp) connects your AI coding agent directly to your Supabase projects. Once authenticated, your agent can query your database, manage migrations, deploy Edge Functions, and more — see the [full list of available tools](/docs/guides/ai-tools/mcp#available-tools).
### Supabase agent skills
@@ -43,7 +43,7 @@ Skills provide your agent with Supabase-specific procedural knowledge:
- **`supabase`** — Core guidance for working with Supabase products (Database, Auth, Edge Functions, Storage, Realtime)
- **`supabase-postgres-best-practices`** — Postgres query optimization, schema design, connection management, and RLS patterns
-For a full list of available skills and supported agents, see [Agent Skills](/docs/guides/getting-started/ai-skills).
+For a full list of available skills and supported agents, see [Agent Skills](/docs/guides/ai-tools/ai-skills).
## Manual installation
diff --git a/apps/docs/content/guides/ai/examples/image-search-openai-clip.mdx b/apps/docs/content/guides/ai/examples/image-search-openai-clip.mdx
index 8c68879becc26..4e7651ce9f8fc 100644
--- a/apps/docs/content/guides/ai/examples/image-search-openai-clip.mdx
+++ b/apps/docs/content/guides/ai/examples/image-search-openai-clip.mdx
@@ -30,7 +30,7 @@ poetry new image-search
## Setup Supabase project
-If you haven't already, [install the Supabase CLI](/docs/guides/cli), then initialize Supabase in the root of your newly created poetry project:
+If you haven't already, [install the Supabase CLI](/docs/guides/local-development), then initialize Supabase in the root of your newly created poetry project:
```shell
supabase init
diff --git a/apps/docs/content/guides/ai/examples/mixpeek-video-search.mdx b/apps/docs/content/guides/ai/examples/mixpeek-video-search.mdx
index e01cb5d9dc6e7..5f0b2296552e6 100644
--- a/apps/docs/content/guides/ai/examples/mixpeek-video-search.mdx
+++ b/apps/docs/content/guides/ai/examples/mixpeek-video-search.mdx
@@ -28,7 +28,7 @@ poetry new video-search
## Setup Supabase project
-If you haven't already, [install the Supabase CLI](/docs/guides/cli), then initialize Supabase in the root of your newly created poetry project:
+If you haven't already, [install the Supabase CLI](/docs/guides/local-development), then initialize Supabase in the root of your newly created poetry project:
```shell
supabase init
diff --git a/apps/docs/content/guides/ai/examples/nextjs-vector-search.mdx b/apps/docs/content/guides/ai/examples/nextjs-vector-search.mdx
index 28a4b0f668485..f755cb6c3efaf 100644
--- a/apps/docs/content/guides/ai/examples/nextjs-vector-search.mdx
+++ b/apps/docs/content/guides/ai/examples/nextjs-vector-search.mdx
@@ -48,7 +48,7 @@ Prepare the database schema. We can use the "OpenAI Vector Search" quickstart in
- Make sure you have the latest version of the [Supabase CLI installed](/docs/guides/cli/getting-started).
+ Make sure you have the latest version of the [Supabase CLI installed](/docs/guides/local-development/cli/getting-started).
Initialize Supabase in the root directory of your app.
diff --git a/apps/docs/content/guides/ai/examples/openai.mdx b/apps/docs/content/guides/ai/examples/openai.mdx
index eeda26ee42191..88c13277ceffc 100644
--- a/apps/docs/content/guides/ai/examples/openai.mdx
+++ b/apps/docs/content/guides/ai/examples/openai.mdx
@@ -13,7 +13,7 @@ OpenAI's API is intended to be used from the server-side. Supabase offers Edge F
## Setup Supabase project
-If you haven't already, [install the Supabase CLI](/docs/guides/cli) and initialize your project:
+If you haven't already, [install the Supabase CLI](/docs/guides/local-development) and initialize your project:
```shell
supabase init
diff --git a/apps/docs/content/guides/ai/going-to-prod.mdx b/apps/docs/content/guides/ai/going-to-prod.mdx
index e152ee3232a06..f460254660fb9 100644
--- a/apps/docs/content/guides/ai/going-to-prod.mdx
+++ b/apps/docs/content/guides/ai/going-to-prod.mdx
@@ -113,7 +113,7 @@ First, a few generic tips which you can pick and choose from:
## Useful links
-Don't forget to check out the general [Production Checklist](/docs/guides/platform/going-into-prod) to ensure your project is secure, performant, and will remain available for your users.
+Don't forget to check out the general [Production Checklist](/docs/guides/deployment/going-into-prod) to ensure your project is secure, performant, and will remain available for your users.
You can look at our [Choosing Compute Add-on](/docs/guides/ai/choosing-compute-addon) guide to get a basic understanding of how much compute you might need for your workload.
diff --git a/apps/docs/content/guides/ai/hugging-face.mdx b/apps/docs/content/guides/ai/hugging-face.mdx
index b5b0d4c4f9031..607995eb56781 100644
--- a/apps/docs/content/guides/ai/hugging-face.mdx
+++ b/apps/docs/content/guides/ai/hugging-face.mdx
@@ -69,7 +69,7 @@ Edge Functions are server-side TypeScript functions that run on-demand. Since Ed
-You will need the `supabase` CLI [installed](/docs/guides/cli) for the following commands to work.
+You will need the `supabase` CLI [installed](/docs/guides/local-development) for the following commands to work.
diff --git a/apps/docs/content/guides/ai/python-clients.mdx b/apps/docs/content/guides/ai/python-clients.mdx
index a03e584996038..2ae48ef404d3a 100644
--- a/apps/docs/content/guides/ai/python-clients.mdx
+++ b/apps/docs/content/guides/ai/python-clients.mdx
@@ -9,7 +9,7 @@ As described in [Structured & Unstructured Embeddings](/docs/guides/ai/structure
For data science or ephemeral workloads, the [Supabase Vecs](https://supabase.github.io/vecs/) client gets you started. You need a connection string and vecs handles setting up your database to store and query vectors with associated metadata.
-
+
Click [**Connect**](/dashboard/project/_/?showConnect=true) at the top of any project page to get your connection string.
diff --git a/apps/docs/content/guides/ai/quickstarts/generate-text-embeddings.mdx b/apps/docs/content/guides/ai/quickstarts/generate-text-embeddings.mdx
index ed7beaecbf81d..23ee6f98068f6 100644
--- a/apps/docs/content/guides/ai/quickstarts/generate-text-embeddings.mdx
+++ b/apps/docs/content/guides/ai/quickstarts/generate-text-embeddings.mdx
@@ -17,7 +17,7 @@ Build an Edge Function that accepts an input string and generates an embedding f
- Make sure you have the latest version of the [Supabase CLI installed](/docs/guides/cli/getting-started).
+ Make sure you have the latest version of the [Supabase CLI installed](/docs/guides/local-development/cli/getting-started).
Initialize Supabase in the root directory of your app and start your local stack.
diff --git a/apps/docs/content/guides/ai/rag-with-permissions.mdx b/apps/docs/content/guides/ai/rag-with-permissions.mdx
index 9ecd87c69ae87..7b6ecae49b555 100644
--- a/apps/docs/content/guides/ai/rag-with-permissions.mdx
+++ b/apps/docs/content/guides/ai/rag-with-permissions.mdx
@@ -53,7 +53,7 @@ on document_sections for select to authenticated using (
);
```
-
+
In this example, the current user is determined using the built-in `auth.uid()` function when the query is executed through your project's auto-generated [REST API](/docs/guides/api). If you are connecting to your Supabase database through a direct Postgres connection, see [Direct Postgres Connection](#direct-postgres-connection) below for directions on how to achieve the same access control.
@@ -120,7 +120,7 @@ RLS is latency-sensitive, so extra caution should be taken before implementing t
-
+
For data sources other than Postgres, see [Foreign Data Wrappers](/docs/guides/database/extensions/wrappers/overview) for a list of external sources supported today. If your data lives in a source not provided in the list, contact [support](/dashboard/support/new) and we'll be happy to discuss your use case.
@@ -164,7 +164,7 @@ import foreign schema public limit to (users, documents)
from server foreign_server into external;
```
-
+
This example maps the `authenticated` role in Supabase to the `postgres` user in the external DB. In production, it's best to create a custom user on the external DB that has the minimum permissions necessary to access the information you need.
diff --git a/apps/docs/content/guides/ai/vecs-python-client.mdx b/apps/docs/content/guides/ai/vecs-python-client.mdx
index ffd6389b56cf9..3339f3f6da53e 100644
--- a/apps/docs/content/guides/ai/vecs-python-client.mdx
+++ b/apps/docs/content/guides/ai/vecs-python-client.mdx
@@ -9,7 +9,7 @@ Supabase provides a Python client called [`vecs`](https://github.com/supabase/ve
## Quick start
-To see how Vecs works, use a local database. Make sure you have the Supabase CLI [installed](/docs/guides/cli#installation) on your machine.
+To see how Vecs works, use a local database. Make sure you have the Supabase CLI [installed](/docs/guides/local-development/cli/getting-started#installing-the-supabase-cli) on your machine.
### Initialize your project
diff --git a/apps/docs/content/guides/ai/vector-columns.mdx b/apps/docs/content/guides/ai/vector-columns.mdx
index d3ab41c3aa9f1..15cb06746a27d 100644
--- a/apps/docs/content/guides/ai/vector-columns.mdx
+++ b/apps/docs/content/guides/ai/vector-columns.mdx
@@ -61,7 +61,7 @@ create table documents (
In the SQL snippet above, we create a `documents` table with an `embedding` column. This is a standard Postgres column, so you can name it anything you like. The `embedding` column uses the `vector` data type with 384 dimensions. Change this number to match the dimensions your embedding model produces. For example, if you're [generating embeddings](/docs/guides/ai/quickstarts/generate-text-embeddings) using the open source [`gte-small`](https://huggingface.co/Supabase/gte-small) model, set this to 384.
-
+
In general, embeddings with fewer dimensions perform best. See our [analysis on fewer dimensions in pgvector](/blog/fewer-dimensions-are-better-pgvector).
@@ -156,13 +156,13 @@ const { data: documents } = await supabaseClient.rpc('match_documents', {
In this example `embedding` would be another embedding you wish to compare against your table of pre-generated embedding documents. For example if you were building a search engine, every time the user submits their query you would first generate an embedding on the search query itself, then pass it into the above `rpc()` function to match.
-
+
To filter your vector search by another column from the JS client, extend the function above with an extra parameter and `where` clause. See [Filtering vector search by metadata](/docs/guides/ai/semantic-search#filtering-vector-search-by-metadata) for a worked example.
-
+
Be sure to use embeddings produced from the same embedding model when calculating distance. Comparing embeddings from two different models will produce no meaningful result.
diff --git a/apps/docs/content/guides/api.mdx b/apps/docs/content/guides/api.mdx
index 9d0a4df90e777..d88c12e96a26c 100644
--- a/apps/docs/content/guides/api.mdx
+++ b/apps/docs/content/guides/api.mdx
@@ -12,7 +12,7 @@ The API is auto-generated from your database and is designed to get you building
You can use them directly from the browser (two-tier architecture), or as a complement to your own API server (three-tier architecture).
-
+
- You can find the API URL in the [**Integrations > Data API**](/dashboard/project/_/integrations/data_api/overview) section of the Dashboard.
- You can find the API Keys in the [**Settings > API Keys**](/dashboard/project/_/settings/api-keys/) section of the Dashboard.
diff --git a/apps/docs/content/guides/api/handling-errors-in-supabase-js.mdx b/apps/docs/content/guides/api/handling-errors-in-supabase-js.mdx
index 76c549d3e2c93..eea070910bef5 100644
--- a/apps/docs/content/guides/api/handling-errors-in-supabase-js.mdx
+++ b/apps/docs/content/guides/api/handling-errors-in-supabase-js.mdx
@@ -19,7 +19,7 @@ The `message` exposes the error reason, and `hint` gives you the literal SQL sta
The same pattern shows up across many Postgres errors — missing column? `hint` suggests the column name you probably meant. Type mismatch? `hint` shows the expected type. Whenever Postgres knows the fix, it puts it in `hint`.
-Log the full `error` object, not only `error.message`.
+Log the full `error` object, not only `error.message`.
## The recommended pattern
diff --git a/apps/docs/content/guides/auth/audit-logs.mdx b/apps/docs/content/guides/auth/audit-logs.mdx
index 3bf63c70e7afe..773050533fe77 100644
--- a/apps/docs/content/guides/auth/audit-logs.mdx
+++ b/apps/docs/content/guides/auth/audit-logs.mdx
@@ -32,7 +32,7 @@ You can disable Postgres storage to reduce database storage costs while keeping
3. Find the **Audit Logs** under **Configuration** section
4. Toggle on "Disable writing auth audit logs to project database" to disable database storage
-
+
Disabling Postgres storage reduces your database storage costs. Audit logs will still be available through the dashboard.
diff --git a/apps/docs/content/guides/auth/auth-anonymous.mdx b/apps/docs/content/guides/auth/auth-anonymous.mdx
index 0a284cc4c8e4a..2f69c770fcc4c 100644
--- a/apps/docs/content/guides/auth/auth-anonymous.mdx
+++ b/apps/docs/content/guides/auth/auth-anonymous.mdx
@@ -38,7 +38,7 @@ The Supabase team has received reports of user metadata being cached across uniq
-For self-hosting, you can update your project configuration using the files and environment variables provided. See the [local development docs](/docs/guides/cli/config) for more details.
+For self-hosting, you can update your project configuration using the files and environment variables provided. See the [local development docs](/docs/guides/local-development/cli/config) for more details.
@@ -362,7 +362,7 @@ async function resolveDataConflicts(anonymousUserId, existingUserId) {
## Abuse prevention and rate limits
-Since anonymous users are stored in your database, bad actors can abuse the endpoint to increase your database size drastically. It is strongly recommended to [enable invisible CAPTCHA or Cloudflare Turnstile](/docs/guides/auth/auth-captcha) to prevent abuse for anonymous sign-ins. An IP-based rate limit is enforced at 30 requests per hour which can be modified in your [dashboard](/dashboard/project/_/auth/rate-limits). You can refer to the full list of rate limits [here](/docs/guides/platform/going-into-prod#rate-limiting-resource-allocation--abuse-prevention).
+Since anonymous users are stored in your database, bad actors can abuse the endpoint to increase your database size drastically. It is strongly recommended to [enable invisible CAPTCHA or Cloudflare Turnstile](/docs/guides/auth/auth-captcha) to prevent abuse for anonymous sign-ins. An IP-based rate limit is enforced at 30 requests per hour which can be modified in your [dashboard](/dashboard/project/_/auth/rate-limits). You can refer to the full list of rate limits [here](/docs/guides/deployment/going-into-prod#rate-limiting-resource-allocation--abuse-prevention).
## Automatic cleanup
diff --git a/apps/docs/content/guides/auth/auth-email-templates.mdx b/apps/docs/content/guides/auth/auth-email-templates.mdx
index 5be7d6d73840e..9f9c5488e5376 100644
--- a/apps/docs/content/guides/auth/auth-email-templates.mdx
+++ b/apps/docs/content/guides/auth/auth-email-templates.mdx
@@ -169,7 +169,7 @@ If you are using an external email provider that enables "email tracking", the l
### Redirecting the user to a server-side endpoint
-If you intend to use [Server-side rendering](/docs/guides/auth/server-side-rendering), you might want the email link to redirect the user to a server-side endpoint to check if they are authenticated before returning the page. However, the default email link will redirect the user after verification to the redirect URL with the session in the query fragments. Since the session is returned in the query fragments by default, you won't be able to access it on the server-side.
+If you intend to use [Server-side rendering](/docs/guides/auth/server-side/advanced-guide), you might want the email link to redirect the user to a server-side endpoint to check if they are authenticated before returning the page. However, the default email link will redirect the user after verification to the redirect URL with the session in the query fragments. Since the session is returned in the query fragments by default, you won't be able to access it on the server-side.
You can customize the email link in the email template to redirect the user to a server-side endpoint successfully. For example:
diff --git a/apps/docs/content/guides/auth/auth-hooks/custom-access-token-hook.mdx b/apps/docs/content/guides/auth/auth-hooks/custom-access-token-hook.mdx
index 6d93202ef6fb5..aeb34c9c64ec7 100644
--- a/apps/docs/content/guides/auth/auth-hooks/custom-access-token-hook.mdx
+++ b/apps/docs/content/guides/auth/auth-hooks/custom-access-token-hook.mdx
@@ -326,7 +326,7 @@ revoke all
-You can restrict access to internal applications with a hook. For example, you can require that employees log in via [SAML Single Sign On (SSO)](/docs/guides/auth/sso/auth-sso-saml). You can exempt select employees from the policy via an allowlist.
+You can restrict access to internal applications with a hook. For example, you can require that employees log in via [SAML Single Sign On (SSO)](/docs/guides/auth/enterprise-sso/auth-sso-saml). You can exempt select employees from the policy via an allowlist.
```sql
create or replace function public.restrict_application_access(event jsonb)
@@ -426,7 +426,7 @@ Deno.serve(async (req) => {
-You can restrict access to internal applications with a hook. For example, you can require that employees log in via [SAML Single Sign On (SSO)](/docs/guides/auth/sso/auth-sso-saml). You can exempt select employees from the policy via an allowlist.
+You can restrict access to internal applications with a hook. For example, you can require that employees log in via [SAML Single Sign On (SSO)](/docs/guides/auth/enterprise-sso/auth-sso-saml). You can exempt select employees from the policy via an allowlist.
```javascript
import { Webhook } from 'https://esm.sh/standardwebhooks@1.0.0'
diff --git a/apps/docs/content/guides/auth/auth-identity-linking.mdx b/apps/docs/content/guides/auth/auth-identity-linking.mdx
index bd4780ae4c677..22bb73a074b6a 100644
--- a/apps/docs/content/guides/auth/auth-identity-linking.mdx
+++ b/apps/docs/content/guides/auth/auth-identity-linking.mdx
@@ -14,7 +14,7 @@ Currently, Supabase Auth supports 2 strategies to link an identity to a user:
-Users that signed up with [SAML SSO](/docs/guides/auth/sso/auth-sso-saml) will not be considered as targets for identity linking (automatic or manual) for security reasons.
+Users that signed up with [SAML SSO](/docs/guides/auth/enterprise-sso/auth-sso-saml) will not be considered as targets for identity linking (automatic or manual) for security reasons.
diff --git a/apps/docs/content/guides/auth/auth-mfa.mdx b/apps/docs/content/guides/auth/auth-mfa.mdx
index e7e1744b5c1d6..1a0c97bdde1f5 100644
--- a/apps/docs/content/guides/auth/auth-mfa.mdx
+++ b/apps/docs/content/guides/auth/auth-mfa.mdx
@@ -261,7 +261,7 @@ create policy "Policy name."
### Server-Side Rendering
-
+
When using the Supabase JavaScript library in a server-side rendering context, make sure you always create a new object for each request! This will prevent you from accidentally rendering and serving content belonging to different users.
diff --git a/apps/docs/content/guides/auth/auth-mfa/totp.mdx b/apps/docs/content/guides/auth/auth-mfa/totp.mdx
index c45751d91e9c6..2660dea758a70 100644
--- a/apps/docs/content/guides/auth/auth-mfa/totp.mdx
+++ b/apps/docs/content/guides/auth/auth-mfa/totp.mdx
@@ -36,7 +36,7 @@ In the **setup flow**, a session already at AAL1 calls the Enroll API, which ret
In the **login flow**, the user signs in (upgrading the session to AAL1) and the List Factors API is called. If the user has one or more factors, they open their authenticator and enter a code, which follows the same Challenge and Verify path to reach AAL2. If they have no factors enrolled, they are sent through the setup flow first.
-
+
[TOTP MFA API](/docs/reference/javascript/auth-mfa-api) is free to use and is enabled on all Supabase projects by default.
diff --git a/apps/docs/content/guides/auth/choosing-a-server-package.mdx b/apps/docs/content/guides/auth/choosing-a-server-package.mdx
index 199d6357eb2aa..ae413823054d3 100644
--- a/apps/docs/content/guides/auth/choosing-a-server-package.mdx
+++ b/apps/docs/content/guides/auth/choosing-a-server-package.mdx
@@ -92,4 +92,4 @@ In a cookie-based framework you can compose the two — let `@supabase/ssr` own
- [Server-side rendering](/guides/auth/server-side) — set up `@supabase/ssr` for your framework.
- [`@supabase/server` reference](/docs/reference/server) — API for header-based server auth.
-- [`supabase-js` reference](/docs/reference/javascript) — the base JavaScript client.
+- [`supabase-js` reference](/docs/reference/javascript/introduction) — the base JavaScript client.
diff --git a/apps/docs/content/guides/auth/enterprise-sso.mdx b/apps/docs/content/guides/auth/enterprise-sso.mdx
index 16390c486f4c4..641868db94981 100644
--- a/apps/docs/content/guides/auth/enterprise-sso.mdx
+++ b/apps/docs/content/guides/auth/enterprise-sso.mdx
@@ -3,4 +3,4 @@ title: 'Enterprise Single Sign-On'
description: 'Learn about Single Sign-On support in Supabase Auth for enterprise applications'
---
-Supabase Auth supports building enterprise applications that require Single Sign-On (SSO) authentication [with SAML 2.0](/docs/guides/auth/sso/auth-sso-saml).
+Supabase Auth supports building enterprise applications that require Single Sign-On (SSO) authentication [with SAML 2.0](/docs/guides/auth/enterprise-sso/auth-sso-saml).
diff --git a/apps/docs/content/guides/auth/enterprise-sso/auth-sso-saml.mdx b/apps/docs/content/guides/auth/enterprise-sso/auth-sso-saml.mdx
index 75e5841b52d7c..bcf19cffc8177 100644
--- a/apps/docs/content/guides/auth/enterprise-sso/auth-sso-saml.mdx
+++ b/apps/docs/content/guides/auth/enterprise-sso/auth-sso-saml.mdx
@@ -5,7 +5,7 @@ description: 'Use Single Sign-On (SSO) authentication on your project with SAML
video: 'https://www.youtube.com/v/em1cpOAXknM'
---
-
+
Looking for guides on how to use Single Sign-On with the Supabase dashboard? Head on over to [Enable SSO for Your Organization](/docs/guides/platform/sso).
@@ -23,7 +23,7 @@ If you're having issues with identity provider software not on this list, [open
## Prerequisites
-This guide requires the use of the [Supabase CLI](/docs/guides/cli). Make sure you're using version v1.46.4 or higher. You can use `supabase -v` to see the currently installed version.
+This guide requires the use of the [Supabase CLI](/docs/guides/local-development). Make sure you're using version v1.46.4 or higher. You can use `supabase -v` to see the currently installed version.
You can use the `supabase sso` [subcommands](/docs/reference/cli/supabase-sso) to manage your project's configuration.
SAML 2.0 support is disabled by default on Supabase projects. You can configure this on the [Auth Providers](/dashboard/project/_/auth/providers) page on your project.
@@ -279,7 +279,7 @@ For example, the following JSON structure configures attribute mapping for the `
}
```
-When creating or updating an identity provider with the [Supabase CLI](/docs/guides/cli) you can include this JSON as a file with the `--attribute-mapping-file /path/to/attribute/mapping.json` flag.
+When creating or updating an identity provider with the [Supabase CLI](/docs/guides/local-development) you can include this JSON as a file with the `--attribute-mapping-file /path/to/attribute/mapping.json` flag.
For example, to change the attribute mappings to an existing provider you can use:
diff --git a/apps/docs/content/guides/auth/oauth-server/getting-started.mdx b/apps/docs/content/guides/auth/oauth-server/getting-started.mdx
index a7f70ebcf6c90..f6ea9dcadcba9 100644
--- a/apps/docs/content/guides/auth/oauth-server/getting-started.mdx
+++ b/apps/docs/content/guides/auth/oauth-server/getting-started.mdx
@@ -12,7 +12,7 @@ Before you begin, make sure you have:
- A Supabase project (create one at [supabase.com](https://supabase.com))
- Admin access to your project
-- (Optional) [Supabase CLI](/docs/guides/cli) v2.54.11 or higher for local development
+- (Optional) [Supabase CLI](/docs/guides/local-development) v2.54.11 or higher for local development
## Overview
@@ -115,7 +115,7 @@ This ensures that JWTs issued by your local instance use the correct issuer clai
-
+
**Use asymmetric JWT signing keys for better security**
diff --git a/apps/docs/content/guides/auth/oauth-server/mcp-authentication.mdx b/apps/docs/content/guides/auth/oauth-server/mcp-authentication.mdx
index 7434553409fe7..00e05931dcb25 100644
--- a/apps/docs/content/guides/auth/oauth-server/mcp-authentication.mdx
+++ b/apps/docs/content/guides/auth/oauth-server/mcp-authentication.mdx
@@ -75,7 +75,7 @@ Dynamic registration allows any MCP client to register with your project. Consid
When building your own MCP server, integrate with Supabase Auth to authenticate AI agents as your existing users and leverage your RLS policies.
-
+
**Looking for an easier way to build MCP servers?**
diff --git a/apps/docs/content/guides/auth/oauth-server/oauth-flows.mdx b/apps/docs/content/guides/auth/oauth-server/oauth-flows.mdx
index eda6aa21efeea..3820b37c0ce64 100644
--- a/apps/docs/content/guides/auth/oauth-server/oauth-flows.mdx
+++ b/apps/docs/content/guides/auth/oauth-server/oauth-flows.mdx
@@ -645,7 +645,7 @@ This enables automatic integration with OIDC-compliant libraries and tools.
Third-party clients should validate access tokens to ensure they're authentic and not tampered with.
-
+
**Recommended: Use asymmetric JWT signing keys**
@@ -841,7 +841,7 @@ After revoking access:
- All refresh tokens for that client are deleted
- The user will need to re-authorize the application to grant access again
-
+
**Build a settings page for your users**
diff --git a/apps/docs/content/guides/auth/oauth-server/token-security.mdx b/apps/docs/content/guides/auth/oauth-server/token-security.mdx
index 2fe88b440a2ec..ad5b1025876f2 100644
--- a/apps/docs/content/guides/auth/oauth-server/token-security.mdx
+++ b/apps/docs/content/guides/auth/oauth-server/token-security.mdx
@@ -438,6 +438,6 @@ USING (
## Next steps
- [Learn about JWTs](/docs/guides/auth/jwts) - Deep dive into Supabase token structure
-- [Row Level Security](/docs/guides/auth/row-level-security) - Complete RLS guide
+- [Row Level Security](/docs/guides/database/postgres/row-level-security) - Complete RLS guide
- [Custom Access Token Hooks](/docs/guides/auth/auth-hooks/custom-access-token-hook) - Inject custom claims
- [OAuth flows](/docs/guides/auth/oauth-server/oauth-flows) - Understand token issuance
diff --git a/apps/docs/content/guides/auth/passwords.mdx b/apps/docs/content/guides/auth/passwords.mdx
index ad37b727915cd..2bd2294449645 100644
--- a/apps/docs/content/guides/auth/passwords.mdx
+++ b/apps/docs/content/guides/auth/passwords.mdx
@@ -15,7 +15,7 @@ Email authentication is enabled by default.
You can configure whether users need to verify their email to sign in. On hosted Supabase projects, this is true by default. On self-hosted projects or in local development, this is false by default.
-Change this setting on the [Auth Providers page](/dashboard/project/_/auth/providers) for hosted projects, or in the [configuration file](/docs/guides/cli/config#auth.email.enable_confirmations) for self-hosted projects.
+Change this setting on the [Auth Providers page](/dashboard/project/_/auth/providers) for hosted projects, or in the [configuration file](/docs/guides/local-development/cli/config#auth.email.enable_confirmations) for self-hosted projects.
### Signing up with an email and password
@@ -50,7 +50,7 @@ The implicit flow only works for client-only apps. Your site directly receives t
To sign up the user, call [signUp()](/docs/reference/javascript/auth-signup) with their email address and password.
-You can optionally specify a URL to redirect to after the user clicks the confirmation link. This URL must be configured as a [Redirect URL](/docs/guides/auth/redirect-urls), which you can do in the [dashboard](/dashboard/project/_/auth/url-configuration) for hosted projects, or in the [configuration file](/docs/guides/cli/config#auth.additional_redirect_urls) for self-hosted projects.
+You can optionally specify a URL to redirect to after the user clicks the confirmation link. This URL must be configured as a [Redirect URL](/docs/guides/auth/redirect-urls), which you can do in the [dashboard](/dashboard/project/_/auth/url-configuration) for hosted projects, or in the [configuration file](/docs/guides/local-development/cli/config#auth.additional_redirect_urls) for self-hosted projects.
If you don't specify a redirect URL, the user is automatically redirected to your site URL. This defaults to `localhost:3000`, but you can also configure this.
@@ -93,7 +93,7 @@ Future signUpNewUser() async {
To sign up the user, call [signUp()](/docs/reference/swift/auth-signup) with their email address and password.
-You can optionally specify a URL to redirect to after the user clicks the confirmation link. This URL must be configured as a [Redirect URL](/docs/guides/auth/redirect-urls), which you can do in the [dashboard](/dashboard/project/_/auth/url-configuration) for hosted projects, or in the [configuration file](/docs/guides/cli/config#auth.additional_redirect_urls) for self-hosted projects.
+You can optionally specify a URL to redirect to after the user clicks the confirmation link. This URL must be configured as a [Redirect URL](/docs/guides/auth/redirect-urls), which you can do in the [dashboard](/dashboard/project/_/auth/url-configuration) for hosted projects, or in the [configuration file](/docs/guides/local-development/cli/config#auth.additional_redirect_urls) for self-hosted projects.
If you don't specify a redirect URL, the user is automatically redirected to your site URL. This defaults to `localhost:3000`, but you can also configure this.
@@ -128,7 +128,7 @@ suspend fun signUpNewUser() {
To sign up the user, call [signUp()](/docs/reference/python/auth-signup) with their email address and password.
-You can optionally specify a URL to redirect to after the user clicks the confirmation link. This URL must be configured as a [Redirect URL](/docs/guides/auth/redirect-urls), which you can do in the [dashboard](/dashboard/project/_/auth/url-configuration) for hosted projects, or in the [configuration file](/docs/guides/cli/config#auth.additional_redirect_urls) for self-hosted projects.
+You can optionally specify a URL to redirect to after the user clicks the confirmation link. This URL must be configured as a [Redirect URL](/docs/guides/auth/redirect-urls), which you can do in the [dashboard](/dashboard/project/_/auth/url-configuration) for hosted projects, or in the [configuration file](/docs/guides/local-development/cli/config#auth.additional_redirect_urls) for self-hosted projects.
If you don't specify a redirect URL, the user is automatically redirected to your site URL. This defaults to `localhost:3000`, but you can also configure this.
@@ -396,7 +396,7 @@ app.get("/auth/confirm", async function (req, res) {
To sign up the user, call [signUp()](/docs/reference/javascript/auth-signup) with their email address and password:
-You can optionally specify a URL to redirect to after the user clicks the confirmation link. This URL must be configured as a [Redirect URL](/docs/guides/auth/redirect-urls), which you can do in the [dashboard](/dashboard/project/_/auth/url-configuration) for hosted projects, or in the [configuration file](/docs/guides/cli/config#auth.additional_redirect_urls) for self-hosted projects.
+You can optionally specify a URL to redirect to after the user clicks the confirmation link. This URL must be configured as a [Redirect URL](/docs/guides/auth/redirect-urls), which you can do in the [dashboard](/dashboard/project/_/auth/url-configuration) for hosted projects, or in the [configuration file](/docs/guides/local-development/cli/config#auth.additional_redirect_urls) for self-hosted projects.
If you don't specify a redirect URL, the user is automatically redirected to your site URL. This defaults to `localhost:3000`, but you can also configure this.
@@ -1074,7 +1074,7 @@ The signup confirmation and password reset flows require an SMTP server to send
The Supabase platform comes with a default email-sending service for you to try out. The service has a rate limit of auth.rate_limits.email.inbuilt_smtp_per_hour.value emails per hour, and availability is on a best-effort basis. For production use, you should consider configuring a custom SMTP server.
-
+
Consider configuring a custom SMTP server for production.
@@ -1104,7 +1104,7 @@ Protect users who use a phone number as a password-based auth identifier by enab
Enable phone authentication on the [Auth Providers page](/dashboard/project/_/auth/providers) for hosted Supabase projects.
-For self-hosted projects or local development, use the [configuration file](/docs/guides/cli/config#auth.sms.enable_signup). See the configuration variables namespaced under `auth.sms`.
+For self-hosted projects or local development, use the [configuration file](/docs/guides/local-development/cli/config#auth.sms.enable_signup). See the configuration variables namespaced under `auth.sms`.
If you want users to confirm their phone number on signup, you need to set up an SMS provider. Each provider has its own configuration. Supported providers include MessageBird, Twilio, Vonage, and TextLocal (community-supported).
diff --git a/apps/docs/content/guides/auth/phone-login.mdx b/apps/docs/content/guides/auth/phone-login.mdx
index 7f5615ff944d7..7e450eb4b2f30 100644
--- a/apps/docs/content/guides/auth/phone-login.mdx
+++ b/apps/docs/content/guides/auth/phone-login.mdx
@@ -25,7 +25,7 @@ Phone OTP login can:
Enable phone authentication on the [Auth Providers page](/dashboard/project/_/auth/providers) for hosted Supabase projects.
-For self-hosted projects or local development, use the [configuration file](/docs/guides/cli/config#auth.sms.enable_signup). See the configuration variables namespaced under `auth.sms`.
+For self-hosted projects or local development, use the [configuration file](/docs/guides/local-development/cli/config#auth.sms.enable_signup). See the configuration variables namespaced under `auth.sms`.
You also need to set up an SMS provider. Each provider has its own configuration. Supported providers include MessageBird, Twilio, Vonage, and TextLocal (community-supported).
diff --git a/apps/docs/content/guides/auth/quickstarts/with-expo-react-native-social-auth.mdx b/apps/docs/content/guides/auth/quickstarts/with-expo-react-native-social-auth.mdx
index df89c6efa28cb..4646c475d567e 100644
--- a/apps/docs/content/guides/auth/quickstarts/with-expo-react-native-social-auth.mdx
+++ b/apps/docs/content/guides/auth/quickstarts/with-expo-react-native-social-auth.mdx
@@ -5,7 +5,7 @@ description: 'Learn how to implement social authentication in an app with Expo R
This tutorial demonstrates how to build a React Native app with [Expo](https://expo.dev) that implements social authentication. The app showcases a complete authentication flow with protected navigation using:
-- [Supabase Database](/docs/guides/database) - a Postgres database for storing your user data with [Row Level Security](/docs/guides/auth#row-level-security) to ensure data is protected and users can only access their own information.
+- [Supabase Database](/docs/guides/database/overview) - a Postgres database for storing your user data with [Row Level Security](/docs/guides/auth#row-level-security) to ensure data is protected and users can only access their own information.
- [Supabase Auth](/docs/guides/auth) - enables users to log in through social authentication providers (Apple and Google).

diff --git a/apps/docs/content/guides/auth/server-side.mdx b/apps/docs/content/guides/auth/server-side.mdx
index 81ae770cd4a7c..5a22ca7bbbf03 100644
--- a/apps/docs/content/guides/auth/server-side.mdx
+++ b/apps/docs/content/guides/auth/server-side.mdx
@@ -7,7 +7,7 @@ SSR frameworks move rendering and data fetches to the server, to reduce client b
Supabase Auth is fully compatible with SSR. You need to make a few changes to the configuration of your Supabase client, to store the user session in cookies instead of local storage. After setting up your Supabase client, follow the instructions for any flow in the How-To guides.
-
+
Make sure to use the PKCE flow instructions where those differ from the implicit flow instructions. If no difference is mentioned, don't worry about this.
diff --git a/apps/docs/content/guides/auth/server-side/advanced-guide.mdx b/apps/docs/content/guides/auth/server-side/advanced-guide.mdx
index 9b31620964e4a..8366b9a7c99d1 100644
--- a/apps/docs/content/guides/auth/server-side/advanced-guide.mdx
+++ b/apps/docs/content/guides/auth/server-side/advanced-guide.mdx
@@ -12,7 +12,7 @@ The default behavior if you're not using SSR is to store this information in loc
If you're not using SSR, you might also be using the [implicit flow](/docs/guides/auth/sessions/implicit-flow) to get the access and refresh tokens. The server can't access the tokens in this flow, so for SSR, you should change to the [PKCE flow](/docs/guides/auth/sessions/pkce-flow). You can change the flow type when initiating your Supabase client if your client library provides this option.
-
+
In the `@supabase/ssr` package, Supabase clients are initiated to use the PKCE flow by default. They are also automatically configured to handle the saving and retrieval of session information in cookies.
diff --git a/apps/docs/content/guides/auth/social-login.mdx b/apps/docs/content/guides/auth/social-login.mdx
index c0b642296d3d2..5f7cfe3ab7b87 100644
--- a/apps/docs/content/guides/auth/social-login.mdx
+++ b/apps/docs/content/guides/auth/social-login.mdx
@@ -45,7 +45,7 @@ Supabase supports a suite of social providers. Follow these guides to configure
-
+
Need to integrate with a provider not listed here? You can add any OAuth2 or OIDC-compatible provider using [Custom OAuth/OIDC Providers](/docs/guides/auth/custom-oauth-providers).
diff --git a/apps/docs/content/guides/auth/social-login/auth-apple.mdx b/apps/docs/content/guides/auth/social-login/auth-apple.mdx
index 8bc81e9429c4a..78b8d9b0569fa 100644
--- a/apps/docs/content/guides/auth/social-login/auth-apple.mdx
+++ b/apps/docs/content/guides/auth/social-login/auth-apple.mdx
@@ -140,7 +140,7 @@ curl -X PATCH "https://api.supabase.com/v1/projects/$PROJECT_REF/config/auth" \
}'
```
-
+
Use this tool to generate a new Apple client secret. No keys leave your browser! Be aware that this tool does not currently work in Safari, so use Firefox or a Chrome-based browser instead.
@@ -510,7 +510,7 @@ curl -X PATCH "https://api.supabase.com/v1/projects/$PROJECT_REF/config/auth" \
6. Create a signing **Key** in the [Keys](https://developer.apple.com/account/resources/authkeys/list) section of the Apple Developer Console. You can use this key to generate a secret key using the tool below, which is added to your Supabase project's Auth configuration. Make sure you safely store the `AuthKey_XXXXXXXXXX.p8` file. If you ever lose access to it, or make it public accidentally, revoke it from the Apple Developer Console and create a new one immediately. You will have to generate a new secret key using this file every 6 months, so make sure you schedule a recurring reminder in your calendar!
7. Finally, add the information you configured above to the [Apple provider configuration in the Supabase dashboard](/dashboard/project/_/auth/providers). If your app also uses native Sign in with Apple (on iOS or macOS), list this Services ID as the **first** entry in the _Client IDs_ field. Supabase uses the first client ID in the list for the web `signInWithOAuth` flow, while the native `signInWithIdToken` flow accepts any client ID in the list as a valid token audience, regardless of order. If a native App ID comes before the Services ID, native sign-in keeps working but web sign-in is rejected by Apple.
-
+
Use this tool to generate a new Apple client secret. No keys leave your browser! Be aware that this tool does not currently work in Safari, so use Firefox or a Chrome-based browser instead.
diff --git a/apps/docs/content/guides/auth/social-login/auth-azure.mdx b/apps/docs/content/guides/auth/social-login/auth-azure.mdx
index 7e2a09b236c64..d56fbcf4298c2 100644
--- a/apps/docs/content/guides/auth/social-login/auth-azure.mdx
+++ b/apps/docs/content/guides/auth/social-login/auth-azure.mdx
@@ -142,7 +142,7 @@ Configure this by storing a value under _Azure Tenant URL_ in the Supabase Auth
## Add login code to your client app
-
+
Supabase Auth requires that Azure returns a valid email address. Therefore you must request the `email` scope in the `signInWithOAuth` method.
diff --git a/apps/docs/content/guides/auth/social-login/auth-facebook.mdx b/apps/docs/content/guides/auth/social-login/auth-facebook.mdx
index 43be477ac2d58..05c9b31f22668 100644
--- a/apps/docs/content/guides/auth/social-login/auth-facebook.mdx
+++ b/apps/docs/content/guides/auth/social-login/auth-facebook.mdx
@@ -41,7 +41,7 @@ From the `Add Products to your App` screen:
- Enter your callback URI under **Valid OAuth Redirect URIs** on the **Facebook Login Settings** page
- Click **Save Changes** at the bottom right
-
+
Your callback URI follows this pattern: `https://.supabase.co/auth/v1/callback`
@@ -64,7 +64,7 @@ You must configure the email permission in your Facebook app's Use Cases:
3. Verify that both `public_profile` and `email` show status **Ready for testing**
4. If `email` is not listed, click the **Add** button next to it
-
+
You can verify the permissions are set correctly by checking that both `public_profile` and `email` appear with a green check mark or "Ready for testing" status.
@@ -161,7 +161,7 @@ dependencies:
flutter_facebook_auth: ^7.0.0
```
-
+
Check [pub.dev](https://pub.dev/packages/flutter_facebook_auth) for the latest version of `flutter_facebook_auth`.
@@ -348,7 +348,7 @@ To add test users:
3. Add users as Testers, Developers, or Administrators
4. Users must accept the invitation from their Facebook notification settings
-
+
Development mode is sufficient for local development and testing. You only need to submit for App Review when you're ready to allow any Facebook user to authenticate with your app.
diff --git a/apps/docs/content/guides/auth/social-login/auth-kakao.mdx b/apps/docs/content/guides/auth/social-login/auth-kakao.mdx
index a2be73a0e70d2..dc228ac5ccf8d 100644
--- a/apps/docs/content/guides/auth/social-login/auth-kakao.mdx
+++ b/apps/docs/content/guides/auth/social-login/auth-kakao.mdx
@@ -75,7 +75,7 @@ If you don't need an email address (or `account_email` isn't available for your

-
+
In the Kakao Developers Portal, the "account_email" consent item is only available for apps that are registered as "Biz App". To convert your app to a "Biz App", go to **App Settings** > **App** > **General**, and complete the required fields in the **Business Information** section.
diff --git a/apps/docs/content/guides/auth/social-login/auth-workos.mdx b/apps/docs/content/guides/auth/social-login/auth-workos.mdx
index 077d2b4872836..912207c06036a 100644
--- a/apps/docs/content/guides/auth/social-login/auth-workos.mdx
+++ b/apps/docs/content/guides/auth/social-login/auth-workos.mdx
@@ -20,7 +20,7 @@ Visit the getting started page of the [WorkOS Dashboard](https://dashboard.worko
- `WORKOS_CLIENT_ID`
- `WORKOS_API_KEY`
-
+
You must be signed in to see these values.
@@ -94,7 +94,7 @@ async function signInWithWorkOS() {
}
```
-
+
You can find your `connection_id` in the WorkOS dashboard under the Organizations tab. Select your organization and then click View connection.
diff --git a/apps/docs/content/guides/auth/third-party/overview.mdx b/apps/docs/content/guides/auth/third-party/overview.mdx
index e110ec0e003c9..f2fcb750241c9 100644
--- a/apps/docs/content/guides/auth/third-party/overview.mdx
+++ b/apps/docs/content/guides/auth/third-party/overview.mdx
@@ -12,7 +12,7 @@ Supabase has first-class support for these third-party authentication providers:
- [AWS Cognito (with or without AWS Amplify)](/docs/guides/auth/third-party/aws-cognito)
- [WorkOS](/docs/guides/auth/third-party/workos)
-You can use these providers alongside Supabase Auth, or on their own, to access the [Data API (REST and GraphQL)](/docs/guides/database), [Storage](/docs/guides/storage), [Realtime](/docs/guides/storage) and [Functions](/docs/guides/functions) from your existing apps.
+You can use these providers alongside Supabase Auth, or on their own, to access the [Data API (REST and GraphQL)](/docs/guides/database/overview), [Storage](/docs/guides/storage), [Realtime](/docs/guides/storage) and [Functions](/docs/guides/functions) from your existing apps.
If you already have production apps using one of these authentication providers, and would like to use a Supabase feature, you no longer need to migrate your users to Supabase Auth or use workarounds like translating JWTs into the Supabase Auth format and using your project's signing secret.
diff --git a/apps/docs/content/guides/database/connecting-to-postgres.mdx b/apps/docs/content/guides/database/connecting-to-postgres.mdx
index f18555a9a9f5f..4045b69e5fce0 100644
--- a/apps/docs/content/guides/database/connecting-to-postgres.mdx
+++ b/apps/docs/content/guides/database/connecting-to-postgres.mdx
@@ -69,12 +69,12 @@ The Data APIs allow you to interact with your database using REST or GraphQL req
For convenience, you can also use the [Supabase client libraries](/docs/reference), which wrap the Data APIs with a developer-friendly interface and automatically handle authentication:
-- [JavaScript](/docs/reference/javascript)
-- [Flutter](/docs/reference/dart)
+- [JavaScript](/docs/reference/javascript/introduction)
+- [Flutter](/docs/reference/dart/introduction)
- [Swift](/docs/reference/swift)
-- [Python](/docs/reference/python)
-- [C#](/docs/reference/csharp)
-- [Kotlin](/docs/reference/kotlin)
+- [Python](/docs/reference/python/introduction)
+- [C#](/docs/reference/csharp/introduction)
+- [Kotlin](/docs/reference/kotlin/introduction)
## Direct connection
diff --git a/apps/docs/content/guides/database/connecting-to-postgres/serverless-drivers.mdx b/apps/docs/content/guides/database/connecting-to-postgres/serverless-drivers.mdx
index 87a78a6f9260c..88d0c4162713f 100644
--- a/apps/docs/content/guides/database/connecting-to-postgres/serverless-drivers.mdx
+++ b/apps/docs/content/guides/database/connecting-to-postgres/serverless-drivers.mdx
@@ -7,7 +7,7 @@ subtitle: 'Connecting to your Postgres database in serverless environments.'
Supabase provides several options for connecting to your Postgres database from serverless environments.
-[supabase-js](/docs/reference/javascript/introduction) is an isomorphic JavaScript client that uses the [auto-generated REST API](/docs/guides/api) and therefore works in any environment that supports HTTPS connections. This API has a built-in [connection pooler](/docs/guides/database/connecting-to-postgres#connection-pooler) and can serve thousands of simultaneous requests, and therefore is ideal for Serverless workloads.
+[supabase-js](/docs/reference/javascript/introduction) is an isomorphic JavaScript client that uses the [auto-generated REST API](/docs/guides/api) and therefore works in any environment that supports HTTPS connections. This API has a built-in [connection pooler](/docs/guides/database/connecting-to-postgres#poolers) and can serve thousands of simultaneous requests, and therefore is ideal for Serverless workloads.
## Vercel Edge Functions
diff --git a/apps/docs/content/guides/database/connection-management.mdx b/apps/docs/content/guides/database/connection-management.mdx
index 48b2c4f1b7b3e..2810bbe7f4b4a 100644
--- a/apps/docs/content/guides/database/connection-management.mdx
+++ b/apps/docs/content/guides/database/connection-management.mdx
@@ -7,7 +7,7 @@ subtitle: 'Using your connections resourcefully'
## Connections
-Every [Compute Add-On](/docs/guides/platform/compute-add-ons) has a pre-configured direct connection count and Supavisor pool size. This guide discusses ways to observe and manage them resourcefully.
+Every [Compute Add-On](/docs/guides/platform/compute-and-disk) has a pre-configured direct connection count and Supavisor pool size. This guide discusses ways to observe and manage them resourcefully.
### Configuring Supavisor's pool size
diff --git a/apps/docs/content/guides/database/custom-postgres-config.mdx b/apps/docs/content/guides/database/custom-postgres-config.mdx
index bf233cb012837..214b1f7989ee5 100644
--- a/apps/docs/content/guides/database/custom-postgres-config.mdx
+++ b/apps/docs/content/guides/database/custom-postgres-config.mdx
@@ -105,7 +105,7 @@ In order to overwrite the default settings, you must have `Owner` or `Administra
#### CLI supported parameters
-
+
If a setting you need is not yet configurable, [share your use case with us](/dashboard/support/new)! Let us know what setting you'd like to control, and we'll consider adding support in future updates.
@@ -165,8 +165,8 @@ Use the examples below with `supabase postgres-config update --project-ref " set "" to default;
1. Changes through the CLI might restart the database causing momentary disruption to existing database connections; in most cases this should not take more than a few seconds. However, you can use the --no-restart flag to bypass the restart and keep the connections intact. Keep in mind that this depends on the specific configuration changes you're making. if the change requires a restart, using the --no-restart flag will prevent the restart but you won't see those changes take effect until a restart is manually triggered. Additionally, some parameters are required to be the same on Primary and Read Replicas; not restarting in these cases can result in read replica failure if the Primary/Read Replicas restart in isolation.
2. Custom Postgres Config will always override the default optimizations generated by Supabase. When changing compute add-ons, you should also review and update your custom Postgres Config to ensure they remain compatible and effective with the updated compute.
-3. Some parameters (e.g. `wal_keep_size`) can increase disk utilization, triggering disk expansion, which in turn can lead to [increases in your bill](/docs/guides/platform/compute-add-ons#disk-io).
+3. Some parameters (e.g. `wal_keep_size`) can increase disk utilization, triggering disk expansion, which in turn can lead to [increases in your bill](/docs/guides/platform/compute-and-disk#disk).
diff --git a/apps/docs/content/guides/database/extensions/pg_net.mdx b/apps/docs/content/guides/database/extensions/pg_net.mdx
index d1a4505a50cf9..bb505ceae2063 100644
--- a/apps/docs/content/guides/database/extensions/pg_net.mdx
+++ b/apps/docs/content/guides/database/extensions/pg_net.mdx
@@ -363,7 +363,7 @@ select
) as request_id;
```
-### Call an endpoint every minute with [pg_cron](/docs/guides/database/extensions/pgcron)
+### Call an endpoint every minute with [pg_cron](/docs/guides/database/extensions/pg_cron)
The pg_cron extension enables Postgres to become its own cron server. With it you can schedule regular calls with up to a minute precision to endpoints.
diff --git a/apps/docs/content/guides/database/extensions/pgaudit.mdx b/apps/docs/content/guides/database/extensions/pgaudit.mdx
index 1f6ff73921abb..a451ef2d1381d 100644
--- a/apps/docs/content/guides/database/extensions/pgaudit.mdx
+++ b/apps/docs/content/guides/database/extensions/pgaudit.mdx
@@ -47,7 +47,7 @@ PGAudit can be configured with different levels of precision.
**PGAudit logging precision:**
-- **[Session](#session-logging):** Logs activity within a connection, such as a [psql](/docs/guides/database/connecting-to-postgres#connecting-with-psql) connection.
+- **[Session](#session-logging):** Logs activity within a connection, such as a [psql](/docs/guides/database/psql) connection.
- **[User](#user-logging):** Logs activity by a particular database user (for example, `anon` or `postgres`).
- **[Global](#global-logging):** Logs activity across the entire database.
- **[Object](#object-logging):** Logs events related to specific database objects (for example, the auth.users table).
@@ -83,7 +83,7 @@ Below is a limited example of how to assign PGAudit to monitor specific categori
### Session logging
-When you are connecting in a session environment, such as a [psql](/docs/guides/database/connecting-to-postgres#connecting-with-psql) connection, you can configure PGAudit to record events initiated within the session.
+When you are connecting in a session environment, such as a [psql](/docs/guides/database/psql) connection, you can configure PGAudit to record events initiated within the session.
diff --git a/apps/docs/content/guides/database/import-data.mdx b/apps/docs/content/guides/database/import-data.mdx
index 0b0262bdc7acf..ef33d3e57ef9f 100644
--- a/apps/docs/content/guides/database/import-data.mdx
+++ b/apps/docs/content/guides/database/import-data.mdx
@@ -16,7 +16,7 @@ You have multiple options for importing your data into Supabase:
3. [Using the Postgres `COPY` command](#option-3-using-postgres-copy-command)
4. [Using the Supabase API](#option-4-using-the-supabase-api)
-
+
If you're importing a large dataset or importing data into production, plan ahead and [prepare your database](#preparing-to-import-data).
@@ -77,7 +77,7 @@ The Supabase API allows you to programmatically import data into your tables. Yo
When importing data via the Supabase API, it's advisable to refrain from bulk imports. This helps ensure a smooth data transfer process and prevents any potential disruptions.
-Read more about [Rate Limiting, Resource Allocation, & Abuse Prevention.](/docs/guides/platform/going-into-prod#rate-limiting-resource-allocation--abuse-prevention)
+Read more about [Rate Limiting, Resource Allocation, & Abuse Prevention.](/docs/guides/deployment/going-into-prod#rate-limiting-resource-allocation--abuse-prevention)
diff --git a/apps/docs/content/guides/database/postgres/data-deletion.mdx b/apps/docs/content/guides/database/postgres/data-deletion.mdx
index eecfd8f66cb13..a686cf8bd9ab4 100644
--- a/apps/docs/content/guides/database/postgres/data-deletion.mdx
+++ b/apps/docs/content/guides/database/postgres/data-deletion.mdx
@@ -89,7 +89,7 @@ create view active_orders as
select * from orders where deleted_at is null;
```
-
+
Combine soft deletes with a scheduled hard-delete job (using [pg_cron](/docs/guides/database/extensions/pg_cron)) to permanently remove old soft-deleted rows in batches during low-traffic periods.
@@ -147,7 +147,7 @@ Dropping a regular index takes an `ACCESS EXCLUSIVE` lock on the index but **not
drop index if exists idx_users_legacy_field;
```
-
+
The `inspect` command in the [Supabase CLI](/docs/reference/cli/supabase-inspect-db-index-stats) can help you identify unused indexes:
diff --git a/apps/docs/content/guides/database/postgres/indexes.mdx b/apps/docs/content/guides/database/postgres/indexes.mdx
index ec1c5a24724d4..4982a26e37d79 100644
--- a/apps/docs/content/guides/database/postgres/indexes.mdx
+++ b/apps/docs/content/guides/database/postgres/indexes.mdx
@@ -26,7 +26,7 @@ create table persons (
);
```
-
+
All the queries in this guide can be run using the [SQL Editor](/dashboard/project/_/sql) in the Supabase Dashboard, or via `psql` if you're [connecting directly to the database](/docs/guides/database/connecting-to-postgres#direct-connections).
diff --git a/apps/docs/content/guides/database/postgres/setup-replication-external.mdx b/apps/docs/content/guides/database/postgres/setup-replication-external.mdx
index 797a8257c700a..66c23063c5564 100644
--- a/apps/docs/content/guides/database/postgres/setup-replication-external.mdx
+++ b/apps/docs/content/guides/database/postgres/setup-replication-external.mdx
@@ -42,7 +42,7 @@ PUBLICATION example_pub
WITH (copy_data = true, create_slot=false, slot_name=example_slot);
```
-
+
For projects running Postgres 17+, it is possible to subscribe to a [Read
Replica](/docs/guides/platform/read-replicas) by using your Read Replica's connection string.
diff --git a/apps/docs/content/guides/database/postgres/timeouts.mdx b/apps/docs/content/guides/database/postgres/timeouts.mdx
index 50d0bb9485da1..cdaadd602642b 100644
--- a/apps/docs/content/guides/database/postgres/timeouts.mdx
+++ b/apps/docs/content/guides/database/postgres/timeouts.mdx
@@ -70,7 +70,7 @@ Run the following query to change a role's timeout:
alter role example_role set statement_timeout = '10min'; -- could also use seconds '10s'
```
-
+
If you are changing the timeout for the Supabase Client API calls, you will need to reload PostgREST to reflect the timeout changes by running the following script:
diff --git a/apps/docs/content/guides/database/prisma.mdx b/apps/docs/content/guides/database/prisma.mdx
index f286f2bc8d13f..059f603190c86 100644
--- a/apps/docs/content/guides/database/prisma.mdx
+++ b/apps/docs/content/guides/database/prisma.mdx
@@ -325,7 +325,7 @@ If you plan to solely use Prisma instead of the Supabase Data API (PostgREST), t
--to-schema prisma/schema.prisma \
--script > prisma/migrations/0_init_supabase/migration.sql
```
-
+
If there are any conflicts, reference [Prisma's official doc](https://www.prisma.io/docs/orm/prisma-migrate/getting-started#work-around-features-not-supported-by-prisma-schema-language) or the [trouble shooting guide](/docs/guides/database/prisma/prisma-troubleshooting) for more details
diff --git a/apps/docs/content/guides/database/prisma/prisma-troubleshooting.mdx b/apps/docs/content/guides/database/prisma/prisma-troubleshooting.mdx
index b9e9ff75b1433..cbff2bd20ceff 100644
--- a/apps/docs/content/guides/database/prisma/prisma-troubleshooting.mdx
+++ b/apps/docs/content/guides/database/prisma/prisma-troubleshooting.mdx
@@ -55,7 +55,7 @@ Prisma couldn't establish a connection with Postgres or Supavisor before the tim
#### Solutions: [#solution-cant-reach-database-server-at]
-- **Check database health**: Use the [Observability Dashboard](/dashboard/project/_/observability/database) to monitor CPU, memory, and I/O usage. If the database is overloaded, consider increasing your [compute size](/docs/guides/platform/compute-add-ons) or [optimizing your queries](/docs/guides/database/query-optimization).
+- **Check database health**: Use the [Observability Dashboard](/dashboard/project/_/observability/database) to monitor CPU, memory, and I/O usage. If the database is overloaded, consider increasing your [compute size](/docs/guides/platform/compute-and-disk) or [optimizing your queries](/docs/guides/database/query-optimization).
- **Verify connection string**: Double-check the connection string in your Prisma configuration to ensure it matches in your [project connect page](/dashboard/project/_?showConnect=true).
- **Increase connection timeout**: Try increasing the `connect_timeout` parameter in your Prisma configuration to give it more time to establish a connection.
diff --git a/apps/docs/content/guides/database/replication/manual-replication-setup.mdx b/apps/docs/content/guides/database/replication/manual-replication-setup.mdx
index b751ef6ce4794..2fae0d1cd7a5a 100644
--- a/apps/docs/content/guides/database/replication/manual-replication-setup.mdx
+++ b/apps/docs/content/guides/database/replication/manual-replication-setup.mdx
@@ -99,7 +99,7 @@ You can follow those steps with the following modifications:
1. Use the `postgres` user for replication (or create a new user with replication permissions: `ALTER USER WITH REPLICATION;`)
2. Set `pluginname` to `test-decoding`
3. Depending on your databases the pre-assessment may fail. It is not required.
-4. Increase `wal_sender_timeout` and other settings (`max_wal_size`) using the [Supabase CLI](/docs/guides/platform/custom-postgres-config)
+4. Increase `wal_sender_timeout` and other settings (`max_wal_size`) using the [Supabase CLI](/docs/guides/database/custom-postgres-config)
diff --git a/apps/docs/content/guides/database/replication/pipelines.mdx b/apps/docs/content/guides/database/replication/pipelines.mdx
index 3812e0a658833..fa8f37d168efe 100644
--- a/apps/docs/content/guides/database/replication/pipelines.mdx
+++ b/apps/docs/content/guides/database/replication/pipelines.mdx
@@ -27,7 +27,7 @@ For billing examples and optimization guidance, see [Manage Pipelines usage](/do
Pipelines requires two main components: a **Postgres publication** (defines what to replicate) and a **destination** (where data is sent). Supabase runs the managed pipeline that reads from the publication and writes to the destination. Follow these steps to set up your replication pipeline.
-
+
If you already have a Postgres publication set up, you can skip to [Step 2: Enable Pipelines](#step-2-enable-pipelines).
diff --git a/apps/docs/content/guides/database/secure-data.mdx b/apps/docs/content/guides/database/secure-data.mdx
index b1539b5f51399..b554a772019bc 100644
--- a/apps/docs/content/guides/database/secure-data.mdx
+++ b/apps/docs/content/guides/database/secure-data.mdx
@@ -15,7 +15,7 @@ Use Supabase client libraries, REST, or GraphQL with a publishable key. Protect
### Edge Functions
-Put custom server-side logic between your client and database with [Edge Functions](/docs/guides/functions). You can use secrets, API keys, or database connection strings inside the function, and you can [disable the Data API](/docs/guides/database/data-api#disable-the-data-api-completely) if your app only accesses data this way.
+Put custom server-side logic between your client and database with [Edge Functions](/docs/guides/functions). You can use secrets, API keys, or database connection strings inside the function, and you can [disable the Data API](/docs/guides/api/securing-your-api#disable-the-data-api) if your app only accesses data this way.
### Direct database connections
diff --git a/apps/docs/content/guides/database/supavisor.mdx b/apps/docs/content/guides/database/supavisor.mdx
index 295a5612d67c4..62814985a47d5 100644
--- a/apps/docs/content/guides/database/supavisor.mdx
+++ b/apps/docs/content/guides/database/supavisor.mdx
@@ -7,7 +7,7 @@ Supavisor logs are available under [Pooler Logs](/dashboard/project/_/logs/poole
| Error Type | Description | Resolution Link |
| ------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------------------- |
-| Max client connections reached | This error happens when the number of connections to Supavisor is more than [the allowed limit of your compute add-on](/docs/guides/platform/compute-add-ons). | Follow this [guide](https://github.com/orgs/supabase/discussions/22305) to resolve. |
+| Max client connections reached | This error happens when the number of connections to Supavisor is more than [the allowed limit of your compute add-on](/docs/guides/platform/compute-and-disk). | Follow this [guide](https://github.com/orgs/supabase/discussions/22305) to resolve. |
| Connection failed `{:error, :eaddrnotavail}` to 'db.xxx.supabase.co':5432 | Supavisor cannot connect to the customer database. This is usually caused if the target database is unable to respond. | N/A |
| Connection failed `{:error, :nxdomain}` to 'db.xxx.supabase.co':5432 | Supavisor cannot connect to the customer database. This is usually caused if the target database is unable to respond. | N/A |
| Connection closed when state was authentication | This error happens when either the database doesn’t exist or if the user doesn't have the right credentials. | N/A |
diff --git a/apps/docs/content/guides/database/tables.mdx b/apps/docs/content/guides/database/tables.mdx
index 96c0570f5dcb4..8a2e24b67500c 100644
--- a/apps/docs/content/guides/database/tables.mdx
+++ b/apps/docs/content/guides/database/tables.mdx
@@ -452,7 +452,7 @@ create table private.salaries (
);
```
-
+
If you want to access a custom schema through the Supabase Data API, you need to expose it and grant the appropriate permissions. See [Using Custom Schemas](/docs/guides/api/using-custom-schemas) for detailed steps. For security best practices around schema exposure, see [Securing your API](/docs/guides/api/securing-your-api).
diff --git a/apps/docs/content/guides/database/testing.mdx b/apps/docs/content/guides/database/testing.mdx
index 17c9a5abd3e95..7b14f54e7aa85 100644
--- a/apps/docs/content/guides/database/testing.mdx
+++ b/apps/docs/content/guides/database/testing.mdx
@@ -14,7 +14,7 @@ To ensure that queries return the expected data, RLS policies are correctly appl
You can use the Supabase CLI to test your database. The minimum required version of the CLI is [v1.11.4](https://github.com/supabase/cli/releases). To get started:
-- [Install the Supabase CLI](/docs/guides/cli) on your local machine
+- [Install the Supabase CLI](/docs/guides/local-development) on your local machine
### Creating a test
diff --git a/apps/docs/content/guides/database/webhooks.mdx b/apps/docs/content/guides/database/webhooks.mdx
index 47496c0c868a9..4c3087b3c4d23 100644
--- a/apps/docs/content/guides/database/webhooks.mdx
+++ b/apps/docs/content/guides/database/webhooks.mdx
@@ -12,7 +12,7 @@ You can hook into three table events: `INSERT`, `UPDATE`, and `DELETE`. All even
## Webhooks vs triggers
-Database Webhooks are very similar to triggers, and that's because Database Webhooks are a convenience wrapper around triggers using the [pg_net](/docs/guides/database/extensions/pgnet) extension. This extension is asynchronous, and therefore will not block your database changes for long-running network requests.
+Database Webhooks are very similar to triggers, and that's because Database Webhooks are a convenience wrapper around triggers using the [pg_net](/docs/guides/database/extensions/pg_net) extension. This extension is asynchronous, and therefore will not block your database changes for long-running network requests.
This video demonstrates how you can create a new customer in Stripe each time a row is inserted into a `profiles` table:
@@ -96,4 +96,4 @@ If you're experiencing connection issues with webhooks locally, verify you're us
## Resources
-- [pg_net](/docs/guides/database/extensions/pgnet): an async networking extension for Postgres
+- [pg_net](/docs/guides/database/extensions/pg_net): an async networking extension for Postgres
diff --git a/apps/docs/content/guides/deployment.mdx b/apps/docs/content/guides/deployment.mdx
index 5fc4a55cf77e1..23a111898f4e3 100644
--- a/apps/docs/content/guides/deployment.mdx
+++ b/apps/docs/content/guides/deployment.mdx
@@ -67,7 +67,7 @@ Branching creates isolated preview environments for each pull request, so you ca
Branching gives each pull request its own isolated Supabase environment with a full copy of your database schema (without any production data), so you can validate migrations and test your app end-to-end before merging to `main`.
-
+
Read the [self-hosting guides](/docs/guides/self-hosting) for instructions on hosting your own Supabase stack.
diff --git a/apps/docs/content/guides/deployment/branching/configuration.mdx b/apps/docs/content/guides/deployment/branching/configuration.mdx
index e6c9f9df3b407..281b28383d21a 100644
--- a/apps/docs/content/guides/deployment/branching/configuration.mdx
+++ b/apps/docs/content/guides/deployment/branching/configuration.mdx
@@ -35,7 +35,7 @@ supabase --experimental branches create --persistent
# Do you want to create a branch named develop? [Y/n]
```
-
+
To retrieve the project ID for an existing branch, use the `branches list` command:
@@ -250,7 +250,7 @@ max_rows = 500
pool_size = 25
```
-
+
To retrieve the project ID for an existing branch, use the `branches list` command:
@@ -277,7 +277,7 @@ client_id = "env(GOOGLE_CLIENT_ID)"
secret = "env(GOOGLE_CLIENT_SECRET)"
```
-
+
To retrieve the project ID for an existing branch, use the `branches list` command:
diff --git a/apps/docs/content/guides/deployment/branching/github-integration.mdx b/apps/docs/content/guides/deployment/branching/github-integration.mdx
index 00ab2a97bd6e4..c04cb14f4fe61 100644
--- a/apps/docs/content/guides/deployment/branching/github-integration.mdx
+++ b/apps/docs/content/guides/deployment/branching/github-integration.mdx
@@ -25,7 +25,7 @@ If `supabase/` is nested deeper in your repository, enter its parent directory i
## Preparing your Git repository
-You will be using the [Supabase CLI](/docs/guides/cli) to initialize your local `./supabase` directory:
+You will be using the [Supabase CLI](/docs/guides/local-development) to initialize your local `./supabase` directory:
diff --git a/apps/docs/content/guides/deployment/database-migrations.mdx b/apps/docs/content/guides/deployment/database-migrations.mdx
index d50618060c22e..33875de908ad8 100644
--- a/apps/docs/content/guides/deployment/database-migrations.mdx
+++ b/apps/docs/content/guides/deployment/database-migrations.mdx
@@ -15,7 +15,7 @@ For this guide, we'll create a table called `employees` and see how we can make
You will need to [install](/docs/guides/local-development#quickstart) the Supabase CLI and start the local development stack.
-
+
If a lock timeout error occurs, in your migration file, consider increasing your [`lock_timeout`](https://postgresqlco.nf/doc/en/param/lock_timeout/) setting.
@@ -437,7 +437,7 @@ supabase db push
-
+
For a more automated deployment approach, consider using [Supabase Branching](/docs/guides/deployment/branching) or a CI/CD pipeline that runs `supabase db push` on merge to your main branch.
diff --git a/apps/docs/content/guides/deployment/going-into-prod.mdx b/apps/docs/content/guides/deployment/going-into-prod.mdx
index ffa3b028896a1..03ad5b215548c 100644
--- a/apps/docs/content/guides/deployment/going-into-prod.mdx
+++ b/apps/docs/content/guides/deployment/going-into-prod.mdx
@@ -12,7 +12,7 @@ After developing your project and deciding it's production ready, you should run
## Security
-
+
Check and review issues in your database using [Security Advisor](/dashboard/project/_/database/security-advisor).
@@ -43,7 +43,7 @@ Check and review issues in your database using [Security Advisor](/dashboard/pro
## Performance
-
+
Check and review issues in your database using [Performance Advisor](/dashboard/project/_/database/performance-advisor).
@@ -86,7 +86,7 @@ Check and review issues in your database using [Performance Advisor](/dashboard/
Running databases is a shared responsibility between you and Supabase. There are some things that we can take care of for you, and some things that you are responsible for.
-Read more details in our [Shared Responsibility Model guide](/docs/guides/platform/shared-responsibility-model).
+Read more details in our [Shared Responsibility Model guide](/docs/guides/deployment/shared-responsibility-model).
diff --git a/apps/docs/content/guides/deployment/managing-environments.mdx b/apps/docs/content/guides/deployment/managing-environments.mdx
index 04213b6b00043..96b87f8d01338 100644
--- a/apps/docs/content/guides/deployment/managing-environments.mdx
+++ b/apps/docs/content/guides/deployment/managing-environments.mdx
@@ -92,7 +92,7 @@ supabase db reset
This command recreates your local database from scratch and applies all migration scripts under `supabase/migrations` directory. Now your local database is up to date.
-
+
The new migration command also supports stdin as input. This allows you to pipe in an existing script from another file or stdout:
@@ -146,7 +146,7 @@ This is because the default schema diff tool does not account for default privil
Commit the new migration script to git and you are ready to deploy.
-
+
Alternatively, you may pass in the `--use-migra` experimental flag to generate a more concise migration using [`migra`](https://github.com/djrobstep/migra).
diff --git a/apps/docs/content/guides/deployment/maturity-model.mdx b/apps/docs/content/guides/deployment/maturity-model.mdx
index 6caddaaf96c1d..7c222ad28b9dd 100644
--- a/apps/docs/content/guides/deployment/maturity-model.mdx
+++ b/apps/docs/content/guides/deployment/maturity-model.mdx
@@ -22,21 +22,21 @@ Resources:
## In production
-Once your application is live, you should never change your database using the Dashboard - everything should be done with [Migrations](/docs/guides/cli/managing-environments#create-a-new-migration). Some other important things to consider at this point include:
+Once your application is live, you should never change your database using the Dashboard - everything should be done with [Migrations](/docs/guides/deployment/managing-environments#create-a-new-migration). Some other important things to consider at this point include:
- The Dashboard has various [access levels](/docs/guides/platform/access-control) that can prevent changes being made via the UI.
-- Design a [safe workflow](/docs/guides/platform/shared-responsibility-model#you-decide-your-own-workflow) for managing your database. We strongly recommend running [multiple environments](/docs/guides/cli/managing-environments) as part of your development workflow (`local` -> `staging` -> `prod`).
-- Do not share any production passwords with your team, _especially_ your `postgres` password. All changes should be made via version-controlled migrations which run via a bastion host or a CI platform (like [GitHub Actions](/docs/guides/cli/managing-environments#configure-github-actions). If you use GitHub Actions, use [approval workflows](https://docs.github.com/en/actions/managing-workflow-runs/reviewing-deployments) to prevent any migrations being run accidentally.
+- Design a [safe workflow](/docs/guides/deployment/shared-responsibility-model#you-decide-your-own-workflow) for managing your database. We strongly recommend running [multiple environments](/docs/guides/deployment/managing-environments) as part of your development workflow (`local` -> `staging` -> `prod`).
+- Do not share any production passwords with your team, _especially_ your `postgres` password. All changes should be made via version-controlled migrations which run via a bastion host or a CI platform (like [GitHub Actions](/docs/guides/deployment/managing-environments#configure-github-actions). If you use GitHub Actions, use [approval workflows](https://docs.github.com/en/actions/managing-workflow-runs/reviewing-deployments) to prevent any migrations being run accidentally.
- Restrict production access to your database using [Network Restrictions](/docs/guides/platform/network-restrictions).
- As your database to grows, we strongly recommend moving to [Point-in-Time Recovery](/docs/guides/platform/backups#point-in-time-recovery). This is safer and has less impact on your database performance during maintenance windows.
-- Read the [Production Checklist](/docs/guides/platform/going-into-prod) and familiarize your team with the [Shared Responsibilities](/docs/guides/platform/shared-responsibility-model) between your organization and Supabase.
+- Read the [Production Checklist](/docs/guides/deployment/going-into-prod) and familiarize your team with the [Shared Responsibilities](/docs/guides/deployment/shared-responsibility-model) between your organization and Supabase.
Resources:
- [Database migrations](/docs/guides/deployment/database-migrations)
- [Managing access on the Dashboard](/docs/guides/platform/access-control)
- [PGAudit for Postgres](/docs/guides/database/extensions/pgaudit)
-- [Managing environments](/docs/guides/cli/managing-environments)
+- [Managing environments](/docs/guides/deployment/managing-environments)
## Enterprise
diff --git a/apps/docs/content/guides/deployment/shared-responsibility-model.mdx b/apps/docs/content/guides/deployment/shared-responsibility-model.mdx
index e6d82cc9638c7..41c5d17503931 100644
--- a/apps/docs/content/guides/deployment/shared-responsibility-model.mdx
+++ b/apps/docs/content/guides/deployment/shared-responsibility-model.mdx
@@ -42,7 +42,7 @@ We will also provide you with security alerts through [Security Advisor](/dashbo
There are _many_ ways to work with Supabase.
-You can use our Dashboard, our client libraries, external tools like Prisma and Drizzle, or migration tools like our CLI, Flyway, Sqitch, and anything else that is Postgres-compatible. You can develop directly on your database while you're getting started, run migrations from [local to production](/docs/guides/getting-started/local-development), or you can use [multiple environments](/docs/guides/cli/managing-environments).
+You can use our Dashboard, our client libraries, external tools like Prisma and Drizzle, or migration tools like our CLI, Flyway, Sqitch, and anything else that is Postgres-compatible. You can develop directly on your database while you're getting started, run migrations from [local to production](/docs/guides/local-development/database-migrations), or you can use [multiple environments](/docs/guides/deployment/managing-environments).
None of these are right or wrong. It depends on the stage of your project. You _definitely_ shouldn’t be developing on your database directly when you’re in production - but that’s absolutely fine when you’re prototyping and don’t have users.
@@ -81,7 +81,7 @@ You are responsible of provisioning enough compute to run the workload that your
## Before going to production
-We recommend reviewing and applying the recommendations offered in our [Production Checklist](/docs/guides/platform/going-into-prod). This checklist covers the responsibilities discussed here and a few additional general production readiness best practices.
+We recommend reviewing and applying the recommendations offered in our [Production Checklist](/docs/guides/deployment/going-into-prod). This checklist covers the responsibilities discussed here and a few additional general production readiness best practices.
## SOC 2 and compliance
@@ -95,7 +95,7 @@ You can use Supabase to store and process Protected Health Information (PHI). Yo
- [Marking specific projects as HIPAA projects](/docs/guides/platform/hipaa-projects) and addressing security issues raised by the advisor.
- Ensuring [MFA is enabled](/docs/guides/platform/multi-factor-authentication) on all Supabase accounts.
- [Enforce MFA](/docs/guides/platform/mfa/org-mfa-enforcement) as a requirement to access the organization
-- Enabling [Point in Time Recovery](/docs/guides/platform/backups#point-in-time-recovery) which requires at least a [small compute add-on](/docs/guides/platform/compute-add-ons).
+- Enabling [Point in Time Recovery](/docs/guides/platform/backups#point-in-time-recovery) which requires at least a [small compute add-on](/docs/guides/platform/compute-and-disk).
- Turning on [SSL Enforcement](/docs/guides/platform/ssl-enforcement).
- Enabling [Network Restrictions](/docs/guides/platform/network-restrictions).
- Keeping [Postgres connection logging](/docs/guides/platform/postgres-connection-logging) enabled. Supabase sets `log_connections` to off by default for new projects. Projects that need HIPAA compliance should keep connection logging on for audit trails, and the Security Advisor warns if it is disabled.
diff --git a/apps/docs/content/guides/functions/ai-models.mdx b/apps/docs/content/guides/functions/ai-models.mdx
index 816c715bfe6b5..be13fa2acbfdb 100644
--- a/apps/docs/content/guides/functions/ai-models.mdx
+++ b/apps/docs/content/guides/functions/ai-models.mdx
@@ -26,7 +26,7 @@ Create a new inference session:
const model = new Supabase.ai.Session('model-name')
```
-
+
To get type hints and checks for the API, import types from `functions-js`:
diff --git a/apps/docs/content/guides/functions/auth-legacy-jwt.mdx b/apps/docs/content/guides/functions/auth-legacy-jwt.mdx
index 66375c887974c..72f19204c05ce 100644
--- a/apps/docs/content/guides/functions/auth-legacy-jwt.mdx
+++ b/apps/docs/content/guides/functions/auth-legacy-jwt.mdx
@@ -37,7 +37,7 @@ Deno.serve(async (req: Request) => {
})
```
-
+
This context setting happens in the `Deno.serve()` callback argument, so that the `Authorization` header is set for each individual request scope.
diff --git a/apps/docs/content/guides/functions/cors.mdx b/apps/docs/content/guides/functions/cors.mdx
index eb0b2a1ed2f8f..1ca46368fd5b9 100644
--- a/apps/docs/content/guides/functions/cors.mdx
+++ b/apps/docs/content/guides/functions/cors.mdx
@@ -25,7 +25,7 @@ export default {
If your function doesn't use `withSupabase`, add the headers yourself. See the [example on GitHub](https://github.com/supabase/supabase/blob/master/examples/edge-functions/supabase/functions/browser-with-cors/index.ts).
-
+
**For `@supabase/supabase-js` v2.95.0 and later:** Import CORS headers directly from the SDK to ensure they stay synchronized with any new headers added to the client libraries.
diff --git a/apps/docs/content/guides/functions/deploy.mdx b/apps/docs/content/guides/functions/deploy.mdx
index d1a05e34bf13f..68fdf89629706 100644
--- a/apps/docs/content/guides/functions/deploy.mdx
+++ b/apps/docs/content/guides/functions/deploy.mdx
@@ -34,7 +34,7 @@ Get the project ID associated with your function:
supabase projects list
```
-
+
If you haven't yet created a Supabase project, you can do so by visiting [database.new](https://database.new).
@@ -224,7 +224,7 @@ pipelines:
### Function configuration
-Individual function configuration like [JWT verification](/docs/guides/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
+Individual function configuration like [JWT verification](/docs/guides/local-development/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/local-development/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
```toml
[functions.hello-world]
diff --git a/apps/docs/content/guides/functions/development-environment.mdx b/apps/docs/content/guides/functions/development-environment.mdx
index 4f75500e8961a..903ba2c2ffe1c 100644
--- a/apps/docs/content/guides/functions/development-environment.mdx
+++ b/apps/docs/content/guides/functions/development-environment.mdx
@@ -8,7 +8,7 @@ tocVideo: 'lFhU3L8VoSQ'
-Before getting started, make sure you have the Supabase CLI installed. Check out the [CLI installation guide](/docs/guides/cli) for installation methods and troubleshooting.
+Before getting started, make sure you have the Supabase CLI installed. Check out the [CLI installation guide](/docs/guides/local-development) for installation methods and troubleshooting.
diff --git a/apps/docs/content/guides/functions/development-tips.mdx b/apps/docs/content/guides/functions/development-tips.mdx
index edddd412140aa..73ef57183b178 100644
--- a/apps/docs/content/guides/functions/development-tips.mdx
+++ b/apps/docs/content/guides/functions/development-tips.mdx
@@ -47,7 +47,7 @@ We recommend this folder structure:
### Using config.toml
-Individual function configuration like [JWT verification](/docs/guides/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
+Individual function configuration like [JWT verification](/docs/guides/local-development/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/local-development/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
```toml supabase/config.toml
[functions.hello-world]
diff --git a/apps/docs/content/guides/functions/examples/auth-send-email-hook-react-email-resend.mdx b/apps/docs/content/guides/functions/examples/auth-send-email-hook-react-email-resend.mdx
index 459f7b7ae87f7..07f5f62f357c1 100644
--- a/apps/docs/content/guides/functions/examples/auth-send-email-hook-react-email-resend.mdx
+++ b/apps/docs/content/guides/functions/examples/auth-send-email-hook-react-email-resend.mdx
@@ -19,7 +19,7 @@ To get the most out of this guide, you’ll need to:
- [Create a Resend API key](https://resend.com/api-keys)
- [Verify your domain](https://resend.com/domains)
-Make sure you have the latest version of the [Supabase CLI](/docs/guides/cli#installation) installed.
+Make sure you have the latest version of the [Supabase CLI](/docs/guides/local-development/cli/getting-started#installing-the-supabase-cli) installed.
### 1. Create Supabase function
diff --git a/apps/docs/content/guides/functions/examples/elevenlabs-generate-speech-stream.mdx b/apps/docs/content/guides/functions/examples/elevenlabs-generate-speech-stream.mdx
index fc2fc0e67d6fa..23c4413a7c356 100644
--- a/apps/docs/content/guides/functions/examples/elevenlabs-generate-speech-stream.mdx
+++ b/apps/docs/content/guides/functions/examples/elevenlabs-generate-speech-stream.mdx
@@ -8,7 +8,7 @@ tocVideo: '4Roog4PAmZ8'
In this tutorial you will learn how to build an edge API to generate, stream, store, and cache speech using Supabase Edge Functions, Supabase Storage, and [ElevenLabs text to speech API](https://elevenlabs.io/text-to-speech).
-
+
Find the [example project on GitHub](https://github.com/elevenlabs/elevenlabs-examples/tree/main/examples/text-to-speech/supabase/stream-and-cache-storage).
@@ -43,7 +43,7 @@ allowed_mime_types = ["audio/mp3"]
objects_path = "./audio"
```
-
+
Upon running `supabase start` this will create a new storage bucket in your local Supabase project. Should you want to push this to your hosted Supabase project, you can run `supabase seed buckets --linked`.
@@ -58,7 +58,7 @@ To use background tasks in Supabase Edge Functions when developing locally, you
policy = "per_worker"
```
-
+
When running with `per_worker` policy, Function won't auto-reload on edits. You will need to manually restart it by running `supabase functions serve`.
@@ -87,7 +87,7 @@ ELEVENLABS_API_KEY=your_api_key
The project uses a couple of dependencies:
-- The [@supabase/supabase-js](/docs/reference/javascript) library to interact with the Supabase database.
+- The [@supabase/supabase-js](/docs/reference/javascript/introduction) library to interact with the Supabase database.
- The ElevenLabs [JavaScript SDK](https://github.com/elevenlabs/elevenlabs-js) to interact with the text-to-speech API.
- The open-source [object-hash](https://www.npmjs.com/package/object-hash) to generate a hash from the request parameters.
diff --git a/apps/docs/content/guides/functions/examples/elevenlabs-transcribe-speech.mdx b/apps/docs/content/guides/functions/examples/elevenlabs-transcribe-speech.mdx
index b5b574b5e98ed..3b7e5cc28142d 100644
--- a/apps/docs/content/guides/functions/examples/elevenlabs-transcribe-speech.mdx
+++ b/apps/docs/content/guides/functions/examples/elevenlabs-transcribe-speech.mdx
@@ -10,7 +10,7 @@ In this tutorial you will learn how to build a Telegram bot that transcribes aud
To check out what the end result will look like, you can test out the [t.me/ElevenLabsScribeBot](https://t.me/ElevenLabsScribeBot)
-
+
Find the [example project on GitHub](https://github.com/elevenlabs/elevenlabs-examples/tree/main/examples/speech-to-text/telegram-transcription-bot).
@@ -97,7 +97,7 @@ FUNCTION_SECRET=random_secret
The project uses a couple of dependencies:
- The open-source [grammY Framework](https://grammy.dev/) to handle the Telegram webhook requests.
-- The [@supabase/supabase-js](/docs/reference/javascript) library to interact with the Supabase database.
+- The [@supabase/supabase-js](/docs/reference/javascript/introduction) library to interact with the Supabase database.
- The ElevenLabs [JavaScript SDK](https://github.com/elevenlabs/elevenlabs-js) to interact with the speech-to-text API.
Since Supabase Edge Function uses the [Deno runtime](https://deno.land/), you don't need to install the dependencies, rather you can [import](https://docs.deno.com/examples/npm/) them via the `npm:` prefix.
diff --git a/apps/docs/content/guides/functions/examples/github-actions.mdx b/apps/docs/content/guides/functions/examples/github-actions.mdx
index 5b665d8f4c8e1..54952b728b57f 100644
--- a/apps/docs/content/guides/functions/examples/github-actions.mdx
+++ b/apps/docs/content/guides/functions/examples/github-actions.mdx
@@ -45,7 +45,7 @@ jobs:
Since Supabase CLI [v1.62.0](https://github.com/supabase/cli/releases/tag/v1.62.0) you can deploy all functions with a single command.
-Individual function configuration like [JWT verification](/docs/guides/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
+Individual function configuration like [JWT verification](/docs/guides/local-development/cli/config#functions.function_name.verify_jwt) and [import map location](/docs/guides/local-development/cli/config#functions.function_name.import_map) can be set via the `config.toml` file.
```toml
[functions.hello-world]
diff --git a/apps/docs/content/guides/functions/examples/image-manipulation.mdx b/apps/docs/content/guides/functions/examples/image-manipulation.mdx
index 7bddc3ed424e0..4294054085bee 100644
--- a/apps/docs/content/guides/functions/examples/image-manipulation.mdx
+++ b/apps/docs/content/guides/functions/examples/image-manipulation.mdx
@@ -16,7 +16,7 @@ Edge Functions currently doesn't support image processing libraries such as `Sha
### Prerequisites
-Make sure you have the latest version of the [Supabase CLI](/docs/guides/cli#installation) installed.
+Make sure you have the latest version of the [Supabase CLI](/docs/guides/local-development/cli/getting-started#installing-the-supabase-cli) installed.
### Create the Edge Function
diff --git a/apps/docs/content/guides/functions/examples/mcp-server-mcp-lite.mdx b/apps/docs/content/guides/functions/examples/mcp-server-mcp-lite.mdx
index fc22b0f717a05..9b6cebcbe2e2b 100644
--- a/apps/docs/content/guides/functions/examples/mcp-server-mcp-lite.mdx
+++ b/apps/docs/content/guides/functions/examples/mcp-server-mcp-lite.mdx
@@ -29,7 +29,7 @@ You need:
- [Docker](https://docs.docker.com/get-docker/) (to run Supabase locally)
- [Deno](https://deno.land/) (Supabase Edge Functions runtime)
-- [Supabase CLI](/docs/guides/cli/getting-started)
+- [Supabase CLI](/docs/guides/local-development/cli/getting-started)
## Create a new MCP server
diff --git a/apps/docs/content/guides/functions/examples/send-emails.mdx b/apps/docs/content/guides/functions/examples/send-emails.mdx
index c9bcef0f72305..54a4a1b639691 100644
--- a/apps/docs/content/guides/functions/examples/send-emails.mdx
+++ b/apps/docs/content/guides/functions/examples/send-emails.mdx
@@ -13,7 +13,7 @@ To get the most out of this guide, you’ll need to:
- [Create an API key](https://resend.com/api-keys)
- [Verify your domain](https://resend.com/domains)
-Make sure you have the latest version of the [Supabase CLI](/docs/guides/cli#installation) installed.
+Make sure you have the latest version of the [Supabase CLI](/docs/guides/local-development/cli/getting-started#installing-the-supabase-cli) installed.
### 1. Create Supabase function
diff --git a/apps/docs/content/guides/functions/examples/sentry-monitoring.mdx b/apps/docs/content/guides/functions/examples/sentry-monitoring.mdx
index 1bdb92f7b9601..065a6cfe8ac65 100644
--- a/apps/docs/content/guides/functions/examples/sentry-monitoring.mdx
+++ b/apps/docs/content/guides/functions/examples/sentry-monitoring.mdx
@@ -8,7 +8,7 @@ Add the [Sentry Deno SDK](https://docs.sentry.io/platforms/javascript/guides/den
### Prerequisites
- [Create a Sentry account](https://sentry.io/signup/).
-- Make sure you have the latest version of the [Supabase CLI](/docs/guides/cli#installation) installed.
+- Make sure you have the latest version of the [Supabase CLI](/docs/guides/local-development/cli/getting-started#installing-the-supabase-cli) installed.
### 1. Create Supabase function
diff --git a/apps/docs/content/guides/functions/examples/upstash-redis.mdx b/apps/docs/content/guides/functions/examples/upstash-redis.mdx
index 7cd80c8ddaf56..329607922c289 100644
--- a/apps/docs/content/guides/functions/examples/upstash-redis.mdx
+++ b/apps/docs/content/guides/functions/examples/upstash-redis.mdx
@@ -28,7 +28,7 @@ cp supabase/functions/upstash-redis-counter/.env.example supabase/functions/upst
## Code
-Make sure you have the latest version of the [Supabase CLI installed](/docs/guides/cli#installation).
+Make sure you have the latest version of the [Supabase CLI installed](/docs/guides/local-development/cli/getting-started#installing-the-supabase-cli).
Create a new function in your project:
diff --git a/apps/docs/content/guides/functions/quickstart-dashboard.mdx b/apps/docs/content/guides/functions/quickstart-dashboard.mdx
index 14db8b23f35d1..60c641f0ddf7e 100644
--- a/apps/docs/content/guides/functions/quickstart-dashboard.mdx
+++ b/apps/docs/content/guides/functions/quickstart-dashboard.mdx
@@ -9,7 +9,7 @@ Supabase allows you to create Supabase Edge Functions directly from the Supabase
This guide will walk you through creating, testing, and deploying your first Edge Function using the Supabase Dashboard. You'll have a working function running globally in under 10 minutes.
-
+
You can also create and deploy functions using the Supabase CLI. Check out our [CLI Quickstart guide](/docs/guides/functions/quickstart).
@@ -249,7 +249,7 @@ Now that your function is deployed, you can access it from your local developmen
-Before getting started, make sure you have the **Supabase CLI installed**. Check out the [CLI installation guide](/docs/guides/cli) for installation methods and troubleshooting.
+Before getting started, make sure you have the **Supabase CLI installed**. Check out the [CLI installation guide](/docs/guides/local-development) for installation methods and troubleshooting.
diff --git a/apps/docs/content/guides/functions/quickstart.mdx b/apps/docs/content/guides/functions/quickstart.mdx
index 600e268ff9aaa..9b11d1ec6d666 100644
--- a/apps/docs/content/guides/functions/quickstart.mdx
+++ b/apps/docs/content/guides/functions/quickstart.mdx
@@ -9,7 +9,7 @@ This guide walks you through creating, testing locally, deploying, and invoking
You can also create and deploy functions directly from the Supabase Dashboard. Read [the Dashboard Quickstart guide](/docs/guides/functions/quickstart-dashboard) for more information.
-
+
Supabase Edge Functions **only** supports creating functions in TypeScript with [the Deno runtime](https://deno.com/). This is because Deno was designed with extensibility in mind and its Rust codebase offers a modern developer experience, memory safety, and other features ideal for running edge functions.
@@ -17,7 +17,7 @@ Supabase Edge Functions **only** supports creating functions in TypeScript with
## Prerequisites
-- Make sure you have the Supabase CLI installed and configured. Read [the CLI installation guide](/docs/guides/cli) for installation methods and troubleshooting.
+- Make sure you have the Supabase CLI installed and configured. Read [the CLI installation guide](/docs/guides/local-development) for installation methods and troubleshooting.
- Running and testing Supabase Edge Functions locally requires [Docker](https://www.docker.com/) or a Docker-compatible runtime.
## Step 1: Create or configure your project
@@ -53,7 +53,7 @@ supabase functions new hello-world
{/* TODO: Link to parameter documentation */}
-
+
When an HTTP request is sent to Edge Functions, you can use Supabase Auth to secure endpoints. By default, the `supabase functions new` command adds handling a valid publishable or secret key to the basic template. However, you can change this behavior with the `--auth` flag when creating a new function.
@@ -132,7 +132,7 @@ After this step, you should have successfully tested your Edge Function locally
To deploy your function globally, you need to connect your local project to a Supabase project.
-
+
Create one at [database.new](https://database.new/).
diff --git a/apps/docs/content/guides/functions/schedule-functions.mdx b/apps/docs/content/guides/functions/schedule-functions.mdx
index 222b938b6a409..c5d331387955c 100644
--- a/apps/docs/content/guides/functions/schedule-functions.mdx
+++ b/apps/docs/content/guides/functions/schedule-functions.mdx
@@ -13,9 +13,9 @@ description: 'Schedule Edge Functions with pg_cron.'
>
-The hosted Supabase Platform supports the [`pg_cron` extension](/docs/guides/database/extensions/pgcron), a recurring job scheduler in Postgres.
+The hosted Supabase Platform supports the [`pg_cron` extension](/docs/guides/database/extensions/pg_cron), a recurring job scheduler in Postgres.
-In combination with the [`pg_net` extension](/docs/guides/database/extensions/pgnet), this allows us to invoke Edge Functions periodically on a set schedule.
+In combination with the [`pg_net` extension](/docs/guides/database/extensions/pg_net), this allows us to invoke Edge Functions periodically on a set schedule.
@@ -57,5 +57,5 @@ select
## Resources
-- [`pg_net` extension](/docs/guides/database/extensions/pgnet)
-- [`pg_cron` extension](/docs/guides/database/extensions/pgcron)
+- [`pg_net` extension](/docs/guides/database/extensions/pg_net)
+- [`pg_cron` extension](/docs/guides/database/extensions/pg_cron)
diff --git a/apps/docs/content/guides/getting-started/api-keys.mdx b/apps/docs/content/guides/getting-started/api-keys.mdx
index b1cff12b38039..ee97ebbe184c4 100644
--- a/apps/docs/content/guides/getting-started/api-keys.mdx
+++ b/apps/docs/content/guides/getting-started/api-keys.mdx
@@ -6,7 +6,7 @@ description: "First-layer protection for your project's data"
Supabase gives you fine-grained control over which application components are allowed to access your project through API keys.
-
+
In most cases, you can get the correct key from [the Project's **Connect** dialog](/dashboard/project/_?showConnect=true), but if you want a specific key, you can find all keys in the [**Settings > API Keys**](/dashboard/project/_/settings/api-keys/) section of the Dashboard:
diff --git a/apps/docs/content/guides/getting-started/architecture.mdx b/apps/docs/content/guides/getting-started/architecture.mdx
index 0e8767f5c3ad0..46899d686f2cc 100644
--- a/apps/docs/content/guides/getting-started/architecture.mdx
+++ b/apps/docs/content/guides/getting-started/architecture.mdx
@@ -52,7 +52,7 @@ An open source Dashboard for managing your database and services.
A JWT-based API for managing users and issuing access tokens. This integrates with Postgres's Row Level Security and the API servers.
-- Official Docs: [Supabase Auth reference docs](/docs/reference/auth)
+- Official Docs: [Supabase Auth reference docs](/docs/reference/self-hosting-auth/start)
- Source code: [github.com/supabase/gotrue](https://github.com/supabase/gotrue)
- License: [MIT](https://github.com/supabase/gotrue/blob/master/LICENSE)
- Language: Go
@@ -80,7 +80,7 @@ A scalable WebSocket engine for managing user Presence, broadcasting messages, a
An S3-compatible object storage service that stores metadata in Postgres.
-- Official Docs: [Supabase Storage reference docs](/docs/reference/storage)
+- Official Docs: [Supabase Storage reference docs](/docs/reference/self-hosting-storage/start)
- Source code: [github.com/supabase/storage-api](https://github.com/supabase/storage-api)
- License: [Apache 2.0](https://github.com/supabase/storage-api/blob/master/LICENSE)
- Language: Node.js / TypeScript
diff --git a/apps/docs/content/guides/getting-started/features.mdx b/apps/docs/content/guides/getting-started/features.mdx
index c25c6cf7e8952..2fd7bbbfe5e51 100644
--- a/apps/docs/content/guides/getting-started/features.mdx
+++ b/apps/docs/content/guides/getting-started/features.mdx
@@ -10,7 +10,7 @@ This is a non-exhaustive list of features that Supabase provides for every proje
### Postgres database
-Every project is a full Postgres database. [Docs](/docs/guides/database).
+Every project is a full Postgres database. [Docs](/docs/guides/database/overview).
### Vector database
@@ -56,11 +56,11 @@ Enforce Postgres clients to connect via SSL. [Docs](/docs/guides/platform/ssl-en
### Branching
-Use Supabase Branches to test and preview changes. [Docs](/docs/guides/platform/branching).
+Use Supabase Branches to test and preview changes. [Docs](/docs/guides/deployment/branching).
### Terraform provider
-Manage Supabase infrastructure via Terraform, an Infrastructure as Code tool. [Docs](/docs/guides/platform/terraform).
+Manage Supabase infrastructure via Terraform, an Infrastructure as Code tool. [Docs](/docs/guides/deployment/terraform).
### Read replicas
@@ -68,7 +68,7 @@ Deploy read-only databases across multiple regions, for lower latency and better
### Log drains
-Export Supabase logs to 3rd party providers and external tooling. [Docs](/docs/guides/platform/log-drains).
+Export Supabase logs to third-party providers and external tooling. [Docs](/docs/guides/telemetry/log-drains).
## Studio
@@ -96,7 +96,7 @@ Synchronize shared state across your users, including online status and typing i
### Email login
-Build email logins for your application or website. [Docs](/docs/guides/auth/auth-email).
+Build email logins for your application or website. [Docs](/docs/guides/auth/passwords).
### Social login
@@ -108,7 +108,7 @@ Provide phone logins using a third-party SMS provider. [Docs](/docs/guides/auth/
### Passwordless login
-Build passwordless logins via magic links for your application or website. [Docs](/docs/guides/auth/auth-magic-link).
+Build passwordless logins via magic links for your application or website. [Docs](/docs/guides/auth/auth-email-passwordless).
### Authorization via Row Level Security
diff --git a/apps/docs/content/guides/getting-started/quickstarts/kotlin.mdx b/apps/docs/content/guides/getting-started/quickstarts/kotlin.mdx
index eaf76bc137a93..d59bf4cc18764 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/kotlin.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/kotlin.mdx
@@ -28,7 +28,7 @@ Open `build.gradle.kts` (app) file and add the serialization plugin, Ktor client
Replace the version placeholders `$kotlin_version` with the Kotlin version of the project, and `$supabase_version` and `$ktor_version` with the respective latest versions.
-
+
You can find the latest supabase-kt version [on GitHub](https://github.com/supabase-community/supabase-kt/releases) and Ktor [in the Ktor documentation](https://ktor.io/docs/welcome.html).
diff --git a/apps/docs/content/guides/getting-started/quickstarts/nuxtjs.mdx b/apps/docs/content/guides/getting-started/quickstarts/nuxtjs.mdx
index 542b7b4976c06..9fa3fb37b2854 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/nuxtjs.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/nuxtjs.mdx
@@ -105,7 +105,7 @@ Start the app, navigate to http://localhost:3000 in the browser, and you should
npm run dev
```
-
+
The community-maintained [@nuxtjs/supabase](https://supabase.nuxtjs.org/) module provides an alternate DX for working with Supabase in Nuxt.
diff --git a/apps/docs/content/guides/getting-started/quickstarts/redwoodjs.mdx b/apps/docs/content/guides/getting-started/quickstarts/redwoodjs.mdx
index 2583f048ef153..501a6e3b7fec5 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/redwoodjs.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/redwoodjs.mdx
@@ -10,7 +10,7 @@ breadcrumb: 'Framework Quickstarts'
[Create a new project](/dashboard) in the Supabase Dashboard.
-
+
Be sure to make note of the Database Password you used as you will need this later to connect to your database.
@@ -28,7 +28,7 @@ To get the Session mode connection pooler string, change the port of the connect
You will need the Transaction mode connection string and the Session mode connection string to set up environment variables in Step 6.
-
+
You can copy and paste these connection strings from the Supabase Dashboard when needed in later steps.
@@ -140,7 +140,7 @@ export default async () => {
Run the seed database command to populate the `Instrument` table with the instruments you created.
-
+
The reset database command `yarn rw prisma db reset` recreates the tables and also runs the seed script.
diff --git a/apps/docs/content/guides/getting-started/quickstarts/refine.mdx b/apps/docs/content/guides/getting-started/quickstarts/refine.mdx
index a3a3389d5e109..91650e8eaf1c6 100644
--- a/apps/docs/content/guides/getting-started/quickstarts/refine.mdx
+++ b/apps/docs/content/guides/getting-started/quickstarts/refine.mdx
@@ -82,7 +82,7 @@ npm run refine create-resource instruments
Add routes for the `list`, `create`, `show`, and `edit` pages.
-
+
Remove the `index` route for the Welcome page presented with the ` ` component.
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-angular.mdx b/apps/docs/content/guides/getting-started/tutorials/with-angular.mdx
index f6b075f0485db..c65739aed50c6 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-angular.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-angular.mdx
@@ -58,7 +58,7 @@ Optionally, update `src/styles.css` to style the app. You can find the full cont
You need an Angular component to manage logins and sign ups. The component uses [Magic Links](/docs/guides/auth/auth-email-passwordless#with-magic-link), so users can sign in with their email without using passwords.
-
+
You can customize other emails sent out to new users, including the email's looks, content, and query parameters from [the **Authentication > Email**](/dashboard/project/_/auth/templates) section of the Dashboard.
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-kotlin.mdx b/apps/docs/content/guides/getting-started/tutorials/with-kotlin.mdx
index e04e38c96b622..877c240120dad 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-kotlin.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-kotlin.mdx
@@ -5,7 +5,7 @@ description: 'Learn how to use Supabase in your Android Kotlin App.'
This tutorial demonstrates how to build a basic product management app. The app demonstrates management operations, photo upload, account creation and authentication using:
-- [Supabase Database](/docs/guides/database) - a Postgres database for storing your user data and [Row Level Security](/docs/guides/auth#row-level-security) so data is protected and users can only access their own information.
+- [Supabase Database](/docs/guides/database/overview) - a Postgres database for storing your user data and [Row Level Security](/docs/guides/auth#row-level-security) so data is protected and users can only access their own information.
- [Supabase Auth](/docs/guides/auth) - users log in through magic links sent to their email (without having to set up a password).
- [Supabase Storage](/docs/guides/storage) - users can upload a profile photo.
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-nextjs.mdx b/apps/docs/content/guides/getting-started/tutorials/with-nextjs.mdx
index bc3467a8f546b..762d159ea3316 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-nextjs.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-nextjs.mdx
@@ -182,7 +182,7 @@ Before proceeding, change the email template to support a server-side authentica
- Select the **Confirm signup** template.
- Change `{{ .ConfirmationURL }}` to `{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=email`.
-
+
You can customize other emails sent out to new users, including the email's looks, content, and query parameters from [the **Authentication > Email**](/dashboard/project/_/auth/templates) section of the Dashboard.
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-react.mdx b/apps/docs/content/guides/getting-started/tutorials/with-react.mdx
index 690f32feb0bbd..43c27e7c43470 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-react.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-react.mdx
@@ -62,7 +62,7 @@ You can find the full contents of this file [in the example repository](https://
You need a React component to manage logins and sign-ups. It uses [Magic Links](/docs/guides/auth/auth-email-passwordless#with-magic-link), so users can sign in with their email without using passwords.
-
+
You can customize other emails sent out to new users, including the email's looks, content, and query parameters from [the **Authentication > Email**](/dashboard/project/_/auth/templates) section of the Dashboard.
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-svelte.mdx b/apps/docs/content/guides/getting-started/tutorials/with-svelte.mdx
index 0ec26c0f8d1c7..278ce20350233 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-svelte.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-svelte.mdx
@@ -120,7 +120,7 @@ npm run dev
And then open the browser to [localhost:5173](http://localhost:5173) and you should see the completed app.
-
+
Svelte uses Vite and the default port is `5173`, Supabase uses `port 3000`. To change the redirection port for Supabase go to: **Authentication > URL Configuration** and change the **Site URL** to `http://localhost:5173/`
diff --git a/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx b/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx
index 0e6c17280383e..2b8e65cf30500 100644
--- a/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx
+++ b/apps/docs/content/guides/getting-started/tutorials/with-sveltekit.mdx
@@ -102,7 +102,7 @@ meta="name=src/routes/+layout.server.ts"
$CodeTabs>
-
+
Start the dev server (`npm run dev`) to generate the `./$types` files we are referencing in our project.
@@ -169,7 +169,7 @@ Before proceeding, change the email template to support sending a token hash:
- Change `{{ .ConfirmationURL }}` to `{{ .SiteURL }}/auth/confirm?token_hash={{ .TokenHash }}&type=email`.
- Repeat the previous step for **Magic link** template.
-
+
You can also customize emails sent out to new users, including the email's looks, content, and query parameters. Check out the [settings of your project](/dashboard/project/_/auth/templates).
diff --git a/apps/docs/content/guides/integrations/build-a-supabase-oauth-integration.mdx b/apps/docs/content/guides/integrations/build-a-supabase-oauth-integration.mdx
index fae9d946305b0..dbed6d8faf107 100644
--- a/apps/docs/content/guides/integrations/build-a-supabase-oauth-integration.mdx
+++ b/apps/docs/content/guides/integrations/build-a-supabase-oauth-integration.mdx
@@ -35,7 +35,7 @@ Within your app's UI, redirect the user to [`https://api.supabase.com/v1/oauth/a
- `state`: Information about the state of your app. Note that `redirect_uri` and `state` together cannot exceed 4kB in size.
- `organization_slug`: The slug of the organization you want to connect to. This is optional, but if provided, it will pre-select the organization for the user.
- [Recommended] PKCE: We strongly recommend using the PKCE flow for increased security. Generate a random value before taking the user to the authorize endpoint. This value is called code verifier. Hash it with SHA256 and include it as the `code_challenge` parameter, while setting `code_challenge_method` to `S256`. In the next step, you would need to provide the code verifier to get the first access and refresh token.
-- [Deprecated] `scope`: Scopes are configured when you create your OAuth app. Read the [docs](/docs/guides/platform/oauth-apps/oauth-scopes) for more details.
+- [Deprecated] `scope`: Scopes are configured when you create your OAuth app. Read the [docs](/docs/guides/integrations/build-a-supabase-oauth-integration/oauth-scopes) for more details.
```ts
router.get('/connect-supabase/login', async (ctx) => {
diff --git a/apps/docs/content/guides/integrations/build-a-supabase-oauth-integration/oauth-scopes.mdx b/apps/docs/content/guides/integrations/build-a-supabase-oauth-integration/oauth-scopes.mdx
index 2e749fc4da22a..d40563b3f4a6f 100644
--- a/apps/docs/content/guides/integrations/build-a-supabase-oauth-integration/oauth-scopes.mdx
+++ b/apps/docs/content/guides/integrations/build-a-supabase-oauth-integration/oauth-scopes.mdx
@@ -7,15 +7,15 @@ subtitle: 'Scopes let you specify the level of access your integration needs'
-Scopes are only available for OAuth apps. Check out [**our guide**](/docs/guides/platform/oauth-apps/build-a-supabase-integration) to learn how to build an OAuth app integration.
+Scopes are only available for OAuth apps. Check out [**our guide**](/docs/guides/integrations/build-a-supabase-oauth-integration) to learn how to build an OAuth app integration.
Scopes restrict access to the specific [Supabase Management API endpoints](/docs/reference/api/introduction) for OAuth tokens. All scopes can be specified as read and/or write.
-Scopes are set when you [create an OAuth app](/docs/guides/platform/oauth-apps/build-a-supabase-integration#create-an-oauth-app) in the Supabase Dashboard.
+Scopes are set when you [create an OAuth app](/docs/guides/integrations/build-a-supabase-oauth-integration#create-an-oauth-app) in the Supabase Dashboard.
-You can update scopes of your OAuth app at any time, but existing OAuth app users will need to re-authorize your app via the [OAuth flow](/docs/guides/integrations/build-a-supabase-integration#implementing-the-oauth-20-flow) to apply the new scopes.
+You can update scopes of your OAuth app at any time, but existing OAuth app users will need to re-authorize your app via the [OAuth flow](/docs/guides/integrations/build-a-supabase-oauth-integration#implementing-the-oauth-20-flow) to apply the new scopes.
## Available scopes
diff --git a/apps/docs/content/guides/integrations/partner-integration-guide.mdx b/apps/docs/content/guides/integrations/partner-integration-guide.mdx
index 6df0fa75f516f..bc72ace2f5309 100644
--- a/apps/docs/content/guides/integrations/partner-integration-guide.mdx
+++ b/apps/docs/content/guides/integrations/partner-integration-guide.mdx
@@ -263,7 +263,7 @@ When a user arrives at this endpoint:
3. Optionally, walk the user through any setup required on your side — for example, signing up, signing in, or configuring your system so the integration will work.
4. Redirect the user to the [Supabase authorization URL](/docs/guides/integrations/build-a-supabase-oauth-integration#redirecting-to-the-authorize-url) to start the OAuth flow.
-
+
If you need the user to perform setup steps on your site, design the experience as a wizard that ends by redirecting to the Supabase authorization URL. This minimizes the chance of users getting distracted, navigating elsewhere on your site, and abandoning the OAuth flow.
diff --git a/apps/docs/content/guides/integrations/supabase-for-platforms.mdx b/apps/docs/content/guides/integrations/supabase-for-platforms.mdx
index 45be844a97fd3..f20fca78d71fb 100644
--- a/apps/docs/content/guides/integrations/supabase-for-platforms.mdx
+++ b/apps/docs/content/guides/integrations/supabase-for-platforms.mdx
@@ -13,7 +13,7 @@ This document will guide you on best practices when using Supabase for your own
## Overview
-All features of Supabase can be managed through the [Management API](/docs/reference/api/introduction) or the [remote MCP Server](/docs/guides/getting-started/mcp).
+All features of Supabase can be managed through the [Management API](/docs/reference/api/introduction) or the [remote MCP Server](/docs/guides/ai-tools/mcp).
## Launching projects
diff --git a/apps/docs/content/guides/local-development/cli-workflows.mdx b/apps/docs/content/guides/local-development/cli-workflows.mdx
index 226ad9c936b89..f05de923adc55 100644
--- a/apps/docs/content/guides/local-development/cli-workflows.mdx
+++ b/apps/docs/content/guides/local-development/cli-workflows.mdx
@@ -29,7 +29,7 @@ Every example in this guide is written as `supabase `. Translate it to
-
+
If you want a working project to explore rather than an empty one, `supabase bootstrap` scaffolds a starter application (Next.js, Flutter, and more) with schema, migrations, and config already wired up. It's an alternative entry point to `supabase init` when starting a new project from scratch.
@@ -107,7 +107,7 @@ This initial migration is your baseline. It represents the current state of your
-
+
If you also use Supabase Auth or Storage and have customized their schemas, pull them separately:
diff --git a/apps/docs/content/guides/local-development/cli/getting-started.mdx b/apps/docs/content/guides/local-development/cli/getting-started.mdx
index b752929f3edcf..18e38612983fe 100644
--- a/apps/docs/content/guides/local-development/cli/getting-started.mdx
+++ b/apps/docs/content/guides/local-development/cli/getting-started.mdx
@@ -230,7 +230,7 @@ npm update supabase@beta --save-dev
If you have any Supabase containers running locally, stop them and delete their data volumes before proceeding with the upgrade. This ensures that Supabase managed services can apply new migrations on a clean state of the local database.
-
+
Remember to save any local schema and data changes before stopping because the `--no-backup` flag will delete them.
@@ -384,7 +384,7 @@ Local logs rely on the Supabase Analytics Server which accesses the docker loggi
-For advanced logs analysis using the Logs Explorer, it is advised to use the BigQuery backend instead of the default Postgres backend. Read about the steps [here](/docs/reference/self-hosting-analytics/introduction#bigquery).
+For advanced logs analysis using the Logs Explorer, it is advised to use the BigQuery backend instead of the default Postgres backend. Read about the steps [here](/docs/reference/self-hosting-analytics/introduction#using-the-bigquery-backend).
diff --git a/apps/docs/content/guides/local-development/cli/testing-and-linting.mdx b/apps/docs/content/guides/local-development/cli/testing-and-linting.mdx
index 2fc83fe1ee915..d319bdf75a27f 100644
--- a/apps/docs/content/guides/local-development/cli/testing-and-linting.mdx
+++ b/apps/docs/content/guides/local-development/cli/testing-and-linting.mdx
@@ -44,7 +44,7 @@ By default, Mailpit is available at [localhost:54324](http://localhost:54324) wh
### Going into production
-The "default" email provided by Supabase is only for development purposes. It is [heavily restricted](/docs/guides/platform/going-into-prod#auth-rate-limits) to ensure that it is not used for spam. Before going into production, configure your own email provider by enabling SMTP credentials in your [project settings](/dashboard/project/_/auth/smtp).
+The "default" email provided by Supabase is only for development purposes. It is [heavily restricted](/docs/guides/deployment/going-into-prod#auth-rate-limits) to ensure that it is not used for spam. Before going into production, configure your own email provider by enabling SMTP credentials in your [project settings](/dashboard/project/_/auth/smtp).
## Linting your database
diff --git a/apps/docs/content/guides/local-development/database-migrations.mdx b/apps/docs/content/guides/local-development/database-migrations.mdx
index 530fb2941a0b8..ebbf6cb9030b1 100644
--- a/apps/docs/content/guides/local-development/database-migrations.mdx
+++ b/apps/docs/content/guides/local-development/database-migrations.mdx
@@ -13,7 +13,7 @@ Develop locally using the CLI to run a local Supabase stack. You can use the int
Alternatively, if you're comfortable with migration files and SQL, you can write your own migrations and push them to the local database for testing before sharing your changes.
-
+
This page is a focused tutorial on migrations. If you want to move an existing platform project to local development, or set up a reproducible project from scratch and take it all the way to a remote deploy, see the [Local development workflow](/docs/guides/local-development/cli-workflows) guide. It covers both starting points, the daily development loop, pushing to production, cleaning up generated migrations, and troubleshooting.
diff --git a/apps/docs/content/guides/local-development/declarative-database-schemas.mdx b/apps/docs/content/guides/local-development/declarative-database-schemas.mdx
index e820b4971b394..513d129fd515e 100644
--- a/apps/docs/content/guides/local-development/declarative-database-schemas.mdx
+++ b/apps/docs/content/guides/local-development/declarative-database-schemas.mdx
@@ -123,7 +123,7 @@ create table "employees" (
-
+
Some entities like views and enums expect columns to be declared in a specific order. To avoid messy diffs, always append new columns to the end of the table.
diff --git a/apps/docs/content/guides/local-development/managing-config.mdx b/apps/docs/content/guides/local-development/managing-config.mdx
index 018aba75e3ff6..623cb3316c181 100644
--- a/apps/docs/content/guides/local-development/managing-config.mdx
+++ b/apps/docs/content/guides/local-development/managing-config.mdx
@@ -10,7 +10,7 @@ The Supabase CLI uses a `config.toml` file to manage local configuration. This f
The `config.toml` file is automatically created when you run `supabase init`.
-There are a wide variety of options available, which can be found in the [CLI Config Reference](/docs/guides/cli/config).
+There are a wide variety of options available, which can be found in the [CLI Config Reference](/docs/guides/local-development/cli/config).
For example, to enable the "Apple" OAuth provider for local development, you can append the following information to `config.toml`:
diff --git a/apps/docs/content/guides/local-development/seeding-your-database.mdx b/apps/docs/content/guides/local-development/seeding-your-database.mdx
index 777239a1fe269..c8b6bff0b42a6 100644
--- a/apps/docs/content/guides/local-development/seeding-your-database.mdx
+++ b/apps/docs/content/guides/local-development/seeding-your-database.mdx
@@ -46,7 +46,7 @@ enabled = true
sql_paths = ['./seeds/*.sql']
```
-
+
The CLI processes seed files in the order they are declared in the `sql_paths` array. If a glob pattern is used and matches multiple files, those files are sorted in lexicographic order to ensure consistent execution. Additionally:
@@ -66,7 +66,7 @@ Snaplet wound down as a company in 2024 and open-sourced its tooling. `@snaplet/
-
+
To use Snaplet, you need to have Node.js and npm installed. You can add Node.js to your project by running `npm init -y` in your project directory.
@@ -80,7 +80,7 @@ npx @snaplet/seed init
This command will analyze your database and its structure, and then generate a JavaScript client which can be used to define exactly how your data should be generated using code. The `init` command generates a configuration file, `seed.config.ts` and an example script, `seed.ts`, as a starting point.
-
+
During `init` if you are not using an Object Relational Mapper (ORM) or your ORM is not in the supported list, choose `node-postgres`.
diff --git a/apps/docs/content/guides/platform.mdx b/apps/docs/content/guides/platform.mdx
index 3953d8a1862a6..7d99b54413c97 100644
--- a/apps/docs/content/guides/platform.mdx
+++ b/apps/docs/content/guides/platform.mdx
@@ -13,8 +13,8 @@ Visit [supabase.com/dashboard](/dashboard) and sign in to start creating project
Each project on Supabase comes with:
-- A dedicated [Postgres database](/docs/guides/database)
-- [Auto-generated APIs](/docs/guides/database/api)
+- A dedicated [Postgres database](/docs/guides/database/overview)
+- [Auto-generated APIs](/docs/guides/api)
- [Auth and user management](/docs/guides/auth)
- [Edge Functions](/docs/guides/functions)
- [Realtime API](/docs/guides/realtime)
diff --git a/apps/docs/content/guides/platform/billing-faq.mdx b/apps/docs/content/guides/platform/billing-faq.mdx
index 5c4941ac7f472..c4c7567395ddd 100644
--- a/apps/docs/content/guides/platform/billing-faq.mdx
+++ b/apps/docs/content/guides/platform/billing-faq.mdx
@@ -12,7 +12,7 @@ subtitle: 'This documentation covers frequently asked questions around subscript
#### What are organizations and projects?
The Supabase Platform has "organizations" and "projects". An organization may contain multiple projects. Each project is a dedicated Supabase instance with all of its sub-services including Storage, Auth, Functions and Realtime.
-Each organization only has a single subscription with a single plan (Free, Pro, Team or Enterprise). Project add-ons such as [Compute](/docs/guides/platform/compute-add-ons), [IPv4](/docs/guides/platform/ipv4-address), [Log Drains](/docs/guides/platform/log-drains), [Advanced MFA](/docs/guides/auth/auth-mfa/phone), [Custom Domains](/docs/guides/platform/custom-domains) and [PITR](/docs/guides/platform/backups#point-in-time-recovery) are configured per project and are added to your organization subscription.
+Each organization only has a single subscription with a single plan (Free, Pro, Team or Enterprise). Project add-ons such as [Compute](/docs/guides/platform/compute-and-disk), [IPv4](/docs/guides/platform/ipv4-address), [Log Drains](/docs/guides/telemetry/log-drains), [Advanced MFA](/docs/guides/auth/auth-mfa/phone), [Custom Domains](/docs/guides/platform/custom-domains) and [PITR](/docs/guides/platform/backups#point-in-time-recovery) are configured per project and are added to your organization subscription.
Read more on [About billing on Supabase](/docs/guides/platform/billing-on-supabase#organization-based-billing).
@@ -54,7 +54,7 @@ Refer to our [Compute](/docs/guides/platform/manage-your-usage/compute#billing-e
#### How does compute billing work?
-Each Supabase project is a dedicated VM and Postgres database. By default, your instance runs on the Micro compute instance. You have the option to upgrade your compute size in your [Project settings](/dashboard/project/_/settings/addons). See [Compute Add-ons](/docs/guides/platform/compute-add-ons) for available options.
+Each Supabase project is a dedicated VM and Postgres database. By default, your instance runs on the Micro compute instance. You have the option to upgrade your compute size in your [Project settings](/dashboard/project/_/settings/addons). See [Compute Add-ons](/docs/guides/platform/compute-and-disk) for available options.
When you change your compute size, there are no immediate upfront charges. Instead, you will be billed based on the compute hours during your billing cycle reset.
@@ -132,7 +132,7 @@ The Fair Use Policy is applied through service restrictions. This could mean:
- Pausing projects
- Switching databases to read-only mode
- Disabling new project launches/transfers
-- Responding with a [402 status code](/docs/guides/platform/http-status-codes#402-service-restriction) for all API requests
+- Responding with a [402 status code](/docs/guides/troubleshooting/http-status-codes#402-service-restriction) for all API requests
The Fair Use Policy is generally applied to all projects of the restricted organization.
diff --git a/apps/docs/content/guides/platform/custom-domains.mdx b/apps/docs/content/guides/platform/custom-domains.mdx
index d0076126fa86b..c294cbfbbb63d 100644
--- a/apps/docs/content/guides/platform/custom-domains.mdx
+++ b/apps/docs/content/guides/platform/custom-domains.mdx
@@ -40,8 +40,8 @@ This example assumes your Supabase project is `abcdefghijklmnopqrst` with a corr
To get started:
-1. [Install](/docs/guides/resources/supabase-cli) the latest version of the Supabase CLI.
-2. [Log in](/docs/guides/cli/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI.
+1. [Install](/docs/guides/local-development) the latest version of the Supabase CLI.
+2. [Log in](/docs/guides/local-development/database-migrations#log-in-to-the-supabase-cli) to your Supabase account using the CLI.
3. Ensure you have [Owner or Admin permissions](/docs/guides/platform/access-control#manage-team-members) for the project.
4. Get a custom domain from a DNS provider. Currently, only subdomains are supported.
- Use `api.example.com` instead of `example.com`.
@@ -152,8 +152,8 @@ Vanity subdomains allow you to present a basic branded experience, compared to c
To get started:
-1. [Install](/docs/guides/resources/supabase-cli) the latest version of the Supabase CLI.
-1. [Log in](/docs/guides/cli/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI.
+1. [Install](/docs/guides/local-development) the latest version of the Supabase CLI.
+1. [Log in](/docs/guides/local-development/database-migrations#log-in-to-the-supabase-cli) to your Supabase account using the CLI.
1. Ensure that you have [Owner or Admin permissions](/docs/guides/platform/access-control#manage-team-members) for the project you'd like to set up a vanity subdomain for.
1. Ensure that your organization is on a paid plan (Pro/Team/Enterprise Plan) in the [Billing page of the Dashboard](/dashboard/org/_/billing).
diff --git a/apps/docs/content/guides/platform/hipaa-projects.mdx b/apps/docs/content/guides/platform/hipaa-projects.mdx
index 78f1864bce1c6..6ac8129029de5 100644
--- a/apps/docs/content/guides/platform/hipaa-projects.mdx
+++ b/apps/docs/content/guides/platform/hipaa-projects.mdx
@@ -21,7 +21,7 @@ The required project configuration is outlined in the [shared responsibility mod
These include:
-- Enabling [Point in Time Recovery](/docs/guides/platform/backups#point-in-time-recovery) which requires at least a [small compute add-on](/docs/guides/platform/compute-add-ons).
+- Enabling [Point in Time Recovery](/docs/guides/platform/backups#point-in-time-recovery) which requires at least a [small compute add-on](/docs/guides/platform/compute-and-disk).
- Turning on [SSL Enforcement](/docs/guides/platform/ssl-enforcement).
- Enabling [Network Restrictions](/docs/guides/platform/network-restrictions).
- Keeping [Postgres connection logging](/docs/guides/platform/postgres-connection-logging) enabled.
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/firebase-auth.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/firebase-auth.mdx
index 5323e90b9f93f..ad4399f9e2c0a 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/firebase-auth.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/firebase-auth.mdx
@@ -83,8 +83,8 @@ For more advanced migrations, including the use of a middleware server component
## Resources
- [Supabase vs Firebase](/alternatives/supabase-vs-firebase)
-- [Firestore Data Migration](/docs/guides/migrations/firestore-data)
-- [Firestore Storage Migration](/docs/guides/migrations/firebase-storage)
+- [Firestore Data Migration](/docs/guides/platform/migrating-to-supabase/firestore-data)
+- [Firestore Storage Migration](/docs/guides/platform/migrating-to-supabase/firebase-storage)
## Migrate to Supabase
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/firebase-storage.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/firebase-storage.mdx
index 1da520b1838c6..12a84f98cadba 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/firebase-storage.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/firebase-storage.mdx
@@ -62,8 +62,8 @@ If the bucket doesn't exist, it's created as a `non-public` bucket. You must set
## Resources
- [Supabase vs Firebase](/alternatives/supabase-vs-firebase)
-- [Firestore Data Migration](/docs/guides/migrations/firestore-data)
-- [Firebase Auth Migration](/docs/guides/migrations/firebase-auth)
+- [Firestore Data Migration](/docs/guides/platform/migrating-to-supabase/firestore-data)
+- [Firebase Auth Migration](/docs/guides/platform/migrating-to-supabase/firebase-auth)
## Migrate to Supabase
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/firestore-data.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/firestore-data.mdx
index aafd172a0b498..647a5c880cb60 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/firestore-data.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/firestore-data.mdx
@@ -206,8 +206,8 @@ The result is two separate JSON files:
## Resources
- [Supabase vs Firebase](/alternatives/supabase-vs-firebase)
-- [Firestore Storage Migration](/docs/guides/migrations/firebase-storage)
-- [Firebase Auth Migration](/docs/guides/migrations/firebase-auth)
+- [Firestore Storage Migration](/docs/guides/platform/migrating-to-supabase/firebase-storage)
+- [Firebase Auth Migration](/docs/guides/platform/migrating-to-supabase/firebase-auth)
## Migrate to Supabase
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/postgres.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/postgres.mdx
index dc5f08800da1e..1698edc08f2a9 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/postgres.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/postgres.mdx
@@ -82,7 +82,7 @@ CREATE EXTENSION IF NOT EXISTS extension_name;
### Step 1: Set up migration VM
-
+
For optimal performance, run the migration from a cloud VM, not your local machine. The VM should be in the same region as either your source or target database to optimize network performance. See the Resource Requirements table in Step 2 for VM sizing recommendations.
diff --git a/apps/docs/content/guides/platform/network-restrictions.mdx b/apps/docs/content/guides/platform/network-restrictions.mdx
index b91a0ddc29075..b471ba27eab43 100644
--- a/apps/docs/content/guides/platform/network-restrictions.mdx
+++ b/apps/docs/content/guides/platform/network-restrictions.mdx
@@ -27,9 +27,9 @@ To configure network restrictions with the dashboard:
To configure network restrictions with the CLI:
-1. [Install](/docs/guides/cli) the Supabase CLI 1.22.0+.
-1. [Log in](/docs/guides/cli/local-development#log-in-to-the-supabase-cli) to your Supabase account.
-1. If your project was created before December 23, 2022, [upgrade it to the latest Supabase version](/docs/guides/platform/migrating-and-upgrading-projects) before using network restrictions.
+1. [Install](/docs/guides/local-development) the Supabase CLI 1.22.0+.
+1. [Log in](/docs/guides/local-development/database-migrations#log-in-to-the-supabase-cli) to your Supabase account.
+1. If your project was created before December 23, 2022, [upgrade it to the latest Supabase version](/docs/guides/platform/upgrading) before using network restrictions.
1. Ensure you have [Owner or Admin permissions](/docs/guides/platform/access-control#manage-team-members) for the project.
### Check restrictions
@@ -101,5 +101,5 @@ To remove all network restrictions:
## Limitations
-- Network restrictions apply to Postgres and the database pooler. They don't apply to HTTPS APIs such as PostgREST, Storage, and Auth, or to Supabase client libraries like [supabase-js](/docs/reference/javascript).
-- With network restrictions applied, Edge functions lose direct access to the database. Use [supabase-js](/docs/reference/javascript) to connect to the database from Edge Functions instead.
+- Network restrictions apply to Postgres and the database pooler. They don't apply to HTTPS APIs such as PostgREST, Storage, and Auth, or to Supabase client libraries like [supabase-js](/docs/reference/javascript/introduction).
+- With network restrictions applied, Edge functions lose direct access to the database. Use [supabase-js](/docs/reference/javascript/introduction) to connect to the database from Edge Functions instead.
diff --git a/apps/docs/content/guides/platform/performance.mdx b/apps/docs/content/guides/platform/performance.mdx
index ae0005551b2b7..c93edb08b0e6a 100644
--- a/apps/docs/content/guides/platform/performance.mdx
+++ b/apps/docs/content/guides/platform/performance.mdx
@@ -31,7 +31,7 @@ In such a scenario, you can consider:
You can use the [pg_stat_activity](https://www.postgresql.org/docs/current/monitoring-stats.html#MONITORING-PG-STAT-ACTIVITY-VIEW) view to debug which clients are holding open connections on your DB. `pg_stat_activity` only exposes information on direct connections to the database. Information on the number of connections to Supavisor is available [via the metrics endpoint](../telemetry/metrics).
-Depending on the clients involved, you might be able to configure them to work with fewer connections (e.g. by imposing a limit on the maximum number of connections they're allowed to use), or shift specific workloads to connect via [Supavisor](/docs/guides/database/connecting-to-postgres#connection-pooler) instead. Transient workflows, which can scale up and down rapidly in response to traffic (e.g. serverless functions), can especially benefit from using a connection pooler rather than connecting to the DB directly.
+Depending on the clients involved, you might be able to configure them to work with fewer connections (e.g. by imposing a limit on the maximum number of connections they're allowed to use), or shift specific workloads to connect via [Supavisor](/docs/guides/database/connecting-to-postgres#poolers) instead. Transient workflows, which can scale up and down rapidly in response to traffic (e.g. serverless functions), can especially benefit from using a connection pooler rather than connecting to the DB directly.
### Allowing higher number of connections
diff --git a/apps/docs/content/guides/platform/project-transfer.mdx b/apps/docs/content/guides/platform/project-transfer.mdx
index 5ba93e504f90b..e463bf2aa77a5 100644
--- a/apps/docs/content/guides/platform/project-transfer.mdx
+++ b/apps/docs/content/guides/platform/project-transfer.mdx
@@ -43,7 +43,7 @@ Target organization - the organization you want to move the project to
## Usage-billing and project add-ons
-For usage metrics such as disk size, egress or image transformations and project add-ons such as [Compute Add-On](/docs/guides/platform/compute-add-ons), [Point-In-Time-Recovery](/docs/guides/platform/backups#point-in-time-recovery), [IPv4](/docs/guides/platform/ipv4-address), [Log Drains](/docs/guides/platform/log-drains), [Advanced MFA](/docs/guides/auth/auth-mfa/phone) or a [Custom Domain](/docs/guides/platform/custom-domains), the source organization will still be charged for the usage up until the transfer. The charges will be added to the invoice when the billing cycle resets.
+For usage metrics such as disk size, egress or image transformations and project add-ons such as [Compute Add-On](/docs/guides/platform/compute-and-disk), [Point-In-Time-Recovery](/docs/guides/platform/backups#point-in-time-recovery), [IPv4](/docs/guides/platform/ipv4-address), [Log Drains](/docs/guides/telemetry/log-drains), [Advanced MFA](/docs/guides/auth/auth-mfa/phone) or a [Custom Domain](/docs/guides/platform/custom-domains), the source organization will still be charged for the usage up until the transfer. The charges will be added to the invoice when the billing cycle resets.
The target organization will be charged at the end of the billing cycle for usage after the project transfer.
diff --git a/apps/docs/content/guides/platform/read-replicas/getting-started.mdx b/apps/docs/content/guides/platform/read-replicas/getting-started.mdx
index 085cdb2e21853..0d895570ee190 100644
--- a/apps/docs/content/guides/platform/read-replicas/getting-started.mdx
+++ b/apps/docs/content/guides/platform/read-replicas/getting-started.mdx
@@ -15,11 +15,11 @@ Read Replicas are available for all projects on the Pro, Team and Enterprise pla
Projects must meet these requirements to use Read Replicas:
1. Running on AWS.
-2. Running on at least a [Small compute add-on](/docs/guides/platform/compute-add-ons).
+2. Running on at least a [Small compute add-on](/docs/guides/platform/compute-and-disk).
- Read Replicas are started on the same compute instance as the Primary to keep up with changes.
3. Running on Postgres 15+.
- - For projects running on older versions of Postgres, you need to [upgrade to the latest platform version](/docs/guides/platform/migrating-and-upgrading-projects#pgupgrade).
+ - For projects running on older versions of Postgres, you need to [upgrade to the latest platform version](/docs/guides/platform/upgrading).
4. Not using [legacy logical backups](/docs/guides/platform/backups#point-in-time-recovery)
- Physical backups are automatically enabled if using [Point in time recovery (PITR)](/docs/guides/platform/backups#point-in-time-recovery)
@@ -110,7 +110,7 @@ Once the Primary database has completed restarting (or resizing, in case of a co
The following procedures require all Read Replicas for a project to be brought down before performing them:
-1. [Project upgrades](/docs/guides/platform/migrating-and-upgrading-projects#pgupgrade)
+1. [Project upgrades](/docs/guides/platform/upgrading)
2. [Data restorations](/docs/guides/platform/backups#pitr-restoration-process)
These operations need to complete before you can re-deploy Read Replicas.
@@ -127,7 +127,7 @@ There is no single threshold to indicate when you should address replication lag
-
+
If you are already ingesting your [project's metrics](/docs/guides/telemetry/metrics) into your own environment, you can also keep track of replication lag and set alarms with the `physical_replication_lag_physical_replica_lag_seconds` metric.
@@ -142,7 +142,7 @@ Some common sources of high replication lag include:
3. **Long-running transactions on the Primary**: Transactions that run for a long-time on the primary can also result in high replication lag. You can use the `pg_stat_activity` view to identify and terminate such transactions if needed. `pg_stat_activity` is a live view, and does not offer historical data on transactions that might have been active for a long time in the past.
High replication lag can result in stale data returned for queries executed against the affected read replicas.
-
+
You can find additional resources on replication lag in [the Google documentation](https://cloud.google.com/sql/docs/postgres/replication/replication-lag), [the AWS documentation](https://repost.aws/knowledge-center/rds-postgresql-replication-lag), and [the several nines blog](https://severalnines.com/blog/what-look-if-your-postgresql-replication-lagging/).
diff --git a/apps/docs/content/guides/platform/ssl-enforcement.mdx b/apps/docs/content/guides/platform/ssl-enforcement.mdx
index 2f70acddc3fc7..726596f60bca4 100644
--- a/apps/docs/content/guides/platform/ssl-enforcement.mdx
+++ b/apps/docs/content/guides/platform/ssl-enforcement.mdx
@@ -61,8 +61,8 @@ curl -X PUT "https://api.supabase.com/v1/projects/$PROJECT_REF/ssl-enforcement"
To get started:
-1. [Install](/docs/guides/cli) the Supabase CLI 1.37.0+.
-1. [Log in](/docs/guides/getting-started/local-development#log-in-to-the-supabase-cli) to your Supabase account using the CLI.
+1. [Install](/docs/guides/local-development) the Supabase CLI 1.37.0+.
+1. [Log in](/docs/guides/local-development/database-migrations#log-in-to-the-supabase-cli) to your Supabase account using the CLI.
1. Ensure that you have [Owner or Admin permissions](/docs/guides/platform/access-control#manage-team-members) for the project that you are enabling SSL enforcement.
### Check enforcement status
diff --git a/apps/docs/content/guides/platform/sso.mdx b/apps/docs/content/guides/platform/sso.mdx
index 2349a28d27cbc..1b892d37b3f02 100644
--- a/apps/docs/content/guides/platform/sso.mdx
+++ b/apps/docs/content/guides/platform/sso.mdx
@@ -3,7 +3,7 @@ title: 'Enable SSO for Your Organization'
description: 'General information about enabling single sign-on (SSO) for your organization'
---
-
+
Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/enterprise-sso/auth-sso-saml).
@@ -29,7 +29,7 @@ Once configured, you can update your settings anytime from [the **SSO** section]

-
+
After configuring your SSO provider, thorough testing is essential. See our [SSO Testing and Best Practices](/docs/guides/platform/sso/testing-best-practices) guide for:
diff --git a/apps/docs/content/guides/platform/sso/azure.mdx b/apps/docs/content/guides/platform/sso/azure.mdx
index 6daa75a6f9403..913f534ed2416 100644
--- a/apps/docs/content/guides/platform/sso/azure.mdx
+++ b/apps/docs/content/guides/platform/sso/azure.mdx
@@ -9,7 +9,7 @@ This feature is only available on the [Team and Enterprise Plans](/pricing). If
-
+
Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/enterprise-sso/auth-sso-saml).
diff --git a/apps/docs/content/guides/platform/sso/choosing-login-flow.mdx b/apps/docs/content/guides/platform/sso/choosing-login-flow.mdx
index 8816d78ac1c9f..2e6d6c65ed3aa 100644
--- a/apps/docs/content/guides/platform/sso/choosing-login-flow.mdx
+++ b/apps/docs/content/guides/platform/sso/choosing-login-flow.mdx
@@ -5,7 +5,7 @@ description: 'Quick reference guide to help you choose between IdP-initiated, SP
Not sure which single sign-on (SSO) login flow to enable? This guide maps common enterprise scenarios to the recommended configuration.
-
+
Start with identity provider (IdP)-initiated, the default behavior. It requires no domain configuration, and works for most enterprise use cases. You can enable SP-initiated later if needed.
@@ -306,7 +306,7 @@ If you're uncertain which configuration to use:
4. Enable SP-initiated if users request it
5. Monitor usage to see which flow is preferred
-
+
If you need help choosing the right configuration for your organization, contact Supabase support with details about your use case. We're happy to provide personalized recommendations.
diff --git a/apps/docs/content/guides/platform/sso/gsuite.mdx b/apps/docs/content/guides/platform/sso/gsuite.mdx
index 608d8f03d0c18..d28c1fda108ce 100644
--- a/apps/docs/content/guides/platform/sso/gsuite.mdx
+++ b/apps/docs/content/guides/platform/sso/gsuite.mdx
@@ -9,7 +9,7 @@ This feature is only available on the [Team and Enterprise Plans](/pricing). If
-
+
Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/enterprise-sso/auth-sso-saml).
@@ -134,7 +134,7 @@ If you did not customize your settings you may save some time by clicking the **
## Step 12: Join organization on signup (optional) [#dashboard-configure-autojoin]
-
+
**Recommended workflow:** Start with auto-join **disabled** to test your SSO configuration. Once SSO login is working correctly, enable auto-join if desired.
@@ -164,7 +164,7 @@ Visit [access-control](/docs/guides/platform/access-control) documentation for d
When you click **Save changes**, your new SSO configuration is applied immediately. From that moment, any user with an email address matching one of your configured domains who visits your organization's sign-in URL will be routed through the SSO flow.
-
+
**Next step: Test your SSO configuration**
diff --git a/apps/docs/content/guides/platform/sso/login-flows.mdx b/apps/docs/content/guides/platform/sso/login-flows.mdx
index 806efb9c9ea2a..b67b0fab73475 100644
--- a/apps/docs/content/guides/platform/sso/login-flows.mdx
+++ b/apps/docs/content/guides/platform/sso/login-flows.mdx
@@ -5,7 +5,7 @@ description: 'Learn about IdP-initiated and SP-initiated SSO login flows and whe
When configuring SSO for your organization, you can choose between two different login flows: **identity provider (IdP)-initiated** and **service provider (SP)-initiated**. Understanding the difference helps you provide the best experience for your users.
-
+
Most enterprises use IdP-initiated flow for its simplicity and better user experience. Enable SP-initiated only if you need users to start their login journey at supabase.com.
@@ -214,7 +214,7 @@ This is often impractical since all employees use `company.com` email addresses.
Users click the appropriate tile for the environment they need.
-
+
This is the recommended approach for enterprises with multiple environments. Configure each environment as IdP-initiated only (no domains needed).
diff --git a/apps/docs/content/guides/platform/sso/multiple-providers.mdx b/apps/docs/content/guides/platform/sso/multiple-providers.mdx
index 3c28ee06e70d7..7e5f49b3a532c 100644
--- a/apps/docs/content/guides/platform/sso/multiple-providers.mdx
+++ b/apps/docs/content/guides/platform/sso/multiple-providers.mdx
@@ -21,7 +21,7 @@ The traditional challenge with multiple SAML apps is domain conflicts. With SP-i
**Solution:** Use identity provider (IdP)-initiated flow, which doesn't require domain configuration. You can create unlimited SAML apps under the same domain.
-
+
Configure each environment as IdP-initiated only (no domains). Users access each environment through different app tiles in your identity provider.
diff --git a/apps/docs/content/guides/platform/sso/okta.mdx b/apps/docs/content/guides/platform/sso/okta.mdx
index b62cd6588ab74..8e51b7d7940e5 100644
--- a/apps/docs/content/guides/platform/sso/okta.mdx
+++ b/apps/docs/content/guides/platform/sso/okta.mdx
@@ -9,7 +9,7 @@ This feature is only available on the [Team and Enterprise Plans](/pricing). If
-
+
Looking for docs on how to add Single Sign-On support in your Supabase project? Head on over to [Single Sign-On with SAML 2.0 for Projects](/docs/guides/auth/enterprise-sso/auth-sso-saml).
@@ -120,7 +120,7 @@ If you did not customize your settings you may save some time by clicking the **
## Step 11: Join organization on signup (optional) [#dashboard-configure-autojoin]
-
+
**Recommended workflow:** Start with auto-join **disabled** to test your SSO configuration. Once SSO login is working correctly, enable auto-join if desired.
@@ -150,7 +150,7 @@ Visit [access-control](/docs/guides/platform/access-control) documentation for d
When you click **Save changes**, your new SSO configuration is applied immediately. From that moment, any user with an email address matching one of your configured domains who visits your organization's sign-in URL will be routed through the SSO flow.
-
+
**Next step: Test your SSO configuration**
diff --git a/apps/docs/content/guides/platform/sso/testing-best-practices.mdx b/apps/docs/content/guides/platform/sso/testing-best-practices.mdx
index a85c237a688dc..7877fc94f31b5 100644
--- a/apps/docs/content/guides/platform/sso/testing-best-practices.mdx
+++ b/apps/docs/content/guides/platform/sso/testing-best-practices.mdx
@@ -129,7 +129,7 @@ You've configured SSO with:
- ✅ Multiple environments accessible via different tiles
- ✅ No domain conflicts between environments
-
+
**Multiple environments:** If you're setting up Dev/Staging/Prod, this domainless pattern is recommended. See [Multiple SSO Providers](/docs/guides/platform/sso/multiple-providers) for detailed configuration guidance.
diff --git a/apps/docs/content/guides/platform/upgrading.mdx b/apps/docs/content/guides/platform/upgrading.mdx
index cc263f84b4688..beec25a21692a 100644
--- a/apps/docs/content/guides/platform/upgrading.mdx
+++ b/apps/docs/content/guides/platform/upgrading.mdx
@@ -142,7 +142,7 @@ In projects using Postgres 17, the following extensions are deprecated:
Projects planning to upgrade from Postgres 15 to Postgres 17 need to first disable these extensions in the [Supabase Dashboard](/dashboard/project/_/database/extensions).
-
+
`pgjwt` was enabled by default on every Supabase project up until Postgres 17. If you weren't explicitly using `pgjwt` in your project, it's most likely safe to disable.
diff --git a/apps/docs/content/guides/queues/quickstart.mdx b/apps/docs/content/guides/queues/quickstart.mdx
index ce44b7fda8481..f93effb9addfa 100644
--- a/apps/docs/content/guides/queues/quickstart.mdx
+++ b/apps/docs/content/guides/queues/quickstart.mdx
@@ -51,7 +51,7 @@ On the [Queues page](/dashboard/project/_/integrations/queues/queues):
- Name your queue
-
+
Queue names can only be lowercase and hyphens and underscores are permitted.
@@ -73,7 +73,7 @@ width={1456}
height={1420}
/>
-
+
Every new Queue creates two tables in the `pgmq` schema. These tables are `pgmq.q_` to store and process active messages and `pgmq.a_` to store any archived messages.
diff --git a/apps/docs/content/guides/realtime/limits.mdx b/apps/docs/content/guides/realtime/limits.mdx
index 6ac95151ec295..935a5c1fcc489 100644
--- a/apps/docs/content/guides/realtime/limits.mdx
+++ b/apps/docs/content/guides/realtime/limits.mdx
@@ -38,7 +38,7 @@ When you exceed a limit, errors will appear in the backend logs and client-side
- **Logs**: check the [Realtime logs](/dashboard/project/_/database/realtime-logs) inside your project Dashboard.
- **WebSocket errors**: Use your browser's developer tools to find the WebSocket initiation request and view individual messages.
-
+
You can use the [Realtime Inspector](https://realtime.supabase.com/inspector/new) to reproduce an error and share those connection details with Supabase support.
diff --git a/apps/docs/content/guides/realtime/postgres-changes.mdx b/apps/docs/content/guides/realtime/postgres-changes.mdx
index d2ee8773622d7..702d7bd88101b 100644
--- a/apps/docs/content/guides/realtime/postgres-changes.mdx
+++ b/apps/docs/content/guides/realtime/postgres-changes.mdx
@@ -1064,7 +1064,7 @@ You can also [negate any operator](#negating-a-filter-not) with `not.` and [comb
<$Show if="sdk:js">
-
+
In JavaScript you can pass a raw filter string, or build one with the type-safe `postgresChangesFilter()` helper, which handles operator names, negation, `AND` composition, and escaping for you:
@@ -3256,7 +3256,7 @@ Use the estimator below to gauge the maximum throughput for your instance, and r
-
+
If you expect more than ~3,000 concurrent subscribers on the same changes, use [Broadcast to stream database changes](/docs/guides/realtime/subscribing-to-database-changes#using-broadcast) instead. Broadcast sends each change once and fans it out to all subscribers, so it scales to far higher connection counts than per-subscriber authorization allows.
diff --git a/apps/docs/content/guides/realtime/reports.mdx b/apps/docs/content/guides/realtime/reports.mdx
index 23b1088052464..fe6bd5697a443 100644
--- a/apps/docs/content/guides/realtime/reports.mdx
+++ b/apps/docs/content/guides/realtime/reports.mdx
@@ -14,7 +14,7 @@ These reports help you:
- Troubleshoot errors and connection issues
- Plan capacity upgrades based on usage trends
-
+
Access Realtime reports from **[Project Settings > Product Reports > Realtime](/dashboard/project/_/observability/realtime)** in your project dashboard.
@@ -61,7 +61,7 @@ height={625}
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Configure connection limit | Adjust the "Max concurrent connections" setting to increase or decrease the connection limit for your project | [Realtime Settings Guide](/docs/guides/realtime/settings) |
| Upgrade plan | Increase available client connections. Connection limits vary by plan: Free (200), Pro (500), Pro no spend cap (10,000), Team (10,000), Enterprise (10,000+) | [Pricing and Plans](/pricing) |
-| Review quotas | Understand connection limits and other Realtime quotas for your plan | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
+| Review quotas | Understand connection limits and other Realtime quotas for your plan | [Realtime Quotas Reference](/docs/guides/realtime/limits) |
| Understand connection quota | Learn how the concurrent connections quota works and how to configure it for your plan | [Concurrent Peak Connections Quota Troubleshooting](/docs/guides/troubleshooting/realtime-concurrent-peak-connections-quota-jdDqcp) |
| Fix silent disconnections | Fix connection issues in background applications using heartbeat callbacks and Web Workers | [Handling Silent Disconnections in Background Apps](/docs/guides/troubleshooting/realtime-handling-silent-disconnections-in-backgrounded-applications-592794) |
| Check logs | Investigate connection errors and quota errors in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
@@ -90,7 +90,7 @@ height={625}
| Action | Description | More information |
| ---------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| Configure event limits | Adjust "Max events per second" and "Max payload size in KB" settings to optimize broadcast throughput and message size limits | [Realtime Settings Guide](/docs/guides/realtime/settings) |
-| Review quotas | Understand message per second limits (Free: 100, Pro: 500, Pro no spend cap/Team/Enterprise: 2,500) and broadcast payload size limits (Free: 256 KB, Pro+: 3,000 KB) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
+| Review quotas | Understand message per second limits (Free: 100, Pro: 500, Pro no spend cap/Team/Enterprise: 2,500) and broadcast payload size limits (Free: 256 KB, Pro+: 3,000 KB) | [Realtime Quotas Reference](/docs/guides/realtime/limits) |
| Check logs | Investigate broadcast errors or quota limit issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
| Debug with logger | Enable logging to track messages sent and received, and diagnose broadcast delivery issues | [Debugging Realtime with Logger](/docs/guides/troubleshooting/realtime-debugging-with-logger) |
| Learn broadcast basics | Understand how to implement and optimize broadcast messaging in your application | [Broadcast Guide](/docs/guides/realtime/broadcast) |
@@ -119,7 +119,7 @@ height={625}
| Action | Description | More information |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------- |
| Configure presence limits | Adjust the "Max presence events per second" setting to optimize presence state update throughput | [Realtime Settings Guide](/docs/guides/realtime/settings) |
-| Review quotas | Understand presence messages per second limits (Free: 20, Pro: 50, Pro no spend cap/Team/Enterprise: 1,000) and presence keys per object limits (10 for most plans) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
+| Review quotas | Understand presence messages per second limits (Free: 20, Pro: 50, Pro no spend cap/Team/Enterprise: 1,000) and presence keys per object limits (10 for most plans) | [Realtime Quotas Reference](/docs/guides/realtime/limits) |
| Check logs | Investigate presence errors or quota limit issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
| Debug with logger | Enable logging to track presence events and diagnose state synchronization issues | [Debugging Realtime with Logger](/docs/guides/troubleshooting/realtime-debugging-with-logger) |
| Learn presence basics | Understand how to implement and optimize presence state tracking in your application | [Presence Guide](/docs/guides/realtime/presence) |
@@ -147,7 +147,7 @@ height={625}
| Action | Description | More information |
| ------------------------ | ----------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
-| Review quotas | Understand Postgres change payload size limits (1,024 KB for all plans) and message throughput limits | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
+| Review quotas | Understand Postgres change payload size limits (1,024 KB for all plans) and message throughput limits | [Realtime Quotas Reference](/docs/guides/realtime/limits) |
| Check logs | Investigate Postgres Changes errors or performance issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
| Learn Postgres Changes | Understand limitations and best practices for using Postgres Changes | [Postgres Changes Guide](/docs/guides/realtime/postgres-changes) |
| Migrate to Broadcast | For better scalability, consider using Broadcast with database triggers instead of Postgres Changes | [Broadcast Guide](/docs/guides/realtime/broadcast) |
@@ -177,7 +177,7 @@ height={625}
| Action | Description | More information |
| -------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------ |
-| Review quotas | Understand channel joins per second limits (Free: 100, Pro: 500, Pro no spend cap/Team/Enterprise: 2,500) and channels per connection limits (100 for most plans) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
+| Review quotas | Understand channel joins per second limits (Free: 100, Pro: 500, Pro no spend cap/Team/Enterprise: 2,500) and channels per connection limits (100 for most plans) | [Realtime Quotas Reference](/docs/guides/realtime/limits) |
| Check logs | Investigate `too_many_joins` errors or channel join failures in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
| Fix channel errors | Learn how to properly manage channel lifecycle and prevent channel leaks in your application | [TooManyChannels Error Troubleshooting](/docs/guides/troubleshooting/realtime-too-many-channels-error) |
| Learn channel basics | Understand how Realtime channels work and best practices for channel management | [Realtime Channels Concepts](/docs/guides/realtime/concepts#channels) |
@@ -206,7 +206,7 @@ height={625}
| Action | Description | More information |
| ------------------------ | ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------------------------------------- |
| Configure payload limits | Adjust the "Max payload size in KB" setting to increase or decrease the maximum message size allowed | [Realtime Settings Guide](/docs/guides/realtime/settings) |
-| Review quotas | Understand payload size limits: Broadcast (Free: 256 KB, Pro+: 3,000 KB) and Postgres Changes (1,024 KB for all plans) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
+| Review quotas | Understand payload size limits: Broadcast (Free: 256 KB, Pro+: 3,000 KB) and Postgres Changes (1,024 KB for all plans) | [Realtime Quotas Reference](/docs/guides/realtime/limits) |
| Check logs | Investigate payload-related errors or performance issues in your project dashboard | [Realtime Logs Dashboard](/dashboard/project/_/database/realtime-logs) |
| Review benchmarks | Understand how payload size affects latency and throughput (larger payloads increase latency) | [Payload Size Performance Benchmarks](/docs/guides/realtime/benchmarks#broadcast-impact-of-payload-size) |
| Debug query performance | Use `explain()` to analyze queries and identify performance bottlenecks that may be causing large payloads | [Query Performance Debugging Guide](/docs/guides/database/debugging-performance) |
@@ -369,7 +369,7 @@ height={645}
| Learn HTTP status codes | Learn about HTTP status codes including 4XX client errors and 5XX server errors | [HTTP Status Codes Troubleshooting](/docs/guides/troubleshooting/http-status-codes) |
| Fix timeout errors | Resolve WebSocket timeout errors caused by Node.js version incompatibility | [TIMED_OUT Connection Errors Troubleshooting](/docs/guides/troubleshooting/realtime-connections-timed_out-status) |
| Understand heartbeats | Monitor heartbeat status to detect connection issues and handle timeouts | [Realtime Heartbeats Guide](/docs/guides/troubleshooting/realtime-heartbeat-messages) |
-| Review quotas | Check if errors are related to quota limits (e.g., `too_many_connections`, `too_many_joins`) | [Realtime Quotas Reference](/docs/guides/realtime/quotas) |
+| Review quotas | Check if errors are related to quota limits (e.g., `too_many_connections`, `too_many_joins`) | [Realtime Quotas Reference](/docs/guides/realtime/limits) |
| Learn authorization | Troubleshoot authorization-related errors for private channels | [Realtime Authorization Guide](/docs/guides/realtime/authorization) |
| Contact support | Get assistance with persistent errors or investigate service-level issues | [Support Portal](/dashboard/support/new) |
diff --git a/apps/docs/content/guides/security/npm-security.mdx b/apps/docs/content/guides/security/npm-security.mdx
index 0eabaf5711353..8cfc96e5b7f2e 100644
--- a/apps/docs/content/guides/security/npm-security.mdx
+++ b/apps/docs/content/guides/security/npm-security.mdx
@@ -6,7 +6,7 @@ description: 'Consumer-side guide to hardening your npm installs of Supabase pac
A practical guide for anyone installing Supabase packages from npm — the JavaScript client libraries (`@supabase/supabase-js` and friends), the `supabase` CLI, or any other dependency in your tree — on defending against supply-chain attacks. Most of it applies to any npm package, not only Supabase's.
-
+
Looking to **report** a vulnerability in Supabase itself? See the [Supabase security policy](https://github.com/supabase/supabase-js/security) instead. This guide is about hardening your install of Supabase (and other) packages on your machines and in your CI.
diff --git a/apps/docs/content/guides/self-hosting/copy-from-platform-s3.mdx b/apps/docs/content/guides/self-hosting/copy-from-platform-s3.mdx
index 57c780c2bb65b..370c76591f38c 100644
--- a/apps/docs/content/guides/self-hosting/copy-from-platform-s3.mdx
+++ b/apps/docs/content/guides/self-hosting/copy-from-platform-s3.mdx
@@ -41,7 +41,7 @@ For better performance with large files, use the direct storage hostname: `https
Buckets must exist on the destination before you can copy objects into them. You can create them through the dashboard UI, or with the **SQL Editor**.
-
+
If you already restored your platform database to self-hosted using the [restore guide](/docs/guides/self-hosting/restore-from-platform), your bucket definitions are already present. You can skip this step.
diff --git a/apps/docs/content/guides/self-hosting/custom-email-templates.mdx b/apps/docs/content/guides/self-hosting/custom-email-templates.mdx
index 12b778f6cb6d1..f130534b30f9c 100644
--- a/apps/docs/content/guides/self-hosting/custom-email-templates.mdx
+++ b/apps/docs/content/guides/self-hosting/custom-email-templates.mdx
@@ -20,7 +20,7 @@ To provide templates to Supabase Auth, you need a service that serves static HTM
This guide uses [Caddy](https://github.com/caddyserver/caddy) for serving templates.
-
+
If Supabase Auth cannot fetch the template or if the fetched template is invalid, it falls back to the default template.
diff --git a/apps/docs/content/guides/self-hosting/docker.mdx b/apps/docs/content/guides/self-hosting/docker.mdx
index b07fa0f9c61cd..648701f8c0e88 100644
--- a/apps/docs/content/guides/self-hosting/docker.mdx
+++ b/apps/docs/content/guides/self-hosting/docker.mdx
@@ -54,7 +54,7 @@ Minimum requirements for running all Supabase components, suitable for developme
If you don't need specific services, such as Realtime, Storage, imgproxy, or Edge Runtime (`functions`), you can remove the corresponding sections and dependencies from `docker-compose.yml` to reduce resource requirements.
-
+
The default configuration does not include [Logs & Analytics](/features/logs-analytics). You can [enable](#enabling-analytics) Logflare (Analytics), Vector (log collection), and the Log Explorer in Studio by using an optional docker-compose override file. Note that enabling these services will increase resource requirements.
@@ -184,7 +184,7 @@ docker compose pull
-
+
If you are using rootless Docker, edit `.env` and set `DOCKER_SOCKET_LOCATION` to your docker socket location. For example: `/run/user/1000/docker.sock`. Otherwise, you will see an error like `container supabase-vector exited (0)`.
diff --git a/apps/docs/content/guides/self-hosting/remove-superuser-access.mdx b/apps/docs/content/guides/self-hosting/remove-superuser-access.mdx
index 3402ab4f177f4..896edba2f6b2c 100644
--- a/apps/docs/content/guides/self-hosting/remove-superuser-access.mdx
+++ b/apps/docs/content/guides/self-hosting/remove-superuser-access.mdx
@@ -29,7 +29,7 @@ Use the provided script to reassign ownership of database objects in the `public
sh utils/reassign-owner.sh
```
-
+
This script only updates ownership for database objects in the `public` schema. Supabase-managed and custom schemas are not affected.
@@ -53,7 +53,7 @@ This script only updates ownership for database objects in the `public` schema.
PG_META_DB_USER: postgres
```
-
+
Studio uses its own credentials to access Postgres via `postgres-meta`, so this change is only needed for backward compatibility and consistency.
diff --git a/apps/docs/content/guides/self-hosting/restore-from-platform.mdx b/apps/docs/content/guides/self-hosting/restore-from-platform.mdx
index c5d49ee325582..b0ccb6211748c 100644
--- a/apps/docs/content/guides/self-hosting/restore-from-platform.mdx
+++ b/apps/docs/content/guides/self-hosting/restore-from-platform.mdx
@@ -121,7 +121,7 @@ Your `auth.users` table and related data are included in the database dump, so u
Managed Supabase may run a newer Postgres version (Postgres 17) than the self-hosted Docker image (currently it's Postgres 15 by default). The `supabase db dump` command produces plain SQL files that work across major Postgres versions.
-
+
If your managed project runs Postgres 17, consider starting your self-hosted deployment with Postgres 17 as well. See the [Postgres 17 guide](/docs/guides/self-hosting/postgres-upgrade-17) for setup instructions.
diff --git a/apps/docs/content/guides/self-hosting/self-hosted-proxy-https.mdx b/apps/docs/content/guides/self-hosting/self-hosted-proxy-https.mdx
index 12c808b46a63f..6c1dea4ddc19c 100644
--- a/apps/docs/content/guides/self-hosting/self-hosted-proxy-https.mdx
+++ b/apps/docs/content/guides/self-hosting/self-hosted-proxy-https.mdx
@@ -20,7 +20,7 @@ You need:
Below are two options for adding a reverse proxy with automatic HTTPS in front of your self-hosted Supabase: **Caddy** (simpler, zero-config TLS) and **Nginx + Let's Encrypt** (more control over proxy settings). Both sit in front of the API gateway and terminate TLS, so internal traffic stays on HTTP.
-
+
If you already run [HAProxy](https://www.haproxy.com/), [Traefik](https://traefik.io/), [Nginx Proxy Manager](https://nginxproxymanager.com/), or another reverse proxy for your infrastructure, you can use it instead of Caddy or Nginx above. The key requirements are:
diff --git a/apps/docs/content/guides/self-hosting/self-hosted-saml-sso.mdx b/apps/docs/content/guides/self-hosting/self-hosted-saml-sso.mdx
index 05993e0fbc642..e0514267ef99d 100644
--- a/apps/docs/content/guides/self-hosting/self-hosted-saml-sso.mdx
+++ b/apps/docs/content/guides/self-hosting/self-hosted-saml-sso.mdx
@@ -65,7 +65,7 @@ Keep this key secret. Anyone with the private key can forge SAML requests on beh
-
+