mirror of
https://github.com/supabase/supabase.git
synced 2026-10-16 14:49:10 +03:00
4215b6ca32a3b8fa95d433c84f00a391c39efbec
39124
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
4215b6ca32 |
feat(studio): add cost estimates and validation feedback to pipeline review (#51641)
## Problem The pipeline wizard in #49243 needs estimated costs and validation feedback in review before creation. ## Solution Add the megabranch’s inline cost estimate and validation feedback to preview-enabled creation. Initial-sync costs follow the selected tables; ongoing pipeline and streaming rates remain visible. Missing estimates do not block creation. Validation feedback distinguishes critical issues from warnings. Preview off and editing keep the existing layout. The Start action, warning confirmation and final cost dialog stay unchanged; no wizard routing is added. Stacked on #51635. ## Review instructions 1. Open the [Pipelines preview](https://studio-staging-git-dnywh-featpipeline-review-costs-supabase.vercel.app/dashboard/project/_/database/pipelines), select a test project with Pipelines enabled, enable **Pipeline creation wizard** in Feature Previews and click **Add pipeline**. Select a publication and confirm **Estimated costs** follows Data review. 2. Compare **All tables**, **No tables** and selected-table initial sync. Confirm initial-sync totals follow the selection, while hourly pipeline and streaming rates stay visible. With **No tables**, initial sync should cost zero. Check desktop and phone widths. 3. Enter valid-format but incorrect destination credentials and click **Start pipeline**. Confirm critical validation issues appear inline and creation stops. Correct the credentials and retry. If warnings are returned, confirm the review explains they may affect replication and the existing **Start pipeline anyway** confirmation still applies. Cancel before final creation. 4. Turn the preview off and reopen **Add pipeline**. Confirm there is no inline cost review. With the preview on, edit an existing pipeline and confirm its original layout remains. |
||
|
|
f20277377b |
feat(studio): add pipeline data and custom settings review (#51635)
## Problem The pipeline wizard in #49243 needs publication, initial sync and custom settings reviewed before creation. ## Solution Extend the preview-enabled review from #51633 with Data, custom connection settings and configured BigQuery table layouts. Values update as fields change. Unchanged advanced defaults and unconfigured table layouts are omitted; an explicit maximum staleness of zero is shown. Preview off and editing keep their existing layout. Validation and creation behaviour stay the same; no wizard routing is added. Stacked on #51633. | This PR: Simple Case | This PR: Extreme Case | Reference: Final Wizard | | --- | --- | --- | | <img width="1244" height="1994" alt="CleanShot 2026-10-14 at 11 22 16@2x" src="https://github.com/user-attachments/assets/5c2c9ea4-7b2b-4f0b-8ebe-0cfc2ac27059" /> | <img width="1226" height="3568" alt="CleanShot 2026-10-14 at 12 02 16@2x" src="https://github.com/user-attachments/assets/dc556d4a-5130-4b6c-80b5-8644603d9a55" /> | <img width="1486" height="2364" alt="CleanShot 2026-10-14 at 10 50 30@2x" src="https://github.com/user-attachments/assets/982b7d23-9449-4841-b002-9e30fbbabfe9" /> | ## Review instructions 1. Open the [Pipelines preview](https://studio-staging-git-dnywh-featpipeline-data-review-supabase.vercel.app/dashboard/project/_/database/pipelines), select a test project with Pipelines enabled, enable **Pipeline creation wizard** in Feature Previews and click **Add pipeline**. Confirm **Data** review follows the destination review. 2. Select a publication. Confirm its name, table count and initial-sync choice appear as read-only fields. Choose selected tables to include or exclude and confirm their schema-qualified names appear. Change publication and confirm old tables are not shown. 3. Under Data’s **Advanced settings**, change batch wait time, table sync workers or initial sync connections. Confirm only custom values appear in review. Restore defaults and confirm those rows disappear. For BigQuery, configure partitioning or clustering and confirm the table name and wrapping layout summary appear in the main column under **Table layout**; unconfigured layouts should be omitted. 4. Change BigQuery connection pool size or maximum staleness and confirm they appear within **Connection**. If available, check DuckLake pool size and Snowflake role too. Check desktop and phone widths, then cancel and discard changes; no credentials or creation are needed. 5. Turn the preview off and reopen **Add pipeline**: confirm no review. With the preview on, edit an existing pipeline and confirm no review there either. |
||
|
|
17a7d2a00f |
feat(studio): add destination review for preview pipeline creation (#51633)
## Problem The pipeline wizard in #49243 needs a review of destination details before creation. ## Solution Add `PipelineDestinationReview` after Data in preview-enabled creation. It uses the megabranch’s Destination and Connection sections, destination logo, read-only fields and field descriptions. Values update as fields change. Credentials are omitted. Custom DuckLake catalog URLs and ClickHouse endpoints are masked as whole fields, with an eye toggle; changing a URL masks it again. Preview off and editing keep the existing layout. Validation and creation behaviour stay the same; no wizard routing is added. Publication, advanced settings and cost review will follow in later slices. | This PR | Reference: Final Wizard | | --- | --- | | <img width="1254" height="1308" alt="CleanShot 2026-10-14 at 11 01 05@2x" src="https://github.com/user-attachments/assets/e792ed7f-d4f4-4557-b338-8a120c8663b5" /> | <img width="1486" height="2364" alt="CleanShot 2026-10-14 at 10 50 30@2x" src="https://github.com/user-attachments/assets/982b7d23-9449-4841-b002-9e30fbbabfe9" /> | ## Review instructions 1. Open the [Pipelines preview](https://studio-staging-git-dnywh-featpipeline-destinati-25606b-supabase.vercel.app/dashboard/project/_/database/pipelines), select a test project with Pipelines enabled and go to **Database → Pipelines**. Enable **Pipeline creation wizard** in Feature Previews, then click **Add pipeline**. Confirm the review follows **Data**, with **Destination** and **Connection** sections. 2. With BigQuery selected, enter a pipeline name, project ID and dataset ID. Confirm the review updates with those values in read-only fields, includes field descriptions and the destination logo/region, and omits the service-account key. Check desktop and phone widths. 3. If available, select DuckLake with a custom catalog. Enter a catalog URL and data path. Confirm the whole URL is hidden in review, use the eye toggle to reveal/hide it, then change the URL and confirm it is hidden again. For Supabase DuckLake, confirm the bucket is shown instead. Snowflake shows account/database/schema without its private key; ClickHouse shows database/engine and a masked endpoint without its password. 4. Cancel and discard changes; no pipeline creation is needed. Turn the preview off and reopen **Add pipeline**: confirm there is no review section. With the preview on, edit an existing pipeline and confirm there is no review section there either. |
||
|
|
f56efc3a79 |
blog: How we made the Supabase Select 2026 badge (#51422)
## Problem The Supabase Select 2026 badge needs a write-up: how it came together, and what attendees and people watching from home are already building with it. ## Solution - New post: `apps/www/_blog/2026-10-07-how-we-made-the-supabase-select-2026-badge.mdx` (the date is a placeholder until we set the publish date) - Images in `apps/www/public/images/blog/how-we-made-the-supabase-select-2026-badge/`, resized and compressed - Adds Sam Meech-Ward to `apps/www/lib/authors.json` ## Review instructions 1. Open the Vercel preview at `/blog/how-we-made-the-supabase-select-2026-badge`. 2. Read through the post and check the images and links. --------- Co-authored-by: Jon Meyers <13792200+dijonmusters@users.noreply.github.com> |
||
|
|
135d8f00c3 |
fix(studio): match composite primary keys as tuples when deleting rows (#51575)
## 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 #51574 Deleting several selected rows from a table with a composite primary key builds one `IN` list per key column: ```sql delete from public.user_roles where user_id in (1,2) and role_id in ('admin','viewer'); ``` That matches the cartesian product of the selected values, so rows the user never selected are deleted too. In the example above, selecting `(1, 'admin')` and `(2, 'viewer')` also deletes `(1, 'viewer')` and `(2, 'admin')`. ## What is the new behavior? When there is more than one primary-key column, the delete uses the tuple `IN` filter that pg-meta already supports: ```sql delete from public.user_roles where (user_id, role_id) in ((1, 'admin'), (2, 'viewer')); ``` Single-column primary keys keep the same SQL as before. The batched operation queue uses the same helper for its delete operations, so it is covered as well. Added unit tests for both the single and composite cases. ## Additional context This is silent data loss on join tables, which are the most common place for composite keys and for multi-row deletes. |
||
|
|
cfdc81e1fe |
test(studio): raise timeout for NewScopedTokenSheet tests (#51755)
## Summary
- The `NewScopedTokenSheet` tests were flaky on master. The 5s default
timeout was hit intermittently, most visibly in the "falls back to
Custom when a row diverges from the preset" test, plus some sibling
tests.
- Observed in unit-test runs on master. Reproduced locally by running
the file under heavy CPU load, where tests took 4.5-5s versus ~1s on an
idle machine.
- Fix: file-level `vi.setConfig({ testTimeout: 15_000 })`. This only
affects this file because vitest isolates test files.
## Testing
- Ran the file 5 times under the same CPU load. All 21 tests passed each
time.
|
||
|
|
cba8bc0b30 |
fix(studio): clarify system role grouping and deletion actions (#51526)
## Problem The Database Roles page groups `postgres` and the reserved `supabase_privileged_role` alongside custom roles, while labeling the other section as "Roles managed by Supabase." The `postgres` actions menu also offers an enabled Delete action. Fixes #51525. ## Solution - Rename the sections to "Supabase service roles" and "Project database roles," and explain that the latter includes the `postgres` administrator and custom roles. - Include `supabase_privileged_role` among the protected service roles. - Disable Delete for the existing `SYSTEM_ROLES` list, using `DropdownMenuItemTooltip` to explain the restriction. Keep the `postgres` permission editor available. - Add component regressions for grouping, system-role menus, permission editing, and custom-role deletion confirmation. ## Validation - Studio unit suite: 732 files passed; 8,343 tests passed and one expected failure. - `pnpm --filter studio typecheck` passed. - `SKIP_ASSET_UPLOAD=1 pnpm build --filter=studio` passed. - ESLint for changed files, the Studio lint ratchet, monorepo Prettier, and Studio knip passed. - Playwright smoke verification of the production Studio build with synthetic API responses: grouping, disabled Delete and tooltip, keyboard interaction, permission editing/cancellation, read-only service roles, search, and custom-role deletion confirmation/cancellation. ## Review instructions 1. Open Database → Roles. Check the two section names and the administrator description. If present, `supabase_privileged_role` belongs to the protected service section. 2. Open the `postgres` actions menu. Delete is disabled, and hovering it explains why. 3. Expand `postgres`. Its existing editable permission switches remain enabled for a user who can edit roles. 4. Open a custom role's actions menu. Delete still opens the confirmation dialog; cancel the dialog. 5. Run `pnpm --filter studio exec vitest run tests/components/Database/Roles.test.tsx`. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) — not applicable; this changes Studio UI and tests. |
||
|
|
4c7014745c |
feat(studio): add custom OIDC option to third-party auth providers (#51612)
<!-- claude-slack-attribution --> _Requested by **Stojan Dimitrovski** · [Slack thread](https://supabase.slack.com/archives/C022071RB2L/p1791475016175969?thread_ts=1791475016.175969&cid=C022071RB2L)_ ## Problem The Management API accepts any OIDC issuer for third-party auth (`POST /v1/projects/{ref}/config/auth/third-party-auth` with `oidc_issuer_url`), but the Dashboard only offers Firebase, Clerk, WorkOS, Auth0 and Amazon Cognito. Users with another OIDC provider have no way to register it from the Dashboard. Studio also hides any issuer it does not recognize: `IntegrationCard` returns `null` for the `custom` type, so an issuer added through the API never shows up in the list and cannot be deleted from the Dashboard. ## Solution - Add a "Custom OIDC" item to the Add provider menu on the Third-Party Auth page. - New `CreateCustomOidcDialog` with a single required Issuer URL field. It reuses `useCreateThirdPartyAuthIntegrationMutation`, so query invalidation and the error toast behave like the other providers. The URL is sent as typed after trimming whitespace. - New `isValidOidcIssuerUrl` helper in `ThirdPartyAuthForm.utils.ts`: the value must be an `https://` URL with a host, no query string, no fragment, and no embedded credentials. - The dialog copy is kept short: a one-line description and a single helper line noting that signing keys are found at the issuer's `/.well-known/openid-configuration`. - `IntegrationCard` now renders custom issuers (badge-check icon, "Custom OIDC" label, Issuer URL, Delete integration) instead of hiding them. Delete uses the existing flow and permission check. - The `custom` label changes from "Custom" to "Custom OIDC". - New docs page `apps/docs/content/guides/auth/third-party/custom-oidc.mdx` (served at `/docs/guides/auth/third-party/custom-oidc`). It covers the Dashboard flow, the Management API alternative, the `role` claim, client setup, and RLS. It is linked from the third-party auth overview and added to the docs sidebar. This supersedes the draft docs PR #51611. Not included: UI for `jwks_url` and `custom_jwks`. The page and menu keep the same feature gate (`authentication:third_party_auth`) and the same permission checks as the other providers. Before: the Add provider menu lists five providers. An issuer that is not one of them is registered only through the API and does not appear in the Dashboard. After: the menu has a sixth item, Custom OIDC. It opens a dialog that takes an issuer URL, rejects non-HTTPS values with an inline message, and registers the issuer. The new provider appears in the list and can be deleted from there. ## Review instructions 1. Open a project's Authentication > Third-Party Auth page and open Add provider. Check for the new Custom OIDC item. 2. Enter `http://example.com` and submit. The field shows an inline error and no request is sent. 3. Enter a valid HTTPS issuer URL that serves an OIDC discovery document and submit. A success toast appears and the provider shows in the list as Custom OIDC with its Issuer URL. 4. Enter an issuer the API rejects. The API error shows in the existing error toast and the dialog stays open. 5. Delete the provider with Delete integration and confirm it disappears from the list. 6. Read the new docs page and check that its Dashboard steps match the UI. Local checks: - `vitest --run components/interfaces/Auth/ThirdPartyAuthForm`: 20 tests pass (validation helper unit tests plus dialog component tests with MSW). - `tsc --noEmit` in `apps/studio`: no new errors. - ESLint on the directory: no warnings in the new or changed code. - Prettier is clean on the changed files, including the docs page. The typos check is clean on the docs page and overview. I did not run the dialog in a browser against a real project, so there are no screenshots. The docs app was not built or rendered locally. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) 🤖 Generated with [Claude Code](https://claude.ai/code/session_011HY2zckzPLcvXd28JPSqBe) https://claude.ai/code/session_011HY2zckzPLcvXd28JPSqBe --- _Generated by [Claude Code](https://claude.ai/code/session_011HY2zckzPLcvXd28JPSqBe)_ --------- Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
626f0d412a |
docs(branching): explain what a new branch inherits and what each push runs (#51753)
## Problem Users ask whether the GitHub integration applies migrations and syncs `config.toml` to a branch on its own or whether they need a GitHub Action for it but there's no docs clarifying that. The branching guides also does not have when a new branch inherits from its base project, where a dashboard branch gets its schema, what the `configure`, `migrate`, and `deploy` steps read from the repository, and what the workflow step statuses mean. ## Solution Added the missing facts to the four pages that already cover each topic, with no new pages and no moved headings. - Overview: a "What a new branch starts with" section listing the copied settings, the placeholder Auth secrets, the webhook default, and where each branch kind gets its schema. - GitHub integration: a "What runs on each push" subsection that answers the FDBKIN-11978 question directly, the `config.toml` sections the configure step applies and the protected-branch rule, two migrate edge cases and the `[db.migrations]` switch, and a new "Edge Functions" subsection on copy-from-base and checksum skips. - Dashboard: "Where a dashboard branch gets its schema". - Troubleshooting: the step status table and two new causes under "Config.toml not applying". ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) |
||
|
|
21934397ca |
feat(changelog) - add structured data to entries (#51496)
## Problem The current entries at `/changelog` have no [structured metadata](https://developers.google.com/search/docs/appearance/structured-data/intro-structured-data) about any of the pages, which can be important for LLM-indexing. ## Solution Adds: - a `techArticle` and `breadcrumb` schema items to the changelog entries. - adds `CollectionPage` and `Breadcrumb` schemas to `/changelog` itself ## Preview links ### Changelog entries https://zone-www-dot-com-git-kody-devrel-696-changelog-4b1bb5-supabase.vercel.app/changelog/status-page-migration Validates fine at https://validator.schema.org/#url=https%3A%2F%2Fzone-www-dot-com-git-kody-devrel-696-changelog-4b1bb5-supabase.vercel.app%2Fchangelog%2Fstatus-page-migration <img width="1095" height="492" alt="Screenshot 2026-10-09 at 2 35 30 PM" src="https://github.com/user-attachments/assets/6d8d4890-5eb7-458b-addb-935c25e2df2b" /> ### Changelog listing https://zone-www-dot-com-git-kody-devrel-696-changelog-4b1bb5-supabase.vercel.app/changelog Validation at [schema.org](https://validator.schema.org/#url=https%3A%2F%2Fzone-www-dot-com-git-kody-devrel-696-changelog-4b1bb5-supabase.vercel.app%2Fchangelog). <img width="1101" height="751" alt="image" src="https://github.com/user-attachments/assets/305a25d3-06ea-46c9-990e-6cdc4ae771cf" /> |
||
|
|
d46e226af8 |
docs(cli): update local stack guides for CLI v2.120.0 and v2.121.0 behavior (#51751)
## Problem The two `supabase stack` guides describe behavior the CLI changed in v2.120.0 (Oct 6) and v2.121.0 (deploy PR supabase/cli#7104 open). A reader following them today hits different output than the pages promise. | Guide says | CLI does | Since | | --- | --- | --- | | `stack logs` streams live lines only, no history | Keeps history, adds `--tail`, `--since`, `--service gateway`, reads while stopped (supabase/cli#6893) | v2.120.0 | | Rejected config change fails with `cannot change on the saved stack` | Fails with `The saved stack cannot adopt these changes` (supabase/cli#6944) | v2.120.0 | | Port changes always need a new local project | A stopped project re-plans ports on next start (supabase/cli#6950) | v2.121.0 | | No bulk destroy | `destroy` accepts repeated `--stack-id` (supabase/cli#7000) | v2.121.0 | | OrioleDB unsupported | `db.orioledb_version` runs in both runtimes (supabase/cli#6934) | v2.121.0 | | Nothing about native `pg_cron` | Jobs run in background workers; earlier versions fail every job (supabase/cli#7039) | v2.121.0 | The CLI getting-started guide (#50736) also says a container runtime is required and never mentions the native runtime. ## Solution Updated both stack guides and added one sentence to the getting-started prerequisites. - v2.121.0-only behavior is marked "In CLI v2.121.0 or later", with the earlier behavior stated beside it. The guides' baseline stays at v2.119.0. - Every claim was checked against supabase/cli `develop` source and the commits above. - The `supabase stack` commands stay out of the generated CLI reference by design, so these guides remain the only place the flags are documented. Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) |
||
|
|
cd6afdd8b2 |
refactor(studio): add tool contracts and migrate update_notebook (#51626)
## Summary Each assistant tool's identity and contract is currently written in up to nine places that nothing ties together at compile time. This PR adds a contract/server split and migrates `update_notebook`, the tool with the most copies, as the first proof of the design. - **Contract** (`lib/ai/tools/update-notebook.ts`): isomorphic file with the input and output schemas, approval flag, minimum opt-in level, and `toModelOutput`, the single rule for what the model may see. - **Server** (`update-notebook.server.ts`): the executable tool, built with `approvalGatedToolFromContract`. - **Registry** (`registry.ts`): collects contracts, derives a typed `StudioUIMessage`, and provides `sanitizeContractPart` for history replay. - **Shared types** (`types.ts`): `ToolContract`, `ToolContext`, `ToolFactory`, plus a single `getAuthHeaders` replacing three variants. - **Approval gate** (`approval-gate.ts`): approval-gated tools get `acceptUntrustedSql` / `acceptUntrustedLogsSql` through a gate passed to `execute`, and `*.server.ts` files can't import the raw functions (ESLint). - **Opt-in level**: `update_notebook` is gated by its contract's `minOptInLevel`. `TOOL_CATEGORY_MAP` is now typed against `ToolName` and excludes migrated tools, which exposed `get_active_incidents` missing from the name enum. Removed duplicates: the `update_notebook` sanitizer in `tool-sanitizer.ts`, the client-side `stripNotebookSnapshot`, and the copied update schemas in `Message.utils.ts`. ## Behavior changes - The client no longer strips `previous_content` from `update_notebook` outputs before sending history, so requests carry the previous notebook snapshot. The server still strips it before the model sees it. - On history replay, an `update_notebook` output that doesn't match its schema is dropped instead of passed through minus `previous_content`. ## Testing - New `registry.test.ts` (typed parts, replay sanitizer) and a contract case in `tool-filter.test.ts`. - Studio typecheck, lint ratchet, knip, Prettier and the affected vitest suites pass. |
||
|
|
7767e1ab6e | fix(self-hosted): update Functions auth smoke tests and preserve Storage .gitkeep (#51108) | ||
|
|
427d5f4681 |
chore: catch you all later (#51746)
Bye! |
||
|
|
31a74e8663 | fix(self-hosted): align OAuth and OIDC discovery api-gw routes with the platform (#51493) | ||
|
|
2d7e5f57ed |
chore(docs / www) - update video links to latest DevRel videos where applicable (#51606)
## Problem Several outdated (or missing) video references across docs and www apps. ## Solution Updates these links (and adds where appropriate) to link out to the newer series on Supabase by @dshukertjr and individual videos by @dijonmusters ## Preview links [docs](https://docs-git-kody-devrel-708-update-video-links-supabase.vercel.app/docs) [www](https://zone-www-dot-com-git-kody-devrel-708-update-vid-8e2d6a-supabase.vercel.app/) ## Review instructions For marketing folks specifically, sanity check on the [changes](https://github.com/supabase/supabase/pull/51606/changes#diff-1fb413a22e16c9b7b200e47aa9661c8be240a52a06276ed04c450e3d92c9a12a) to the features.tsx file, which render to: Page | Before (live) | After (preview) -- | -- | -- vector-database | https://supabase.com/features/vector-database | https://zone-www-dot-com-git-kody-devrel-708-update-vid-8e2d6a-supabase.vercel.app/features/vector-database realtime-postgres-changes | https://supabase.com/features/realtime-postgres-changes | https://zone-www-dot-com-git-kody-devrel-708-update-vid-8e2d6a-supabase.vercel.app/features/realtime-postgres-changes realtime-broadcast | https://supabase.com/features/realtime-broadcast | https://zone-www-dot-com-git-kody-devrel-708-update-vid-8e2d6a-supabase.vercel.app/features/realtime-broadcast realtime-presence | https://supabase.com/features/realtime-presence | https://zone-www-dot-com-git-kody-devrel-708-update-vid-8e2d6a-supabase.vercel.app/features/realtime-presence deno-edge-functions | https://supabase.com/features/deno-edge-functions | https://zone-www-dot-com-git-kody-devrel-708-update-vid-8e2d6a-supabase.vercel.app/features/deno-edge-functions cli | https://supabase.com/features/cli | https://zone-www-dot-com-git-kody-devrel-708-update-vid-8e2d6a-supabase.vercel.app/features/cli role-based-access-control | https://supabase.com/features/role-based-access-control | https://zone-www-dot-com-git-kody-devrel-708-update-vid-8e2d6a-supabase.vercel.app/features/role-based-access-control --------- Co-authored-by: Codesmith <codesmith-bot@users.noreply.github.com> |
||
|
|
83ee918e80 |
chore: remove redundant personnel (#51663)
* Some things are harder to delete than others * No breaking changes expected --- <img width="498" height="482" alt="gif" src="https://github.com/user-attachments/assets/a33ff7da-2815-438d-ac7b-d6b2f91c8404" /> |
||
|
|
0f618d8efb |
fix(mcp): use native HTTP for Devin MCP connections (#51646)
## Problem
The Devin Desktop preset wraps Supabase MCP URLs in `npx -y mcp-remote`,
although Devin Local and Devin CLI support Streamable HTTP natively.
Connecting therefore adds a Node/npm bridge that the client does not
need. The preset also lacks Devin-specific setup and authentication
instructions.
## Solution
Use the existing native `url` configuration for Devin:
```json
{
"mcpServers": {
"supabase": {
"url": "https://mcp.supabase.com/mcp"
}
}
}
```
The generated URL retains the selected project, read-only mode, and
features. The internal `windsurf` key is preserved.
Add shared setup instructions for the configuration panel and generated
Markdown: user-scope installation, the Windows config file location next
to the shared macOS/Linux one, a re-authentication command for hosted
connections, and loading tools in a new Devin Local or CLI session.
Local connections omit the re-authentication step.
Include Devin in the shared client URL round-trip test. The Devin-only
test files from the first revision were removed in review so that tests
stay shared across clients.
Native configuration follows the official [Devin MCP
documentation](https://docs.devin.ai/cli/extensibility/mcp/configuration)
and [Devin Local
integration](https://docs.devin.ai/desktop/devin-local).
## Validation
- **273 tests passed** across 28 `ui-patterns` test files on the current
revision; 34 of them in the MCP section.
- Package typechecking, Prettier on the four changed files, and `git
diff --check` passed.
- **Devin CLI 3000.11.3:** native HTTP initialization and tool
discovery; synthetic OAuth with S256 PKCE and authenticated tool
discovery using a saved token.
- **Devin Desktop 3.10.48 / bundled Devin Local 3000.10.48:** the server
card showed `Connected` and the fixture tool. Its `tools/list` request
came from the bundled Devin Local process.
OAuth validation used controlled local fixtures; live Supabase Hosted
authorization was not exercised. The full monorepo application build was
not run.
## Review instructions
1. Run `pnpm --filter ui-patterns exec vitest run src/McpUrlBuilder` and
`pnpm --filter ui-patterns typecheck`.
2. Select **Devin Desktop** in the MCP configuration panel. Confirm that
the JSON uses `url` and preserves the selected project, read-only mode,
and features.
3. Switch to the local connection. Confirm that Hosted login
instructions disappear. Check that generated Markdown explicitly limits
that login step to Hosted connections.
## Checklist
- [x] I have read
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
- [ ] If I wrote a new docs topic or edited an existing topic, I used
the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs
[style
guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide).
N/A: no docs topic edited; the change is in the shared MCP configuration
component and its generated instructions.
|
||
|
|
09a1f431bc |
Mass update for all lucide icon imports to use the component with Icon suffix (#51659)
## Context This is largely just a mechanical change here: Opting to use lucide icons with the `Icon` suffix across all icon imports within `studio` - so that it’s clearer which components are icons + reduces the possibility of name collision with our own components - e.g <User /> vs <UserIcon /> Also added a eslint rule for this: <img width="1069" height="167" alt="image" src="https://github.com/user-attachments/assets/7f36f443-5ca2-4bf6-8d22-86e774513bfc" /> And updated `AGENTS.md` as such: ``` Icons come from `lucide-react`, always imported with the `Icon` suffix (`import { CheckIcon, Trash2Icon } from 'lucide-react'`) — never the bare names (`Check`) or `Check as CheckIcon` aliases (lint-enforced). ``` |
||
|
|
21f7e306ee |
docs(cli): align declarative schema and diff engine docs with CLI behavior (#51609)
## Problem Four docs pages describe CLI behavior that v2.120.0 no longer has. A reader following them hits a wrong result in three places. - The declarative guide tells legacy-engine users who ran `db pull --declarative` to delete the exported tree. The command also rewrites `[db.migrations].schema_paths` in `config.toml`, so `db diff` keeps failing after the delete. The guide also claims the failure happens "on the first file". The code does not guarantee that. - The declarative directory moved from `supabase/database` to `supabase/schemas` in v2.115.0. The CLI warns when it finds a tree at the old path. No page mentions the move or the warning, and the `db schema declarative sync` example in the command reference still prints the old path. - The command reference marks `--experimental` as required on the declarative commands. `[experimental.pgdelta] enabled = true` also unlocks them. Two smaller gaps: the diff engines page shows how to fall back to `migra` for one run but not how to try `pg-delta` for one run, and the guide omits the note `db diff -f` prints when it ignores schema files. Every claim was checked against the CLI source on `develop` and the v2.120.0 tag. ## Solution Docs-only change. Four files, 17 insertions, 8 deletions. - `declarative-database-schemas.mdx`: corrects the legacy caution, documents the pre-2.115.0 directory and its warning, adds the `db diff -f` note. - `diff-engines.mdx`: adds the single-run opt-in table (`db diff --use-pg-delta`, `db pull --diff-engine pg-delta`, `--experimental` for the declarative commands) and the `SUPABASE_EXPERIMENTAL_PG_DELTA` override. Updates the legacy `db pull --declarative` row. Prettier realigned the comparison table, which accounts for most of that page's diff. - `cli_v1_config.yaml`: `schema_paths` notes the automatic rewrite on `migra` and the warning on `pg-delta`. `declarative_schema_path` notes the pre-2.115.0 default. - `cli_v1_commands.yaml`: fixes the example path and drops `required: true` from `--experimental` on the two declarative commands. Both match the spec the CLI generator produces from `develop`. The command reference is generated from the CLI repo, so the same fixes are in supabase/cli as a separate PR. Without that, the next release's reference update reverts them here. ## Review instructions 1. Open the preview for `/docs/guides/local-development/declarative-database-schemas` and search for "schema_paths". The legacy caution should say the command rewrites the setting and tell readers to remove it. 2. On the same page, search for "2.115.0". The directory note should name the version and both fixes. 3. Open the preview for `/docs/guides/local-development/diff-engines` and search for "single run". The opt-in table should render, and the comparison table below it should still align. 4. Open the CLI reference for `db schema declarative sync`. The second example should print `supabase/schemas`, and `--experimental` should not show as required. 5. Open the config reference entries for `db.migrations.schema_paths` and `experimental.pgdelta.declarative_schema_path` and read the added sentences. 6. Optional source check in supabase/cli `develop`: `updateDeclarativeSchemaPathsConfig` in `apps/cli/src/commands/db/shared/pgdelta.write.ts` and `apps/cli/src/commands/db/schema/declarative/declarative.former-default.ts` back the two main claims. ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) --------- Co-authored-by: avallete <andrew.valleteau@supabase.io> Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
9aea81c3b7 |
fix(www): rename Enterprise "Designated Support manager" to "Technical Account Management" (#51628)
## What kind of change does this PR introduce? Copy fix on the pricing page. ## What is the current behavior? The Enterprise tier on supabase.com/pricing lists "Designated Support manager". We can't offer a dedicated support manager for tickets, but all Enterprise customers do get access to the Technical Account Management (TAM) service. ## What is the new behavior? The Enterprise feature reads "Technical Account Management" (`packages/shared-data/plans.ts`). ## Additional context Requested by Brad Gyger in Slack. Not changed in this PR (different copy, flagging for follow-up): the "Designated support" row in `packages/shared-data/pricing.ts`, the "Designated support team, account manager and technical specialist" description in `apps/www/components/Pricing/PricingComparisonTable.tsx`, and "Designated Support" in `apps/www/data/PricingAddOnTable.json`. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> |
||
|
|
0fe320e5e3 |
chore: shiki velite migration (#51579)
## Problem design-system, ui-library and learn highlight code through `@shikijs/compat` and `rehype-pretty-code` 0.9, which both predate shiki 1 compat has no v4 release, so these apps were stuck on shiki 1.6 and couldn't pick up the injection fix from the previous pr ## Solution - drops `@shikijs/compat` - moves all three apps to `rehype-pretty-code` <!-- ## Preview links If relevant, include links to changed pages for easy review access. Copy the preview base URL from the Vercel bot comment on this PR. Use the following table as an example template. | Site | Live | Preview | Search for | | -------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------- | | WWW | [/blog/your-post](https://supabase.com/blog/your-post) | [/blog/your-post](https://zone-www-dot-com-git-branch-name-supabase.vercel.app/blog/your-post) | unique phrase from the change | | Docs | [/docs/guides/your-page](https://supabase.com/docs/guides/your-page) | [/docs/guides/your-page](https://docs-git-branch-name-supabase.vercel.app/docs/guides/your-page) | unique phrase from the change | | Studio | [/dashboard](https://supabase.com/dashboard) | [/dashboard](https://studio-git-branch-name-supabase.vercel.app/dashboard) | unique phrase from the change | | Design system | [/design-system](https://supabase.com/design-system) | [/design-system](https://design-system-git-branch-name-supabase.vercel.app/design-system) | unique phrase from the change | | UI library | [/library](https://supabase.com/library) | [/library](https://ui-library-git-branch-name-supabase.vercel.app/library) | unique phrase from the change | | Knowledge base | [/kb/guides/your-page](https://supabase.com/kb/guides/your-page) | [/kb/guides/your-page](https://kb-git-branch-name-supabase.vercel.app/kb/guides/your-page) | unique phrase from the change | --> <!-- ## Additional context Optionally add any other context or screenshots. --> ## Review instructions 1. open [/design-system/docs/accessibility](https://design-system-gd7xzujta-supabase.vercel.app/design-system/docs/accessibility) on the preview and on production side by side _ highlighted lines should keep the left border and background, and line numbers should line up 2. open [/design-system/docs/components/chart](https://design-system-gd7xzujta-supabase.vercel.app/design-system/docs/components/chart) _ highlighted words should have the gray pill, with no yellow background or black text + code blocks with titles should still show the title above the block 3. toggle light and dark mode on both pages _ token colors and the block background should match production 4. open [ui-library preview](https://ui-library-hmuv1teie-supabase.vercel.app/library/docs/starters/nextjs-starter) and do a copy check 5. open a learn lesson with code `/foundations/authentication` and compare it with production. ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) |
||
|
|
4b93c5186d |
chore: bump shiki and catalog entry (#51578)
## Problem monorepo resolved four different shiki majors _ shiki was never added to the pnpm catalog so each app kept whatever version it started with. shiki 4.5.0 stops grammar injections from being registered again on every language load (shikijs/shiki#1318) and docs worked around the same problem locally in #50501 ## Solution - adds `shiki: ^4.5.0` to the catalog and points docs, www and marketing at it - docs preload guard from #50501 stays but will be ff by moving docs to lazy language loading in another pr <!-- ## Preview links If relevant, include links to changed pages for easy review access. Copy the preview base URL from the Vercel bot comment on this PR. Use the following table as an example template. | Site | Live | Preview | Search for | | -------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------- | | WWW | [/blog/your-post](https://supabase.com/blog/your-post) | [/blog/your-post](https://zone-www-dot-com-git-branch-name-supabase.vercel.app/blog/your-post) | unique phrase from the change | | Docs | [/docs/guides/your-page](https://supabase.com/docs/guides/your-page) | [/docs/guides/your-page](https://docs-git-branch-name-supabase.vercel.app/docs/guides/your-page) | unique phrase from the change | | Studio | [/dashboard](https://supabase.com/dashboard) | [/dashboard](https://studio-git-branch-name-supabase.vercel.app/dashboard) | unique phrase from the change | | Design system | [/design-system](https://supabase.com/design-system) | [/design-system](https://design-system-git-branch-name-supabase.vercel.app/design-system) | unique phrase from the change | | UI library | [/library](https://supabase.com/library) | [/library](https://ui-library-git-branch-name-supabase.vercel.app/library) | unique phrase from the change | | Knowledge base | [/kb/guides/your-page](https://supabase.com/kb/guides/your-page) | [/kb/guides/your-page](https://kb-git-branch-name-supabase.vercel.app/kb/guides/your-page) | unique phrase from the change | --> <!-- ## Additional context Optionally add any other context or screenshots. --> ## Review instructions 1. open `/docs/guides/database/full-text-search` on the docs preview and on production side by side _ sql, js, dart and python blocks should have the same colors in light and dark mode 2. hover a function name in one of the js blocks on that page, the type popover should still show 3. open the www preview home page, scroll to the frameworks section and switch a few tabs _ code should be highlighted. 4. open `/go/supabase-stripe-projects` on the www preview _ code block section should be highlighted the same as production ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) |
||
|
|
f1082e28c7 |
chore: migrate Framer Motion imports to Motion (#51520)
## Problem Closes #31221. The applications and shared UI packages still import the former `framer-motion` package instead of Motion's React entry point. ## Solution Replace runtime imports, type imports, and three test mocks with `motion/react` across the consuming workspaces. Replace the seven direct dependency declarations with `motion: ^11.18.2`. Preserve the existing animation engine version and all other dependency resolutions, including the asynchronous `domMax` feature loader. Historical blog examples remain as published; `framer-motion` remains a transitive implementation dependency of Motion. ## Review instructions 1. Run `pnpm install --frozen-lockfile` and check the seven dependency replacements in the lockfile. 2. Open the WWW Auth page and Docs homepage at desktop and mobile widths, with normal and reduced motion preferences. 3. Open the mobile navigation, expand Product on WWW, and close the menu using Escape and the close button. 4. Check the existing animation components, shared form validation, and Studio tests for unchanged behavior. Validation: - Studio: 731 test files, 8,334 passing tests and one expected failure, with `--maxWorkers=4`. - Shared UI, UI patterns, WWW, and UI library: 615 passing tests. - `pnpm run typecheck --concurrency=1`: all 16 repository tasks pass. - All six application source lint scripts and lint ratchets pass; generated Docs example copies are excluded from local lint. - Repository Prettier source check, lockfile formatting, and case hazard check pass. - WWW: 10 existing end-to-end checks across nine pages. - Docs: 5 existing guide link and accessibility checks across Database and Auth. - WWW and Docs mobile navigation pass at desktop/mobile sizes with normal/reduced motion; SQL-to-REST translation tabs exercise the asynchronous feature loader without browser errors. - Frozen-lockfile installation passes; all existing package and snapshot resolutions are unchanged. - Learn and UI library command palettes open, filter results, and close with Escape without browser errors. - Independent code review finds no actionable defects. - `npm run build -- --filter=www --filter=docs --filter=studio --filter=learn --filter=library --concurrency=1 --continue=always`: all five affected applications build successfully (9 tasks including prerequisites); asset uploads disabled for local validation. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) (no docs topics changed) --------- Co-authored-by: Danny White <3104761+dnywh@users.noreply.github.com> |
||
|
|
7fa436050a |
refactor(studio): compose the pipeline data section for wizard reuse (#51572)
## Problem The pipeline wizard in #49243 needs publication, initial sync and replication settings together on its data step. ## Solution Compose `PipelineDataSection` from the existing controls and use it in preview-enabled creation. It includes the publication selector, initial-sync controls and data advanced settings, including BigQuery table layout. This preserves the grouping from #51570. Preview off and editing keep the existing layout. Validation and creation behaviour stay the same; no wizard routing is added. Stacked on #51570. ## Review instructions 1. Open the [Pipelines preview](https://studio-staging-git-dnywh-featpipeline-data-section-supabase.vercel.app/dashboard/project/_/database/pipelines), select a test project with Pipelines enabled and go to **Database → Pipelines**. Enable **Pipeline creation wizard** in Feature Previews, then click **Add pipeline**. Confirm **Data** follows **Destination connection**, with publication and initial sync above its **Advanced settings**. 2. Select a publication and change the initial-sync option. For selected-table options, confirm the publication tables are available. Click **New publication** in the publication selector and confirm the existing creation panel opens, then cancel it. 3. Expand **Advanced settings** under **Data**. Confirm replication settings appear, plus table layout for BigQuery, without connection pool size, staleness or role. Change **Batch wait time**, collapse and reopen the accordion, and confirm the value remains. Check desktop and phone widths. Cancel and discard changes; no credentials or pipeline creation are needed. 4. Turn the preview off and reopen **Add pipeline**. Confirm the original layout remains. With the preview on, edit an existing pipeline and confirm its original layout also remains. |
||
|
|
37fb536e6c |
feat(studio): group connection settings in the pipeline creation preview (#51570)
## Problem The pipeline wizard in #49243 needs connection settings before table selection. ## Solution With **Pipeline creation wizard** enabled, rearrange the creation sheet into destination selection, **Destination connection**, then **Data**. Group name, region, credentials and connection advanced settings together. Keep publication, initial sync, replication settings and BigQuery table layout in the data section. Preview off and editing keep the existing layout. Validation and creation behaviour stay the same. This still uses the sheet; no wizard routing is added. Stacked on #51568. | Feature Preview Off | Feature Preview On | | --- | --- | | <img width="1272" height="2536" alt="CleanShot 2026-10-13 at 13 16 36@2x" src="https://github.com/user-attachments/assets/ebad1082-b9ae-4f5e-91ad-08638ea2b032" /> | <img width="1244" height="2538" alt="CleanShot 2026-10-13 at 13 17 20@2x" src="https://github.com/user-attachments/assets/b5400b31-d60e-44e7-a4d6-cca1732b7974" /> | | _One “Advanced settings” at the bottom of the sheet that combines everything. Destination details handles Publication and Initial sync._ | _An “Advanced settings” accordion under BigQuery settings. Another “Advanced settings” under Data (clipped above). Data contains fields for Publication and Initial sync._ | ## Review instructions 1. Open the [Pipelines preview](https://studio-staging-git-dnywh-featpipeline-connectio-6d0876-supabase.vercel.app/dashboard/project/_/database/pipelines), select a test project with Pipelines enabled and click **Add pipeline**. Enable **Pipeline creation wizard** in Feature Previews, then reopen the sheet. Confirm the order is destination cards → connection → data. 2. With BigQuery selected, expand **Advanced settings** under **Destination connection**. Confirm it contains pool size and staleness. Expand **Advanced settings** under **Data** below publication and initial sync. Confirm it contains replication settings and table layout, without duplicate connection fields. Change a value and collapse/reopen the accordion; confirm it remains. 3. If available, select DuckLake or Snowflake. Confirm their connection accordion contains **Pool size** or **Role**, respectively. ClickHouse and Analytics Bucket have no connection accordion. Check desktop and phone widths. Cancel and discard changes; no credentials or pipeline creation are needed. 4. Turn the preview off and reopen **Add pipeline**. Confirm the original layout returns. With the preview on, edit an existing pipeline and confirm it also keeps the original layout. |
||
|
|
d457ab59c7 |
feat(studio): add pipeline wizard destination selection (#51568)
## Problem The pipeline creation wizard in #49243 needs a destination selection step that can be reviewed before wizard routing lands. ## Solution Add `PipelineDestinationSelection` with BigQuery, DuckLake, Snowflake, ClickHouse and deprecated Analytics Bucket radio options, using Studio’s existing destination logos. Show it in the creation sheet only when **Pipeline creation wizard** is enabled in Feature Previews and allowed by ConfigCat. Preview off and editing retain the existing dropdown. This is an incremental preview: creation still uses the sheet. No wizard routing or design-system changes are included. | Feature Preview Off | Feature Preview On | | --- | --- | | <img width="1274" height="1316" alt="CleanShot 2026-10-13 at 10 39 24@2x" src="https://github.com/user-attachments/assets/433e4fb1-5fa2-4dc3-982e-0aee6b266015" /> | <img width="1250" height="1890" alt="CleanShot 2026-10-13 at 10 53 09@2x" src="https://github.com/user-attachments/assets/033d7e43-1a57-4d61-90e8-9048e3560909" /> | ## Review instructions 1. Open the [preview to Database → Pipelines](https://studio-staging-git-dnywh-featpipeline-destinati-54dc7d-supabase.vercel.app/dashboard/project/_/database/pipelines), select a test project with Pipelines enabled and click **Add pipeline**. With **Pipeline creation wizard** off, confirm the existing destination dropdown appears. 2. Close the sheet, enable **Pipeline creation wizard** in Feature Previews and reopen **Add pipeline**. Confirm radio cards replace the dropdown, with BigQuery selected initially and only destinations available to your project shown. 3. If Analytics Bucket is available, confirm its card has a **DEPRECATED** badge. Select it and confirm the bucket fields appear and the description below says **Destination type cannot be changed after creation. Analytics Bucket is deprecated.** Click another destination. Confirm only one card is selected and the connection fields below switch to that destination. Use arrow keys to move focus and Space to select a destination. Check at desktop and phone widths. Cancel and discard changes; no credentials or pipeline creation are needed. 4. With the preview still on, open an existing pipeline for editing. Confirm its destination dropdown remains locked. Turn the preview off and reopen **Add pipeline** to confirm the original dropdown returns. |
||
|
|
3910dda149 |
chore(docs) - update vercel marketplace mention (#51617)
## Problem outdated placeholder for the `vercel marketplace` navigation. this is now live ## Preview URL https://docs-git-docs-chore-update-vercel-marketplace-mention-supabase.vercel.app/docs/guides/integrations/vercel-marketplace#via-vercel-marketplace |
||
|
|
7642d1c4a4 |
chore(docs): add Gonzalo Servat to humans.txt (#51581)
## Problem I recently joined Supabase as part of the Container Engineering team, and adding myself to `humans.txt` is one of my onboarding tasks. ## Solution Add my full name, Gonzalo Servat, to the team list in alphabetical order, between Giuseppe Mandato and Greg Kress. ## Review instructions 1. Confirm Gonzalo Servat appears between Giuseppe Mandato and Greg Kress. 2. Confirm the rest of the list is unchanged. ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com> |
||
|
|
e4bf448352 | chore: Rotate GH app env vars name (#51627) | ||
|
|
9ced729c39 |
Revert "docs(blog): add blog post for .NET SDK v8.0.0" (#51625)
Reverts supabase/supabase#50001 |
||
|
|
1dffb467cf |
Revert "docs: add introduction blog post for .NET SDK" (#51624)
Reverts supabase/supabase#50209 |
||
|
|
78eb416b03 |
chore: remove marketing as KB codeowner (#51622)
## Problem #51196 added `/apps/kb/` to CODEOWNERS with both `@supabase/docs` and `@supabase/marketing`. Because of that, every knowledge base change also asks marketing for review. Marketing should not be a required reviewer for KB. ## Solution Remove `@supabase/marketing` from the `/apps/kb/` line only. `@supabase/docs` still owns KB. All other CODEOWNERS entries, including marketing's `/apps/www/` ownership, are unchanged. ```diff -/apps/kb/ @supabase/docs @supabase/marketing +/apps/kb/ @supabase/docs ``` ## Review instructions 1. Check that the diff is a single line in `.github/CODEOWNERS`. 2. Confirm `/apps/kb/` is still owned by `@supabase/docs`. 3. Optional: `gh api repos/supabase/supabase/codeowners/errors?ref=tedd/remove-marketing-kb-codeowner` returns no errors. ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) Co-authored-by: supabase-vercel-tedd[bot] <336548405+supabase-vercel-tedd[bot]@users.noreply.github.com> |
||
|
|
9f7d28058b | chore: Rotate env vars name correctly (#51619) | ||
|
|
2043400335 |
chore(www): update Declarative Schemas feature entry for pg-delta (#51588)
## Problem Declarative schemas now runs on `pg-delta`. The Declarative Schemas entry on the features page still describes the old diff flow: it points readers to `supabase db diff`, says migrations come from the current database state, and tells readers to use `supabase db dump` to start from an existing project. ## Solution Updates the `declarative-schemas` entry in `apps/www/data/features.tsx`: - Adds a paragraph after the intro saying the feature now runs on `pg-delta`, that it is in alpha, and how to opt in. - Updates key benefit 5 to list grants, partitions, publications, and domains, and extension-managed objects. - Replaces the `supabase db diff` integration bullet with `supabase db schema declarative sync`. - Updates the intro bullet and three FAQ answers to match the current docs: how migrations are generated, whether readers write their own migration files, and how to start from an existing project (`supabase db schema declarative generate --linked`, with `supabase db dump` kept for the legacy engine). The entry's status stays `PRODUCT_STAGES.GA`. The feature is GA and only the new engine is alpha, and the new paragraph says so. This should merge with or after the launch blog post (#51571), so the page doesn't get ahead of the announcement. ## Preview links | Site | Live | Preview | Search for | | ---- | ---- | ------- | ---------- | | WWW | [/features/declarative-schemas](https://supabase.com/features/declarative-schemas) | Vercel bot comment on this PR, `/features/declarative-schemas` | `now runs on` | ## Review instructions 1. Open the live and preview links side by side. 2. Check that the new paragraph appears after the intro and renders its inline code. 3. Check that key benefit 5 and the CLI integration bullet use the new text. 4. Check the three updated FAQ answers: how declarative schemas differ from migrations, whether you write your own migration files, and using declarative schemas with an existing project. 5. Confirm the status badge still reads General Availability. ## Checklist Check all before review: - [ ] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Wendie Cheung <wendie.cheung@supabase.io> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> Co-authored-by: Wen Bo Xie <wenbox323@gmail.com> |
||
|
|
6f23988169 |
feat(blog): add Declarative Schemas 2.0 with pg-delta post (#51571)
## Problem Declarative Schemas 2.0 runs on `pg-delta`. It needs a launch blog post. ## Solution Adds `apps/www/_blog/2026-10-13-declarative-schemas-2-0-pg-delta.mdx`, which will publish at `/blog/declarative-schemas-2-0-pg-delta`. The post covers why the diff engine was rebuilt, what the new diff covers, how to turn it on, a four-step walkthrough, and what stays out of scope. Adds the social and thumbnail images in `apps/www/public/images/blog/select-rewind-2026-declarative-schemas-2-blog/` (`og.png`, `thumb.png`) and references them from `imgSocial` and `imgThumb`. ## Preview links | Site | Live | Preview | Search for | | ---- | ---- | ------- | ---------- | | WWW | Not live yet | [/blog/declarative-schemas-2-0-pg-delta](https://zone-www-dot-com-git-wendiecheung-declarative-s-817801-supabase.vercel.app/blog/declarative-schemas-2-0-pg-delta) | `Declarative Schemas 2.0` | ## Review instructions 1. Open the preview link. 2. Check that the comparison table, code blocks, and links render. 3. Check that the post shows its thumbnail on `/blog` and its social image in the page metadata. 4. Confirm the frontmatter: title, description, authors (`avallete`, `wenbo`), date, tags, and images. ## Checklist Check all before review: - [ ] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Wendie Cheung <wendie.cheung@supabase.io> Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com> Co-authored-by: Wen Bo Xie <wenbox323@gmail.com> Co-authored-by: Prashant Sridharan <prashant_sridharan@hotmail.com> |
||
|
|
05396e3378 |
[DOCS-1422] feat: create GitHub workflow or script to fetch troubleshooting (#51365)
## Problem Currently troubleshooting guides merged in a private repository trigger an action to open a PR against our Docs project. From now on, we want the `kb` to host the troubleshooting guides and take care of all the Github discussion process while improving some of its parts. ## Solution With this PR now: - All files and scripts related to handling the actions and processes for handling troubleshooting entries and GitHub Discussion creation on Docs are deleted. - A new workflow to sync troubleshooting guides with Supabase's `troubleshooting_entries` table was created with some improvements. - Now troubleshooting entries are fetched at pre-build in `kb` project directory. - When troubleshooting guides are created a new script detects this, creates the GitHub discussion for it, extracts the URL, and pushes the row to a db table at `push`. - When troubleshooting guides are updated, a checksum holding its title and body is compared, and the GitHub discussion content gets updated. _Note: all troubleshooting content hasn't been migrated for **kb**, so content not ready is filtered and not placed in the directory. This allow us to progressively migrate all pages without breaking the build._ <!-- ## Preview links If relevant, include links to changed pages for easy review access. Copy the preview base URL from the Vercel bot comment on this PR. Use the following table as an example template. | Site | Live | Preview | Search for | | -------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------- | | WWW | [/blog/your-post](https://supabase.com/blog/your-post) | [/blog/your-post](https://zone-www-dot-com-git-branch-name-supabase.vercel.app/blog/your-post) | unique phrase from the change | | Docs | [/docs/guides/your-page](https://supabase.com/docs/guides/your-page) | [/docs/guides/your-page](https://docs-git-branch-name-supabase.vercel.app/docs/guides/your-page) | unique phrase from the change | | Studio | [/dashboard](https://supabase.com/dashboard) | [/dashboard](https://studio-git-branch-name-supabase.vercel.app/dashboard) | unique phrase from the change | | Design system | [/design-system](https://supabase.com/design-system) | [/design-system](https://design-system-git-branch-name-supabase.vercel.app/design-system) | unique phrase from the change | | UI library | [/library](https://supabase.com/library) | [/library](https://ui-library-git-branch-name-supabase.vercel.app/library) | unique phrase from the change | | Knowledge base | [/kb/guides/your-page](https://supabase.com/kb/guides/your-page) | [/kb/guides/your-page](https://kb-git-branch-name-supabase.vercel.app/kb/guides/your-page) | unique phrase from the change | --> <!-- ## Additional context Optionally add any other context or screenshots. --> ## Review instructions For the database workflow, sadly, we will have to wait and monitor, but the fetching mechanism can be tested. 1. Go to the preview link for `kb` 2. Go to Topics > Troubleshooting 3. A new guide should be visible "Partial migrations and schema inconsistencies from embedded transactions", click on its link 4. A page showing the guide's content should render <img width="1022" height="810" alt="Screenshot 2026-10-07 at 13 19 17" src="https://github.com/user-attachments/assets/cbd25a60-8721-4329-907f-f92de894c217" /> ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) |
||
|
|
eaad809abf |
fix: webhook retry error handling (nested error envelope + unhandled rejections) (#51591)
## What
Fixes two bugs found while writing component tests for the platform
webhooks page (follow-up to FE-3749):
1. The webhooks API nests error details under an `error` key (`{ error:
{ code, message } }`), but the shared `handleError` only reads a
top-level `message`. This meant the friendly rate-limit message ("wait a
minute and try again") never actually fired, it always fell back to a
generic error. Fixed with a local unwrapping `handleError` in
`platform-webhooks-fetchers.ts`.
2. Every mutation handler on the page (`mutateAsync` for
create/update/delete/regenerate-secret/send-test-event/retry) left the
re-thrown error from React Query uncaught, producing an unhandled
promise rejection on every failure, even though the error toast itself
was already correct. Fixed by wrapping each call in try/catch.
## Why
Found while writing the stacked test PR for FE-3749; filed as
[FE-4620](https://linear.app/supabase/issue/FE-4620/two-webhook-error-handling-bugs-found-while-writing-retryrate-limit)
since it's a correctness fix independent of the test work.
## Testing
Manually verified both fixes on localhost: rate-limit retry now shows
the friendly message, and no `Uncaught (in promise)` errors appear in
the console on any mutation failure.
|
||
|
|
700365ffba |
fix(pg-meta): generate privilege, publication, role and schema SQL that servers can statically check (#51457)
## What kind of change does this PR introduce? Bug fix. ## What is the current behavior? On a project whose database server statically checks `DO` blocks before running them (Multigres does), several Studio actions fail: - Creating a table shows "Failed to update API access privileges for new table", although the table is created. - Toggling Realtime for a table fails with `EXECUTE of a runtime-built statement inside a PL/pgSQL body is not supported`. - The same error blocks editing a role or schema (rename, owner, drop) and changing column privileges. All of these come from SQL that `@supabase/pg-meta` generates. Such a server only accepts a dynamic `EXECUTE` when it can prove the statement is fixed, and two shapes in our SQL prevent that: - parentheses around the payload: `execute(format(...))` - `%s` conversions in `format()` strings, which substitute raw text (for example `%s` fed by `<oid>::regclass`, by a `string_agg(...)` subselect, or by a variable holding a table list) ## What is the new behavior? `tablePrivileges.grant/revoke`, `columnPrivileges.grant/revoke`, `publications.update`, `roles.update/remove` and `schemas.update/remove` generate SQL with no parentheses around the payload and only `%I`/`%L` conversions: - Table and column privileges name the table with `%I.%I`, taking the schema and name from `pg_class`/`pg_namespace`. - The publication update loops over the tables to drop and to add, with the same `tables` semantics as before (`undefined` keeps the tables, `null` publishes all tables, a list replaces them, bare names resolve through the search path). - `schemas.remove` picks between `drop schema … cascade` and `… restrict` with two plain statements instead of a `%s` fed by a `CASE`. - The grant and revoke format strings are built with `literal()`, so a quote in a role name can't end the string early. The statements are equivalent on regular Postgres. ## Additional context - New tests: replacing, clearing and keeping a publication's tables, switching between a table list and all tables, and a test (no database needed) that fails if the generated SQL of any of these builders goes back to `execute(...)` or `%s`. - I ran the pg-meta tests against a local Postgres 17. A set of existing snapshot tests were recorded on Postgres 14 and fail there with and without this change (for example the new `MAINTAIN` privilege in table privileges), so CI is the real check for those. The tests covering the changed SQL pass. - Some other Studio SQL is blocked on such servers for different reasons (for example creating foreign servers, and `SET` inside a `DO` block). It isn't addressed here. --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
bdb86f4e59 |
chore(www): add blog post: Ship changes to your Supabase backend with Grok Bot (#51430)
## 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? New blog post (www): "Ship changes to your Supabase backend with Grok Bot", announcing Supabase joining the SpaceXAI Partner Network. ## What is the current behavior? N/A ## What is the new behavior? Adds `/blog/ship-changes-to-your-supabase-backend-with-grok-bot`, dated 2026-10-13, with Nick Littman, Elsa Heffernan, and Shaziya Bandukia as authors. ## Additional context Also updates Nick Littman's title in `authors.json` to Solution Architect. --------- Co-authored-by: dshukertjr <dshukertjr@gmail.com> |
||
|
|
3a33cbcce5 |
Show main branch as part of the empty state (#51607)
## Context Shows the production branch as part of the branching empty state (Shifts `BranchingEmptyState` into `Overview`) It's so that users can still then reach the "View logs" button for the production branch which was otherwise hidden <img width="1214" height="531" alt="image" src="https://github.com/user-attachments/assets/3bc702f2-950b-4d9e-8b4f-78149af9ed82" /> |
||
|
|
287c36447a |
chore(docs): add Matt McGill to humans.txt (#51610)
## Problem I joined Supabase! ## Solution I've recorded that I joined Supabase! ## Checklist Check all before review: - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) |
||
|
|
4bf7b16473 |
feat(studio): scoped oauth apps reconsent UI (#51078)
## Problem When users must grant access to an app they already added because its scopes changed, they should have a clear understanding of the changes ## Solution Show only the scopes differences by default <img width="844" height="962" alt="image" src="https://github.com/user-attachments/assets/6289f4cf-200f-4660-b9a1-aedbaaa963e3" /> ## Review instructions Try this UI with [`authorize?mock_scenario=reconsent`](https://studio-staging-git-gildasgarcia-oauth-apps-inte-6106b6-supabase.vercel.app/dashboard/authorize?mock_scenario=reconsent) --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
25708ed67a |
chore(studio): storage versioning override conflict (#51593)
## Problem When uploading a file with same name of already existing file, the ui automatically creates a new file with incremental number and doesn't consider the scenario of giving the possibility of storing the new upload as a version of the already existing file. ## Solution Provide modal to chose the behaviour when name conflict happens when uploading a file: - Replace existing file (same file with version history) - Keep both (new file with incremental numbering) https://github.com/user-attachments/assets/ee192be9-4087-4e14-89f1-1c82acf550cd Manage edge case of clashes with files created when bucket had versioning enabled (so with `is_versioned` flag to true) and clashing upload happens when bucket is in SUSPENDED state. https://github.com/user-attachments/assets/00694c77-07c1-405e-bd54-bdf0bf99d274 Unrelated fix: - add "Delete permanently" action when selecting multiple files with versioning enabled <img width="510" height="203" alt="Screenshot 2026-10-13 at 15 59 27" src="https://github.com/user-attachments/assets/5692fc23-2fd3-4259-9de2-3932aecbccd0" /> |
||
|
|
8b9af56867 |
feat(studio): link specific region to regions docs in free-tier region selector (#51590)
<!-- claude-slack-attribution --> _Requested by **Charis Lam** · [Slack thread](https://supabase.slack.com/archives/C0161K73J1J/p1791896774914759)_ **Before:** The free-tier region selector footer read "Upgrade to Pro to choose a specific region." with only "Upgrade to Pro" linked (to the billing plan panel). **After:** "specific region" also links to https://supabase.com/docs/guides/platform/regions (opens in a new tab), so users can see which regions exist. Requested by Lukas Bernert on #51282. Wrapped "specific region" in `InlineLink` with `${DOCS_URL}/guides/platform/regions` in `RegionSelector.tsx` and extended the existing wizard test to assert the link href. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01TsqepmwoWCXiv9BTxQK7MD --- _Generated by [Claude Code](https://claude.ai/code/session_01TsqepmwoWCXiv9BTxQK7MD)_ Co-authored-by: Claude <noreply@anthropic.com> Co-authored-by: Ali Waseem <waseema393@gmail.com> |
||
|
|
2ba7352cfe |
docs: clarify declarative pg_cron job workflow (#51596)
## Problem The declarative schemas guide does not explain how pg-delta tracks pg_cron jobs. Its guidance that schema diffs exclude row data can also suggest that jobs stored in cron.job are excluded. Readers need to know where to declare jobs, how changes become migrations, and why jobs without unique names are skipped. ## Solution Document the declarative workflow for pg_cron jobs, including: - Declaring jobs in SQL files under supabase/schemas/. - Giving each job a unique name. - Generating migrations when job declarations change or are removed. - The scheduling and unscheduling calls emitted by the engine. Connect the DML caveat to the extension configuration explanation so readers understand why supported configuration rows are tracked. Validation: Prettier, Markdown generation, and git diff --check passed. The cron workflow was checked against source code but was not executed in a sandbox. ## Review instructions 1. Open the declarative database schemas guide in the docs preview. 2. Read Data manipulation language and follow the extension configuration link. 3. In Extension-managed objects, confirm that the cron guidance explains where to declare jobs, the naming requirement, and the generated migration behavior. 4. Follow generate and apply a migration and confirm it leads to the existing workflow. ## Checklist - [x] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [x] If I wrote a new docs topic or edited an existing topic, I used the /write-the-docs or /edit-the-docs skill, which applies the docs [style guide](https://github.com/supabase/supabase/tree/master/apps/docs/style-guide) |
||
|
|
1b1c495c6a |
docs: note deno.json/package.json required for .npmrc (#50320)
## Summary - .npmrc is only read when deno.json or package.json also exists in the function's directory. Adds a caution note to the private npm packages section. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit - **Documentation** - Added a caution explaining that private NPM package configuration requires a `deno.json` or `package.json` file in the function directory. - Clarified that `.npmrc` is ignored when neither configuration file is present. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
e0d3489c87 |
fix: ESLint errors relating to accessibility in project settings (#50848)
## Problem Some aria-label and Tooltip are missing for icon-only buttons. The components are used in - project settings / infrastructure - integrations / data API / settings ## Solution Improving accessibility by adding `aria-label` and `Tooltip`. <!-- ## Preview links If relevant, include links to changed pages for easy review access. Copy the preview base URL from the Vercel bot comment on this PR. Use the following table as an example template. | Site | Live | Preview | Search for | | -------------- | ------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------ | ----------------------------- | | WWW | [/blog/your-post](https://supabase.com/blog/your-post) | [/blog/your-post](https://zone-www-dot-com-git-branch-name-supabase.vercel.app/blog/your-post) | unique phrase from the change | | Docs | [/docs/guides/your-page](https://supabase.com/docs/guides/your-page) | [/docs/guides/your-page](https://docs-git-branch-name-supabase.vercel.app/docs/guides/your-page) | unique phrase from the change | | Studio | [/dashboard](https://supabase.com/dashboard) | [/dashboard](https://studio-git-branch-name-supabase.vercel.app/dashboard) | unique phrase from the change | | Design system | [/design-system](https://supabase.com/design-system) | [/design-system](https://design-system-git-branch-name-supabase.vercel.app/design-system) | unique phrase from the change | | UI library | [/library](https://supabase.com/library) | [/library](https://ui-library-git-branch-name-supabase.vercel.app/library) | unique phrase from the change | | Knowledge base | [/kb/guides/your-page](https://supabase.com/kb/guides/your-page) | [/kb/guides/your-page](https://kb-git-branch-name-supabase.vercel.app/kb/guides/your-page) | unique phrase from the change | --> <!-- ## Additional context No visual changes have been made. --> ## Review instructions Provide a clear numbered procedure that the PR reviewer can walk through. 1. Open the pages where the updated components are used 2. See that the tooltips appear correctly when interacting with the relevant elements ## Checklist Check all before review: - [X] I have read [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) - [ ] If I wrote a new docs topic or edited an existing topic, I used the `/write-the-docs` or `/edit-the-docs` skill, which references [WORD_LIST](https://github.com/supabase/supabase/blob/master/apps/docs/WORD_LIST.md) and the docs [CONTRIBUTING](https://github.com/supabase/supabase/blob/master/apps/docs/CONTRIBUTING.md) guide <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Accessibility** * API function, schema, and table selectors have clear accessible names and tooltips. * Selector status summaries are announced politely by screen readers, including schema loading states and available counts. * **UI** * Simplified the layout of the “Automatically expose new tables” setting without changing its behavior. * Corrected the transition styling on the infrastructure flow button; its reduced-motion behavior remains unchanged. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Gildas Garcia <1122076+djhi@users.noreply.github.com> |
||
|
|
44ed522778 |
chore(studio): bump no-arbitrary-values ratchet baseline to 198 (#51594)
<!-- claude-slack-attribution --> _Requested by **Charis Lam** · [Slack thread](https://supabase.slack.com/archives/C0161K73J1J/p1791896774914759)_ **Before:** The `ratchet` check fails on any PR that includes current master. The baseline for `shadcn/no-arbitrary-values` is 197, but master has 198 since `text-[11px]` landed in `ArchivedVersionRestoreWidget.tsx` via #51476. The baseline bot lowered it to 197 right after (#51524). **After:** The baseline is 198, matching master, so the check passes again. This only changes that one rule's number (plus its per-file breakdown entry for the widget) in `apps/studio/.github/eslint-rule-baselines.json` and leaves the underlying arbitrary value for its owner to fix. 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_01TsqepmwoWCXiv9BTxQK7MD --- _Generated by [Claude Code](https://claude.ai/code/session_01TsqepmwoWCXiv9BTxQK7MD)_ Co-authored-by: Claude <noreply@anthropic.com> |
||
|
|
9e05961079 |
feat(kb) - add edit page on github links to bottom of KB guides (#51268)
## Problem The current KB guides don't have clear mappings back to their GitHub source content, which is helpful for a) suggestions and fixes and b) overall trust in the material we're putting out there. ## Solution Adds in this functionality. May need to be conditionally hidden for some areas, depending where we'd be sourcing the content from in the future. ## Preview links - https://kb-git-kody-market-2404-kb-add-edit-github-links-supabase.vercel.app/kb/guides/migrate-from-amazon-rds <img width="1112" height="481" alt="Screenshot 2026-10-05 at 9 15 51 AM" src="https://github.com/user-attachments/assets/ce95982c-27e3-48da-a6a5-9821d58e2b35" /> |