Commit Graph

325 Commits

Author SHA1 Message Date
Miranda Limonczenko
f09d35cfd5 fix(docs): make code blocks reachable and readable by keyboard and screen reader (#49562)
Closes DOCS-1283



https://github.com/user-attachments/assets/6e55a27f-6f73-453b-b98f-e91d3c14a9e4



## Problem

Three defects in the docs code block:

- The scroll container has no `tabindex`. On `/guides/database/tables`,
18 blocks, none focusable, 2 overflowing at 1280px. Tab skips the scroll
region, so a keyboard-only user cannot scroll code that runs off the
edge.
- The container has `role="group"` with no accessible name, so it
announces as bare "group".
- The line-number gutter has no `aria-hidden`, so digits are read inline
with the code. A block linearizes as `1import { createClient } from
'@supabase/supabase-js'23const supabase = ...`, with lines 2 and 3
collapsing into "23".

Four more surfaced while testing the fix:

- The wrap and copy buttons were absolutely positioned inside the
element that scrolls, so `right-2` measured against the scrollable
content box. Scrolling dragged them out of the corner into the middle of
the code. This one predates the PR.
- The buttons preceded the code in the DOM, so a screen reader read two
actions before naming what they act on.
- `focus-within` only fired for the buttons, so focusing the block left
the controls invisible.
- Both buttons set an `aria-label` identical to their tooltip text, and
Radix points `aria-describedby` at the tooltip on focus, producing "Copy
code, button, Copy code".

## Solution

Keyboard:

- Split the scroll region out of the positioning container, so the
controls stay pinned.
- Give the scroll region a `tabIndex` and a focus ring.
- Reveal the controls on `group-focus-within`.

Screen reader:

- Name the region `<language>, <n> lines`. Code content stays readable;
the summary goes in the name so the group can be skipped or stepped
into.
- Map fence aliases to spoken names, so `ts` announces as TypeScript.
Only the ambiguous ones; `bash`, `python`, `kotlin`, `dart`, `swift`
already read fine.
- `aria-hidden` the gutter. The numbers are already `select-none`, and
copy takes its content from the source string rather than the DOM, so
copy behavior is unchanged.
- Order the controls after the code.
- Announce the word wrap toggle through a live region, matching the copy
button.
- Opt both buttons out of Radix's generated description.

Also moved the `data-wrapped` side effect out of the `setIsWrapped`
updater, since React calls updaters twice under StrictMode.

## Manual testing

1. Open `/docs/guides/database/tables`.
2. Run `document.querySelectorAll('.code-scroll[tabindex="0"]').length`
in the console. Expect `18`.
3. Run `[...document.querySelectorAll('.code-scroll')].map(b =>
b.getAttribute('aria-label'))`. Expect entries like `SQL, 11 lines` and
`bash, 2 lines`, plus one bare `2 lines` for the fence with no language.
4. Tab to a code block. Expect a visible focus ring, and the wrap and
copy buttons to appear.
5. Press ArrowRight on the block under "Basic data loading", which
overflows. Expect it to scroll, and the buttons to stay in the top-right
corner.
6. Press Enter on the wrap button. Expect the code to wrap and a screen
reader to announce "Word wrap enabled".
7. With VoiceOver on, focus a code block. Expect "SQL, 11 lines, code
block", then the code read without line numbers interleaved. Focus each
button and expect its name once, not twice.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Accessibility**
- Improved code block labels for screen readers, including programming
language and line count.
  - Added announcements when word wrap is enabled or disabled.
  - Enhanced keyboard focus behavior for code block controls.

- **Usability**
  - Kept code block controls visible while scrolling through code.
  - Improved wrapped-code overflow handling.
- Removed redundant tooltip descriptions for copy and word-wrap
controls.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-26 10:43:40 -07:00
Samir Ketema
478d95b35c fix: display request body Array<object> schema/fields in Management API Reference (#49575)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Fix/Docs Update - Fixes the Management API Reference

## What is the current behavior?

Management API Reference cannot properly render request body fields of
type `Array<object>`. [Example
here](https://supabase.com/docs/reference/api/v2-create-organization-invitations)
<img width="586" height="511" alt="CleanShot 2026-08-25 at 20 26 35"
src="https://github.com/user-attachments/assets/b8358477-d9f3-4621-8b08-104a6589e7c9"
/>


## What is the new behavior?

Properly expands the request body fields & schema:
<img width="606" height="885" alt="CleanShot 2026-08-25 at 20 27 09"
src="https://github.com/user-attachments/assets/94305ece-8a5c-4f06-b584-6bca528aa5ea"
/>


## Additional context

N/A


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **UI Improvements**
* Object and array-of-object API schemas now display summaries alongside
expanded properties in clearly separated sections.
* Improved handling of array item details and schema composition values
for more reliable rendering.
* Other schema types continue to use the existing detail-list
presentation.

* **Bug Fixes**
* Prevented errors when displaying API specifications with incomplete
array-item details or single-value schema combinations.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-26 09:46:57 -07:00
Miranda Limonczenko
61b2a18724 fix(docs): stop rendering empty troubleshooting error-code pills (#49344)
Closes DOCS-1281

## Problem

Two defects in the "Related error codes" list, both from the page
diverging from what `Troubleshooting.utils.ts` already does.

* **Empty pills.** `formatError` returns an empty string when an error
has neither an HTTP status code nor a code. The page renders the pill
anyway, giving a link with no text whose `href` ends in `errorCodes=`
with no value. So it is both an unnamed link and a pill filtering on
nothing.
* **Duplicate pills.** The same formatted code renders once per
underlying error object, so one entry shows seven identical "500
unexpected_failure" pills.

Measured on production, across the 59 entries that render the section:

| | Count |
| -- | -- |
| Entries with an empty pill | 23 |
| Empty pills | 33 |
| Entries with duplicate pills | 4 |
| Redundant pills | 9 |

The guard also evaluated to `0` rather than `false` for an empty array,
which React renders as a literal "0".

## Solution

* Derive the formatted codes once, drop the empties, and dedupe. An
entry whose every code formats empty no longer renders a heading and
rule with nothing under them.
* Call `formatError` once per code instead of twice per pill, and key on
the code now that codes are unique.
* Fix the same `0`-rendering guard on the keywords section.

`Troubleshooting.utils.ts` already filters on `error?.http_status_code
|| error?.code` at lines 69 and 150, and already dedupes by formatted
code at lines 72 to 79. This brings the page in line with the sidebar
and filter list rather than introducing a new pattern.

`formatError` itself is unchanged. It also produces grouping and sort
keys in `Troubleshooting.utils.ts` and `Troubleshooting.ui.tsx`, so
changing its return contract would reach well beyond this fix.

## Manual testing

Compare each page against production, which still shows both defects.

1. Open [dashboard-errors-when-managing-users on
production](https://supabase.com/docs/guides/troubleshooting/dashboard-errors-when-managing-users-N1ls4A).
It shows 8 pills: seven identical "500 unexpected_failure" and one
empty.
2. Open [the same page on the
preview](https://docs-git-docs-troubleshooting-empty-error-pills-supabase.vercel.app/docs/guides/troubleshooting/dashboard-errors-when-managing-users-N1ls4A).
One "500 unexpected_failure" pill remains.
3. Open [prisma-error-management on
production](https://supabase.com/docs/guides/troubleshooting/prisma-error-management-Cm5P_o).
It shows 6 empty pills.
4. Open [the same page on the
preview](https://docs-git-docs-troubleshooting-empty-error-pills-supabase.vercel.app/docs/guides/troubleshooting/prisma-error-management-Cm5P_o).
The section is gone, because every code on that entry formats empty.
5. Run axe on either preview page. `link-name` reports zero elements.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Improved troubleshooting displays by formatting and deduplicating
error values.
  * Removed empty or invalid error entries from the rendered results.
* Related error-code links now appear only when valid error codes are
available.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-21 08:44:28 -07:00
Pamela Chia
65e786ba13 feat(docs): manifest-gated markdown alternate helper (#48389) 2026-08-20 19:18:47 +08:00
Miranda Limonczenko
bb094f96c8 docs(mcp): revise authentication note to match style guide (#49219)
<img width="769" height="212" alt="Screenshot 2026-08-18 at 12 17 18 PM"
src="https://github.com/user-attachments/assets/38ce6606-84ae-4833-a7d9-7a1931fdd773"
/>


## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Docs update. Copy and dedupe.

## What is the current behavior?

Gave this a style edit. Basically, saw this note breaking a lot of style
rules at once (`login` instead of `log in`, future tense, and also
breaking timelessness) and couldn't help myself for submitting a
revision. 😅

## What is the new behavior?

Preview:
https://docs-git-cursor-revise-mcp-auth-note-bbe8-supabase.vercel.app/docs/guides/ai-tools/mcp

---------

Co-authored-by: Cursor Agent <cursoragent@cursor.com>
Co-authored-by: Miranda Limonczenko <czenko@users.noreply.github.com>
2026-08-19 08:56:09 -07:00
Pedro Rodrigues
d3146a1755 docs: add Grok plugin and MCP install instructions (#49212)
## What this does

Adds **Grok** (Grok Build) across the Supabase AI-tools docs, and fixes
two logo gaps.

- **Plugin docs** (`AgentPluginsPanel`) — Grok client + `grok plugin
install …` / in-session `/plugins` steps.
- **MCP docs** (`McpUrlBuilder`) — Grok under "AI Agent CLI":
`~/.grok/config.toml` (`[mcp_servers.supabase]`), `grok mcp add …
--transport http`, OAuth steps.
- **"Pick your agent" grid** — add the Grok logo, and fix **Warp**'s
pre-existing missing logo (both were absent from the grid's
`ICON_ASSETS` map).
- **Fix**: the plugins-page Cursor entry was missing
`hasDistinctDarkIcon`, so its dark-mode logo fell back to the light mark
— aligned with the MCP list.
- Adds Grok + Warp agent logos (light + dark).

## Testing

Verified against grok `1.0.5`: `grok plugin install …` works; the
generated `config.toml` and `grok mcp add` command are both parsed by
`grok mcp list`.

Pairs with supabase-community/supabase-plugin#45 (the `.grok-plugin`
surface); merge after that lands.

## Preview

[Agent Plugin
page](https://docs-git-pedrorodrigues-ai-932-add-grok-agent-p-12402b-supabase.vercel.app/docs/guides/ai-tools/plugins#manual-installation)

<img width="877" height="378" alt="image"
src="https://github.com/user-attachments/assets/8fd9e112-5c11-412b-bd8c-611912043e6d"
/>

[MCP
page](https://docs-git-pedrorodrigues-ai-932-add-grok-agent-p-12402b-supabase.vercel.app/docs/guides/ai-tools/mcp#remote-mcp-installation)

<img width="877" height="513" alt="image"
src="https://github.com/user-attachments/assets/459de070-5049-433a-929f-9902222e157d"
/>

[AI Tools main
page](https://docs-git-pedrorodrigues-ai-932-add-grok-agent-p-12402b-supabase.vercel.app/docs/guides/ai-tools#pick-your-agent)

<img width="877" height="642" alt="image"
src="https://github.com/user-attachments/assets/e6ca40d2-e9c9-466c-a837-dbda4bdc09f7"
/>

Closes AI-932, AI-974

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## New Features

- Added Grok as a supported AI tool and MCP client.
- Added Grok installation instructions, CLI setup, authentication, and
connection verification guidance.
- Added Grok icons for light and dark themes.
- Added support for custom documentation link text in plugin panels.
- Added Warp to the available icon assets.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-08-19 15:18:45 +01:00
Miranda Limonczenko
d45e0cd3d5 fix(docs ci): stop Docs E2E blocking pull requests it shouldn't (#48726)
Supersedes #48725, which GitHub closed when its head branch was renamed.
Same commits, same diff.

Fixes
[DOCS-1270](https://linear.app/supabase/issue/DOCS-1270/fail-the-e2e-pipeline-if-the-docs-preview-never-loads).

`Docs E2E` is a required check on `master`, so anything that turns it
red blocks a merge. It had three ways of going red that had nothing to
do with whether the author's docs were correct.

## Problem

**1. Every troubleshooting page could fail, with nothing actionable.**
Troubleshooting entries were selected by `article.prose`. That class is
not unique — `apps/docs/app/not-found.tsx` renders `<article
className="prose …">` too — and nothing guaranteed it matched the
entry's article at all. When it missed, the link test failed with `Page
article should be present` and the a11y test failed inside axe with `No
elements found for include in page Context` plus a stack trace. Neither
tells the author what to do.

This is what DOCS-1270 actually was. The ticket describes tests running
"against a preview build that was never created", but the [failing
run](https://github.com/supabase/supabase/actions/runs/30949924515/job/92132543658)
for #48719 shows the preview resolved fine and `response.ok()` passed —
it broke at the article assertion. **Blocked:** anyone adding or editing
a troubleshooting entry.

**2. Fork pull requests failed for being forks.** Fork runs get no
`VERCEL_TOKEN`, so no preview URL resolves, and the base-URL step fell
back to `https://supabase.com`. The page paths under test can include
pages the pull request *adds*, which do not exist on production, so they
404. **Blocked:** every external contributor adding a docs page,
unconditionally, with no action available to them.

**3. A Vercel problem failed the docs check.**
`waitForVercelDocsPreview.js` throws when Vercel reports a failed
deployment, omits a `target_url`, or does not post a status within 900s.
The step had no `continue-on-error`, so any of those turned `Docs E2E`
red. **Blocked:** any author whose pull request coincided with a Vercel
incident. This is live right now — two Vercel checks on this very pull
request are failing with "unable to fetch required git information", a
git-integration auth error that happens before any build runs.

## Solution

**1. Select on a stable, purpose-named attribute.** Add
`id="sb-docs-troubleshooting-main-article"` on the troubleshooting
article, mirroring `#sb-docs-guide-main-article` on guides, and select
on that instead of the class. Per review feedback, a plain id doesn't
say it's a test hook, so both articles also get `data-testid` with the
same value — matching the convention `apps/studio` already uses with
Playwright's `getByTestId` — and the e2e selectors target that attribute
instead. Guides keep their `id` — `GuidesMdx.client.tsx` and
`GuidesSidebar.tsx` both query it directly for the table of contents and
the "copy article" fallback — and gain `data-testid` alongside it.

**2 and 3. Resolve a preview or skip — never substitute production,
never fail on Vercel.** The production fallback is gone.
`continue-on-error: true` on the preview wait means a Vercel failure
resolves no URL instead of failing the job, which lands in the same path
as a fork: `should_test=false`, so Playwright is skipped and the check
passes. Both cases emit a `::warning::` and a job summary with the exact
`gh workflow run` command to test the preview by hand, and manual runs
against a non-production base URL now send the protection bypass so that
command actually works.

Skipping does not let a broken preview through: `Vercel – docs` is
itself a required check on `master`, so a genuine preview failure still
blocks the merge — via the check that describes the real problem.


## Manual test

**1. The selector matches the markup, and it needs this pull request's
preview.** `data-testid` isn't deployed anywhere yet — not on
production, not on any other branch — so this is the one claim in this
PR that production cannot confirm. Verified directly against this
branch's own Vercel preview:

```bash
curl -s https://docs-git-docs-e2e-stop-false-blocks-supabase.vercel.app/docs/guides/database/overview \
  | grep -o 'data-testid="[^"]*"'
curl -s https://docs-git-docs-e2e-stop-false-blocks-supabase.vercel.app/docs/guides/troubleshooting/42501--permission-denied-for-table-httprequestqueue-KnozmQ \
  | grep -o 'data-testid="[^"]*"'
```

Expect `data-testid="sb-docs-guide-main-article"` and
`data-testid="sb-docs-troubleshooting-main-article"` respectively. Then
run the suite against that same preview — expect all page/link/a11y
checks to pass:

```bash
PLAYWRIGHT_BASE_URL=https://docs-git-docs-e2e-stop-false-blocks-supabase.vercel.app \
DOCS_E2E_PAGE_PATHS=/docs/guides/database/overview,/docs/guides/troubleshooting/42501--permission-denied-for-table-httprequestqueue-KnozmQ \
pnpm -C e2e/docs exec playwright test --reporter=list
```

Running the same command with `PLAYWRIGHT_BASE_URL=https://supabase.com`
fails both pages right now — expected until this merges, not a
regression. Once merged, exercise it through the real pipeline:

```bash
gh workflow run docs-e2e.yml --ref docs-e2e/stop-false-blocks \
  -f base_url=<preview-url> \
  -f page_paths=/docs/guides/troubleshooting/42501--permission-denied-for-table-httprequestqueue-KnozmQ
```

**2. No preview means skip, not a run against production.** Exercise the
base-URL step's three paths from the repository root:

```bash
export GITHUB_OUTPUT=$(mktemp) GITHUB_STEP_SUMMARY=$(mktemp) PAGE_PATHS=/docs/guides/a
script=$(python3 -c "import yaml;print([s for s in yaml.safe_load(open('.github/workflows/docs-e2e.yml'))['jobs']['e2e']['steps'] if s.get('name')=='Resolve base URL'][0]['run'])")
for c in "workflow_dispatch|https://supabase.com|" "pull_request||https://docs-abc.vercel.app" "pull_request||"; do
  IFS='|' read -r ev url dep <<< "$c"
  : > "$GITHUB_OUTPUT"
  EVENT_NAME="$ev" BASE_URL_INPUT="${url:-https://supabase.com}" DEPLOYMENT_URL="$dep" bash -c "$script" >/dev/null 2>&1
  echo "$ev deployment=[${dep:-none}] -> $(tr '\n' ' ' < "$GITHUB_OUTPUT")"
done
tail -4 "$GITHUB_STEP_SUMMARY"
```

Expected:

```
workflow_dispatch deployment=[none] -> url=https://supabase.com use_bypass=false should_test=true
pull_request deployment=[https://docs-abc.vercel.app] -> url=https://docs-abc.vercel.app use_bypass=true should_test=true
pull_request deployment=[none] -> url= use_bypass=false should_test=false
```

followed by a runnable `gh workflow run docs-e2e.yml` command in the job
summary. The third line covers both the fork case and the Vercel-failure
case: no base URL, no test, no block.

**3. A Vercel failure no longer fails the job.** `continue-on-error:
true` on the wait step is what routes a throw into that third line:

```bash
python3 -c "
import yaml
s=[x for x in yaml.safe_load(open('.github/workflows/docs-e2e.yml'))['jobs']['e2e']['steps'] if x.get('name')=='Wait for Vercel docs preview'][0]
print('continue-on-error:', s.get('continue-on-error'))
for n in ('Install dependencies','Install Playwright Chromium','Run docs E2E'):
    print(n, '->', [x for x in yaml.safe_load(open('.github/workflows/docs-e2e.yml'))['jobs']['e2e']['steps'] if x.get('name')==n][0]['if'])
"
```

Expect `continue-on-error: True` and all three run steps gated on
`steps.base-url.outputs.should_test == 'true'`.

**Note on this pull request's own check.** The scope resolver only maps
`apps/docs/content/**` to pages, and this pull request changes none, so
`Docs E2E` resolves zero pages and skips — which is correct, and why the
dispatch above is the real test.

🤖 Generated with [Claude Code](https://claude.com/claude-code)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Improved documentation preview checks so unavailable or delayed
previews no longer cause unnecessary workflow failures.
* Added clearer handling for manual documentation checks and missing
preview deployments.

* **Tests**
* Improved end-to-end documentation testing reliability across preview
and production environments.
* Added stable targeting for the troubleshooting article to reduce test
failures caused by page structure changes.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 15:23:26 +00:00
Nik Richers
1123a74813 spike(docs): chunk Management API reference into one page per endpoint (#48547)
## I have read the CONTRIBUTING.md file.

YES

## What kind of change does this PR introduce?

This is an experimental spike that splits the Management API reference
into one statically-generated page per endpoint, instead of the single
monolithic page that currently renders all ~172 operations at
`/reference/api`.
Relates to DOCS-1268.

## What is the current behavior?

- Linear item: Spike: chunk Management API reference into one page per
endpoint
- `/reference/api/introduction` (and every other API deep link) renders
one ~35MB page containing all 172 endpoints, per `known-issues.md`'s
"Reference page length" note — a known UX/LLM issue with no per-endpoint
pages today
- All API reference "navigation" is actually `preventDefault` +
`pushState` + `scrollIntoView` within that one page (see
`Reference.navigation.client.tsx`)

## What is the new behavior?

- New `generateStaticParamsForApi()` in `Reference.utils.ts` emits one
static param per API operation slug (~172 pages), independent of the SDK
static-params generator
- Fixed the permanent `/docs/reference/api` ->
`/docs/reference/api/start` redirect in `apps/www/lib/redirects.js`
(`start` was never a real content slug — it only worked because the old
routing collapsed every sub-path to the monolith); now points straight
at `introduction`, and `/start` itself still redirects there so old
links/bookmarks don't 404
- `middleware.ts` only normalizes the bare `/reference/api` request now;
`/reference/api/<slug>` falls through to the real per-operation page (or
404s if the slug is unknown)
- `Reference.apiPage.tsx` branches on the resolved slug: no slug now
redirects to `/reference/api/introduction` (the monolith-rendering
branch is removed entirely — `ClientLibIntroduction`/`RefSections` are
no longer used in this file), a slug renders just that one section via
the existing `SectionSwitch`/`ApiEndpointSection`/`MarkdownSection` — no
duplicated rendering logic
- `Reference.navigation.tsx` / `Reference.navigation.client.tsx` gained
an opt-in `realNavigation` prop; only the API reference's two
`<ReferenceNavigation>` call sites set it, so SDK/CLI/self-hosting
sidebar behavior is byte-for-byte unchanged
- Per-operation page metadata (title/description/canonical URL)

### Explicitly out of scope for this spike

- `internals/generate-reference-markdown.ts` (the LLM `api.md` export) —
still a single file, not split per endpoint
- Any change to SDK, CLI, or self-hosting reference rendering or
navigation
- A hypothetical 2+-segment API path (`/reference/api/foo/bar`)
previously collapsed silently to the monolith; it now 404s. Not
reachable by any existing internal link today.

## Additional context

- Worktree:
`~/GitHub/supabase/supabase-worktrees/nrichers/nikrichers/docs-1268-spike-chunk-management-api-reference-into-one-page-per`
- Verification:

| Check | Result |
| --- | --- |
| `pnpm typecheck` (apps/docs) |  pass |
| `GET /reference/api` (bare) |  307, redirects to
`/reference/api/introduction` (monolith removed) |
| `GET /reference/api/introduction` |  200, new chunked page |
| `GET /reference/api/v1-get-performance-advisors` |  200, new chunked
page — confirmed via content size (~1.5MB vs ~35.5MB monolith) and
heading-count diffing that only one operation renders |
| `GET /reference/api/not-a-real-slug` |  404, confirms new static
params + `dynamicParams=false` work as designed |
| `GET /reference/cli`, `GET /reference/self-hosting-storage` |  200,
unaffected — same shared nav components, no `realNavigation` passed |
| `GET /reference/javascript`, `GET /reference/python` | ⚠️ 404 locally
— not a regression; these need `codegen:references:new` output +
`dev:secrets:pull` (internal env vars) that weren't run in this sandbox,
unrelated to any file this PR touches |

### Before & After

**Example (left: prod; right: PR)**

<img width="2664" height="1667" alt="image"
src="https://github.com/user-attachments/assets/c00e59ab-208b-44fb-be52-80270404fcc5"
/>


Preview is deployed:
https://vercel.com/supabase/docs/43RzVCY6MkAbUuaDxdf9dPz7qsBu

| Before (production) | After (PR preview) |
| --- | --- |
| - [Bare `/reference/api` (redirects to
Introduction)](https://supabase.com/docs/reference/api)<br>-
[Introduction](https://supabase.com/docs/reference/api/introduction)<br>-
[Get performance
advisors](https://supabase.com/docs/reference/api/v1-get-performance-advisors)<br>-
[Get security
advisors](https://supabase.com/docs/reference/api/v1-get-security-advisors)<br>-
[Create log
drain](https://supabase.com/docs/reference/api/v2-create-log-drain)<br>-
[Delete log
drain](https://supabase.com/docs/reference/api/v2-delete-log-drain)<br>-
[Get project function combined
stats](https://supabase.com/docs/reference/api/v1-get-project-function-combined-stats)<br>-
[Get project
logs](https://supabase.com/docs/reference/api/v1-get-project-logs)<br>-
[Get project logs
all](https://supabase.com/docs/reference/api/v1-get-project-logs-all)<br>-
[Get project usage api
count](https://supabase.com/docs/reference/api/v1-get-project-usage-api-count)<br>-
[Get project usage request
count](https://supabase.com/docs/reference/api/v1-get-project-usage-request-count)<br>-
[List log
drains](https://supabase.com/docs/reference/api/v2-list-log-drains)<br>-
[Update log
drain](https://supabase.com/docs/reference/api/v2-update-log-drain)<br>-
[Create a sso
provider](https://supabase.com/docs/reference/api/v1-create-a-sso-provider)<br>-
[Create legacy signing
key](https://supabase.com/docs/reference/api/v1-create-legacy-signing-key)<br>-
[Create project signing
key](https://supabase.com/docs/reference/api/v1-create-project-signing-key)<br>-
[Create project tpa
integration](https://supabase.com/docs/reference/api/v1-create-project-tpa-integration)<br>-
[Delete a sso
provider](https://supabase.com/docs/reference/api/v1-delete-a-sso-provider)<br>-
[Delete project tpa
integration](https://supabase.com/docs/reference/api/v1-delete-project-tpa-integration)<br>-
[Get a sso
provider](https://supabase.com/docs/reference/api/v1-get-a-sso-provider)<br>-
[Get auth service
config](https://supabase.com/docs/reference/api/v1-get-auth-service-config)<br>-
[Get legacy signing
key](https://supabase.com/docs/reference/api/v1-get-legacy-signing-key)<br>-
[Get project signing
key](https://supabase.com/docs/reference/api/v1-get-project-signing-key)<br>-
[Get project signing
keys](https://supabase.com/docs/reference/api/v1-get-project-signing-keys)<br>-
[Get project tpa
integration](https://supabase.com/docs/reference/api/v1-get-project-tpa-integration)<br>-
[List all sso
provider](https://supabase.com/docs/reference/api/v1-list-all-sso-provider)<br>-
[List project tpa
integrations](https://supabase.com/docs/reference/api/v1-list-project-tpa-integrations)<br>-
[Remove project signing
key](https://supabase.com/docs/reference/api/v1-remove-project-signing-key)<br>-
[Update a sso
provider](https://supabase.com/docs/reference/api/v1-update-a-sso-provider)<br>-
[Update auth service
config](https://supabase.com/docs/reference/api/v1-update-auth-service-config)<br>-
[Update project signing
key](https://supabase.com/docs/reference/api/v1-update-project-signing-key)<br>-
[Apply project
addon](https://supabase.com/docs/reference/api/v1-apply-project-addon)<br>-
[List project
addons](https://supabase.com/docs/reference/api/v1-list-project-addons)<br>-
[Remove project
addon](https://supabase.com/docs/reference/api/v1-remove-project-addon)<br>-
[Accept invite external jit
access](https://supabase.com/docs/reference/api/v1-accept-invite-external-jit-access)<br>-
[Apply a
migration](https://supabase.com/docs/reference/api/v1-apply-a-migration)<br>-
[Authorize jit
access](https://supabase.com/docs/reference/api/v1-authorize-jit-access)<br>-
[Create login
role](https://supabase.com/docs/reference/api/v1-create-login-role)<br>-
[Delete invite external jit
access](https://supabase.com/docs/reference/api/v1-delete-invite-external-jit-access)<br>-
[Delete jit
access](https://supabase.com/docs/reference/api/v1-delete-jit-access)<br>-
[Delete login
roles](https://supabase.com/docs/reference/api/v1-delete-login-roles)<br>-
[Disable readonly mode
temporarily](https://supabase.com/docs/reference/api/v1-disable-readonly-mode-temporarily)<br>-
[Enable database
webhook](https://supabase.com/docs/reference/api/v1-enable-database-webhook)<br>-
[Generate typescript
types](https://supabase.com/docs/reference/api/v1-generate-typescript-types)<br>-
[Get a
migration](https://supabase.com/docs/reference/api/v1-get-a-migration)<br>-
[Get a
snippet](https://supabase.com/docs/reference/api/v1-get-a-snippet)<br>-
[Get backup
schedule](https://supabase.com/docs/reference/api/v1-get-backup-schedule)<br>-
[Get database
metadata](https://supabase.com/docs/reference/api/v1-get-database-metadata)<br>-
[Get database
openapi](https://supabase.com/docs/reference/api/v1-get-database-openapi)<br>-
[Get jit
access](https://supabase.com/docs/reference/api/v1-get-jit-access)<br>-
[Get jit access
config](https://supabase.com/docs/reference/api/v1-get-jit-access-config)<br>-
[Get pooler
config](https://supabase.com/docs/reference/api/v1-get-pooler-config)<br>-
[Get postgres
config](https://supabase.com/docs/reference/api/v1-get-postgres-config)<br>-
[Get project pgbouncer
config](https://supabase.com/docs/reference/api/v1-get-project-pgbouncer-config)<br>-
[Get readonly mode
status](https://supabase.com/docs/reference/api/v1-get-readonly-mode-status)<br>-
[Get ssl enforcement
config](https://supabase.com/docs/reference/api/v1-get-ssl-enforcement-config)<br>-
[Invite external jit
access](https://supabase.com/docs/reference/api/v1-invite-external-jit-access)<br>-
[List all
backups](https://supabase.com/docs/reference/api/v1-list-all-backups)<br>-
[List all
snippets](https://supabase.com/docs/reference/api/v1-list-all-snippets)<br>-
[List jit
access](https://supabase.com/docs/reference/api/v1-list-jit-access)<br>-
[List migration
history](https://supabase.com/docs/reference/api/v1-list-migration-history)<br>-
[Patch a
migration](https://supabase.com/docs/reference/api/v1-patch-a-migration)<br>-
[Read only
query](https://supabase.com/docs/reference/api/v1-read-only-query)<br>-
[Remove a read
replica](https://supabase.com/docs/reference/api/v1-remove-a-read-replica)<br>-
[Restore pitr
backup](https://supabase.com/docs/reference/api/v1-restore-pitr-backup)<br>-
[Rollback
migrations](https://supabase.com/docs/reference/api/v1-rollback-migrations)<br>-
[Run a
query](https://supabase.com/docs/reference/api/v1-run-a-query)<br>-
[Setup a read
replica](https://supabase.com/docs/reference/api/v1-setup-a-read-replica)<br>-
[Update backup
schedule](https://supabase.com/docs/reference/api/v1-update-backup-schedule)<br>-
[Update database
password](https://supabase.com/docs/reference/api/v1-update-database-password)<br>-
[Update jit
access](https://supabase.com/docs/reference/api/v1-update-jit-access)<br>-
[Update jit access
config](https://supabase.com/docs/reference/api/v1-update-jit-access-config)<br>-
[Update pooler
config](https://supabase.com/docs/reference/api/v1-update-pooler-config)<br>-
[Update postgres
config](https://supabase.com/docs/reference/api/v1-update-postgres-config)<br>-
[Update ssl enforcement
config](https://supabase.com/docs/reference/api/v1-update-ssl-enforcement-config)<br>-
[Upsert a
migration](https://supabase.com/docs/reference/api/v1-upsert-a-migration)<br>-
[Activate custom
hostname](https://supabase.com/docs/reference/api/v1-activate-custom-hostname)<br>-
[Activate vanity subdomain
config](https://supabase.com/docs/reference/api/v1-activate-vanity-subdomain-config)<br>-
[Check vanity subdomain
availability](https://supabase.com/docs/reference/api/v1-check-vanity-subdomain-availability)<br>-
[Deactivate vanity subdomain
config](https://supabase.com/docs/reference/api/v1-deactivate-vanity-subdomain-config)<br>-
[Get hostname
config](https://supabase.com/docs/reference/api/v1-get-hostname-config)<br>-
[Get vanity subdomain
config](https://supabase.com/docs/reference/api/v1-get-vanity-subdomain-config)<br>-
[Update hostname
config](https://supabase.com/docs/reference/api/v1-update-hostname-config)<br>-
[Verify dns
config](https://supabase.com/docs/reference/api/v1-verify-dns-config)<br>-
[Bulk update
functions](https://supabase.com/docs/reference/api/v1-bulk-update-functions)<br>-
[Create a
function](https://supabase.com/docs/reference/api/v1-create-a-function)<br>-
[Delete a
function](https://supabase.com/docs/reference/api/v1-delete-a-function)<br>-
[Deploy a
function](https://supabase.com/docs/reference/api/v1-deploy-a-function)<br>-
[Get a
function](https://supabase.com/docs/reference/api/v1-get-a-function)<br>-
[Get a function
body](https://supabase.com/docs/reference/api/v1-get-a-function-body)<br>-
[List all
functions](https://supabase.com/docs/reference/api/v1-list-all-functions)<br>-
[Update a
function](https://supabase.com/docs/reference/api/v1-update-a-function)<br>-
[Count action
runs](https://supabase.com/docs/reference/api/v1-count-action-runs)<br>-
[Create a
branch](https://supabase.com/docs/reference/api/v1-create-a-branch)<br>-
[Delete a
branch](https://supabase.com/docs/reference/api/v1-delete-a-branch)<br>-
[Diff a
branch](https://supabase.com/docs/reference/api/v1-diff-a-branch)<br>-
[Disable preview
branching](https://supabase.com/docs/reference/api/v1-disable-preview-branching)<br>-
[Get a
branch](https://supabase.com/docs/reference/api/v1-get-a-branch)<br>-
[Get a branch
config](https://supabase.com/docs/reference/api/v1-get-a-branch-config)<br>-
[Get action
run](https://supabase.com/docs/reference/api/v1-get-action-run)<br>-
[Get action run
logs](https://supabase.com/docs/reference/api/v1-get-action-run-logs)<br>-
[List action
runs](https://supabase.com/docs/reference/api/v1-list-action-runs)<br>-
[List all
branches](https://supabase.com/docs/reference/api/v1-list-all-branches)<br>-
[Merge a
branch](https://supabase.com/docs/reference/api/v1-merge-a-branch)<br>-
[Push a
branch](https://supabase.com/docs/reference/api/v1-push-a-branch)<br>-
[Reset a
branch](https://supabase.com/docs/reference/api/v1-reset-a-branch)<br>-
[Restore a
branch](https://supabase.com/docs/reference/api/v1-restore-a-branch)<br>-
[Update a branch
config](https://supabase.com/docs/reference/api/v1-update-a-branch-config)<br>-
[Update action run
status](https://supabase.com/docs/reference/api/v1-update-action-run-status)<br>-
[Authorize
user](https://supabase.com/docs/reference/api/v1-authorize-user)<br>-
[Exchange oauth
token](https://supabase.com/docs/reference/api/v1-exchange-oauth-token)<br>-
[Oauth authorize project
claim](https://supabase.com/docs/reference/api/v1-oauth-authorize-project-claim)<br>-
[Revoke
token](https://supabase.com/docs/reference/api/v1-revoke-token)<br>-
[Assign organization member
role](https://supabase.com/docs/reference/api/v2-assign-organization-member-role)<br>-
[Create an
organization](https://supabase.com/docs/reference/api/v1-create-an-organization)<br>-
[Get an
organization](https://supabase.com/docs/reference/api/v1-get-an-organization)<br>-
[Get organization
entitlements](https://supabase.com/docs/reference/api/v1-get-organization-entitlements)<br>-
[List all
organizations](https://supabase.com/docs/reference/api/v1-list-all-organizations)<br>-
[List organization
members](https://supabase.com/docs/reference/api/v1-list-organization-members)<br>-
[List organization
members](https://supabase.com/docs/reference/api/v2-list-organization-members)<br>-
[List organization
roles](https://supabase.com/docs/reference/api/v2-list-organization-roles)<br>-
[Create organization
invitations](https://supabase.com/docs/reference/api/v2-create-organization-invitations)<br>-
[Get
profile](https://supabase.com/docs/reference/api/v1-get-profile)<br>-
[Cancel a project
restoration](https://supabase.com/docs/reference/api/v1-cancel-a-project-restoration)<br>-
[Create a
project](https://supabase.com/docs/reference/api/v1-create-a-project)<br>-
[Create private link
association](https://supabase.com/docs/reference/api/v2-create-private-link-association)<br>-
[Delete a
project](https://supabase.com/docs/reference/api/v1-delete-a-project)<br>-
[Delete network
bans](https://supabase.com/docs/reference/api/v1-delete-network-bans)<br>-
[Delete private link
association](https://supabase.com/docs/reference/api/v2-delete-private-link-association)<br>-
[Get all projects for
organization](https://supabase.com/docs/reference/api/v1-get-all-projects-for-organization)<br>-
[Get available
regions](https://supabase.com/docs/reference/api/v1-get-available-regions)<br>-
[Get database
disk](https://supabase.com/docs/reference/api/v1-get-database-disk)<br>-
[Get disk
utilization](https://supabase.com/docs/reference/api/v1-get-disk-utilization)<br>-
[Get network
restrictions](https://supabase.com/docs/reference/api/v1-get-network-restrictions)<br>-
[Get postgres upgrade
eligibility](https://supabase.com/docs/reference/api/v1-get-postgres-upgrade-eligibility)<br>-
[Get postgres upgrade
status](https://supabase.com/docs/reference/api/v1-get-postgres-upgrade-status)<br>-
[Get
project](https://supabase.com/docs/reference/api/v1-get-project)<br>-
[Get project disk autoscale
config](https://supabase.com/docs/reference/api/v1-get-project-disk-autoscale-config)<br>-
[Get services
health](https://supabase.com/docs/reference/api/v1-get-services-health)<br>-
[List all network
bans](https://supabase.com/docs/reference/api/v1-list-all-network-bans)<br>-
[List all network bans
enriched](https://supabase.com/docs/reference/api/v1-list-all-network-bans-enriched)<br>-
[List all
projects](https://supabase.com/docs/reference/api/v1-list-all-projects)<br>-
[List available restore
versions](https://supabase.com/docs/reference/api/v1-list-available-restore-versions)<br>-
[List private link
associations](https://supabase.com/docs/reference/api/v2-list-private-link-associations)<br>-
[Modify database
disk](https://supabase.com/docs/reference/api/v1-modify-database-disk)<br>-
[Patch network
restrictions](https://supabase.com/docs/reference/api/v1-patch-network-restrictions)<br>-
[Pause a
project](https://supabase.com/docs/reference/api/v1-pause-a-project)<br>-
[Preview a project
transfer](https://supabase.com/docs/reference/api/v2-preview-a-project-transfer)<br>-
[Restart a
project](https://supabase.com/docs/reference/api/v1-restart-a-project)<br>-
[Restore a
project](https://supabase.com/docs/reference/api/v1-restore-a-project)<br>-
[Transfer a
project](https://supabase.com/docs/reference/api/v2-transfer-a-project)<br>-
[Update a
project](https://supabase.com/docs/reference/api/v1-update-a-project)<br>-
[Update network
restrictions](https://supabase.com/docs/reference/api/v1-update-network-restrictions)<br>-
[Upgrade postgres
version](https://supabase.com/docs/reference/api/v1-upgrade-postgres-version)<br>-
[Get realtime
config](https://supabase.com/docs/reference/api/v1-get-realtime-config)<br>-
[Shutdown
realtime](https://supabase.com/docs/reference/api/v1-shutdown-realtime)<br>-
[Update realtime
config](https://supabase.com/docs/reference/api/v1-update-realtime-config)<br>-
[Get postgrest service
config](https://supabase.com/docs/reference/api/v1-get-postgrest-service-config)<br>-
[Update postgrest service
config](https://supabase.com/docs/reference/api/v1-update-postgrest-service-config)<br>-
[Bulk create
secrets](https://supabase.com/docs/reference/api/v1-bulk-create-secrets)<br>-
[Bulk delete
secrets](https://supabase.com/docs/reference/api/v1-bulk-delete-secrets)<br>-
[Create project api
key](https://supabase.com/docs/reference/api/v1-create-project-api-key)<br>-
[Delete project api
key](https://supabase.com/docs/reference/api/v1-delete-project-api-key)<br>-
[Get pgsodium
config](https://supabase.com/docs/reference/api/v1-get-pgsodium-config)<br>-
[Get project api
key](https://supabase.com/docs/reference/api/v1-get-project-api-key)<br>-
[Get project api
keys](https://supabase.com/docs/reference/api/v1-get-project-api-keys)<br>-
[Get project legacy api
keys](https://supabase.com/docs/reference/api/v1-get-project-legacy-api-keys)<br>-
[List all
secrets](https://supabase.com/docs/reference/api/v1-list-all-secrets)<br>-
[Update pgsodium
config](https://supabase.com/docs/reference/api/v1-update-pgsodium-config)<br>-
[Update project api
key](https://supabase.com/docs/reference/api/v1-update-project-api-key)<br>-
[Update project legacy api
keys](https://supabase.com/docs/reference/api/v1-update-project-legacy-api-keys)<br>-
[Get storage
config](https://supabase.com/docs/reference/api/v1-get-storage-config)<br>-
[List all
buckets](https://supabase.com/docs/reference/api/v1-list-all-buckets)<br>-
[Update storage
config](https://supabase.com/docs/reference/api/v1-update-storage-config)
| - [Bare `/reference/api` (redirects to
Introduction)](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api)<br>-
[Introduction](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/introduction)<br>-
[Get performance
advisors](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-performance-advisors)<br>-
[Get security
advisors](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-security-advisors)<br>-
[Create log
drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-log-drain)<br>-
[Delete log
drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-delete-log-drain)<br>-
[Get project function combined
stats](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-function-combined-stats)<br>-
[Get project
logs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-logs)<br>-
[Get project logs
all](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-logs-all)<br>-
[Get project usage api
count](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-usage-api-count)<br>-
[Get project usage request
count](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-usage-request-count)<br>-
[List log
drains](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-log-drains)<br>-
[Update log
drain](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-update-log-drain)<br>-
[Create a sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-sso-provider)<br>-
[Create legacy signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-legacy-signing-key)<br>-
[Create project signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-signing-key)<br>-
[Create project tpa
integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-tpa-integration)<br>-
[Delete a sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-sso-provider)<br>-
[Delete project tpa
integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-project-tpa-integration)<br>-
[Get a sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-sso-provider)<br>-
[Get auth service
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-auth-service-config)<br>-
[Get legacy signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-legacy-signing-key)<br>-
[Get project signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-signing-key)<br>-
[Get project signing
keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-signing-keys)<br>-
[Get project tpa
integration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-tpa-integration)<br>-
[List all sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-sso-provider)<br>-
[List project tpa
integrations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-project-tpa-integrations)<br>-
[Remove project signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-project-signing-key)<br>-
[Update a sso
provider](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-sso-provider)<br>-
[Update auth service
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-auth-service-config)<br>-
[Update project signing
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-signing-key)<br>-
[Apply project
addon](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-apply-project-addon)<br>-
[List project
addons](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-project-addons)<br>-
[Remove project
addon](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-project-addon)<br>-
[Accept invite external jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-accept-invite-external-jit-access)<br>-
[Apply a
migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-apply-a-migration)<br>-
[Authorize jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-authorize-jit-access)<br>-
[Create login
role](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-login-role)<br>-
[Delete invite external jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-invite-external-jit-access)<br>-
[Delete jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-jit-access)<br>-
[Delete login
roles](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-login-roles)<br>-
[Disable readonly mode
temporarily](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-disable-readonly-mode-temporarily)<br>-
[Enable database
webhook](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-enable-database-webhook)<br>-
[Generate typescript
types](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-generate-typescript-types)<br>-
[Get a
migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-migration)<br>-
[Get a
snippet](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-snippet)<br>-
[Get backup
schedule](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-backup-schedule)<br>-
[Get database
metadata](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-metadata)<br>-
[Get database
openapi](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-openapi)<br>-
[Get jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-jit-access)<br>-
[Get jit access
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-jit-access-config)<br>-
[Get pooler
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-pooler-config)<br>-
[Get postgres
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-config)<br>-
[Get project pgbouncer
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-pgbouncer-config)<br>-
[Get readonly mode
status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-readonly-mode-status)<br>-
[Get ssl enforcement
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-ssl-enforcement-config)<br>-
[Invite external jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-invite-external-jit-access)<br>-
[List all
backups](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-backups)<br>-
[List all
snippets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-snippets)<br>-
[List jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-jit-access)<br>-
[List migration
history](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-migration-history)<br>-
[Patch a
migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-patch-a-migration)<br>-
[Read only
query](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-read-only-query)<br>-
[Remove a read
replica](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-remove-a-read-replica)<br>-
[Restore pitr
backup](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-pitr-backup)<br>-
[Rollback
migrations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-rollback-migrations)<br>-
[Run a
query](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-run-a-query)<br>-
[Setup a read
replica](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-setup-a-read-replica)<br>-
[Update backup
schedule](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-backup-schedule)<br>-
[Update database
password](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-database-password)<br>-
[Update jit
access](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-jit-access)<br>-
[Update jit access
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-jit-access-config)<br>-
[Update pooler
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-pooler-config)<br>-
[Update postgres
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-postgres-config)<br>-
[Update ssl enforcement
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-ssl-enforcement-config)<br>-
[Upsert a
migration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-upsert-a-migration)<br>-
[Activate custom
hostname](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-activate-custom-hostname)<br>-
[Activate vanity subdomain
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-activate-vanity-subdomain-config)<br>-
[Check vanity subdomain
availability](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-check-vanity-subdomain-availability)<br>-
[Deactivate vanity subdomain
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-deactivate-vanity-subdomain-config)<br>-
[Get hostname
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-hostname-config)<br>-
[Get vanity subdomain
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-vanity-subdomain-config)<br>-
[Update hostname
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-hostname-config)<br>-
[Verify dns
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-verify-dns-config)<br>-
[Bulk update
functions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-update-functions)<br>-
[Create a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-function)<br>-
[Delete a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-function)<br>-
[Deploy a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-deploy-a-function)<br>-
[Get a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-function)<br>-
[Get a function
body](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-function-body)<br>-
[List all
functions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-functions)<br>-
[Update a
function](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-function)<br>-
[Count action
runs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-count-action-runs)<br>-
[Create a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-branch)<br>-
[Delete a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-branch)<br>-
[Diff a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-diff-a-branch)<br>-
[Disable preview
branching](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-disable-preview-branching)<br>-
[Get a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-branch)<br>-
[Get a branch
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-a-branch-config)<br>-
[Get action
run](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-action-run)<br>-
[Get action run
logs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-action-run-logs)<br>-
[List action
runs](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-action-runs)<br>-
[List all
branches](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-branches)<br>-
[Merge a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-merge-a-branch)<br>-
[Push a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-push-a-branch)<br>-
[Reset a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-reset-a-branch)<br>-
[Restore a
branch](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-a-branch)<br>-
[Update a branch
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-branch-config)<br>-
[Update action run
status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-action-run-status)<br>-
[Authorize
user](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-authorize-user)<br>-
[Exchange oauth
token](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-exchange-oauth-token)<br>-
[Oauth authorize project
claim](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-oauth-authorize-project-claim)<br>-
[Revoke
token](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-revoke-token)<br>-
[Assign organization member
role](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-assign-organization-member-role)<br>-
[Create an
organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-an-organization)<br>-
[Get an
organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-an-organization)<br>-
[Get organization
entitlements](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-organization-entitlements)<br>-
[List all
organizations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-organizations)<br>-
[List organization
members](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-organization-members)<br>-
[List organization
members](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-organization-members)<br>-
[List organization
roles](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-organization-roles)<br>-
[Create organization
invitations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-organization-invitations)<br>-
[Get
profile](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-profile)<br>-
[Cancel a project
restoration](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-cancel-a-project-restoration)<br>-
[Create a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-a-project)<br>-
[Create private link
association](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-create-private-link-association)<br>-
[Delete a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-a-project)<br>-
[Delete network
bans](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-network-bans)<br>-
[Delete private link
association](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-delete-private-link-association)<br>-
[Get all projects for
organization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-all-projects-for-organization)<br>-
[Get available
regions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-available-regions)<br>-
[Get database
disk](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-database-disk)<br>-
[Get disk
utilization](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-disk-utilization)<br>-
[Get network
restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-network-restrictions)<br>-
[Get postgres upgrade
eligibility](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-upgrade-eligibility)<br>-
[Get postgres upgrade
status](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgres-upgrade-status)<br>-
[Get
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project)<br>-
[Get project disk autoscale
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-disk-autoscale-config)<br>-
[Get services
health](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-services-health)<br>-
[List all network
bans](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-network-bans)<br>-
[List all network bans
enriched](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-network-bans-enriched)<br>-
[List all
projects](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-projects)<br>-
[List available restore
versions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-available-restore-versions)<br>-
[List private link
associations](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-list-private-link-associations)<br>-
[Modify database
disk](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-modify-database-disk)<br>-
[Patch network
restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-patch-network-restrictions)<br>-
[Pause a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-pause-a-project)<br>-
[Preview a project
transfer](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-preview-a-project-transfer)<br>-
[Restart a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restart-a-project)<br>-
[Restore a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-restore-a-project)<br>-
[Transfer a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v2-transfer-a-project)<br>-
[Update a
project](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-a-project)<br>-
[Update network
restrictions](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-network-restrictions)<br>-
[Upgrade postgres
version](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-upgrade-postgres-version)<br>-
[Get realtime
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-realtime-config)<br>-
[Shutdown
realtime](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-shutdown-realtime)<br>-
[Update realtime
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-realtime-config)<br>-
[Get postgrest service
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-postgrest-service-config)<br>-
[Update postgrest service
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-postgrest-service-config)<br>-
[Bulk create
secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-create-secrets)<br>-
[Bulk delete
secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-bulk-delete-secrets)<br>-
[Create project api
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-create-project-api-key)<br>-
[Delete project api
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-delete-project-api-key)<br>-
[Get pgsodium
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-pgsodium-config)<br>-
[Get project api
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-api-key)<br>-
[Get project api
keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-api-keys)<br>-
[Get project legacy api
keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-project-legacy-api-keys)<br>-
[List all
secrets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-secrets)<br>-
[Update pgsodium
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-pgsodium-config)<br>-
[Update project api
key](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-api-key)<br>-
[Update project legacy api
keys](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-project-legacy-api-keys)<br>-
[Get storage
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-get-storage-config)<br>-
[List all
buckets](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-list-all-buckets)<br>-
[Update storage
config](https://docs-git-nikrichers-docs-1268-spike-chunk-manag-905bfb-supabase.vercel.app/docs/reference/api/v1-update-storage-config)
|

174 links per column: the bare `/reference/api` route plus all 173 API
reference sections (Introduction + 172 operations). The bare-route link
now redirects to Introduction on *both* sides (production already did
via the `apps/www` fix earlier in this PR; the preview now matches,
since the monolith-rendering branch is removed). For the other 173
links, production still resolves every one to today's same ~35MB
monolith (all 172 endpoints on one page, regardless of which slug you
clicked), while the preview serves each as its own individual
per-endpoint page — click through any pair to compare page
weight/content directly.

### Test plan

- [ ] Open the PR preview and confirm `/reference/api/introduction` and
a handful of `/reference/api/<operation-slug>` URLs render as individual
pages (not the full monolith)
- [ ] Confirm the API reference sidebar navigates between real pages
(URL changes, page reloads) without console errors
- [ ] Confirm `/reference/javascript/...`, `/reference/cli`, and
`/reference/self-hosting-*` render exactly as they do on production (no
regression)
- [ ] Confirm `/reference/api` (bare) now redirects to
`/reference/api/introduction` instead of rendering all 172 operations





<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Added individual pages for Management API operations with
operation-specific titles, descriptions, metadata, and share previews.
* API reference navigation now supports full page navigation between
sections and operations.
* **Bug Fixes**
* Updated API reference routing to preserve direct links to operation
pages.
  * Unknown API operations now return a not-found page.
* **Documentation**
* Updated Management API links and redirects to use the new API
introduction page.
  * Bare API reference URLs now redirect to the introduction.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Nik Richers <nik@validmind.ai>
2026-08-03 14:03:06 -07:00
Miranda Limonczenko
320111b06b fix(docs): replace hardcoded heading tags in 4 shared components (#48456)
Closes DOCS-1261

_WAVE plugin shows headers creating jumps in hierarchy. Preview on the
left:_
<img width="1022" height="417" alt="Screenshot 2026-07-29 at 2 42 07 PM"
src="https://github.com/user-attachments/assets/f5e3bd09-8dbf-45e3-8a7f-70d7334fd25b"
/>

<img width="408" height="663" alt="Screenshot 2026-07-29 at 2 44 33 PM"
src="https://github.com/user-attachments/assets/6b952a81-40e5-4a9d-b08a-190c71575cac"
/>



## Problem

Four shared components in `apps/docs` render a hardcoded heading tag no
matter where they're used:

- `NamedCodeBlock` renders a code block's filename as an `<h6>`
- `ProjectConfigVariables` renders a variable label as an `<h6>`
- `StepHikeCompact.Details` renders a step title as an `<h3>`
- `IconPanel` renders its title as an `<h5>`

Since these are fixed, they often land in the wrong spot in a page's
heading order (like an h6 right after an h2), which breaks navigation
for screen reader users. This showed up in the [header hierarchy triage
report](https://app.notion.com/p/supabase/Playwright-E2E-Triage-Reports-3ab5004b775f81e3bc60d058fa5a02c1)
— fixing these 4 components alone resolves 72 of the 159 heading-order
violations found.

## Solution

Swapped the heading tag in each component for a `<span>` with the same
classes. None of these are really "headings" for the content that
follows, so they shouldn't be in the tag tree at all.

The one wrinkle: this codebase applies heading font weight/family
through a global CSS rule keyed off the tag name (h1-h6), not something
the tag gives you for free. So each span now sets that styling
explicitly, plus a margin to match what was there before. Nothing else
changed — same classes, same layout.

## Manual testing

Staging preview:
https://docs-git-ui-header-hierarchy-supabase.vercel.app

Check that each one still looks right:
-
[NamedCodeBlock](https://docs-git-ui-header-hierarchy-supabase.vercel.app/docs/guides/self-hosting/docker)
— filenames above the code blocks
-
[ProjectConfigVariables](https://docs-git-ui-header-hierarchy-supabase.vercel.app/docs/guides/auth/quickstarts/react-native)
— the "Project URL" / "Publishable key" labels (this page also has a
`NamedCodeBlock` inside the numbered steps)
-
[StepHikeCompact](https://docs-git-ui-header-hierarchy-supabase.vercel.app/docs/guides/database/beekeeper-studio)
— the step titles ("Create a new connection", etc.)
-
[IconPanel](https://docs-git-ui-header-hierarchy-supabase.vercel.app/docs/guides/resources)
— the "Auth0" / "Firebase Auth" panel titles under "Migrate to Supabase"

I also ran typecheck, lint, and the docs test suite locally — all green.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Style**
* Updated headings and labels across documentation and UI components for
more consistent typography.
* Improved spacing, font weight, and block-level layout for project
variables, step details, code tabs, and icon panels.
  * Preserved existing text content and conditional display behavior.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-31 18:25:23 +00:00
Eduardo Gurgel
c613a9b92e chore: update realtime error codes & add troubleshotting page (#48381)
* Update realtime error codes
* Add new troubleshooting page for client presence rate error
* Fix references from error codes to work with relative paths
2026-07-31 22:09:03 +12:00
Danny White
d1e7c403ac fix(ui): align Admonition titles and docs link hover with prose (#48428)
## What kind of change does this PR introduce?

UI bug fix.

## What is the current behavior?

After the recent Admonition a11y refactor:

- Titled Admonitions in MDX (blog and docs) could pick up large prose
top margin on the title, or (after follow-ups) end up with a title much
smaller than the body because the title was a `div` at `text-sm` while
body `<p>`s took prose ~15px
- Docs MDX links (including inside Admonitions) had a weak hover: prose
only shifted underline colour

Prior issues:

- A couple of guide callouts bolded link text via `[**…**](…)`
- Some funky Admonition formatting as called out in comments below

## What is the new behavior?

- `AlertTitle` is a `<p>` with `!mt-0 mb-0.5 font-medium` (not an `h5` /
bare `div`), so it does not break heading hierarchy and matches
admonition body font-size under prose
- Admonition uses `AlertTitle` again (though with `<p>` as explained
above) and wraps MDX `children` in `AlertDescription` (same as
`description`)
- `Alert` / `AlertTitle` / `AlertDescription` get `data-slot`
attributes; description keeps string→`<p>` wrapping, Studio density,
plus `text-balance`
- Docs link hover: typography `a:hover` and `MdxAnchor` now move text +
decoration toward foreground (InlineLink-like), without stealing brand
link colour via `text-inherit`
- Content: remove accidental bold on oauth-scopes and
multi-factor-authentication guide links

| Before | After |
| --- | --- |
| <img width="1360" height="378" alt="CleanShot 2026-07-29 at 16 44
48@2x"
src="https://github.com/user-attachments/assets/1aa98cb4-e691-428e-b7e2-a78afcdf518d"
/> | <img width="1350" height="362" alt="CleanShot 2026-07-29 at 16 44
08@2x"
src="https://github.com/user-attachments/assets/63c9c7df-c1c7-49c4-8fdb-0411ae251a71"
/> |
| <img width="1518" height="448" alt="CleanShot 2026-07-29 at 16 46
18@2x"
src="https://github.com/user-attachments/assets/d618e138-fcd7-4a44-b16d-cb0ac5ba6b0e"
/> | <img width="1524" height="424" alt="CleanShot 2026-07-29 at 16 46
30@2x"
src="https://github.com/user-attachments/assets/dbc7710e-42c6-483c-b367-19b2ff3a6475"
/> |
| <img width="1524" height="598" alt="CleanShot 2026-07-29 at 16 47
15@2x"
src="https://github.com/user-attachments/assets/c9c07f37-4e2b-40fa-bc90-c86a17e5ea32"
/> | <img width="1530" height="584" alt="CleanShot 2026-07-29 at 16 47
39@2x"
src="https://github.com/user-attachments/assets/806735f0-fa44-42e6-bd5a-127899d0bfc2"
/> |

## To test

**Docs**

1. [Functions
quickstart](https://docs-git-fix-admonition-alert-title-prose-supabase.vercel.app/docs/guides/functions/quickstart):
titled tip near the top. Title and body should be the same size, no
giant gap above the title
2. [BYO
MCP](https://docs-git-fix-admonition-alert-title-prose-supabase.vercel.app/docs/guides/ai-tools/byo-mcp):
tip with links. Hover a link (text + underline should both go
foreground)
3. [OAuth
scopes](https://docs-git-fix-admonition-alert-title-prose-supabase.vercel.app/docs/guides/integrations/build-a-supabase-oauth-integration/oauth-scopes):
note link is not bold
4. [Multi-factor
authentication](https://docs-git-fix-admonition-alert-title-prose-supabase.vercel.app/docs/guides/platform/multi-factor-authentication):
same, note link not bold

**Blog**

5. [CLI v2 config as
code](https://zone-www-dot-com-git-fix-admonition-alert-title-prose-supabase.vercel.app/blog/cli-v2-config-as-code):
titled Admonitions. Title size matches body, no huge top margin

**Other**

6. [Design system:
Admonition](https://design-system-git-fix-admonition-alert-title-prose-supabase.vercel.app/design-system/docs/fragments/admonition):
component reference
7. Studio (e.g. project Edge Functions secrets): Admonitions should stay
compact `text-sm` outside prose. Preview:
[studio-staging](https://studio-staging-git-fix-admonition-alert-title-prose-supabase.vercel.app)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary by CodeRabbit

* **New Features**
  * None

* **Style**
* Improved link decoration consistency (underline/hover) across internal
and external documentation content, with safer external link handling.

* **Bug Fixes**
* Refined alert/admonition rendering for clearer title/description
semantics and better spacing/text wrapping.
* Updated documentation image rendering to avoid forwarding
whitespace-only children and adjusted chart image layout.

* **Tests**
  * Expanded assertions for alert/admonition structure and styling.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-31 12:23:16 +10:00
Danny White
3b06c6c7cc fix(docs): unify docs card hover and retire IconPanel (#48379)
## What kind of change does this PR introduce?

Bug fix / docs UI polish.

## What is the current behavior?

- Many docs `GlassPanel`s use `background={false}`, so hover only tweaks
the border and reads as having no hover state
- Compact icon+label grids still use `IconPanel`, which has a broken
`-z-10` hover fill and overlaps with the newer `IconLink` pattern
- Description card grids jump to 3-up too early on medium widths

## What is the new behavior?

**GlassPanel**
- Removes the `background` prop; cards always use the filled surface
with stronger border hover
- Tightens icon→description gap (`gap-6` → `gap-3`)
- Decorative icons/logos use empty `alt` so screen readers don’t hear
the title twice

**Icon tiles**
- Retires `IconPanel` from docs and deletes it from `ui-patterns`
- Uses `IconLink` / `IconLinkList` for compact navigation tiles (auth
providers, social login, etc.)
- Adds `IconLinkButton` for SMS provider pickers (same chrome, opens a
dialog)
- Adds focus styles, list labelling, and dialog-trigger ARIA where
needed

**Layout / content**
- Migrate-to-Supabase description cards on resources use `GlassPanel`
(not slim icon tiles)
- Grid spans use `md:… xl:…` so cards stay 2-up until ~1280px
- Fixes migrate links to `/guides/platform/migrating-to-supabase/…` and
SSR quickstarts to `creating-a-client` with framework query params
- Moves the Extensions list `key` onto the outer `Link`

| Before | After |
| --- | --- |
| <img width="1185" height="1323" alt="Resources Supabase Docs"
src="https://github.com/user-attachments/assets/1677bf65-d3a3-4202-8c70-e758f7c3bcce"
/> | <img width="1185" height="1323" alt="Resources Supabase Docs"
src="https://github.com/user-attachments/assets/51760f0f-62b6-4010-9841-de26039f37b4"
/> |

## Additional context

Homepage compact sections already use `IconLinkList` from #48317; this
PR finishes that pattern for remaining docs `IconPanel` callsites and
cleans up GlassPanel hover.

`www/customers` only drops the removed `background` prop; those cards
already use the filled surface via `logo`.

## Test plan

- [ ] `/guides/getting-started`: GlassPanels show filled surface and
clearer border hover
- [ ] `/guides/resources`: migrate cards are GlassPanels with working
`/platform/…` links; 2-up until xl
- [ ] `/guides/auth/social-login` and auth providers partial: IconLink
tiles hover/focus correctly
- [ ] `/guides/auth/phone-login`: SMS provider buttons open dialogs;
keyboard focus works
- [ ] Docs homepage: migrate / self-host IconLinkLists unchanged in
behaviour
- [ ] `/guides/auth/server-side`: Next.js / SvelteKit cards resolve on
docs preview

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Improved Layouts**
* Made “GlassPanel” card grids more responsive and consistent; refined
card and success badge spacing for a cleaner presentation.
* **Updated Documentation**
* Refreshed multiple guide and resource pages (including quickstarts and
migration content) with standardized card layouts and updated link
destinations.
* **Component Updates**
* Standardized “GlassPanel” styling (background toggle removed) and
simplified icon-based panels; added an `IconLinkButton` for action
tiles; updated authentication provider grids to use the shared tile UI.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-31 06:34:05 +10:00
Steven Eubank
bf5a729f2d docs(telemetry): rename section and restructure as Monitoring and Debugging (#48243)
## Summary

- Renames the **Telemetry** nav section to **Monitoring and Debugging**
(nav label + sidebar title)
- Rewrites the section overview (`telemetry.mdx`) as a clean navigation
page using `ContentListings` — three panels (Debugging / Monitoring / AI
& automation) with no how-to prose
- Adds new `telemetry.data.ts` content-listings data file with three
groups registered in `index.ts`
- Adds a new **Debugging** guide (`debugging.mdx`) — request-stack
model, symptom-to-layer router with troubleshooting links for every
service, logging guidance
- Adds cross-links between `debugging.mdx`, `logs.mdx`, and
`advanced-log-filtering.mdx`
- Adds a new **AI agents and MCP** page (`ai-agents.mdx`) — MCP tools
table, `get_logs` usage, debugging skill workflow
- Restructures sidebar into three groups: **Debugging** / **Monitoring**
/ **AI & automation**

## Motivation

- No central entry point existed for debugging — content was scattered
across products with no index
- The overview page had almost no links for agents to follow
- The section name "Telemetry" caused confusion (also used for CLI usage
telemetry)
- Unblocks the `supabase` debugging skill, which routes agents to this
section as its source of truth

## Test plan

- [ ] `/docs/guides/telemetry` — three ContentListings panels render, no
prose how-to text
- [ ] `/docs/guides/telemetry.md` (markdown) — clean link list,
navigable by LLMs
- [ ] `/docs/guides/telemetry/debugging` — renders correctly, symptom
table links resolve
- [ ] `/docs/guides/telemetry/ai-agents` — new page renders correctly
- [ ] Sidebar shows 3 groups: Debugging / Monitoring / AI & automation
- [ ] All cross-links between debugging, logs, and
advanced-log-filtering resolve


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary

- **New Features**
- Added new documentation coverage for AI agent–assisted monitoring and
debugging, including an observability-driven troubleshooting workflow.

- **Documentation**
- Updated the “Telemetry” area to “Monitoring and Debugging” with a
refreshed landing page and reorganized sections (Debugging, Monitoring,
and AI).
- Revised the debugging and logs guides to improve step-by-step guidance
and highlight advanced log filtering.

- **Navigation**
- Renamed and restructured the top-level navigation entry to reflect the
new Monitoring and Debugging content layout.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Jeremias Menichelli <jmenichelli@gmail.com>
2026-07-30 15:19:00 +02:00
Danny White
e74ccefbb9 fix(docs): add cursor-pointer to tabs and copy controls (#48380)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Bug fix / polish

## What is the current behavior?

Some docs interactive controls (copy buttons, tab triggers) do not show
a pointer cursor on hover, so they feel less clickable than surrounding
links. Called out on https://github.com/supabase/supabase/pull/48318.

## What is the new behavior?

Adds `cursor-pointer` in one sweep so related controls stay consistent:

- Shared `TabsTrigger` in `packages/ui` (covers PromptPanel AI Prompt /
CLI tabs, including the unselected tab)
- PromptPanel copy button and Show more / Show less
- Guides sidebar “Copy as Markdown”
- Docs code block copy button

## To test

Hover the controls below and confirm the cursor is `pointer` on both
selected and unselected tabs, and on copy buttons.

### Docs
Preview:
https://docs-git-dnywh-docs-cursor-pointer-supabase.vercel.app/docs

- Homepage setup prompt: [AI Prompt / CLI tabs +
copy](https://docs-git-dnywh-docs-cursor-pointer-supabase.vercel.app/docs)
- Quickstart prompt: [Show more / Show less +
copy](https://docs-git-dnywh-docs-cursor-pointer-supabase.vercel.app/docs/guides/getting-started/quickstarts/nextjs)
- Guide sidebar + code block: [Copy as Markdown + code
copy](https://docs-git-dnywh-docs-cursor-pointer-supabase.vercel.app/docs/guides/database/tables)

### Design system
Preview:
https://design-system-git-dnywh-docs-cursor-pointer-supabase.vercel.app/design-system

- Shared tabs demo: [Account / Password
triggers](https://design-system-git-dnywh-docs-cursor-pointer-supabase.vercel.app/design-system/docs/components/tabs)

### UI library
Preview:
https://ui-library-git-dnywh-docs-cursor-pointer-supabase.vercel.app/ui

- Install command package-manager tabs (npm / pnpm / yarn / bun) + copy:
[Password-based
auth](https://ui-library-git-dnywh-docs-cursor-pointer-supabase.vercel.app/ui/docs/nextjs/password-based-auth)

### Studio (staging)
Preview:
https://studio-staging-git-dnywh-docs-cursor-pointer-supabase.vercel.app

- Auth user panel: open a project → Authentication → Users → select a
user → hover Overview / Logs (and related) tabs
- Connect sheet: open Connect on a project → hover the install method
tabs

### Studio (self-hosted)
Preview:
https://studio-self-hosted-git-dnywh-docs-cursor-pointer-supabase.vercel.app

- Same `TabsTrigger` callsites as Studio staging (user panel / Connect
sheet)

### WWW
Preview:
https://zone-www-dot-com-git-dnywh-docs-cursor-pointer-supabase.vercel.app

- Blog chart tabs (`PGChart` → shared `TabsTrigger`): [Latency / Number
of results / Average latency / Raw
data](https://zone-www-dot-com-git-dnywh-docs-cursor-pointer-supabase.vercel.app/blog/postgres-full-text-search-vs-the-rest)
(scroll to the Results section)

## Additional context

Split out from #48318 so the homepage prompt polish stays focused.
Prefer fixing the shared tab trigger rather than only the PromptPanel
copy button, otherwise the copy control would show pointer while an
unselected CLI tab would not.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Style**
* Improved hover feedback across the docs UI by adding a pointer cursor
to “Copy as Markdown,” code block copy and word-wrap controls, prompt
copy buttons, and tab selectors.
* Updated cursor styling consistently so interactive controls better
communicate clickability.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-30 10:28:01 +10:00
Danny White
5712eefe06 fix(docs): polish homepage AI setup prompt (#48318)
## What kind of change does this PR introduce?

Bug fix / docs UI polish.

## What is the current behavior?

The homepage AI Prompt panel:

- Has an `expandable` feature but its overflow contents are ~1 line
extra
- Expanding it affects the cover height and causes layout shift
- Below `xl`, the hero stacked and the logo sat alone above the title on
small screens.

## What is the new behavior?

- Shows the full AI setup prompt by default and removes the unused
`expandable` machinery from `PromptPanel`
- Keeps both tab panes in a shared grid cell so the panel height stays
stable when switching tabs
- Keeps logo + title in a row at all sizes, and starts the side-by-side
hero (copy + prompt) at `lg` instead of `xl`

| Before | After |
| --- | --- |
| <img width="1279" height="722" alt="15728"
src="https://github.com/user-attachments/assets/c61fdbbc-706c-47cf-8b47-4245d4c96215"
/> | <img width="1280" height="722" alt="Supabase Docs"
src="https://github.com/user-attachments/assets/ab3a97a4-d725-4d9e-92bf-6f564a22f1bd"
/> |
| <img width="1279" height="722" alt="Supabase Docs"
src="https://github.com/user-attachments/assets/42906c4b-4f82-4fbc-8bab-3f5d9530aa54"
/> | <img width="1280" height="722" alt="Supabase Docs"
src="https://github.com/user-attachments/assets/177a17d7-536c-4bd6-a8d0-1a2bc10f3ac9"
/> |
| <img width="1012" height="722" alt="96312"
src="https://github.com/user-attachments/assets/032a3b43-078f-4d13-a67d-9a36c76a9be5"
/> | <img width="1012" height="722" alt="Supabase Docs"
src="https://github.com/user-attachments/assets/f3ff3c0a-6df8-4e61-bfcb-ab99e99cccea"
/> |

## To test

Play around with the docs homepage AI Prompt panel on the Vercel preview
at various breakpoints:
https://docs-git-dnywh-docs-ai-prompt-expanded-supabase.vercel.app/

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

- **New Features**
- Improved prompt panel tab navigation with manual activation for more
predictable switching and enhanced accessibility.
- Inactive tab panels now remain mounted while reflecting
active/inactive state for smoother transitions.

- **Style**
- Refined the documentation homepage cover layout, including responsive
alignment, logo sizing behavior, and updated heading/paragraph spacing.
- Updated setup prompt presentation and refined expandable prompt sizing
and control styling.

- **Bug Fixes**
- Inactive prompt content is now hidden and non-interactive, preventing
unintended interaction.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-29 06:24:37 +10:00
Alaister Young
ca2b50a0a7 chore(ui-patterns): collapse the admonition shim into ui-patterns/Admonition (#48377)
Follow-up to #48344: collapses the two resolution paths for the
Admonition module into one.

`src/admonition.tsx` was a back-compat shim re-exporting
`src/Admonition/`. Two ways to resolve one module is exactly what
produced the macOS self-import bug fixed in #48344, and the local
typecheck errors that #48374 worked around. This removes the shim and
standardizes on the PascalCase subpath, matching every other export in
the package.

**Changed:**

- Codemodded all 246 `ui-patterns/admonition` imports to
`ui-patterns/Admonition` (240 `.tsx`, 5 `.mdx`, 1 `.ts` across studio,
docs, www, design-system, and lite-studio)
- Pointed the 5 internal `'../admonition'` imports back at the
`'../Admonition'` directory

**Removed:**

- `packages/ui-patterns/src/admonition.tsx`, and its `./admonition`
entry in the exports map (regenerated with `pnpm gen:exports`)

## To test

- `grep -r "ui-patterns/admonition" --include='*.ts*'` → no hits
- `pnpm test:case-hazards` → passes
- `pnpm typecheck` → all 15 tasks green
- `pnpm --filter studio run lint:ratchet` → passes
- `pnpm --filter ui-patterns vitest run src/Admonition` → 11 tests pass

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Standardized Admonition component imports across the application and
documentation.
* Improved compatibility with case-sensitive environments by using the
canonical component path.
  * Removed the legacy Admonition import entry point.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
2026-07-29 00:48:56 +08:00
Danny White
4bda3bfe72 refactor(docs): unify homepage icon link tiles (#48317)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Docs UI refactor.

## What is the current behavior?

Framework quickstarts and several other homepage grids used `IconPanel`
/ `IconPanelWithIconPicker`, which brought redundant tooltips
(duplicating the visible title), inconsistent hover treatment, and
circular icon tiles that didn't match the intended squarish look.

| Before |
| --- |
| <img width="1744" height="626" alt="CleanShot 2026-07-24 at 14 29
44@2x"
src="https://github.com/user-attachments/assets/1e145be2-19c9-4bd0-bf06-17516acbc774"
/> |

## What is the new behavior?

Introduces a shared `IconLink` used across the docs homepage (and
reference index) so icon+label tiles share the same composition and
hover: icon tile fill matches the surrounding surface (`surface-100`),
with a stronger border on hover, and the row uses `hover:bg-accent`.
Framework quickstarts keep the larger tile size; other sections keep the
smaller size. Also aligns Explore more GlassPanels with Build your
backend by using the same bordered background treatment.

| After |
| --- |
| <img width="2478" height="906" alt="CleanShot 2026-07-24 at 15 09
48@2x"
src="https://github.com/user-attachments/assets/dd516845-c162-47e4-8b86-9a7fa0e73290"
/> |

## Additional context

Removes the unused `IconPanelWithIconPicker` wrapper now that
homepage/reference consumers go through `IconLink`.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added reusable `IconLink` UI for consistent docs tiles, including
`IconLinkList`, menu icon, and light/dark icon rendering.
* Introduced `FrameworkQuickstarts` to generate quickstart links based
on feature-flag-enabled SDKs.
* **UI / Improvements**
* Updated the docs home and API reference pages to use the new
list-based icon-link layout.
* Refreshed migration guides and “Explore more”/self-hosting sections
(including accessibility and updated CTA text).
* **Bug Fixes**
  * Migration guide items now omit entries missing required details.
* **Chores / Cleanup**
* Removed the older icon panel picker-based UI component and its usage.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-28 15:12:13 +10:00
Hieu
4822687a64 fix: resolve mgmt api specs $refs manually to handle circular error (#48281)
## I have read the CONTRIBUTING.md file.
YES

## What kind of change does this PR introduce?
Bug fix.

## What is the current behavior?
`api_v2_openapi.json` has a circular reference (`APIErrorObject.issues`
→ `APIErrorObject`), which Redocly can't flatten with `--dereferenced`
("Detected circular reference which can't be converted to JSON"). This
breaks the [weekly docs update
workflow](https://github.com/supabase/supabase/actions/runs/29709444085/job/88251269807).

## What is the new behavior?
- Drop `--dereferenced` from `dereference.api.v1` (both v1 and v2, for
consistency)
- Add a `resolveRefs` helper in `Reference.script.ts` that manually
inlines `$refs`, leaving cycles as an unresolved `$ref` instead of
expanding infinitely
- This also fix the mgmt api update workflow so manual dispatch runs
against the selected branch, by changing checkout `ref` from hardcoded
`master` to `${{ github.ref }}`.

## Additional context
Also fixes `pnpm exec redocly` → `npx --package=@redocly/cli redocly` in
the same Makefile, an unrelated pnpm 11 recursive-exec bug hit while
debugging this workflow.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Chores**
* Updated API specification bundling and linting commands to use the
current Redocly CLI invocation style.
* Improved documentation processing behavior for dereferenced specs,
including guidance around circular references.
* Preserved existing generated specification outputs and validation
settings.
* **Chores**
* Updated the Mgmt API docs automation workflow formatting (YAML string
quoting and schedule/input values).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-27 10:35:42 +07:00
Nik Richers
d46cc88f09 docs: add agent prompts to all 18 framework quickstarts (#47543)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Docs enhancement: Agent-ready prompt blocks on all 18 framework
quickstart pages.

## What is the current behavior?

Framework quickstarts do not surface a copyable AI prompt. Readers have
to assemble context themselves when asking an AI coding assistant to
follow the guide.

## What is the new behavior?

- Partials at
`apps/docs/content/_partials/ai/quickstart_prompt_{framework}.mdx`
contain `<AiPrompt prompt={...} />` (Prettier multiline single-quoted JS
string with `\n` escapes).
- Each quickstart includes `<$Partial
path="ai/quickstart_prompt_{framework}.mdx" />`.
- Runtime: `AiPrompt` → `PromptPanel` (Copy AI Prompt, expandable).
- Markdown export: `apps/docs/internals/markdown-schema/AiPrompt.ts`
decodes Prettier single-quoted prompt expressions so exported markdown
includes an **AI Prompt** section without quote leak.
- Shared `$Partial` helpers live in `lib/partials.utils.ts`.
- Closes DOCS-1144.

### Example before/after

| | Production | Preview |
| --- | --- | --- |
| Next.js quickstart |
[production](https://supabase.com/docs/guides/getting-started/quickstarts/nextjs)
|
[preview](https://docs-git-nikrichers-docs-1144-add-ai-prompt-blo-5af4d8-supabase.vercel.app/docs/guides/getting-started/quickstarts/nextjs)
|

**Light**

| Before | After |
| --- | --- |
| ![before
light](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47543/quickstart-nextjs-before-light-d1076045.png)
| ![after
light](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47543/quickstart-nextjs-after-light-74996d6c.png)
|

**Dark**

| Before | After |
| --- | --- |
| ![before
dark](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47543/quickstart-nextjs-before-dark-faa391c3.png)
| ![after
dark](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47543/quickstart-nextjs-after-dark-56d1578a.png)
|

### Test plan

- [x] Preview renders AI Prompt panel with copy
- [x] Spot-check Next.js, Flutter, Expo, Vue
- [x] `test-quickstart-prompts` structural
- [x] Markdown export includes **AI Prompt** without quote leak
- [x] Format CI green after prettier/single-quote decode fix

## Additional context

- Worktree:
`~/GitHub/supabase/supabase-worktrees/nikrichers/docs-1144-add-ai-prompt-blocks-to-all-18-framework-quickstarts`
- Skills: `generate-quickstart-prompts` / `test-quickstart-prompts`;
librarian update https://github.com/supabase/docs-agent-skills/pull/21
- `PromptPanel` replaced the older GlassPanel experiment for the
expandable copy UI

---------

Co-authored-by: Nik Richers <nik@validmind.ai>
Co-authored-by: jeremenichelli <jeremenichelli@users.noreply.github.com>
2026-07-24 22:19:04 +00:00
Miranda Limonczenko
b5cae478bc fix(docs) Add smoke test for local development without credentials (#48218)
Closes DOCS-1210
Closes DOCS-1209

#48226 needs to merge first for CI failure

## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Test coverage and several small bug fixes discovered during
implementation.

## What is the current behavior?

Nothing verified that `pnpm run dev:docs` keeps working without private
credentials.
We value this command working, especially for community contributors.

However, this issue can go undetected by employees at Supabase since
many of us have credentials in place. We do not want this to go a week
before finding and fixing like in the previous instance.

## What is the new behavior?

- **New Playwright test suite**:
`e2e/docs/local-smoke/no-credentials.spec.ts` boots the docs dev server
with zero GitHub App/Supabase secrets and checks 5 routes covering each
known failure point.
- **CI**: a new `local-dev-smoke` job in `docs-tests.yml` runs this
suite with no credentials configured.


## Additional bugs resolved

Setting up this test exposed other issues that are fixed in this PR:

- **Troubleshooting.utils.ts crash** — Unguarded Supabase call pattern,
crashing every troubleshooting article. Added the same guard as previous
fixes.
- **Missing manifest.json** — middleware.ts statically imports
public/markdown/manifest.json, which is gitignored and only generated by
a build step that's skipped in local dev. On a fresh checkout it doesn't
exist, so middleware fails to compile and takes down every page. Fixed
by committing a placeholder [] (real builds still regenerate the full
file).
- **Phantom @code-hike/mdx import** — apps/docs/app/layout.tsx imported
@code-hike/mdx/styles.css, but only apps/www actually declares that
dependency. Worked by accident whenever both apps were installed
together; broke in CI's docs-only install. Turned out to be dead code
(nothing in docs actually uses code-hike), so fixed by deleting the
unused imports rather than adding the dependency.


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary by CodeRabbit

* **New Features**
* Added a credential-free “local smoke” end-to-end test suite for key
documentation routes.

* **Bug Fixes**
* Improved troubleshooting behavior when required external service
credentials are missing.
* Updated federated “wrappers” documentation pages to gracefully show a
fallback message when external content can’t be fetched.

* **Tests**
* Added a dedicated local-smoke Playwright runner and enhanced CI
path-based triggering and reporting (failure-focused artifacts).

* **Chores**
* Refined docs workflow path filters and adjusted docs markdown
manifest/ignore rules for generated content.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-24 10:29:12 -07:00
Jeremias Menichelli
075caf314e chore: refactor database advisors and database wrapper federated content (#48199) 2026-07-24 12:26:33 +02:00
Nik Richers
e0ecaadc21 docs: make AI tools section agent-first (#48167)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

This PR reworks the `/guides/ai-tools` docs section to be agent-first.
The overview now leads with the fastest path to a working setup (the
plugin install command), a "What's supported?" card grid showing which
coding agents and IDEs work via Plugin and/or MCP (with each product's
own tagline, not a generated sentence), and a concepts glossary —
instead of a plain four-item list. The sidebar "AI Tools" widget, shown
on every guides page, now links to this hub ("Connect your AI agent")
instead of opening a ChatGPT/Claude chat frontend.

Closes DOCS-1201.

## What is the current behavior?

- The `/guides/ai-tools` overview is a plain four-item bullet list with
no getting-started path, compatibility info, or concepts explanation.
- The sidebar "AI Tools" widget offers "Copy as Markdown", "Ask
ChatGPT", and "Ask Claude" — the latter two send you to a chat frontend
instead of agent setup.

## What is the new behavior?

- `ai-tools.mdx`: intro → plugin install callout → "What's supported?"
card grid (`<ContentListings id="ai-tools-supported-agents" />`, icon +
tagline + Plugin/MCP badge per agent) → "Key concepts" glossary →
"Building AI into your app?" (also converted to `ContentListings`).
- New `data/content-listings/ai-tools.data.ts` builds the card grid from
the existing `PLUGIN_CLIENTS`/`MCP_CLIENT_DATA` client lists (no new
hand-maintained data) — fixing two latent bugs found along the way:
GitHub Copilot was keyed differently between the two sources (would have
produced duplicate cards), and Windsurf has no upstream docs URL (would
have been silently dropped).
- New opt-in `badgePosition` field on `ContentListingItem` so the badge
renders under the title for the agent grid, without changing the one
other existing badge usage (self-hosting's "Official" tag, still
inline).
- `plugins.mdx`/`mcp.mdx`/`ai-skills.mdx` each get a one-line "Quick
start" lead-in so they stand alone via the `.md` content-negotiation
route.
- `GuidesSidebar.tsx` + `telemetry-constants.ts`: Added "Connect your AI
agent" → `/guides/ai-tools`, and the `ask_ai_clicked` event with
`agent_setup_clicked`.
- Accessibility fix (from review): the "Not supported" indicator now
exposes an `sr-only` label instead of being fully `aria-hidden`.

## Additional context

- Worktree:
`~/GitHub/supabase/supabase-worktrees/nikrichers/docs-1201-make-guidesai-tools-agent-first-and-replace-chat-frontend`
- **Open question — Windsurf card**: `windsurf.com` now redirects to a
Devin Desktop page (Cognition acquired Windsurf in 2025), but Supabase's
own `MCP_CLIENT_DATA` still targets Windsurf's distinct config path
(`~/.codeium/windsurf/mcp_config.json`), so the card is still labeled
"Windsurf" with its pre-acquisition tagline ("The first agentic IDE.
Tomorrow's editor, today."). Needs a follow-up decision on whether to
relabel/merge/drop this card once Devin Desktop's MCP support (if any)
is confirmed.
- Follow-up (not in this PR): deeper IA rework of the ai-tools section
belongs to the broader agent-first audit;
`content/guides/resources/glossary.mdx` has no MCP/Agent
Skills/Plugin/Prompts entries yet — this PR's "Key concepts" is
currently the only definition of these terms site-wide.
- Verification:

  | Check | Result |
  | --- | --- |
| Lint (`lint:mdx`, `eslint`), `typecheck`, `test:local
lib/content-listings.test.ts` | Pass — 13/13 tests, 0 errors |
| `build:guides-markdown` | Pass — card grid flattens cleanly to
markdown |
| Playwright: broken icon requests, light + dark theme, PR preview |
Pass — 0 in either theme |
| `/guides/self-hosting` "Official" badge (existing `ContentListings`
usage) | Pass — unaffected by the new `badgePosition` opt-in |

### Before & After

#### [`/guides/ai-tools`](https://supabase.com/docs/guides/ai-tools)

Also shows the sidebar change (right rail): "Ask ChatGPT" / "Ask Claude"
→ "Connect your AI agent".

| [Before](https://supabase.com/docs/guides/ai-tools) |
[After](https://docs-git-nikrichers-docs-1201-make-guidesai-too-7c7493-supabase.vercel.app/docs/guides/ai-tools)
|
| --- | --- |
|
![Before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr48167/ai-tools-before-79e9cdcf.png)
|
![After](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr48167/ai-tools-final-full-7ab9f52f.png)
|

Sub-pages each just add a one-line "Quick start" callout under the intro
(no other layout change):
[plugins](https://supabase.com/docs/guides/ai-tools/plugins)
([preview](https://docs-git-nikrichers-docs-1201-make-guidesai-too-7c7493-supabase.vercel.app/docs/guides/ai-tools/plugins))
· [mcp](https://supabase.com/docs/guides/ai-tools/mcp)
([preview](https://docs-git-nikrichers-docs-1201-make-guidesai-too-7c7493-supabase.vercel.app/docs/guides/ai-tools/mcp))
· [ai-skills](https://supabase.com/docs/guides/ai-tools/ai-skills)
([preview](https://docs-git-nikrichers-docs-1201-make-guidesai-too-7c7493-supabase.vercel.app/docs/guides/ai-tools/ai-skills)).

### Test plan

- [x] `/guides/ai-tools` renders callout → card grid → concepts →
Building AI into your app, in order
- [x] Card grid: one card per agent (no duplicate Copilot), Windsurf
present, icons clean in both themes, taglines shown, badges below title
- [x] Sidebar shows "Connect your AI agent"; self-hosting's "Official"
badge unaffected
- [x] `.md` route still serves clean markdown; no lingering
`ask_ai_clicked`, ChatGPT/Claude icon, or `SupportedAgentsTable`
references

---------

Co-authored-by: Nik Richers <nik@validmind.ai>
2026-07-23 16:01:54 -07:00
Hieu
b76d04d6a0 fix: read FGA permissions from openapi spec x-fga-permissions extension (#48181)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Follow up to https://github.com/supabase/platform/pull/35940, which
moved FGA permissions off security and onto the `x-fga-permissions`
extension.

This updates the docs reference component to read from the new field.



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* API documentation now supports displaying fine-grained access
permissions for endpoints.
* Endpoint security details are presented more consistently using the
documented permissions configuration.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-23 12:17:45 +07:00
Danny White
3bca21b3f8 chore(a11y): convert leftover focus recipes to focus-ring (#48219)
## What kind of change does this PR introduce?

Accessibility cleanup (DEPR-628).

## What is the current behavior?

Leftover call sites still use ad-hoc focus recipes
(`ring-foreground-muted`, `outline-brand`, Dialog/Sheet `focus:` rings,
etc.) instead of the shared utilities from #41575.

## What is the new behavior?

Converts those leftovers across `packages/ui`, Studio, www, docs, and
design-system to `focus-ring`, preferring `focus-visible`. Keeps
documented exceptions (`group-focus-visible`, InputGroup `:has()`).

## To test

Tab through controls (keyboard only). Expect a consistent offset ring on
`:focus-visible`, not a green/brand/custom stack, and no ring animation.

### www (marketing)

Preview:
https://zone-www-dot-com-git-danny-depr-628-focus-ring-fbccf9-supabase.vercel.app

- Global nav on `/`: Product, Developers, Solutions dropdowns; logo;
hamburger + mobile menu
- `/features`: view toggles and feature cards
- `/company`: card links
- `/changelog`: timeline / entry links
- `/partners/catalog`: grid/list toggle and partner cards
- `/pricing`: compute section expand control
- Product / Modules / Solutions sticky navs on product pages (e.g.
`/database`, `/storage`)
- `/state-of-startups`: TwoOptionToggle if present

### docs

Preview:
https://docs-git-danny-depr-628-focus-ring-long-tail-supabase.vercel.app

- Any guide page: top nav dropdowns and items
- Narrow viewport: hamburger, then mobile menu links + close
- Guide with PromptPanel / tabs: tab to prompt actions and tab list

### studio (dashboard)

Preview:
https://studio-staging-git-danny-depr-628-focus-ring-long-tail-supabase.vercel.app

- Project home: Connect section tiles; drag-handle focus on sortable
sections
- Integrations marketplace (`/project/<ref>/integrations`): featured
cards, list/grid toggle, list rows
- Auth (`/project/<ref>/auth/oauth-apps`,
`/project/<ref>/auth/providers`): open create/edit sheet, tab to close
(X)
- Database policies (`/project/<ref>/database/policies`): open policy
editor sheet, tab to close
- Storage policies (`/project/<ref>/storage/files/policies`): bucket
section links; policy modal close
- Query performance (`/project/<ref>/observability/query-performance`):
info icon buttons on metrics
- Replication pipeline detail (if available): slot lag / status info
icons
- Support (`/support/new`): attachment add/remove controls
- Table editor: spreadsheet import preview checkboxes; row text/JSON
editor TwoOptionToggle
- Any Dialog/Sheet/toast close (X): ring on keyboard focus only, not
mouse click

### design-system

Preview:
https://design-system-git-danny-depr-628-focus-ring-long-tail-supabase.vercel.app

- Colour palette swatches (keyboard focus)
- Form patterns sidepanel example: avatar / focusable control in the
example

## Additional context

- Linear: [DEPR-628](https://linear.app/supabase/issue/DEPR-628)
- Follow-ups: form-group CSS (DEPR-629), Storage columns selection
(DEPR-630), ESLint rule (DEPR-632)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Accessibility & Usability**
* Standardized keyboard focus indicators across navigation, dialogs,
forms, buttons, toggles, links, and tooltips using a consolidated focus
style.
* Improved toggle controls to use proper button semantics (instead of
clickable text), including `aria-pressed`/disabled handling and better
keyboard navigation.

* **Visual Updates**
* Harmonized hover/focus ring visuals across the design system, Studio,
documentation, and marketing pages while preserving existing layout and
interaction behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-23 08:52:22 +10:00
Danny White
6f6badae51 fix(eslint): promote require-explicit-tabindex to error (#48170)
## What kind of change does this PR introduce?

Accessibility / lint hardening (Safari keyboard focus).

## What is the current behavior?

`supabase/require-explicit-tabindex` is `'warn'`. Studio’s ratchet was
at 0 but the rule was still ratcheted; www / docs / design-system still
had raw `<button>` / `role="button"` call sites without an explicit
`tabIndex`.

[DEPR-627](https://linear.app/supabase/issue/DEPR-627) · follow-up to
#47984 / #48040

## What is the new behavior?

- Shared config: `'supabase/require-explicit-tabindex': 'error'`
- Swept www / docs / design-system (+ Studio test fixtures the ratchet
skipped)
- Removed the rule from the Studio ratchet + baselines

## To test

Prefer **Safari**. This PR only adds explicit `tabIndex` to raw
`<button>` / `role="button"` call sites — not links, and not controls
that already go through `Button` from `ui`.

### Marketing (`www`) ([staging
link](https://zone-www-dot-com-git-danny-depr-627-promote-req-7ae43c-supabase.vercel.app/))

- [x] Homepage frameworks / dashboard feature tabs — Tab through each
tab button
- [x] Product pages (e.g. `/auth`, `/database`) — section tab switchers
- [x] Narrow viewport — open the hamburger; Tab through menu buttons
- [x] `/partners/catalog` — filter / view controls
- [x] Blog view toggle (list ↔ grid)

### Docs ([staging
link](https://docs-git-danny-depr-627-promote-require-explici-25e46d-supabase.vercel.app/))

- [x] **Desktop (≥ lg):** top-right **⋯ menu** (hamburger icon) — opens
a dropdown that includes Theme. Not a separate theme button.
- [x] **Mobile (< lg):** top-right **hamburger** opens the sheet; close
(X) is the raw button we tagged. Theme inside the sheet uses
`ThemeToggle` / `DropdownMenuTrigger` from `ui` (already supposed to set
`tabIndex`).
- [x] **Code blocks** — copy / language controls
- [x] **Is this helpful?** — X / check are `Button` from `ui` (should
already Tab). After voting **while signed in**, the follow-up “What went
well?” / “How can we improve?” text button is the raw one we tagged.
- [x] **AI Tools → Copy as Markdown** (right rail on a guide) — this is
the only GuidesSidebar control this PR changed. “On this page” TOC items
are **links**, not covered by this lint.
- [x] **Reference docs** (e.g. JS client reference) — section headers
that expand/collapse in the left nav (`Collapsible.Trigger`)
- [x] **Troubleshooting index** — type in the search field, then Tab to
the **clear (X)** control

### Dashboard (`studio`)

No production UI changes in this PR (tests + lint config only). Quick
Safari smoke that prior tabindex work still holds:

- [x] Project sidebar — Tab through primary nav links
- [x] Settings → General — Tab through inputs / buttons
- [x] Storage → Files — Tab a bucket row / file actions
2026-07-23 05:21:15 +10:00
Jeremias Menichelli
77818b814e feat: Add terraform federated content and data (#48010) 2026-07-21 10:54:09 +02:00
Saxon Fletcher
2d745edfb4 Landing page agent focus (#47989) 2026-07-21 14:30:36 +10:00
Pedro Rodrigues
ceb4110568 docs: add VS Code to the AI coding agent plugin install picker (#48108)
Adds VS Code to the AI coding agent plugins docs, as VS Code now
[supports
plugins](https://code.visualstudio.com/docs/agent-customization/agent-plugins)

<img width="763" height="396" alt="image"
src="https://github.com/user-attachments/assets/7520a83c-5652-44b4-9136-013f3da5f45b"
/>

### Steps to reproduce it

1. Navigate to
https://docs-git-add-vs-code-plugins-support-to-docs-supabase.vercel.app/docs/guides/ai-tools/plugins#manual-install
2. Select "VS Code" in the `Client` dropdown


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
  * Added Visual Studio Code to the supported plugin integrations.
* Added VS Code installation guidance, including the plugin repository
and manifest specification links.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-20 20:36:24 +01:00
Pedro Rodrigues
45ba40eff9 docs: add Kimi Code to MCP and AI coding agent plugin setup (#48099)
Adds Kimi Code to the MCP server setup and AI coding agent plugins docs:

### MCP Server config

<img width="755" height="703" alt="image"
src="https://github.com/user-attachments/assets/b350aca0-ff0d-442b-b6f3-b3b4355d8fcd"
/>

### AI coding agent plugins

<img width="753" height="475" alt="image"
src="https://github.com/user-attachments/assets/100d5893-4627-4f48-9ab6-16e0c6457467"
/>



Closes AI-933

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added **Kimi Code** as a selectable plugin client in the plugins
panel.
* Added **Kimi-specific installation/setup instructions**, including
guidance on placing `mcp.json`, confirming the trust prompt, and using
`/plugins` plus `/mcp` and `/mcp-config`.
* Extended the **MCP URL builder** to generate Kimi Code HTTP-based
server configuration.
* Included **Kimi** in the **IDE** client group with a dedicated **Kimi
icon** for UI display.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-20 19:37:02 +01:00
Gildas Garcia
26b1fd9aab fix: keyboard navigation between docs tabs (#47778)
## Problem

Keyboard navigation on docs tabs is confusing:

- tab panels can be focused but without any indication that they are
- code example buttons can be focused with keyboard but stay invisible
- copy code button has no label and do not notify screen reader users
about its status

## Solution

- Make tab panels non focusable
- Ensure buttons are visible when focused
- Add a label to the copy code buttons
- Add a live region for the copy code status

## How to test

1. Go to
https://docs-git-gildasgarcia-docs-1156-cannot-keyboard-140a35-supabase.vercel.app/docs/guides/local-development/cli/getting-started
2. Go to a tab list with _Tab_ key
3. Verify you can choose the tab value with Arrow keys and select it
with space
4. Tab again and verify you now have focused the code example first
button and it is visible
5. Tab again and the copy code button should be focused and visible

If you enable Voice over, clicking the copy code button should announce
that the code has been copied

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Summary by CodeRabbit

* **Bug Fixes**
* Improved code block copy feedback so the “copied” state resets more
reliably after interaction.
* **Accessibility Improvements**
* Code block controls now appear on keyboard focus (not just hover) and
include an assistive live announcement when copying succeeds.
  * Enhanced code block semantics with clearer ARIA labeling.
* Prevented tab panels from being reachable through normal tab
navigation to reduce unintended focus stops.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-17 11:40:43 +02:00
Jeremias Menichelli
a72a58eeae feat: Add federated content script. Resolve graphql routes. (#47934) 2026-07-16 12:53:47 +02:00
Francesco Sansalvadore
9b05afa2a3 Fix(docs): guides subheadings (#47765)
Fix docs subheading by removing the h2 html tag and adjusting styling.
Likely a result of a merge conflict resolution between #47441 and #47288

## What is the current behavior?

<img width="1168" height="641" alt="Screenshot 2026-07-09 at 10 19 00"
src="https://github.com/user-attachments/assets/c23b2e88-650c-4835-ae10-5a13c7b2e180"
/>


## What is the new behavior?

<img width="1167" height="605" alt="Screenshot 2026-07-09 at 10 32 56"
src="https://github.com/user-attachments/assets/852f208c-2b22-4bf6-ad8c-edcf5bee5991"
/>

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Style**
* Refined how guide subtitles are displayed for a cleaner, more
consistent layout.
* Adjusted subtitle spacing and presentation while keeping subtitle
content rendering with formatted text support intact.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-09 10:54:45 +02:00
Saxon Fletcher
19ee79b030 color text refine (#47718)
Adjusts light theme for better contrast on foreground, muted-foreground
and tertiary-foreground text

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Style**
* Retuned the light theme’s surface chroma and updated light, muted, and
tertiary foreground levels for improved readability.
* Updated the brand link color saturation to better align with the
revised theme.
  * Refreshed code block token colors for both light and dark themes.
* **Documentation**
* Updated the “Edit this page on GitHub” link styling to use updated
token-based text colors for default and hover states.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-08 12:30:42 +10:00
Katerina Skroumpelou
f77e8e75b6 docs: wire @supabase/server v1 into the reference pipeline (#47570)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Docs update.

*
https://docs-git-docs-wire-server-v1-reference-supabase.vercel.app/docs/reference/server/introduction
* 
<img width="417" height="628" alt="Screenshot 2026-07-06 at 6 13 33 PM"
src="https://github.com/user-attachments/assets/9fc27b04-038b-4434-8855-94051f898b5d"
/>

## What is the current behavior?

`@supabase/server` has no reference documentation page in the Supabase
docs. The library publishes a TypeDoc spec to GitHub Pages but the docs
pipeline was not wired up to consume it.

## What is the new behavior?

- Adds `spec/reference/server/v1/` with a `config.json` (category order:
Middleware, Primitives, Adapters, Errors, Types) and `partials/` for the
introduction and installing pages.
- Adds a `download.server.v1` Makefile target that fetches
`https://supabase.github.io/server/spec.json` into
`spec/reference/server/v1/server.json`, and wires it into the top-level
`download` target so it runs with the rest.
- Registers `server-v1` in `SUPPORTS_NEW_REFERENCE_PROCESS` so the build
pipeline picks up the new spec directory and generates
`content/reference/server/v1/` at build time.
- Seeds the generated `docs/ref/server/` partials (introduction and
installing) that the reference router serves.

## Additional context

The TypeDoc spec is produced by `@supabase/server`'s `docs.yml` workflow
on every push to `main`, so `make download.server.v1` will always pull
the latest published API surface. The companion PR in the server repo
([supabase/server#95](https://github.com/supabase/server/pull/95)) adds
the `@category` tags that the pipeline requires for symbols to appear in
navigation.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added a new **Server SDK** item under **Reference**, linking to
`/reference/server` and marked with a **New** badge.
* Published **Server Reference v1** documentation for
`@supabase/server`, including **Introduction** and **Installing** pages.

* **Chores / Improvements**
* Enhanced the reference documentation generation to include Server v1
content.
* Improved reference detail handling (including clearer TypeDoc output
such as **Deprecated** notes).
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Chris Chinchilla <chris.ward@supabase.io>
2026-07-07 17:08:51 +03:00
Jeremias Menichelli
689b6991f0 fix: Remove always-open Accordion behavior (#47638) 2026-07-07 11:51:13 +02:00
Saxon Fletcher
0ae4f32ad9 docs: kaizen fixes to QuickStarts (#47481)
https://github.com/user-attachments/assets/fba86c42-a122-4eb5-8531-db663d022100


Makes a few style and content changes focused on our quickstarts,
starting with
- docs/guides/getting-started/quickstarts/reactjs 
- docs/guides/getting-started/quickstarts/nextjs.

Changes
- Reduced container size and increased x padding for more breathing room
- Adjusted header padding and spacing
- Stripped non critical content from guides
- Merged steps where possible e.g. one sql blocks to run instead of
multiple
- Moved shadcn/supabase ui components into a next step
- Introduced a step for installing agent skills (in future can be
plugin)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Documentation**
* Updated multiple quickstarts to add an **“Open Connect panel”**
primary action for environment-variable setup.
  * Removed extra UI CTA partials from several “Query” sections.
* Added **Next steps** links to drop-in UI components and extended the
database flow with an optional **agent skills** step.

* **UI / Guide Layout**
* Refreshed guide spacing/typography (breadcrumb spacing, header
margins, and removed subtitle divider).
* Adjusted guide/table-of-contents sizing and tightened step/details and
code section alignment.
  * Updated main layout width and padding for docs pages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Chris Chinchilla <chris.ward@supabase.io>
Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
2026-07-07 08:38:06 +00:00
Chris Chinchilla
30b02aa0b7 docs: Allow for custom MCP server URLs (#47218)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added new public MCP base URL environment variables for hosted and
self-hosted setups.
* Introduced reusable MDX components to render custom MCP configuration
content.
* **Documentation**
* Updated the MCP guide to reference shared MCP server template values
for examples.
* Swapped the CI configuration example for a component-rendered snippet
for consistency.
* **Bug Fixes**
* Improved self-hosted MCP base URL fallback so it prefers the new
non-platform URL when no custom API URL is provided.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-07-07 10:04:56 +02:00
Gildas Garcia
cabe14e5ca chore: remove _Shadcn_ suffix from ui tabs components (#47628)
## Problem

Now that we migrated all usages of the deprecated `Tabs` component, we
don't need the `_Shadcn_` suffix anymore.

## Solution

Remove `_Shadcn_` suffix from `ui` tabs components. That's all this PR
does, no visual nor functional changes

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **New Features**
* Standardized tab components across the app so pages and dialogs now
use the same consistent tab UI.
* Improved tab-based views in design, docs, studio, learn, and website
experiences for a more uniform interface.

* **Chores**
* Updated shared UI exports to expose tab components directly,
simplifying future usage across the product.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-06 15:29:16 +02:00
Gildas Garcia
4b7cb27ba9 chore: refactor docs tabs (#47557)
## Problem

Now that `docs` is the only place where we use the deprecated `ui/Tabs`,
we can move this component and the related HOC from `ui-patterns` in
`docs`

## Solution

- Move `ui/Tabs`, `ui-patterns/ComplexTabs/withQueryParams` and
`ui-patterns/ComplexTabs/withSticky` to `docs`
- Refactor `ui-patterns/ComplexTabs/withQueryParams` and
`ui-patterns/ComplexTabs/withSticky` HOCs as hooks to make them easier
to understand
- Refactor `Tabs` accordingly

No visual nor functional changes.

## How to test

On
https://docs-git-chore-refactor-docs-tabs-supabase.vercel.app/docs/guides/auth/passwords
(Tabs are driven by URL and the flow tabs should have sticky headers
even though there's a CSS bug already reported)
- check that by default, the first tab in each tabs is active
- change the tabs in different groups and validate it works
- refresh the page and check that previously selected tabs are active
(URL based selection)
- In a new tab, visit
https://docs-git-chore-refactor-docs-tabs-supabase.vercel.app/docs/guides/auth/passwords
again and check that previously selected tabs are active (LocalStorage
based selection)

Do the same on
https://docs-git-chore-refactor-docs-tabs-supabase.vercel.app/docs/guides/database/database-advisors
(This one is driven by URL but does not have sticky tab headers)

Do the same on
https://docs-git-chore-refactor-docs-tabs-supabase.vercel.app/docs/guides/deployment/terraform/reference
(this one is not driven by URL nor has sticky tab headers)

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Docs tabs now persist and restore the active tab via URL query
parameters.
* Added optional “sticky” tab behavior that keeps the active panel in
view.
  * Enhanced keyboard interaction for selecting tabs.
* **Bug Fixes**
* Improved active-tab initialization and synchronization when the URL
query changes.
* **Chores**
* Refreshed the tabs UI implementation and styling to improve
consistency and remove deprecated tab exports from shared UI packages.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-07-04 02:44:29 +10:00
Lukas Klingsbo
833d3cb1d7 docs: migrate Dart/Flutter reference to the new reference pipeline (#47224)
## What

Routes the **Dart/Flutter v2** reference through the new
reference-content pipeline (`scripts/build-reference-content.ts` +
`spec/reference/dart/v2/`), the same one JavaScript v2 already uses.
Dart v1 stays on the legacy YAML pipeline.

## How

Dart has no upstream TypeDoc dump, so this follows the reference
README's "adapt other formats as a pre-step" approach:

- **`scripts/generate-dart-reference.ts`** converts the committed legacy
spec (`spec/supabase_dart_v2.yml`) plus the shared section tree into a
TypeDoc-shaped dump at `spec/reference/dart/v2/supabase_flutter.json`
(gitignored, like every other dump). Each Dart method becomes a
`variant: 'declaration'` node tagged with `@category`/`@subcategory` and
carries the legacy function shape (description, notes, params, examples)
on a non-TypeDoc `content` field.
- **`build-reference-content.ts`** gains a small, backward-compatible
addition: it spreads a declaration's `content` straight onto the
`functions.json` entry. The renderer then shows params/examples/notes
exactly as the legacy YAML did, with no typeSpec round-trip. The field
is absent for real TypeDoc dumps, so **JavaScript output is unchanged**
(existing JS snapshot still passes).
- `dart-v2` added to `SUPPORTS_NEW_REFERENCE_PROCESS`; the v2 `specFile`
is dropped from the nav entry so the legacy generator skips it.
- Dart search ingest switched to the new-pipeline loader.
- `config.json` + hand-authored partials (intro markdown,
`initializing`, and subcategory overviews like `using-filters`,
`auth-mfa`) added under `spec/reference/dart/v2/partials/`, mirroring
the JS lib.
- The dart dump is regenerated in `codegen:references:new` and in CI; a
self-contained `dart/v2` snapshot test covers the full YAML → dump →
content path.

## Verification

- `vitest run scripts/build-reference-content.test.ts` — both JS and
Dart snapshots pass.
- 112 function sections all resolve to renderable `functions.json`
entries (104 methods + 7 subcategory overviews + `initializing`).
- `tsc --noEmit` clean for all changed files.
- Legacy generator confirmed to skip dart v2 (only `dart.v1.*`
regenerated).

> Note: the live dev server (which needs the Supabase backend) was not
run; verification was done at the data-pipeline level plus parity with
the production JS pipeline behavior.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added Dart v2 reference documentation sections, including Installing,
Initializing, Filters, Modifiers, Auth Admin, MFA, Passkeys, File
Buckets, Introduction, and Upgrade guidance.
* Expanded the Dart v2 reference pipeline so Dart API pages are
generated from the newer reference content flow.
* **Bug Fixes**
* Improved Dart reference rendering by preserving legacy descriptions,
notes, params, and examples in generated function entries.
* Updated Dart v2 reference search to use the new pipeline’s generated
content so results and navigation stay in sync.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Jeremias Menichelli <jmenichelli@gmail.com>
2026-07-03 15:09:56 +02:00
Francesco Sansalvadore
acbb19a69a feat: www & docs fonts (#47227)
Update marketing website and docs with new sans-serif fonts:
- `Inter` - sans-serif for all body text
- `Manrope` - sans-serif for headings

PR breakdown of #43455 
Related: #47226 #47228 #47236
2026-07-01 12:59:00 +02:00
Gildas Garcia
b30db91d71 chore: cleanup UI patterns exports (#47406)
## Problem

We now export components under a subpath in ui-patterns to avoid barrel
files as they slow down every tools (from IDE to linters, etc.) and may
also affect bundles our users have to download.

## Solution

- Remove the UI patterns index file
- Fix invalid impors
2026-06-30 09:23:17 +02:00
Nik Richers
635b2d6050 docs: standardise next steps on overview pages with content listings (#47097)
## I have read the CONTRIBUTING.md file.

YES

## What kind of change does this PR introduce?

This PR helps standardise link sections which is useful for overview
pages that frequently use similar sections such as "Next steps", "Get
started", or "Examples".

Six high-traffic overview pages are migrated as a pilot, with a skill in
the new
[supabase/docs-agent-skills](https://github.com/supabase/docs-agent-skills)
repo to audit and convert the rest in a follow-on PR.

Refactored from an initial YAML front matter approach per review
feedback from @jeremenichelli. Now implemented as a React component and
using existing linting & Markdown export functionality.

A second round of review feedback further simplified the architecture:
the per-listing component registry was removed in favor of a single
`<ContentListings id="..." />` component backed by an ID-keyed data
lookup, the listing data moved out of `apps/docs/components/` into
`apps/docs/data/content-listings/`, the listing-specific link wrapper
was replaced with the existing `<Link>` + `<GlassPanel>` pattern from
the rest of the docs, and the headings now defer to the shared
`<Heading>` from `MdxBase.shared.tsx` (no parallel marker-to-tag
mapping, no typography overrides). Great feedback, thank you! 🙏

Relates to DOCS-1032.

## What is the current behavior?

Authors implement these sections however they wish. As a result,
overview and index pages use inconsistent patterns for orientation
links: some use hand-rolled Markdown lists, some use custom panel/grid
components, some use buttons, and some have no guidance about where to
go next at all. There is no shared component for these sections and no
analytics on those clicks.

## What is the new behavior?

Authors add orientation sections in two steps:

1. Define listing data in a `.data.ts` file under
`apps/docs/data/content-listings/` (for example, `storage.data.ts`).
Each `ContentListingGroup` has a globally-unique `id` like
`storage-get-started`.
2. Place a single `<ContentListings id="..." />` component inline in
guide MDX.

The ID is also the telemetry `listingId`, so the same value
disambiguates the section in PostHog dashboards.

Grid and list layouts, optional icons (such as
`/docs/img/icons/github-icon` with `-light.svg` variants for dark mode),
and external URLs are supported. Conditionals that use `$Show` around
inline components are also supported, for example for auth pricing.

### Usage example from "Storage" overview page

`apps/docs/data/content-listings/storage.data.ts`:

```ts
export const storageGetStarted: ContentListingGroup = {
  id: 'storage-get-started',
  heading: 'Get started',
  description: 'Choose the bucket type that fits your use case:',
  type: 'grid',
  items: [
    {
      title: 'Files buckets',
      href: '/guides/storage/quickstart',
      description:
        'Store and serve images, videos, documents, and general-purpose files with direct URL access and row-level security.',
    },
    {
      title: 'Analytics buckets',
      href: '/guides/storage/analytics/introduction',
      description:
        'Store data in Apache Iceberg tables for data lakes, logs, and ETL. Query from Postgres via foreign tables with partitioning.',
    },
    {
      title: 'Vector buckets',
      href: '/guides/storage/vector/introduction',
      description:
        'Store embeddings and run similarity search for semantic matching, AI, and RAG. Use HNSW indexing, distance metrics, and metadata filtering.',
    },
  ],
}
```

`apps/docs/content/guides/storage.mdx`:

```mdx
<ContentListings id="storage-get-started" />
```

Renders as:

<img width="689" alt="Storage Get started listing — Files, Analytics,
and Vector buckets"
src="https://github.com/user-attachments/assets/0d1b9531-962f-40ae-891e-b1e93ff1c939"
/>

<br>Exported in Markdown as:

```md
## Get started

Choose the bucket type that fits your use case:

- **[Files buckets](/docs/guides/storage/quickstart):** Store and serve images, videos, documents, and general-purpose files with direct URL access and row-level security.
- **[Analytics buckets](/docs/guides/storage/analytics/introduction):** Store data in Apache Iceberg tables for data lakes, logs, and ETL. Query from Postgres via foreign tables with partitioning.
- **[Vector buckets](/docs/guides/storage/vector/introduction):** Store embeddings and run similarity search for semantic matching, AI, and RAG. Use HNSW indexing, distance metrics, and metadata filtering.
```

Click tracking fires via PostHog (`docs_content_listing_clicked`):

```json
{
  "action": "docs_content_listing_clicked",
  "custom_properties": {
    "targetPath": "/guides/storage/quickstart",
    "linkTitle": "Files buckets",
    "groupTitle": "Get started",
    "listingId": "storage-get-started"
  }
}
```

Still finding my way around PostHog, but I verified on preview deploy
that clicking a content listing on `/docs/guides/auth` sends
`docs_content_listing_clicked` to
`https://api.supabase.green/platform/telemetry/event` and receives HTTP
201.

### Authoring experience

Three ways to add or convert content listings: copy the agent prompt
first, use snippets for manual edits, or invoke the audit skill for
batch follow-on work. Refer to `CONTRIBUTING.md` for the full authoring
guide.

#### 1. Agent prompt

Copy into Cursor or another AI assistant:

```text
Add a content listing block for [TOPIC] / [SECTION] (for example, Storage / Examples).
Follow CONTRIBUTING § Content listings in apps/docs.
- Add data to apps/docs/data/content-listings/[topic].data.ts
- Use a globally-unique kebab-case id like `[topic]-[section]`
- Place inline in the guide MDX with <ContentListings id="..." />
- Copy structure from storageGetStarted in apps/docs/data/content-listings/storage.data.ts
- Run pnpm test:local lib/content-listings.test.ts from apps/docs
```

#### 2. VS Code / Cursor snippets

Type these prefixes in the docs workspace
(`.vscode/content-listing.code-snippets`):

| Prefix | Inserts |
| ----------- | --------------------------------------------------------
|
| `cl-data` | `ContentListingGroup` export skeleton with namespaced id |
| `cl-inline` | `<ContentListings id="…" />` in guide MDX |

<img width="658" height="274" alt="image"
src="https://github.com/user-attachments/assets/5ef20954-7aee-4925-887d-79a5ae766b37"
/>

#### 3. Batch audit skill

For follow-on overview page conversion or maintenance, use the
[`audit-content-listings`](https://github.com/supabase/docs-agent-skills/blob/main/.claude/skills/audit-content-listings/SKILL.md)
skill in `docs-agent-skills` (skill, `conversion-manifest.json`, and
validation script).

Example:

```text
Use audit-content-listings. Audit getting-started.mdx, update conversion-manifest.json, then convert the next unconverted section only.
```

## Additional context

The implementation includes a presentational `<ContentListings />`
component (grid/list layouts, GlassPanel, telemetry) backed by ID-keyed
data modules, and a single markdown export handler that reads the same
`id` prop from the JSX and looks up data via the shared registry.

Key files:

- **Data:** `apps/docs/data/content-listings/` (one `.data.ts` file per
guide topic, plus `index.ts` exporting `CONTENT_LISTINGS` and
`getContentListingById`)
- **Renderer:** `apps/docs/components/ContentListings/` (single
`<ContentListings id="…" />` component); registered in
`apps/docs/features/docs/MdxBase.shared.tsx`
- **Types/helpers:** `apps/docs/lib/content-listings.schema.ts` (zod
schemas, type aliases, grid/heading/href helpers)
- **Markdown export:** `apps/docs/internals/markdown-schema/Listings.ts`
(single ID-driven handler) wired into
`apps/docs/internals/generate-guides-markdown.ts`
- **Telemetry:** `docs_content_listing_clicked` defined in
`packages/common/telemetry-constants.ts`, fired from
`ContentListings.client.tsx`
- **Authoring guide:** `apps/docs/CONTRIBUTING.md` (Components and
elements → Content listings)
- **VS Code snippets:** `.vscode/content-listing.code-snippets`
(`cl-data`, `cl-inline`)

### Before & After

#### Auth

| [Before (production)](https://supabase.com/docs/guides/auth) | [After
(preview)](https://docs-git-fork-nrichers-nikrichers-docs-1032-sta-e2a8cb-supabase.vercel.app/docs/guides/auth)
|
|
---------------------------------------------------------------------------------------------------------------------------
|
---------------------------------------------------------------------------------------------------------------------------
|
| ![Auth
before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/auth-before-dbc93ccd.png)
| ![Auth
after](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/auth-after-789b25a6.png)
|

#### Database overview

| [Before
(production)](https://supabase.com/docs/guides/database/overview) |
[After
(preview)](https://docs-git-fork-nrichers-nikrichers-docs-1032-sta-e2a8cb-supabase.vercel.app/docs/guides/database/overview)
|
|
--------------------------------------------------------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------------------------------------------------------
|
| ![Database
before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/database-before-0d32136a.png)
| ![Database
after](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/database-after-22447d16.png)
|

#### Edge Functions

| [Before (production)](https://supabase.com/docs/guides/functions) |
[After
(preview)](https://docs-git-fork-nrichers-nikrichers-docs-1032-sta-e2a8cb-supabase.vercel.app/docs/guides/functions)
|
|
--------------------------------------------------------------------------------------------------------------------------------------------
|
--------------------------------------------------------------------------------------------------------------------------------------------
|
| ![Functions
before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/functions-before-11319580.png)
| ![Functions
after](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/functions-after-83268362.png)
|

#### Storage

| [Before (production)](https://supabase.com/docs/guides/storage) |
[After
(preview)](https://docs-git-fork-nrichers-nikrichers-docs-1032-sta-e2a8cb-supabase.vercel.app/docs/guides/storage)
|
|
----------------------------------------------------------------------------------------------------------------------------------------
|
----------------------------------------------------------------------------------------------------------------------------------------
|
| ![Storage
before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/storage-before-9b4ae535.png)
| ![Storage
after](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/storage-after-7503d664.png)
|

#### Realtime

| [Before (production)](https://supabase.com/docs/guides/realtime) |
[After
(preview)](https://docs-git-fork-nrichers-nikrichers-docs-1032-sta-e2a8cb-supabase.vercel.app/docs/guides/realtime)
|
|
-------------------------------------------------------------------------------------------------------------------------------------------
|
-------------------------------------------------------------------------------------------------------------------------------------------
|
| ![Realtime
before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/realtime-before-6eb5b125.png)
| ![Realtime
after](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/realtime-after-92ec7d74.png)
|

#### Getting Started (partial migration for demoing)

| [Before
(production)](https://supabase.com/docs/guides/getting-started) | [After
(preview)](https://docs-git-fork-nrichers-nikrichers-docs-1032-sta-e2a8cb-supabase.vercel.app/docs/guides/getting-started)
|
|
------------------------------------------------------------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------------------------------------------------------------
|
| ![Getting Started
before](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/getting-started-before-89251d7b.png)
| ![Getting Started
after](https://moijyfpvgnmgoxvwcikq.supabase.co/storage/v1/object/public/pr-proof/supabase/supabase/pr47097/getting-started-after-3e33c6d4.png)
|

### Test plan

- [ ] Visually verify migrated pages render correctly:
- [ ] `/guides/auth` — grid "Get started", conditional pricing list,
grid "Next steps"
  - [ ] `/guides/database/overview` — get started + next steps listings
  - [ ] `/guides/getting-started` — top 3-column grid
  - [ ] `/guides/functions` — get started + example listings
  - [ ] `/guides/storage` — get started, examples, resources listings
  - [ ] `/guides/realtime` — get started, examples, resources listings
- [ ] Confirm listings render at explicit page positions
- [ ] Click a content listing link and verify
`docs_content_listing_clicked` fires in PostHog with expected properties
(the new `listingId` is the namespaced kebab-case id, e.g.
`storage-get-started`)
- [ ] Build docs and confirm `.md` alternate output includes listing
sections at component placement (e.g.
`public/markdown/guides/storage.md`)
- [ ] Run unit tests: `pnpm test:local lib/content-listings.test.ts` in
`apps/docs`

## Summary by CodeRabbit

## Release Notes

* **New Features**
* Introduced a standardized content listings system for organizing
related guides and resources.
* Content listings now support both grid and list layouts for consistent
presentation.
  * Added click telemetry for content listing interactions.

* **Documentation**
* Updated authentication, database, functions, getting started,
realtime, and storage guide pages to use the new content listing
components.
* Improved MDX structure examples and listing markup formatting in
contributor documentation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->



<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

## Release Notes

* **New Features**
* Introduced a new content listings component for displaying guide
content in list and grid layouts across documentation pages.
* Added telemetry tracking for content listing interactions to measure
user engagement.

* **Documentation**
* Updated guide pages (Authentication, Database, Functions, Storage,
Realtime, Getting Started) to use the new listings layout.
* Added contribution guidelines for creating and managing content
listings in documentation.

* **Tests**
* Added comprehensive test coverage for content listings validation,
serialization, and rendering.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Nik Richers <nik@validmind.ai>
Co-authored-by: Jeremias Menichelli <jmenichelli@gmail.com>
2026-06-29 23:57:12 +00:00
Jeremias Menichelli
21785b2418 fix: Fix torubleshooting frontmatter validation (#47220) 2026-06-23 16:42:43 +00:00
Jeremias Menichelli
9de5b16909 chore: Refactor ErrorCodes component and data. Offer markdown alternative (#47189) 2026-06-23 12:56:07 +02:00
Chris Chinchilla
309f4b2612 docs: Track 404 recommendation clicked (#46990)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added analytics telemetry for documentation 404 recommendation clicks,
recording the clicked destination and the originating page.

* **Improvements**
* Enhanced the ButtonCard component to optionally handle click actions
via an `onClick` callback and forward it to the underlying link element.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-17 22:56:53 +08:00
Jeremias Menichelli
90b15736aa chore: Repurpose CostWarning component as partial only (#46996) 2026-06-17 16:51:02 +02:00
Gildas Garcia
96d43099bb chore: refactor Button API so that it can be used a standard button (#46880)
## Problem

Our `<Button>` component breaks the default `button` contract by
redefining the `type` prop to set its variant (`primary`, `default`,
etc) instead of the button type (`submit`, `button`, etc).
This is confusing and forces to write more code when using it with
shadcn components that expect/inject the standard button props.

## Solution

- rename the `type` prop to `variant`
- rename the `htmlType` prop to `type`
- propagate the changes where necessary
- format code

## How to test

As this is just prop renaming, if it builds it's ok

---------

Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
2026-06-16 23:59:58 +02:00
Chris Chinchilla
41c6c3db16 Revert "docs: Set path on 404 errors" (#46970)
Reverts supabase/supabase#46848

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

## Release Notes

**Refactor**
* Standardized 404 error handling across documentation pages to use
Next.js built-in features instead of custom utilities
* Enhanced consistency for missing documentation entries, guides, and
references when users navigate to unavailable pages

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-16 10:14:49 +02:00
Chris Chinchilla
954c861b11 docs: Set path on 404 errors (#46848)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* 404 handling now returns path-aware not-found pages for missing docs
and guides, improving accurate user-facing 404 responses.
* Improved file-missing errors for guides so missing content cases
surface clearer diagnostic info.

* **Chores**
* Enhanced 404 telemetry so missing-path information is recorded for
better monitoring and quicker troubleshooting.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-06-15 11:33:11 +02:00