Commit Graph
37778 Commits
Author SHA1 Message Date
Miranda LimonczenkoandClaude Opus 5 f91c58d361 fix(docs e2e): say when a broken link is a redirect
A docs preview never serves apps/www/lib/redirects.js. That table belongs
to the www project, which production requests pass through first. So a
link that resolves through a redirect fails on a preview and passes on
supabase.com, and the failure said only "should resolve (status 404)".

Look the path up in that table on failure. When a redirect covers it, add
the redirect and the destination to link to instead. A link with no
redirect is just broken, so its message is unchanged.

The link still fails either way.

Loads redirects.js via createRequire as plain CommonJS data, so no www app
code runs. Two things needed handling in the real table: two entries are
host or query conditional and can't be evaluated without request context,
and 27 destinations are absolute URLs or contain a query string that
path-to-regexp can't compile. Only one of those has a dynamic source that
would need substitution, so compile() is called only when a match captured
params, and that call is still guarded.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-05 12:19:27 -07:00
Aaron ByrneandClaude 47b8660d8d docs(troubleshooting): troubleshooting guide so users can amend their failed migrations (#48257)
## 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?

Troubleshooting guide

## What is the current behavior?

NA
## What is the new behavior?

Troubleshooting guide
## Additional context

Add any other context or screenshots.


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

* **Documentation**
* Added a new troubleshooting page: “Troubleshooting MIGRATIONS_FAILED:
missing tables or an incomplete schema on your branch” for Preview
Branch creation.
* Explained why replayed `main` migration history can fail when it no
longer matches the branch’s live schema.
* Included a step-by-step workflow to diagnose the failing migration via
logs, repair migration status, and then recreate or rebase the branch to
verify.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-05 18:12:20 +01:00
Jordi Enric a28214c236 feat(studio): add ClickHouse OTEL SQL for the Auth report's v2 metrics (#48750)
## Problem

Part of DEBUG-73 (migrate reports queries to the OTEL/ClickHouse
endpoint).

The Auth report's v2 metrics (ActiveUsers, SignInAttempts,
PasswordResetRequests, TotalSignUps, sign-in/sign-up processing time,
error breakdowns) currently only query the BigQuery-backed logs.all
endpoint.

## Fix

Adds `AUTH_REPORT_SQL_OTEL`, a ClickHouse-dialect mirror of the existing
`AUTH_REPORT_SQL`, covering all 10 metrics. Threads a `useOtel`
parameter through `fetchLogs` and the three report config creators
(`createUsageReportConfig`, `createErrorsReportConfig`,
`createLatencyReportConfig`), defaulting to `false` everywhere.

This PR is inert on its own: nothing yet passes `useOtel: true`, so it
changes no runtime behavior. The follow-up PR (stacked on this one)
wires the `otelReports` feature flag through the Auth report page to
actually select the OTEL SQL.

Also includes: one dataProvider now validates its raw rows with a Zod
schema instead of casting to `any`, and removal of a few functions in
this file that had zero callers (`AUTH_ERROR_CODE_VALUES`,
`createAuthReportConfig`, an exact duplicate of a status-code color map,
an unused hook).

## How to test

- Unit: `cd apps/studio && npx vitest run
data/reports/v2/auth.config.otel.test.ts`
- No manual testing needed for this PR alone since it changes no runtime
behavior (useOtel defaults to false, unwired). The follow-up PR covers
manual testing of the actual flag-gated behavior.

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

* **New Features**
  * Added OpenTelemetry-backed authentication reports.
* Authentication reports now include usage, errors, latency, sign-ins,
sign-ups, and edge-log metrics.
  * Added filtering by provider, status code, action, and time range.
  * Added selectable telemetry sources for retrieving report logs.
* **Bug Fixes**
  * Improved validation of authentication error codes.
* Improved handling of missing report data with consistent empty
results.
  * Improved report formatting for more consistent attribute display.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-05 18:25:41 +02:00
Abhishek Tripathi d101d6f3de docs: document NOT_FOUND_FUNCTION_BLOB Edge Function error (#48411)
This PR addresses the documentation portion of #47739.

## What the issue means

`NOT_FOUND_FUNCTION_BLOB` means the runtime cannot find the deployed
bundle for an Edge Function. This differs from the existing `NOT_FOUND`
error, which normally indicates that the function name in the request
URL is not recognized.

The dashboard status alone may not reveal this failure because the
function can still appear as `ACTIVE`.

## Changes

- Documented `NOT_FOUND_FUNCTION_BLOB` as an HTTP 404 error.
- Explained how it differs from `NOT_FOUND`.
- Added the command for redeploying one affected function.
- Added the command for redeploying all functions when several are
affected.
- Added guidance to retry the request and contact Support if
redeployment does not resolve the problem.

## Files changed

-
`apps/docs/content/troubleshooting/edge-function-404-error-response.mdx`

## Validation

- The change uses the troubleshooting page's existing TOML frontmatter
and MDX conventions.
- `git diff --check` passes.

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

## Summary by CodeRabbit

* **Documentation**
  * Expanded troubleshooting guidance for Edge Function 404 responses.
* Added coverage of the `NOT_FOUND_FUNCTION_BLOB` error, including
example responses and clarification of how it differs from `NOT_FOUND`.
* Updated redeployment instructions with options for deploying a single
function or all functions.
  * Refined retry and support guidance.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-05 17:11:00 +01:00
Charis 8831e15fc3 Revert "refactor(studio): static tab kind registry and tab id codec (PR 1/9)" (#48762)
Reverts supabase/supabase#48718
2026-08-05 16:03:16 +00:00
Miranda LimonczenkoandClaude Opus 5 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
Jordi Enric aed332b663 feat: migrate Edge Functions report to ClickHouse OTEL logs (#48756)
## Problem

The Edge Functions report (`observability/edge-functions`) only queries
BigQuery. As part of the broader Reports→ClickHouse OTEL migration
(DEBUG-73), we need each report migrated one at a time behind the
`otelReports` flag.

## Fix

Adds a ClickHouse OTEL SQL variant (`METRIC_SQL_OTEL`) for the 4 Edge
Functions metrics (TotalInvocations, ExecutionStatusCodes,
InvocationsByRegion, ExecutionTime), querying the unified `logs` table
filtered to `source = 'function_edge_logs'`, with fields read from
`log_attributes` (`function_id`, `response.status_code`,
`response.headers.x_sb_edge_region`, `execution_time_ms`) — the same
mapping already used by `edge-functions-last-hour-stats-query.ts`.

`edgeFunctionReports()` now takes a `useOtel` flag that picks between
the BQ and OTEL query sets and forwards it to `fetchLogs`. The page
wires this up via `useFlag('otelReports')`, matching the pattern used
for the Auth report. No behavior change while the flag is off — report
still fetches from BigQuery.

Also removed two pieces of dead code spotted in `report.utils.ts` while
touching it: the unused `useEdgeFnIdToName` hook and a
`STATUS_CODE_COLORS` map that was an exact duplicate of
`REPORT_STATUS_CODE_COLORS` (the one actually imported elsewhere).

This PR is standalone — no dependency on the in-flight Auth report OTEL
stack.

## How to test

- `pnpm vitest run data/reports/v2/edge-functions.config.otel.test.ts` —
9 new tests covering the OTEL SQL shape (single logs table,
unix-microsecond timestamp bucketing, field mapping, filters).
- `pnpm vitest run data/reports` and `pnpm vitest run
data/edge-functions components/interfaces/Reports` — existing suites (46
+ 54 tests) still pass, confirming no regression to the BQ path.
- Manually: with `otelReports` flag enabled, visit a project's Edge
Functions observability report and confirm charts render from the
ClickHouse endpoint.

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

## Summary by CodeRabbit

* **New Features**
* Added OpenTelemetry support for Edge Functions observability metrics,
including invocations, status codes, regional activity, and execution
time.
* Reports can now dynamically use either the standard or OpenTelemetry
logs source.

* **Bug Fixes**
* Improved filtering and timestamp handling for OpenTelemetry-based Edge
Functions metrics.
* Added coverage for status, execution time, function, and region
filters.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-05 17:13:34 +02:00
Etienne Stalmans 55095dcd00 chore: highlight totp app friendly name (#48755)
## 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?

UI update

## What is the current behavior?

We only show the alternative factor's name, if one exists.

## What is the new behavior?

When presenting user with the MFA screen, make the MFA factor's
friendly_name appear.

## Additional context

Before:

<img width="456" height="371" alt="Screenshot 2026-08-05 at 15 41 07"
src="https://github.com/user-attachments/assets/7d506641-6a9e-49fe-8c40-98c1eef4b384"
/>


After:
<img width="459" height="394" alt="Screenshot 2026-08-05 at 15 38 27"
src="https://github.com/user-attachments/assets/034312ba-691e-4f56-b4e3-a82df2a17273"
/>
<img width="468" height="434" alt="Screenshot 2026-08-05 at 15 37 43"
src="https://github.com/user-attachments/assets/4c585eae-b8e2-4f93-8210-2c8ac7c20278"
/>


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

* **Bug Fixes**
* Improved multi-factor authentication prompts with clearer formatting
and more consistent factor labels.
* Ensured the primary code label appears whenever a verification factor
is selected.
* Added a fallback label for authentication factors without a display
name.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-05 22:07:22 +07:00
Charis ffd6d6636d refactor(studio): static tab kind registry and tab id codec (PR 1/9) (#48718)
## Summary

First PR in the tab/snippet decoupling stack. Purely additive: no
existing call sites change behavior except the `EntityTypeIcon` rewire,
which preserves its API exactly.

- **`state/tabs/kinds.ts`** — static `TAB_KINDS` descriptor table
(`TabKind`, `TabSurface`, `surfaceOf`, `kindsOnSurface`, `isTabKind`).
Leaf-safe: its only reference to the domain `Tab` type is a type-only
import, so it stays importable at module scope (needed later for the
valtio store and the persistence migration reader) without creating a
runtime cycle.
- **`state/tabs/kinds.icons.tsx`** — per-kind icon leaf module (`ui` +
`lucide-react` + `TabKind` type only), plus the preserved
`LogsSnippetIcon`.
- **`state/tabs/tab-id.ts`** — `createTabId` / `parseTabId` /
`toUrlSegment` / `parseUrlSegment(segment, surface)` codec.
`parseUrlSegment` is surface-scoped: a bare segment only resolves to a
kind when the surface has exactly one bare kind (true for `sql`). The
table surface has five bare kinds (`r`/`v`/`m`/`f`/`p`) with no URL
disambiguator between them, matching `/editor/[id]`, which learns kind
from the fetched entity rather than the URL — so a bare table segment
correctly resolves to nothing.
- **`components/ui/EntityTypeIcon.tsx`** — rewired to a thin wrapper
delegating to `kinds.icons.tsx`, preserving its exact prop API (`type`,
`size`, `strokeWidth`, `isActive`, `sqlSource`) for all existing
consumers.
- **`state/tabs/tab-id.test.ts`** — codec round-trips per kind,
bare-vs-prefixed URL segments, the `templates`/`examples`/`new`
sentinels, and surface scoping (including the table-surface ambiguity
above).

Full plan: `apps/studio/TABS_DECOUPLING_PLAN.md` (not included in this
PR).

## Test plan

- [x] `pnpm typecheck`
- [x] `pnpm lint --filter=studio` (0 errors)
- [x] `pnpm --filter studio run lint:ratchet` (warning counts did not
increase)
- [x] `pnpm test:studio` (full suite green, including 50 new/updated
tests in `state/tabs/`)
- [x] `pnpm format` (no-op)

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

## Summary by CodeRabbit

* **New Features**
* Added consistent icons and metadata for SQL, notebook, chat, table,
view, and related tab types.
* Added support for creating, parsing, and converting tab identifiers to
URL segments.
  * Improved handling of tab types across SQL and table surfaces.

* **Bug Fixes**
* Invalid, empty, or ambiguous tab identifiers and URL segments are now
rejected.

* **Tests**
* Added coverage for tab identifiers, URL conversion, supported tab
types, and edge cases.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-05 10:39:58 -04:00
AnaandAna 69b1f06152 docs(blog): add Enhancements for Postgres Changes launch post (#48711)
## 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?

- Adds the launch blog post for Enhancements for Postgres Changes, dated
2026-08-05
- Adds the social card and listing thumbnail for the post

## What is the current behavior?

N/A. New post.

## What is the new behavior?

- New post at `/blog/postgres-changes-filters-and-column-selection`
covering AND filter composition, the expanded filter operator set, and
column selection on Postgres Changes subscriptions
- Authored by Filipe Cabaço, using the existing `filipe` author id, so
no change to `apps/www/lib/authors.json`

## Additional context

**Please do not merge before 7:00 am PT on 2026-08-05.**

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

## Documentation

* Added a product blog post covering enhanced Postgres Changes
filtering, including comma-separated AND filters across multiple
columns.
* Documented additional filter operators and the new filter builder.
* Explained optional column selection for event payloads, permissions
and row-level security behavior, DELETE limitations, unsupported
options, client-version requirements, usage examples, and upgrade
guidance.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Ana <ana1337x@users.noreply.github.com>
2026-08-05 10:24:44 -04:00
1f0fb64ce9 docs: CLI 'Transport error' caused by antivirus/proxy TLS interception (#48719)
## Summary
- Adds a troubleshooting entry for the Supabase CLI's generic
`HttpClientError: Transport error` when a Management API call (e.g.
`projects list`, `link`) fails.
- Root cause documented: antivirus software or corporate SSL-inspecting
proxies (e.g. Norton Safe Web/Web & Mail Shield, Zscaler, Netskope)
substituting their own TLS certificate, which the CLI's HTTP client
rejects and reports as a generic transport error rather than a
certificate error.
- Includes a vendor-agnostic diagnostic method (compare `curl`/browser
vs. CLI behavior, check the served certificate's Issuer field) plus the
specific Norton fix confirmed via a support ticket (disabling Smart
Firewall alone does not stop the interception; Safe Web/Web & Mail
Shield does).

## Test plan
- [ ] `pnpm --filter docs lint:mdx` passes in CI
- [ ] Frontmatter renders correctly on the troubleshooting page

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

* **Documentation**
* Added troubleshooting guidance for Supabase CLI transport errors
caused by antivirus software or corporate TLS inspection.
* Included diagnostic steps, common error messages, and resolution
guidance for Norton 360 and SSL-inspecting proxies.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Rodrigo Mansueli <rodrigo@mansueli.com>
Co-authored-by: Ali Waseem <waseema393@gmail.com>
2026-08-05 09:09:13 -04:00
Andrey A. af384e136f chore(self-hosted): update tags in docker guide (#48739) 2026-08-05 14:19:11 +02:00
9952d6f10f [FE-4067] fix(studio): re-allow all regions in local project creation (#48704)
Local dev stacks can run in any of the three supported regions (e.g.
Bobbie's is in `ap-southeast-1`), but enabling High Availability on the
project creation form pinned local to Frankfurt only. This unrestricts
local so all three regions are selectable again.

**Changed:**
- `getHighAvailabilityRegionCode()` returns `undefined` for `local`
(same as prod), so `filterHighAvailabilityRegions()` no longer collapses
the list — staging stays pinned to `us-east-1`
- The three-region warning in `RegionSelector` now adds a local-only
recommendation: "Use Central EU (Frankfurt) unless you're on a personal
dev stack."
- Updated unit tests, including an `ap-southeast-1` fixture region to
prove pass-through

## To test

- On a local stack, open the new project form and enable High
Availability — the region selector should offer all three regions (East
US, Frankfurt, Southeast Asia) instead of locking to Frankfurt, and the
warning should recommend Frankfurt unless you're on a personal dev stack
- Confirm staging behavior is unchanged (HA still pins to East US)
- `pnpm --filter studio exec vitest run
components/interfaces/ProjectCreation`

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

* **Bug Fixes**
* Local development projects can now use high-availability regions
beyond Central EU.
* Region filtering and availability messaging now correctly reflect the
active environment, including staging restrictions.

* **User Experience**
* Added guidance recommending Central EU for local projects, unless
using a personal development stack.
* Region selection now provides clearer environment-specific information
when options are limited.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-08-05 14:51:57 +07:00
kemal.earth 8df721e97b fix(design-system): <MultiSelect /> syling update (#48696)
## 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 fixes a few known issues of our `<MultiSelect />` component,
mainly:

- Remove bright green hover state. Now matches `<Input />` and `<Select
/>`.
- Input colours in general are matched up to others.
- Dropdown colours, sizing, spacing matches that of `<Select />`.
- Minimum height of trigger dropped down to `34px` to be inline with
other input heights.
- Inner padding reduced when options are toggled on and badges appear to
keep initial `34px` height over one line.
- Fixed the stroke width of optional trigger icon to `1.5`.

This may need a second set of 👀 to make sure we haven't broken anywhere.
Haven't spotted anything egregious giving it a pass so far.


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

## Summary by CodeRabbit

* **Style**
* Refined the multi-select appearance with updated borders, backgrounds,
focus, hover, and open-state styling.
* Improved readability with larger item text and lighter command-item
text.
* Adjusted spacing, rounding, icon weight, and selected-item
highlighting for a cleaner interface.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-05 08:46:13 +01:00
Danny White 3c811b9c29 fix(studio): extend SupportForm project waitFor timeout (#48211)
## What kind of change does this PR introduce?

Test flake fix.

## What is the current behavior?

`SupportFormPage` → “submits support request with attachments…” can fail
under CI load:

- expected project selector text `Project 1`
- received `No specific project`

Org is applied first; the project is filled asynchronously via
`onInitialLoad` after org projects fetch. That wait still used the
default ~1s `waitFor`, while every sibling Project 1 assertion already
uses `{ timeout: 5_000 }` (see #45852).

## What is the new behavior?

- Attachments test waits up to 5s for Organization 1 + Project 1
- Same timeout for the org-switch → Project 2 waiter (same pattern)

No production code changes.

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

## Summary by CodeRabbit

* **Tests**
* Improved support form test reliability by allowing additional time for
organization and project selectors to load during asynchronous
interactions.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-05 07:15:20 +00:00
Danny White 9b3e0a9060 show Vercel connection errors inline (#48473)
## What kind of change does this PR introduce?

Bug fix.

## What is the current behavior?

Vercel install and project-link failures use transient toasts.

## What is the new behavior?

Failures remain visible below the relevant action and clear when the
user retries or changes a selection.

The Vercel mutation hooks expose errors without choosing their
presentation. Interstitial callers render them inline, while existing
non-interstitial callers explicitly retain their toasts.

| Before | After |
| --- | --- |
| <img width="1024" height="759" alt="Install Vercel Integration
Supabase"
src="https://github.com/user-attachments/assets/6348cdd2-220a-4ad8-89f9-7fc51de36a3c"
/> | <img width="1024" height="759" alt="Install Vercel Integration
Supabase"
src="https://github.com/user-attachments/assets/ecc50c4e-daab-4f6d-bf86-7282e2aff92c"
/> |

## To test

1. Switch to `dnywh/inline-vercel-errors` (this branch).
2. Open `apps/studio/pages/integrations/vercel/install.tsx`.
3. Find the `actionError` assignment immediately below
`useVercelIntegrationCreateMutation` and replace the whole assignment
with:
   ```tsx
   const actionError = 'Creating Vercel integration failed: Test error'
   ```
4. With local Studio running and while signed in, open
`http://localhost:8082/integrations/vercel/install?code=test&configurationId=test&source=marketplace`
5. Confirm the error remains visible below **Install integration**. No
Vercel installation or real authorisation code is required.
6. Revert the temporary edit.

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

## Bug Fixes

* Improved error handling across Vercel project connection and
installation flows.
* Validation, duplicate-connection, and connection failures now appear
inline in the relevant setup steps.
* Errors clear automatically when the selected project or organization
changes.
* Notifications remain available in supported flows, including new
project creation and side-panel setup.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-05 16:06:58 +10:00
claude[bot]andClaude 89a5d03817 docs: add eu-central-2 to Edge Functions regional invocation page (#48721)
<!-- ccr-slack-attribution -->
_Requested by **Kalleby Santos** · [Slack
thread](https://supabase.slack.com/archives/C02KMRX22NR/p1785871243937099?thread_ts=1785871243.937099&cid=C02KMRX22NR)_

## 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 — one-line content fix.

## What is the current behavior?

The [Regional
Invocations](https://supabase.com/docs/guides/functions/regional-invocation)
page's "Available regions" section lists every Edge Functions region
**except `eu-central-2`** (AWS Europe, Zurich). The region has been live
in production for a while, but it was never added to the docs. A user
reading this page to pick a region for `x-region` / `FunctionRegion` had
no way to know Zurich was an option — the page reads as an exhaustive
list, so the omission actively implies the region doesn't exist.

Reported by Kalleby Santos (Edge Functions team).

Linear: [FUNC-761 — Add eu-central-2 to regional invocation docs
page](https://linear.app/supabase/issue/FUNC-761/add-eu-central-2-to-regional-invocation-docs-page)

## What is the new behavior?

**Before:** the Europe group listed `eu-central-1`, `eu-west-1`,
`eu-west-2`, `eu-west-3`.

**After:** `eu-central-2` (Zurich) is listed alongside the others, so
the page reflects the regions Edge Functions actually serves.

### How

One line added to
`apps/docs/content/guides/functions/regional-invocation.mdx`, in the
**Europe** group directly after `eu-central-1`, following the list's
existing sort-by-region-code order and the surrounding `` `code` (Short
location) `` label style:

```diff
 **Europe:**

 - `eu-central-1` (Frankfurt)
+- `eu-central-2` (Zurich)
 - `eu-west-1` (Ireland)
 - `eu-west-2` (London)
 - `eu-west-3` (Paris)
```

No other files changed. This page's region list is hand-maintained in
the MDX and is deliberately narrower than the project-creation region
list in `packages/shared-data/regions.ts` (which also includes
`us-east-2` and `eu-north-1`), so no shared constant needed updating and
no other product's region list was touched.

## Additional context

**Verification that `eu-central-2` is a real Edge Functions invocation
region** — confirmed in three independent places:

1. `supabase/platform` → `pulumi/edge-runtime/Pulumi.prod.yaml:533` —
`region: eu-central-2`, with `enabled: true` at `:531`. A fully
provisioned prod region (360–540 always-on tasks), not a placeholder.
Branch `develop`, HEAD `1f44167768f951c0c794313006bc2c9f9758c344`.
2. `supabase/platform` →
`pulumi/edge-runtime-next/stack-config/Pulumi.prod.aws.euc2.yaml:6` —
`aws:region: eu-central-2` under the `Edge-Functions/K8s-Prod`
environment, tagged `product: functions`.
3. `supabase/api-gateway` → `customer-router/wrangler.toml` —
`eu-central-2` is present in the `EDGE_FUNCTIONS_REGIONAL_ORIGINS` map
(`eu-central-2 = "https://eu-central-2.edge-runtime.supabase.green"`).
This is the table that resolves the `x-region` header, so regional
invocation into Zurich is genuinely routable — not just deployed.

**For a reviewer to confirm separately (intentionally not in this
diff):** production infra has 16 enabled Edge Functions regions, so
`us-east-2` (Ohio, `pulumi/edge-runtime/Pulumi.prod.yaml:507`, `enabled:
true`) is *also* missing from this page. It's excluded here because we
don't yet know whether that omission is deliberate; it's being confirmed
with the team and can be a follow-up.

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

https://claude.ai/code/session_017UJhSvVpPfYNaHZ8Y1x3sy

---
_Generated by [Claude
Code](https://claude.ai/code/session_017UJhSvVpPfYNaHZ8Y1x3sy)_

Co-authored-by: Claude <noreply@anthropic.com>
2026-08-04 22:09:37 +01:00
Charis 2165746784 fix(studio): keep SQL editor source menu open when switching sources (#48715)
## 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

## What is the current behavior?

Selecting Database/Logs in the SQL Editor's query-source dropdown closes
the menu (Radix's default select behavior), so switching to Logs gives
no visible indication that a Time range control just became available
until the dropdown is reopened.

## What is the new behavior?

Selecting a source keeps the dropdown open, so the newly-available
source-specific controls (e.g. Time range for Logs) are immediately
visible.

## Additional context

Fixes FE-4036

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

## Summary by CodeRabbit

* **Bug Fixes**
* Improved source switching in the SQL editor so the selection menu
remains open while changing between database and logs sources.
  * Ensured source-specific controls update correctly after switching.

* **Tests**
* Added coverage for source selection, menu behavior, and
source-specific control updates.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 20:23:12 +00:00
Andrey A. 549db119c4 chore(self-hosted): update 2026-08-04 - 0.7.2 (#48707) self-hosted/v0.7.2 2026-08-04 22:06:15 +02:00
Charis 5986fecc89 fix(studio): use table + card component in log retention upgrade prompt (#48713)
## Summary
- Refactor the SQL Editor / Logs "Log retention" upgrade-prompt dialog
to use the design system's `Card` + `Table` components instead of a
custom flexbox-div table, matching the pattern in
`apps/design-system/registry/default/example/table-demo.tsx`
- No behavior or data change

Fixes FE-4034

Non-blocking review nit from #48452 (comment:
https://github.com/supabase/supabase/pull/48452#issuecomment-5128918096)

## Test plan
- [x] `pnpm --filter studio typecheck` passes
- [x] `pnpm --filter studio run lint:ratchet` passes (no new warnings)
- [x] Prettier check passes

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

## Summary by CodeRabbit

* **Style**
* Updated the upgrade prompt with a more consistent card and table
layout.
  * Preserved existing plan names and log retention details.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 16:01:14 -04:00
Andrey A. a8a0a66853 fix(self-hosted): avoid overwriting update.sh (#48690) 2026-08-04 21:56:44 +02:00
Charis b9053794a0 fix(studio): add tooltip explaining why Prettify SQL is disabled (#48712)
## 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

## What is the current behavior?

In the SQL Editor, the Prettify SQL action (both the "More actions"
dropdown menu item and the toolbar button) is disabled for logs
snippets, but gives no indication why.

## What is the new behavior?

The disabled Prettify menu item now uses `DropdownMenuItemTooltip` and
the disabled Prettify toolbar button uses `ButtonTooltip`, both showing
"Can only prettify SQL queries" while disabled. Addresses review
feedback from #48452 (Linear FE-4038).

## Additional context

Resolves FE-4038

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

## Summary by CodeRabbit

* **Improvements**
  * Updated SQL editor tooltips with clearer, consistent messaging.
* Log-source users now see an explanation when SQL formatting is
unavailable.
  * Regular users continue to see the SQL prettify keyboard shortcut.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 18:07:08 +00:00
Guilherme SouzaandClaude Sonnet 5 0bf5ca584d docs: Update Swift/Kotlin postgrest specs and Swift Web3 sign-in (#48291)
## Summary

Cross-referenced recent commits across all 6 SDK repos (supabase-js,
supabase-flutter, supabase-py, supabase-swift, supabase-kt,
supabase-csharp) against `apps/docs/spec/` and
`apps/docs/content/guides/`. Most recent commits were
CI/chore/release/patch-fix noise; the following genuine feature gaps
were found and fixed.

## Changes analyzed

- **supabase-swift**: `dryRun()`, `notIn()`, `maybeSingle()` (PR
supabase/supabase-swift#1114) and `signInWithWeb3()` (PR
supabase/supabase-swift#1138)
- **supabase-kt**: `dryRun()`, `notIn()`, `maybeSingle()` (PR
supabase-community/supabase-kt#1365)

## Documentation updates

- `apps/docs/spec/supabase_swift_v2.yml` — added `notin`, `dry-run`,
`maybe-single` filter/modifier entries and a `sign-in-with-web3` auth
entry (Web3/Ethereum/Solana sign-in was already documented for JS and
Dart, missing for Swift)
- `apps/docs/spec/supabase_kt_v3.yml` — added `notin`, `maybe-single`,
`dry-run` entries
- `apps/docs/spec/common-client-libs-sections.json` — registered nav
entries for the two brand-new cross-SDK ids (`notin`, `dry-run`);
`sign-in-with-web3` was already registered

## Explicitly out of scope

- **Kotlin `custom_claims_allowlist`** (added to
`CustomOAuthProvider`/`CustomProviderBuilder` in supabase-kt) — skipped.
The Kotlin spec has no admin custom-OAuth-provider section documented at
all yet (create/list/get/update/delete), so adding just this one field
would require authoring a whole new, currently-undocumented admin API
section from scratch — too large/risky to guess correctly in this pass.
Flagging for a follow-up.
- Dart's recently-shipped storage features (vector buckets,
analytics/Iceberg buckets, `purgeCache`, `downloadStream`,
`listPaginated`) were checked and are already fully documented in
`supabase_dart_v2.yml`.
- Swift/Kotlin lacking Storage vector-bucket/analytics-bucket docs — out
of scope, those SDKs didn't ship that feature in this commit range
(Dart-only so far).

## Test plan

- [x] `python3 -c "import yaml; yaml.safe_load(open(...))"` — both
edited YAML specs parse cleanly
- [x] `python3 -c "import json; json.load(open(...))"` — nav JSON parses
cleanly
- [ ] Visual check of the rendered reference pages for
`notIn`/`dryRun`/`maybeSingle`/`signInWithWeb3` on Swift and Kotlin
reference docs

---

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

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

## Summary by CodeRabbit

* **Documentation**
* Added documentation for `notIn()` query filtering across supported
Kotlin and Swift query operations.
* Documented `maybeSingle()` for safely handling zero-or-one query
results without raising a single-row error.
* Added guidance for `dryRun()` mutations, including rollback behavior
and returned results.
* Added Swift authentication documentation for Web3 sign-in with
Ethereum and Solana credentials.

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

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 14:37:14 -03:00
Charis 89010c1649 fix(studio): show selected custom time range in SQL editor time range menu (#48709)
## What

Display the actual selected custom date range in the Time Range
dropdown's secondary text, instead of the static "Custom range" label.
The range is formatted as `DD MMM, HH:mm - DD MMM, HH:mm` to match the
existing format in the Logs Explorer's date-picker trigger button,
ensuring visual consistency across the Logs UI.

Fixes FE-4035

## Test plan

- [x] Typecheck passes: `pnpm typecheck`
- [x] Manually verify: Open SQL Editor with `sqlEditorLogsSource` flag
enabled, open the Time Range dropdown menu, select a Custom range, and
confirm the dropdown's secondary text now displays the selected date
range instead of "Custom range"

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

## Summary by CodeRabbit

* **New Features**
* Custom time ranges now display formatted start and end timestamps for
clearer time selection.
  * Preset time ranges continue to show their existing helper text.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 13:26:02 -04:00
Filipe CabaçoandAli Waseem 4a9b5a538b chore: update pg changes to add python to the code blocks (#47793)
## 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?

Adds code blocks for Python and new pg changes features

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

## Summary by CodeRabbit

* **Documentation**
* Updated Python code examples for Realtime Postgres Changes to use
cleaner, working subscription syntax.
* Fixed a missing comma in a multi-change example so the sample code is
valid.
  * Added a missing Python example for selecting specific columns.

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

Co-authored-by: Ali Waseem <waseema393@gmail.com>
2026-08-04 10:26:26 -06:00
Charis 0791b04eb8 feat(sql-editor): roll out manual saving by default (#48706)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Feature — progresses the SQL Editor manual saving rollout, and removes a
fully rolled out feature flag.

## What is the current behavior?

Manual saving (snippets save only on an explicit Save / Cmd+S rather
than autosaving every edit) is opt-in. It requires both the
`sqlEditorManualSave` ConfigCat flag and the user turning on the
"Disable snippet auto-saving" feature preview themselves. That flag is
now fully rolled out.

## What is the new behavior?

- `sqlEditorManualSave` is removed, so the feature preview is listed for
everyone. (Delete the flag in ConfigCat after a few months.)
- New `sqlEditorManualSaveForced` flag progresses the rollout. It forces
manual saving on regardless of what the user stored previously,
including an explicit opt-out, via a new `isForced` field on
`FeaturePreview` that `initializeFlags` resolves ahead of the
localStorage lookup — so the feature preview modal reflects the forced
state too, not just the save behavior. Turning the flag off reverts
everyone who never opted in, so it remains a working kill switch.
- Users the rollout switches over get a one-time dialog on their first
SQL Editor route, explaining that snippets no longer autosave. Dismissal
persists in `sql-editor-manual-save-notice-dismissed` (allowlisted, so
it survives sign-out).
- Users who opted into the preview themselves never see the dialog — it
records their dismissal up front instead, since the notice needs to
outlive the feature preview and once the preview is retired there's no
stored opt-in left to recognize them by.
- The preview keeps its switch so users who lose their local storage can
opt in early, but once the rollout reaches them the "Disable feature"
button is disabled with a tooltip explaining why.

### To test

Turn on `sqlEditorManualSaveForced` on via the dev toolbar.

- No `supabase-ui-sql-editor-manual-save` and no dismissal key → dialog
appears on `/project/<ref>/sql`, toolbar shows the Save button. Dismiss,
reload → no dialog.
- `supabase-ui-sql-editor-manual-save` set to `false` (previously opted
out) → still forced onto manual saving, and still gets the dialog.
- `supabase-ui-sql-editor-manual-save` set to `true` → no dialog, and
the dismissal key is written automatically.
- Flag off, no opt-in → autosave, no dialog, and the "Disable autosave"
power-off button still opens the preview modal.
- Preview modal while forced → "Disable feature" is disabled with a
tooltip; another preview (e.g. Column-level privileges) still disables
normally.

## Additional context
2026-08-04 12:16:18 -04:00
Miranda LimonczenkoandClaude Sonnet 5 e7d9c88cbc fix(docs): resolve remaining heading-order issues found in Pass 2 diagnostic (#48664)
## Problem

After merging [#48456](https://github.com/supabase/supabase/pull/48456)
(shared components) and
[#48459](https://github.com/supabase/supabase/pull/48459) (per-page
content fixes), a follow-up diagnostic pass found 22 remaining
heading-order violations, logged as Pass 2 in the [triage
report](https://app.notion.com/p/supabase/Playwright-E2E-Triage-Reports-3ab5004b775f81e3bc60d058fa5a02c1).
None of them were caught by the earlier fixes because they came from
places that scan didn't check: shared partials, raw HTML heading tags
written directly in MDX, and a couple of shared/interactive components
rendering hardcoded heading levels.

## Solution

- `_partials/social_provider_setup.mdx`: `#### Local development` →
`###`, matching the `##` that always precedes it on all 14 social-login
pages.
- `guides/database/functions.mdx` and
`guides/integrations/vercel-marketplace.mdx`: replaced raw `<h4>`/`<h5>`
tags with correctly-nested real headings (`### Planets`/`### People`;
`#### Deploy a Next.js app...`) — no styling workarounds needed since
they nest naturally one level below their parent section.
- `auth/quickstarts/{nextjs,react-native,react,astrojs}.mdx`: these 4
pages had no heading at all before the embedded
`_partials/api_settings.mdx` partial's own `### Get API details`
heading, so added a `## Quickstart` heading above the walkthrough to
give it a valid parent.
- `packages/ui`'s `Accordion` component: Radix's
`AccordionPrimitive.Header` renders as an unconditional `<h3>`
regardless of where the accordion is used. That's shared across Studio,
www, and design-system, not just docs, and surfaced on docs'
vendor-agnostic telemetry page. Now rendered via `asChild` onto a plain
`div` instead, since a generic accordion has no way to know what heading
level (if any) is valid in a given page.
- SQL-to-REST translator tool (`/docs/guides/api/sql-to-rest`): its
`Assumptions`/`FAQs` section labels were hardcoded `<h3>` with no `h2`
anywhere on the page. Converted to styled spans rather than promoting to
a real `<h2>`, because real h1/h2/h3 tags in this codebase force a prose
font-size that utility classes can't override — promoting the tag would
have visibly changed its size.
- `RealtimeLimitsEstimator` (embedded on both `postgres-changes` and
`benchmarks`): its 3 section headings were hardcoded `<h4>`, but the two
embedding pages need different levels (h3 vs h4) for that spot to be
valid — no single correct heading level. Converted to styled spans, same
pattern used throughout this project for components embedded at varying
heading depths.

## Manual testing

1. Check out this branch and run `pnpm dev:docs`.
2. Visit `/docs/guides/auth/social-login/auth-github` (or any other
provider page) and confirm the "Local development" callout under "Find
your callback URL" still looks and reads the same.
3. Visit `/docs/guides/database/functions` → "Returning data sets" tab
and confirm the "Planets" / "People" table captions still look the same.
4. Visit `/docs/guides/integrations/vercel-marketplace` → "Quickstart" →
"Via template" and confirm the CTA card title still looks the same.
5. Visit `/docs/guides/auth/quickstarts/nextjs` (or
react-native/react/astrojs) and confirm a "Quickstart" heading now
appears above the walkthrough, and "Get API details" still renders
correctly further down.
6. Run `pnpm dev:design-system` and open
`/design-system/docs/components/accordion` — expand/collapse an item and
confirm it still animates and looks identical; inspect the DOM and
confirm the trigger's wrapper is a `div`, not an `h3`.
7. Visit `/docs/guides/api/sql-to-rest`, translate any query, and
confirm the "Assumptions"/"FAQs" section labels still look the same.
8. Visit `/docs/guides/realtime/postgres-changes` and
`/docs/guides/realtime/benchmarks`, scroll to the connection-limits
calculator, and confirm its section labels still look the same on both
pages.
9. (Optional, for a full re-check) Run `pnpm e2e:docs:a11y --all`
against a deployed preview of this branch — only `/docs/guides/cli`
(pre-existing 404, unrelated to headings) should fail; every other page
should pass.

Verified with a full Playwright run against a real preview deployment:
**756 passed, 1 failed** (`/docs/guides/cli`, the pre-existing unrelated
404). Zero heading-order violations remain.

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

- **Documentation**
- Added clearly labeled Quickstart sections to Astro, Next.js, React
Native, and React authentication guides.
- Improved heading hierarchy and formatting across social provider
setup, database functions, and deployment documentation.
- Updated estimator and SQL-to-REST section presentation for more
consistent content structure.

- **Bug Fixes**
- Improved accordion trigger layout while preserving existing behavior,
styling, accessibility, and icon display.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com>
2026-08-04 09:00:29 -07:00
Alaister YoungandAlaister Young 0e71933ce3 [FE-4070] fix(studio): allow adding expressions to RLS policies (#48700)
A table RLS policy created via SQL without a `USING`/`WITH CHECK` clause
stores `null` for that field, and the policy editor's payload diff
skipped `null` fields entirely — so adding an expression later through
the dashboard closed the panel as if saved but persisted nothing. This
fixes the diff so those policies are editable, and cleans up adjacent
issues in the same code path.

**Changed:**
- Extracted the update-payload diff from `PolicyEditorPanel`'s submit
handler into a pure `generateUpdatePolicyPayload()` in
`PolicyEditorPanel.utils.ts`. A stored `null` definition/check now
counts as empty, so typing an expression into a previously empty editor
produces a payload field. The diff is branched by command so INSERT
policies only ever emit `WITH CHECK`, never an invalid `USING` clause.
- The required-expression validation ("Please provide a SQL
expression…") now applies only when creating a policy. When updating, a
`null` clause is valid, so rename-only and role-only saves on such
policies work; the update path instead rejects attempts to clear an
existing `USING`/`WITH CHECK` expression with an inline error (`ALTER
POLICY` can only replace an expression, not remove it).
- Saving with no changes now closes the panel without a round trip —
previously a null-vs-undefined comparison injected a
present-but-`undefined` payload key, which sent a literal `BEGIN;
COMMIT;` to the user's database.
- Fixed the unsaved-changes check comparing the form's lowercase command
against `'INSERT'` (never matched), which made closing an untouched
INSERT policy editor prompt about unsaved changes. It now compares
`selectedPolicy.command`.

**Added:**
- `PolicyEditorPanel.utils.test.ts` — 11 unit tests covering null→value
transitions for definition and check, INSERT command mapping,
value→value updates, no-op saves, and empty-value handling.

## To test

- Run in the SQL editor: `create policy "p1" on <table> for delete to
authenticated;` (no `USING` clause), then edit `p1` in Database →
Policies, add a `USING` expression, and save. Confirm via `select
pg_get_expr(polqual, polrelid) from pg_policy where polname = 'p1'` that
the expression persisted.
- Same for INSERT: `create policy "p2" on <table> for insert to
authenticated;`, then add a `WITH CHECK` expression via the editor and
confirm `polwithcheck` is set (and `polqual` stays null).
- On `p1` (still without a `USING` expression? recreate it if you added
one), rename the policy without touching the expression editors — the
rename should save successfully.
- Edit a policy that already has a `USING` expression, change it, and
confirm the new expression persists (regression).
- Open a policy and save without changing anything — the panel should
close with no `policy-update` network request.
- On a policy with an existing `USING` (or `WITH CHECK`) expression,
clear that editor and save — an inline error should appear and no
request should fire.
- Open an INSERT policy that has a `WITH CHECK` expression, change
nothing, and close the panel — it should close without an "Unsaved
changes" prompt.

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

## Summary by CodeRabbit

* **Bug Fixes**
  * Policy updates now submit only changed fields.
* Improved handling of policy expressions, including INSERT-specific
mappings.
* Prevented removal of existing `USING` or `WITH CHECK` expressions
where unsupported.
  * Empty expressions are omitted from update requests.
  * Updates are canceled when no changes are detected.

* **Tests**
* Added coverage for unchanged policies, expression updates, name and
role changes, and INSERT policy behavior.

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

---------

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
2026-08-04 23:16:49 +08:00
Hoon ceace2e90b fix(studio): account for SQL result column headers (#48676)
## 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

## What is the current behavior?

Fixes #48672.

The SQL Editor results grid calculates each column's initial width from
cell values only. When a long final column contains a short value such
as `NULL`, scrolling to the end of a wide result set reveals a truncated
header even though the full column name is needed to identify the
result.

### Before

<img width="760" height="370" alt="Before: final SQL result column
header is truncated"
src="https://github.com/user-attachments/assets/f73b7540-fc45-4ddf-91b6-996afe41807e"
/>

## What is the new behavior?

The initial width now accounts for both the column name and its cell
values while preserving the existing minimum and maximum width
constraints.

### After

<img width="760" height="370" alt="After: full SQL result column header
is visible"
src="https://github.com/user-attachments/assets/b289ab86-4277-46fc-ae9a-35c3eac5442f"
/>

## Additional context

The width calculation was extracted into a utility and covered for:

- short headers and values
- headers longer than their values
- values longer than their headers
- empty result sets
- maximum-width capping

Verification:

- `pnpm --filter studio exec vitest --run
components/interfaces/SQLEditor/UtilityPanel/Results.utils.test.ts
tests/components/SQLEditor/Results.test.tsx`
- `pnpm --filter studio run typecheck`
- `pnpm --filter studio run lint:ratchet`
- `pnpm run test:prettier`
- `SKIP_ASSET_UPLOAD=1 pnpm run build:studio`


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

- **Improvements**
- SQL query results now automatically size columns based on their
headers and content.
- Column widths remain within practical minimum and maximum limits for
improved readability and usability.

- **Tests**
- Added coverage for minimum and maximum widths, content-based sizing,
and empty result sets.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 14:31:59 +00:00
Filipe Cabaço 469da990b6 chore: Add Filipe to humans (#48698) 2026-08-04 14:28:15 +01:00
Tobias Pfeiffer 9be46e674a Add me to humans.txt! (#48695)
It's a me.

## 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?

adds me to the humans.txt

## What is the current behavior?

Tobi isn't in the list.

## What is the new behavior?

Tobi is in the list.

## Additional context

<img width="4608" height="3456" alt="IMG_20210220_105358_Bokeh"
src="https://github.com/user-attachments/assets/989aadfd-e56b-4227-9adb-ae88b22af866"
/>


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

## Summary by CodeRabbit

* **Documentation**
  * Added Tobias Pfeiffer to the remote team member list.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 15:02:43 +02:00
Charis 21511042a3 feat(studio): assistant logs context and reports guard (#48514)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Feature — final PR (9/9) of the SQL editor logs-source stack.

**Base branch:** `charislam/sql-editor-inline-ai-clickhouse-dialect` (PR
8). Nothing here is user-visible: entry points stay behind
`sqlEditorLogsSource` + `otelLegacyLogs`, and flag rollout happens after
the whole stack merges.

## What is the current behavior?

- The Assistant has no idea a SQL editor snippet targets the logs
backend. Ask it about a logs snippet and it answers in Postgres, because
the attached query is fenced as ` ```sql ` and nothing tells the model
otherwise.
- Because the `sql` fence is what `MessageMarkdown` treats as runnable
Postgres, an attached ClickHouse query is rendered with a
Run-against-Postgres affordance and branded with `untrustedSql`.
- "Debug with Assistant" on a failed logs query produces a dialect-less
prompt, so both the in-app assistant and the copyable version get
debugged as Postgres.
- A report referencing a `log_sql` snippet runs its ClickHouse SQL
against the user's Postgres database and surfaces the resulting error.

## What is the new behavior?

**Assistant panel.** The "Current Query" chip records which backend the
attached query targets. That reaches the model two ways: each attachment
is fenced with its own dialect (` ```clickhouse ` vs ` ```sql `), and a
`containsLogsSnippets` flag rides on the user message as AI SDK
`metadata`. The server reads the flag off the conversation and prepends
the ClickHouse dialect rules plus the logs schema reference as a
non-cached context message.

Two design points worth calling out in review:

- The flag lives on the **message**, not the request body, so Retry and
the tool-approval continuation reproduce the context a message was
originally asked in — neither of those passes a per-call body.
- It's derived from **what's actually attached**, so detaching the chip
drops the claim rather than leaving the two able to disagree.

The `clickhouse` fence also keeps a logs query out of
`MessageMarkdown`'s `sql` branch, so it's no longer offered as runnable
Postgres or branded with `untrustedSql` — a boundary this stack's
distinct brands exist to prevent crossing.

**Debug flow.** `buildDebugChatArgs` attaches its query with a source
for the same reason, and names the dialect in the prompt text so the
copyable version stands on its own outside the app.

**Reports.** A report only stores a snippet id, so whether it queries
the logs backend is only knowable once the content loads. `ReportBlock`
guards on the fetched type and renders a `LogsSnippetReportBlock`
placeholder instead of executing. Double-guarded: no `sql` for a logs
snippet (so it's out of the query key and `queryFn` short-circuits even
on an explicit `refetch`) and `enabled` excludes it.

**Incidental cleanups.** `buildAssistantContextMessages` extracted out
of `generate-assistant-response`; a schema-access sentinel that was
duplicated as a string literal across two files (and compared against)
replaced with one exported constant; `SqlSnippet` deduplicated to a
single declaration; `resolveSnippetSource` / `isLogsSource` shared
instead of re-implemented per surface.

**Tests.** 4 new/extended suites. Notable cases pinned: a message with
no metadata must validate (`safeValidateUIMessages` applies
`metadataSchema` to *every* message, so a required schema would 400
every existing conversation); only *user* messages count, so a model
reply can't talk the server into a different dialect; a mixed-attachment
message is flagged without overclaiming a single source; and
`ReportBlock` registers no pg-meta mock for the logs cases, so an
unhandled request failing the test *is* the assertion that logs SQL
never reaches Postgres.

Verified: `pnpm typecheck`, `lint:ratchet` (no regression), Prettier,
and the full Studio suite (459 files / 4969 tests).

## Additional context

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

## Summary by CodeRabbit

- **New Features**
- Added support for recognizing log snippets in reports, with clear
guidance to open them in the SQL editor or remove them.
- AI Assistant now understands log snippets and provides
ClickHouse-specific context, formatting, and troubleshooting guidance.
- Snippets retain their source information when shared with the AI
Assistant.

- **Bug Fixes**
- Prevented unsupported log snippets from being executed as regular
database queries.
  - Improved source detection when opening snippets directly from links.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 09:02:40 -04:00
Charis 8b38e0d1ed feat(studio): ClickHouse dialect for logs snippet AI + rewrite to ClickHouse (#48501)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Feature, plus a refactor of the shared logs-rewrite flow.

PR 8 of the SQL editor query-source series. Stacked on #48457 — review
that one first, and merge this after it.

## What is the current behavior?

A `log_sql` snippet runs against the ClickHouse-backed analytics
endpoint, but the SQL editor's AI still writes Postgres: inline edits
get Postgres system prompts, and the result is run through
`sql-formatter`, which mangles ClickHouse backticks and `log_attributes`
map lookups.

Legacy Logs Explorer saved queries open in the editor as `log_sql`
snippets. Those are BigQuery dialect and error against the ClickHouse
endpoint the editor runs them on, with no in-editor way out — only the
Logs Explorer offered a rewrite.

The completion route was also asymmetric. It assembled a
schema/code/instruction message for Postgres but forwarded `prompt`
verbatim for ClickHouse, so a client wanting ClickHouse had to
hand-build the equivalent string.

## What is the new behavior?

**Inline AI speaks ClickHouse for logs snippets.** `sqlSourceToDialect`
maps a snippet's source to `postgres`/`clickhouse` and
`buildCompletionRequestBody` threads it through. For ClickHouse,
`useSqlEditorAi` strips code fences from the response and skips
`formatSql`. Execution and dialect both follow the snippet type, so a
snippet's valid dialect never flips.

**Rewrite to ClickHouse in the editor.** A banner offers the rewrite for
a logs snippet whose text trips `looksLikeLegacyLogsQuery`, and proposes
the result through the editor's existing AI diff view rather than
replacing the snippet, so it's accepted or discarded like any other AI
edit. Gated on `otelLegacyLogs`: on a non-migrated org the BigQuery text
is still correct, so rewriting it would break a working query.

The offer is a state machine (`offered` / `rewriting` / `failed` /
`noRewriteNeeded` / `dismissed`) with a declarative table of valid
transitions, so the states are mutually exclusive by construction and
dismissal is terminal. A failure keeps its message and offers a retry; a
response identical to the input is reported rather than opening an empty
diff.

**One place assembles completion prompts.** The route now uses a single
template for both dialects, branching only the schema section and — for
`intent: 'rewrite'` — the instruction. `lib/ai/clickhouse-logs.ts` is
the single home for ClickHouse-logs prompt content, replacing two
independently maintained descriptions of the same table. Clients carry
no prompt text.

**The rewrite flow is shared with the Logs Explorer.** Both surfaces
previously hand-rolled the same sequence and had drifted: only one
detected a no-op rewrite, they sourced `log_attributes` keys
differently, and the Explorer formatted errors with an `as Error` cast.
Both now use `useLegacyLogsRewrite` and the same state-driven banner, so
the Explorer picks up no-op detection and typed error extraction.

**Attribute keys are fetched on submit, not while typing.** The detected
source would otherwise feed a reactive query key, making every edit that
changed it cost another network call. `useLogsAttributeKeys` is
imperative and goes through `queryClient.fetchQuery`, so a source
already cached — including by the Explorer header and query panel, which
subscribe reactively — is reused. This also closes a gap where inline
edits never received keys at all, unlike full rewrites.

`getErrorMessage` gains an optional typed fallback and no longer
stringifies a bare object into `'[object Object]'`; every existing
caller already hand-rolled a fallback, except `QueueSettings`, which
interpolated the raw result and now passes one.

Nothing here is user-visible until the `sqlEditorLogsSource` flag is
enabled.

Tests: dialect selection and request-body shape, the ClickHouse prompt
content (including that the schema section does not restate the dialect
rules), the reducer's valid and invalid transitions,
`shouldOfferLegacyLogsRewrite`, on-submit key discovery with cache
reuse, and `getErrorMessage`.

## Additional context

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

## Summary by CodeRabbit

* **New Features**
* Added an Assistant banner to help rewrite legacy BigQuery-style logs
queries into ClickHouse SQL.
* SQL assistance now adapts to the selected query type, including
relevant log attribute context.
* Rewrite suggestions can be reviewed as editor diffs before being
applied.

* **Bug Fixes**
* Improved rewrite failure handling, retry options, dismissal behavior,
and “no rewrite needed” messaging.
* Error notifications now provide a clearer fallback message when
details are unavailable.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 09:02:40 -04:00
Charis b3c5c9fc04 feat(studio): logs snippets in SQL editor nav, search, and tabs (#48457)
## What

PR 7 of the SQL-editor query-source (Database vs Logs) stack. Surfaces
`log_sql` snippets as a distinct query source across the SQL editor
sidebar. Stacked on **`charislam/toolbar-ui-creation-flow`** (PR 6 —
toolbar UI + creation flow); review/merge that first.

Nothing is user-visible until the flags roll out — every entry point
requires **both** `sqlEditorLogsSource` **and** `otelLegacyLogs`.

## Changes

- **Nav** — a flag-gated **Logs** section (`LogsSnippetsSection`) backed
by its own single-type `log_sql` query. The active snippet is injected
only into the section it belongs to, via a shared
`withActiveSnippet(snippets, active, belongsPredicate)` helper (also
DRYs the private/favorites/shared injections).
- **Search** (`SearchList`) — a **Logs** result group with a shared,
extracted `SqlSnippetTree`; the "N results found" count now sums
database + logs, with loading/empty states covering both queries.
- **Tabs** — an immutable `sqlSource` field on tab/recent-item metadata
(set at tab creation, lazily backfilled once the snippet loads via
`useEffectEvent`), and a distinct `ScrollText` icon via a shared
`LogsSnippetIcon`. Tab cleanup treats `log_sql` tabs as live and only
prunes them when logs data is authoritative (`canPruneLogsTabs`), so a
disabled/erroring logs query never wrongly deletes logs tabs or blocks
database-tab cleanup.
- **Data layer** — `useSqlSnippetsQuery` gains an optional `type` param
so logs reuse the same `SnippetWithContent` shape as the other sections
(no casts).

## Tests

- `state/tabs.test.ts` — `sqlSource` backfill + creation-time
carry-through.
- `components/layouts/Tabs/Tabs.utils.test.tsx` — cleanup prunes stale
database/logs snippets, keeps live ones, and preserves logs tabs when
logs data isn't authoritative.

## Verification

- `pnpm --filter studio typecheck` ✓
- `pnpm --filter studio run lint:ratchet` ✓
- `pnpm test:studio` (affected suites) ✓

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

* **New Features**
* Added a collapsible Logs section to the SQL editor sidebar for
browsing, sorting, selecting, renaming, and deleting log queries.
* Expanded SQL search with separate, paginated results for database and
log queries.
* Added dedicated log-query icons across navigation, tabs, previews, and
recent items.
* **Bug Fixes**
* Improved tab and recent-item cleanup while preserving active log
queries and accurate source metadata.
* **Tests**
* Added coverage for log tab cleanup and SQL source metadata
synchronization.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 09:02:39 -04:00
Andrey A. de5d3cd115 docs(self-hosted): update manual setup instructions (#48692) 2026-08-04 07:02:30 -06:00
Guilherme SouzaandClaude Sonnet 4.6 31d1a639c0 docs: Update SDK references from recent releases (#47830)
## Summary

Updates SDK reference docs and the client-side tracing guide based on
recent releases across all six Supabase SDKs.

## SDKs analyzed

| SDK | Repo | Latest commit | Latest tag |
|-----|------|--------------|------------|
| js | supabase/supabase-js | `e4e8864` | v3.0.0-next.29 |
| dart | supabase/supabase-flutter | `c3e3602` |
yet_another_json_isolate-v2.1.1 |
| py | supabase/supabase-py | `6570638` | v3.0.0a1 |
| swift | supabase/supabase-swift | `ebef170` | v2.51.0 |
| kt | supabase-community/supabase-kt | `e23df20` | 3.7.0-beta-1 |
| csharp | supabase-community/supabase-csharp | `3fad62f` | v1.1.2 |

## Documentation changes

### `apps/docs/spec/supabase_dart_v2.yml`

- **OAuth Server API**
([supabase-flutter#1561](https://github.com/supabase/supabase-flutter/pull/1561)):
Added `oauth-server-api` group stub and `listGrants()` / `revokeGrant()`
method entries, matching the existing `common-client-libs-sections.json`
nav IDs.
- **`listBuckets()` options**
([supabase-flutter#1557](https://github.com/supabase/supabase-flutter/pull/1557)):
Added example showing `ListBucketsOptions` with `search`, `limit`,
`offset`, `sortColumn`, and `sortOrder`.

### `apps/docs/spec/supabase_py_v2.yml`

- **`on_postgres_changes` `select` param**
([supabase-py#1524](https://github.com/supabase/supabase-py/pull/1524)):
Added `listening-to-selected-columns` example for the new `select=["id",
"name"]` parameter.
- **Expanded filter operators**
([supabase-py#1524](https://github.com/supabase/supabase-py/pull/1524)):
Updated `listening-to-row-level-changes` note to list all supported
operators (`eq`, `neq`, `lt`, `lte`, `gt`, `gte`, `in`, `like`, `ilike`,
`is`, `match`, `imatch`, `isdistinct`) plus `not.` prefix and comma-AND.

### `apps/docs/spec/supabase_swift_v2.yml`

- **OpenTelemetry tracing setup**
([supabase-swift#1101](https://github.com/supabase/supabase-swift/pull/1101)):
Added `initialize-client-with-opentelemetry` example under the
`initializing` section documenting the `OpenTelemetry` SwiftPM package
trait, provider wiring, and known `_invokeWithStreamedResponse`
limitation.

### `apps/docs/content/guides/telemetry/client-side-tracing.mdx`

- **Merged Swift and Dart tracing docs** into the existing JS guide
([supabase-swift#1101](https://github.com/supabase/supabase-swift/pull/1101),
[supabase-flutter#1564](https://github.com/supabase/supabase-flutter/pull/1564)).
- **Converted to tabbed layout** (`<Tabs queryGroup="language">`) with
JavaScript / Swift / Dart tabs, matching the pattern used across other
multi-SDK guides.
- Updated title to "Client-side tracing" and nav label accordingly.

## SDKs with no doc-worthy changes

- **js**: Bug fixes only (auth session clearing, realtime heartbeat
suppression) — no new API surface.
- **kt**: PKCE for `resend()` — behavioral enhancement, no new spec
entry needed.
- **csharp**: Chore/compliance/maintenance only.

---

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

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

* **Documentation**
* Added Dart “OAuth Server” API docs for listing OAuth grants and
revoking grants (including signed-in context and the `clientId`
parameter), with examples.
* Extended Dart Storage docs with a new `listBuckets` example using
`ListBucketsOptions` for filtering, pagination, and sorting.
* Updated Python Realtime docs with generalized PostgREST-style row
filter operators and added examples for listening to selected columns.
* Reworked the “Client-side tracing” guide across JS, Swift, and Dart,
including expanded configuration and troubleshooting (trace propagation
and `traceparent` details).
  * Renamed the telemetry navigation label to “Client-side tracing.”
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-08-04 09:58:13 -03:00
Jordi Enric a66dae48f2 fix(studio): restart action for table editor load errors FE-4054 (#48687)
## Problem

When the table editor showed a "Failed to load tables" or "Failed to
load schemas" error (for example, when the underlying database or API
gateway is unhealthy), there was no working way to restart the project
from that error state. Restarting only worked by navigating to Project
Settings.

## Fix

"Failed to load tables" goes through the existing `ErrorMatcher`
classification system, which only showed troubleshooting steps
(including a restart action) for connection-timeout errors. Added an
`ERROR_MAPPINGS` entry for the unclassified/generic API error case,
reusing the existing `RestartDatabaseTroubleshootingSection` and
`RestartProjectDialog` components already used for connection timeouts.

"Failed to load schemas" (in the shared `SchemaSelector`, used across
the table editor and several Database pages) only offered a retry. Added
a "Restart database" button next to it, wired to the same
`RestartProjectDialog`.

## How to test

- In the table editor, trigger a table-load failure that isn't a
connection timeout (any generic API error). The error card should now
show a "Try restarting your project" step with a working restart action.
- Open the schema selector while schemas fail to load (e.g. mock a 503
from the schemas query). A "Restart database" button should appear next
to "Reload schemas" and open the restart confirmation dialog.
-
`apps/studio/components/interfaces/ErrorHandling/ErrorMatcher.test.tsx`
and `apps/studio/components/ui/SchemaSelector.test.tsx` cover both
cases.

FE-4054

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

* **New Features**
  * Added database restart guidance when schema loading fails.
* Added options to reload schemas or restart the database, including a
confirmation prompt.
* Added troubleshooting guidance for unclassified table-loading errors.

* **Bug Fixes**
* Improved error handling by displaying relevant fallback guidance for
unknown errors while preserving classified troubleshooting instructions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 14:36:06 +02:00
Jordi Enric 2ba2c37163 fix(studio): preserve deep-linked date range in Unified Logs FE-4020 (#48685)
## Problem

Clicking a bar in a usage chart (e.g. the Postgres activity chart on the
project dashboard) navigates to Unified Logs with the log_type filter
applied correctly, but the clicked bar's time range is silently dropped:
the page falls back to the default last-hour window. If the actual
matching logs are outside that window, the main list shows "No results
found" even though the sidebar facet count (computed from the correct
deep-linked range) shows a nonzero count.

Root cause: the table's initial `columnFilters` state was seeded only
from the `filter` URL param, never from `date`. A debounced effect syncs
`columnFilters` back into the URL shortly after mount, and for the
`date` field it treats a missing `columnFilters` entry as a cleared
brush, overwriting the deep-linked `date` param with null.

## Fix

Added `buildDefaultColumnFilters` in `UnifiedLogs.filters.ts`, which
seeds a `date` entry into the initial `columnFilters` from `search.date`
when present, alongside the existing filter-param seeding.
`UnifiedLogs.tsx` now uses this helper instead of building
`defaultColumnFilters` inline, so a deep-linked range survives the
debounced round-trip instead of getting nulled out.

## How to test

- On the project dashboard, click a bar in a usage chart (e.g. Postgres
activity) for a time period further back than the last hour.
- Expected result: Unified Logs opens with both the log_type filter and
the clicked bar's date range applied, and the row list matches the
sidebar facet count instead of showing "No results found".
- `UnifiedLogs.filters.test.ts` has unit tests covering the new seeding
behavior.

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

## Summary by CodeRabbit

* **Bug Fixes**
  * Improved log filtering from URL parameters.
  * Preserved valid date ranges when opening deep-linked log views.
* Prevented malformed or duplicate date filters from appearing in the
logs table.

* **Tests**
* Added coverage for valid, missing, malformed, and duplicate date
filter scenarios.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 12:37:59 +02:00
afda8461a3 Adding new joiner Shardul Borhade in human.txt (#48675)
## 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?

update humans.txt

## What is the current behavior?

NA

## What is the new behavior?

NA

## Additional context

Part of Onboarding


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

## Summary by CodeRabbit

* **Documentation**
  * Added Shardul Borhade to the project team listing.

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

Co-authored-by: Shardul Borhade <shardulborhade@Sharduls-MacBook-Pro.local>
Co-authored-by: Ivan Vasilov <vasilov.ivan@gmail.com>
2026-08-04 16:02:50 +05:30
Stephen MorganandJoshen Lim 9dc5c0faf3 feat: privatelink read replica (#48642)
Frontend changes for new privatelink functionality.
The updates to the API are already live, but will be putting the UI
changes behind a feature flag while we do some full end to end testing.

Changes to Integration page:
<img width="744" height="456" alt="image"
src="https://github.com/user-attachments/assets/02026083-4b61-4f36-927b-1bac42cb73e2"
/>

Changes to create associations page:
<img width="859" height="411" alt="image"
src="https://github.com/user-attachments/assets/303b4ec5-3b5a-4eaf-8d22-45e1e63a0705"
/>

Fixes SEC-919

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

- **New Features**
- AWS PrivateLink connections can target the primary database or a read
replica.
- Connection lists and confirmation dialogs now identify the selected
database clearly.
- Replica details include improved status information and a “Manage
replica” link.

- **Bug Fixes**
- Replica removal errors now provide clearer guidance and link to
integration settings when PrivateLink issues occur.

- **Updates**
- Infrastructure diagrams focus on visualization, with replica
management actions moved to dedicated management views.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Joshen Lim <joshenlimek@gmail.com>
2026-08-04 20:47:48 +12:00
Alaister YoungandAlaister Young f877413e05 fix(docs ci): report Docs E2E check on every PR (#48681)
\"Docs E2E\" is a required status check on master, but the workflow only
triggered on docs-related paths. A required check whose workflow never
starts creates no check run at all, so every non-docs PR sat blocked on
\"Expected — waiting for status to be reported\" (e.g. #48677).

The fix relies on the asymmetry in how branch protection treats the two
kinds of skipping: a job skipped via an `if:` condition still reports a
check run (counted as passing), while a workflow filtered out by
`paths:` reports nothing.

**Changed:**
- Dropped the `paths:` filter from the `pull_request` trigger — the
workflow now runs on every PR to master
- Added a `dorny/paths-filter` step (same pattern as
`studio-e2e-test.yml`) carrying the exact path list the trigger used to
have; it runs before checkout using the API, so non-docs PRs skip the
expensive full-history checkout entirely and report green in seconds
- Folded the later \"Detect docs app changes\" step into the same filter
(`docs_app` output)
- Flipped downstream step guards from `skip != 'true'` to `skip ==
'false'` so they stay off when the scope step itself was skipped (its
output is empty then, and empty `!= 'true'` would have run them)

This also fixes draft PRs: the job-level draft condition now produces a
skipped-but-reported check instead of nothing, and `ready_for_review`
triggers a real run.

No behavior change for docs PRs or `workflow_dispatch` runs. The
required-check context (`Docs E2E`) keeps its name.

## To test

- On this PR (docs-related since it edits the workflow): the full suite
should run as before
- On a non-docs PR after merge: \"Docs E2E\" reports green in seconds
instead of hanging as \"Expected\"
- On a draft PR: check reports as skipped, run happens on
ready-for-review

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

## Summary by CodeRabbit

* **Tests**
* Documentation end-to-end checks now report a status for every
qualifying pull request.
* Documentation changes automatically run the relevant browser tests and
upload test reports.
* Pull requests without documentation changes receive a successful
skipped check.
* Preview environment validation now runs only when documentation
changes are detected.

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

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
2026-08-04 14:37:12 +07:00
AnaandAna 3fdaf14b4e chore(www): update Edge Functions customer quote to eXp Realty (#48667)
## 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?

- Updates the customer testimonial on the Edge Functions product page

## What is the current behavior?

The Edge Functions page shows an older customer quote.

## What is the new behavior?

- The quote is from Seth Siegler, Chief Innovation Officer at eXp Realty
- The quote is taken verbatim from the published eXp Realty customer
story
- The attribution links to /customers/exprealty
- Uses the existing seth-siegler.jpg avatar already in the repo; no new
assets

## Additional context

N/A


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

## Summary by CodeRabbit

* **Content Updates**
* Updated the Edge Functions customer testimonial with a new quote,
customer attribution, profile image, role, and link.

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

Co-authored-by: Ana <ana1337x@users.noreply.github.com>
2026-08-04 13:58:46 +07:00
Alaister YoungandAlaister Young 270925b680 feat(studio): add dashboard_auth:sign_in_with_chatgpt enabled feature (#48677)
Adds a `dashboard_auth:sign_in_with_chatgpt` enabled-features flag so
deployments can disable the sign in with ChatGPT button via
`disabled_features`, the same way `dashboard_auth:sign_in_with_github`
works. Previously the button was only gated by the ConfigCat rollout
flag / localStorage opt-in, so white-labeled deployments with custom
auth providers had no way to turn it off.

**Added:**
- `dashboard_auth:sign_in_with_chatgpt` (default `true`) in
`enabled-features.json` + schema
- Tests covering the feature-disabled state

**Changed:**
- `useEnabledIdentityProviders` now gates ChatGPT as `featureEnabled &&
(localStorageOptIn || configCatFlag)` — the feature flag is the static
kill switch, the existing OR'd pair remains the rollout mechanism

## To test

- Sign-in and sign-up pages behave exactly as before by default (flag
defaults to `true`, ConfigCat/localStorage rollout gate unchanged)
- With `dashboard_auth:sign_in_with_chatgpt` in a profile's
`disabled_features`, the ChatGPT button no longer renders even with
`?siwc-enabled=1` or the ConfigCat flag on
- GitHub button gating unaffected

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

## Summary by CodeRabbit

- **New Features**
  - Added a feature flag to control ChatGPT sign-in availability.
- ChatGPT sign-in is now available only when the feature is enabled and
an applicable rollout or opt-in condition is met.

- **Tests**
- Expanded coverage for ChatGPT and GitHub sign-in provider availability
under different feature-flag and rollout conditions.

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

Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com>
2026-08-04 13:58:43 +07:00
Nik RichersandNik 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
Stephen Morgan b17a33fb26 fix: cleanup privatelink documentation (#48466)
Some light copy cleanup for privatelink documentation based on feedback.

Fixes PRODSEC-232

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

* **Documentation**
* Updated PrivateLink guidance with revised architecture, supported
ports, routing, and security group instructions.
* Added labeled connectivity tests for direct PostgreSQL and PgBouncer
connections.
  * Added connection-string examples for both connection methods.
* Replaced public-connectivity instructions with optional network
restriction steps and reorganized limitations guidance.
* Refined PrivateLink availability wording across platform security
documentation.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-04 07:23:35 +12:00
Ishleen KaurandMiranda Limonczenko 3c903b7dfa Add Elastic Tile to Supabase Metrics API page (#48564)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Feature

## What is the current behavior?

Elastic is not added as a tile in metrics API page. 

## What is the new behavior?

Now Elastic is supporting Supabase metrcis ingestion, hence it should be
listed in the Metrics page.

![Uploading Screenshot 2026-08-03 at 4.31.46 PM.png…]()

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

- **New Features**
- Added Elastic as a supported metrics integration in the documentation.
- Added an Elastic integration card with community labeling and a link
to Elastic’s documentation.
- Added Elastic to the monitoring metrics navigation and Metrics API
guide resources.
- Added Elastic branding and iconography to the metrics integration
listings for easier recognition.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: Miranda Limonczenko <miranda.limonczenko@supabase.io>
2026-08-03 18:34:10 +00:00
AnaandAna 405d789e27 docs(www): add launch video to Supabase Pipelines feature page (#48654)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

- Sets `heroImage` on the `supabase-pipelines` entry in
`apps/www/data/features.tsx` to the "Introducing Supabase Pipelines"
YouTube embed

## What is the current behavior?

`/features/supabase-pipelines` has an empty `heroImage`, so the hero
renders the fallback icon block instead of media.

## What is the new behavior?

- The feature page hero renders the launch video, using the same
`youtube-nocookie.com/embed/<id>` format as the other 22 feature entries
with video heroes

## Additional context

N/A


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

## Summary by CodeRabbit

* **Content Updates**
* Updated the Supabase Pipelines feature presentation to display a
YouTube video as its hero visual.

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

Co-authored-by: Ana <ana1337x@users.noreply.github.com>
2026-08-03 13:54:28 -04:00
Laurence Isla 56946d8171 docs: add workaround to avoid noisy logs when PostgREST is disabled (#48021) 2026-08-03 12:21:02 -05:00
Rand Arete ae1c260a1f Add Rand Arete to humans.txt (#48658)
## I have read the
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
file.

YES

## What kind of change does this PR introduce?

Just adding myself to humans.txt



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

## Summary by CodeRabbit

* **Documentation**
* Updated the team information page to include Rand Arete as a member of
the Supabase remote team.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-03 10:55:02 -06:00
Andrey A. 9e225a279b chore(self-hosted): update 2026-08-03 (#48649) self-hosted/v0.7.1 2026-08-03 18:21:35 +02:00