Commit Graph

39194 Commits

Author SHA1 Message Date
Alaister Young
3293a8bbad Merge branch 'master' into codex/fix-tanstack-e2e 2026-10-19 11:38:09 +02:00
Joshen Lim
7a9565530c Fix handle truncation for multi dim array for table-row-query (#51834)
## Context

If you create a table with a `jsonb` **array** column, then try to
insert a new row with `[["` as the `jsonb` column value, the dashboard
currently incorrectly flags it as a large value and blocks the user from
editing it

<img width="583" height="133" alt="image"
src="https://github.com/user-attachments/assets/28b89648-12b6-4b49-a862-b4ec0db03e24"
/>

It's happening due to a small issue in `table-row-query` regarding its
truncation logic, a stop gap to prevent fetching large column values
which will cause browser performance issues. Multi dimension arrays are
being handled differently in which there's no `...` appended at the end.
And hence the naive check in `isValueTruncated` caused this issue to
happen.

Opting to adjust the SQL in `table-row-query` to align the truncation
behaviour for multi dim array, such that it will end with `...` if the
value being fetched is too large.

## To test

We mainly need to ensure that the original problem no longer happens +
truncation of large values is still working as expected. The following
SQL here sets up some sample rows to test the truncation logic in the
UI.

```
create table trunc_test (
  id int primary key,
  label text,
  big_text text,
  big_json jsonb,
  big_text_1d text[],
  big_grid text[][],
  big_docs jsonb[][],
  small_grid text[][],
  small_docs jsonb[]
);

insert into trunc_test values
  -- row 1: everything large
  (1, 'large', repeat('a', 20000),
   jsonb_build_object('k', repeat('b', 20000)),
   (select array_agg(repeat('c', 300)) from generate_series(1, 120)),
   (select array_agg(array[repeat('d', 300), 'x']) from generate_series(1, 120)),
   (select array_agg(array['{"k":1}'::jsonb, to_jsonb(repeat('e', 300))]) from generate_series(1, 120)),
   array[array['a','b'], array['c','d']],
   array['["x"]'::jsonb]),
  -- row 2: everything small
  (2, 'small', 'hi', '{"k":1}', array['a'], array[array['a','b'], array['c','d']],
   array[array['{"k":1}'::jsonb]], array[array['a','b'], array['c','d']], array['["x"]'::jsonb]);
```
2026-10-19 17:03:11 +08:00
Drew McLellan
b859ca0659 fix(studio): send exit survey before deleting a project (#51844)
## Problem

Deleting a paid project could show a "Failed to submit exit survey"
toast with a permissions error. The survey was sent after the delete
succeeded. Deleting a project removes its permissions, so the survey
endpoint's project-level access check rejected the request with a 403.

<img width="510" height="196" alt="Screenshot 2026-10-16 at 15 27 40"
src="https://github.com/user-attachments/assets/f01cb89f-597e-492d-bfc4-37f7260c25d3"
/>

## Solution

- Send the exit survey before the delete, while the project still has
its permissions.
- Never block the delete on the survey: a failed survey is ignored.
- Pass a no-op `onError` so the survey failure toast no longer shows.
The old `catch` swallowed the exception but not the hook's default
toast.

## Known trade-off

If the survey succeeds and the delete then fails, a survey is recorded
for a project that still exists. A separate backend change to authorize
deletes against the organization would let the survey move back after
the delete.

## How to test

- Delete a project on a paid plan with a survey reason selected: no
error toast, the survey is recorded, and the project is deleted.
- `pnpm --filter studio exec vitest run
components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectModal.test.tsx`
2026-10-19 09:50:04 +01:00
Timothy Lim
b37576924f docs(troubleshooting): Update "Formatting support requests" guide (#51824)
- Remove unnecessary quotes
- Added minor additions to all cater guide to non LLM usage


## Review instructions

Just content changes 

## 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)
2026-10-19 08:15:01 +08:00
Danny White
69f46a4ab5 fix(studio): guard unsaved pipeline creation navigation (#51823)
## Problem

Browser Back and router navigation can leave the pipeline wizard without
confirming unsaved changes. This is a slice of #49243, builds on merged
#51821.

## Solution

- Protect unsaved changes in both runtimes: Close and header links use
the discard dialog; document exits and refresh use the browser warning.
- Add TanStack confirmation for client-side navigation, preserving
Back/Forward history. Step changes do not prompt.

Next.js client-side router exits remain outside this slice. **Start
pipeline** stays disabled.

## Review instructions

1. Open the [Pipelines
preview](https://studio-staging-git-dnywh-featpipeline-navigation-guard-supabase.vercel.app/dashboard/project/_/database/pipelines),
choose a test project and enable **Pipeline creation wizard**. Open the
[wizard
preview](https://studio-staging-git-dnywh-featpipeline-navigation-guard-supabase.vercel.app/dashboard/project/_/database/pipelines/new).
2. Continue to Connection and enter a pipeline name. Try a header link
and **Close**: **Keep editing** preserves values, while **Discard
changes** leaves without a second prompt.
3. Use browser Back to return to Destination without a prompt, then Back
again to leave. Cancel the prompt and check the URL and values remain;
Forward should still reach Connection. Document exits show the native
browser warning in both runtimes; TanStack client-side exits show **Keep
editing / Discard changes**.
4. With changes, refresh and cancel the browser warning. Check values
remain. A fresh wizard with no changes should close without
confirmation.
2026-10-19 10:43:42 +11:00
Danny White
25ede7243e feat(studio): validate pipeline wizard data settings (#51821)
## Problem

The pipeline wizard lets users reach Review without a valid publication
or initial-sync selection. This is a slice of #49243, following the
merged #51818.

## Solution

- Refresh publication metadata on **Continue** and reject unavailable
publications or removed initial-sync tables.
- Validate initial-sync and advanced data settings, reveal invalid
fields and preserve values for retry.
- Block browser-history shortcuts to Review after data settings change.

| Normal State | Error State (Expanded) |
| --- | --- |
| <img width="1486" height="1010" alt="CleanShot 2026-10-16 at 13 18
25@2x"
src="https://github.com/user-attachments/assets/74ec0785-3bd4-407a-aa3c-7fe69c338488"
/> | <img width="1506" height="2516" alt="CleanShot 2026-10-16 at 13 21
27@2x"
src="https://github.com/user-attachments/assets/6193d8c4-ab9d-47ca-9d9d-1a31198145d1"
/> |

Pipeline creation and navigation-out guards remain for later slices.
**Start pipeline** stays disabled.

## Review instructions

1. Open the [Pipelines
preview](https://studio-staging-git-dnywh-featpipeline-data-validation-supabase.vercel.app/dashboard/project/_/database/pipelines),
select a test project and enable **Pipeline creation wizard**. Open the
[wizard
preview](https://studio-staging-git-dnywh-featpipeline-data-validation-supabase.vercel.app/dashboard/project/_/database/pipelines/new),
choose a destination, then enter credentials and test the connection to
reach Data.
2. Click **Continue** without a publication. Check the field error.
Select a publication, choose a selective initial-sync mode and leave its
table selection empty. Check Continue requires at least one table.
Select a table and confirm you can reach Review.
3. Return to Data. Enter a negative **Batch wait time** under **Advanced
settings**, collapse it and click Continue. Check it reopens with the
error. Correct it and continue, then use browser Back, change a data
setting and try browser Forward. Check you stay on Data until you click
Continue again.
4. For a stale-selection check, select an initial-sync table, remove it
from the publication in another tab, then click Continue. Check the
selection is rejected and your other values remain. A failed metadata
request should also keep values and allow retry with Continue.
2026-10-19 10:32:09 +11:00
Danny White
8047d93e3c feat(studio): validate pipeline wizard connections (#51818)
## Problem

The pipeline wizard from #51776 allows users to continue without valid
destination credentials. This is the next slice of #49243.

## Solution

- Validate connection fields for all four destinations using the
existing schemas and helpers.
- Validate the destination on **Continue** and advance to Data on
success. Show field errors and connection failures inline; pause for
warnings before continuing.
- Require a new check after connection settings change and block
browser-history shortcuts past an unverified connection.

| Errored Test | Success Test |
| --- | --- |
| <img width="1532" height="2062" alt="CleanShot 2026-10-16 at 12 19
51@2x"
src="https://github.com/user-attachments/assets/a40a6c01-ee89-4601-b5d7-6ffc85071dc7"
/> | <img width="1500" height="1950" alt="CleanShot 2026-10-16 at 12 18
33@2x"
src="https://github.com/user-attachments/assets/c50c1ad4-256b-44b5-bd06-ec0685aae759"
/> |
 
The screenshots show earlier test states; successful checks now advance
directly to Data.

Data validation and pipeline creation remain for later slices. **Start
pipeline** stays disabled.

## Review instructions

1. Open the [Pipelines
preview](https://studio-staging-git-dnywh-featpipeline-connectio-eb9566-supabase.vercel.app/dashboard/project/_/database/pipelines),
select a test project and enable **Pipeline creation wizard**. Open the
[wizard
preview](https://studio-staging-git-dnywh-featpipeline-connectio-eb9566-supabase.vercel.app/dashboard/project/_/database/pipelines/new)
for that project.
2. Choose a destination and click **Continue** with empty or invalid
fields. Check the errors, then enter valid credentials and retry. A
failed check keeps your values. A failed result stays visible while
editing, until retry or destination change. Changed settings still
require a fresh check. A successful check opens Data automatically;
warnings remain for review before continuing.
3. Continue to Data, return to Connection and change a credential or
advanced connection setting. Check that browser **Forward** cannot skip
the new check, then click **Continue** to validate again.
2026-10-19 10:15:08 +11:00
farleythomas
7425d49305 Update humans.txt (#50972)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Documentation**
  * Added Farley Thomas to the team list.

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

Co-authored-by: Nik Richers <nrichers@gmail.com>
2026-10-17 01:40:18 +00:00
Carlos Robles
33ab4f5016 chore: Add Carlos Robles to humans.txt (#51145)
Adds Carlos Robles to `apps/docs/public/humans.txt`, in alphabetical
order between Carel de Waal and Carson Adam.

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

## Summary by CodeRabbit

* **Documentation**
  * Added Carlos Robles to the team list.

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

Co-authored-by: Nik Richers <nrichers@gmail.com>
2026-10-17 01:13:35 +00:00
Masha Koltsova
f85058c044 Add Masha Koltsova to humans.txt (#47809)
adding myself to humans.txt as a new employee 

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

## Summary by CodeRabbit

* **Documentation**
  * Added Masha Koltsova to the team information page.

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

Co-authored-by: Nik Richers <nrichers@gmail.com>
2026-10-17 01:13:19 +00:00
Daniel Bergqvist
56f4879e1d Add Daniel Bergqvist to humans.txt (#51021)
## Problem

Describe what went wrong or what need emerged to justify this bug fix,
feature, or change.
Link any relevant issues here.

## Solution

Provide a brief description of the change and the key choices you made
when architecting the solution.
Feel free to include screenshots if it includes visual changes.

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

Provide a clear numbered procedure that the PR reviewer can walk
through.

1. For example, `Open the live and preview links side-by-side.`
2. For example, `See the issue is fixed.`

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

Co-authored-by: Nik Richers <nrichers@gmail.com>
2026-10-17 01:10:32 +00:00
Francisco Ulate Alpízar
2c0ead476c Add Francisco Ulate to humans.txt (#48172)
Adding myself as part of the Supabase humans!!!

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

## What is the current behavior?

I'm not in the humans.txt

## What is the new behavior?

I'm now in the humans.txt

## Additional context

This is a task in my onboarding.


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

## Summary by CodeRabbit

* **Documentation**
  * Updated the team credits page to include Francisco Ulate.

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

Co-authored-by: Nik Richers <nrichers@gmail.com>
2026-10-17 01:08:52 +00:00
Anil Maharjan
8858324616 Add Anil Maharjan to humans.txt (#48423)
## Summary
- Add Anil Maharjan to the team list in humans.txt

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

## Summary by CodeRabbit

* **Documentation**
  * Added Anil Maharjan to the team roster on the documentation site.

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

Co-authored-by: Nik Richers <nrichers@gmail.com>
2026-10-17 01:06:08 +00:00
Chase Cresgy
962bd4e92f Offboarding update for humans.txt (#50655)
## 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




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

* **Documentation**
  * Removed two names from the public team listing.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-10-16 18:01:20 -07:00
Christian Melchior
cb874e1c8f Add Christian Melchior to humans.txt (#51172)
## Problem

My name was missing from `humans.txt`

## Solution

Name was added.


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

Provide a clear numbered procedure that the PR reviewer can walk
through.

1. For example, `Open the live and preview links side-by-side.`
2. For example, `See the issue is fixed.`

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


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

## Summary by CodeRabbit

* **Documentation**
* Updated the public team listing to include Christian Melchior. The
published credits now reflect this addition, making the team information
shown in the documentation more current. No other documentation or
user-facing changes are included in this update.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-10-16 17:59:52 -07:00
Andrew Jackson
df60bdcc53 Add Andrew Jackson to humans.txt (#48307)
## 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?

Add Andrew Jackson to humans.txt

## What is the current behavior?

Andrew Jackson is not in humans.txt.

## What is the new behavior?

Andrew Jackson is in humans.txt

## Additional context

N/A
2026-10-16 17:59:29 -07:00
Caleb Boylan
632dfed2ac Add Caleb Boylan to humans.txt (#51408)
## Problem

I was not in humans.txt

## Solution

I've added myself to humans.txt
2026-10-16 17:59:13 -07:00
Wendie Cheung
5281766182 feat(www): add Supabase Middleware feature page (#51840) 2026-10-17 07:10:48 +11:00
Wendie Cheung
ee0a1810bb blog(www): add Supabase Middleware launch blog post (#51786) 2026-10-17 07:10:28 +11:00
Kody Jackson
b8eca2e1c9 feat(docs) - Add in preferred source for Google under 'AI tools' (#51846)
## Problem

Google introduced a new pattern for [`adding preferred
sources`](https://developers.google.com/search/docs/appearance/preferred-sources#deeplink)
relatively recently, where you can set specific site providers as your
preference for Google results.

We don't support this yet, but should.

## Solution

Adds in a new link under the `AI Tools` section of the sidebar.

[preview](https://docs-git-kody-devrel-728-preferred-source-google-docs-supabase.vercel.app/docs/guides/getting-started)
<img width="448" height="548" alt="image"
src="https://github.com/user-attachments/assets/865dd93a-1575-47dc-b400-7df0f4ac7605"
/>

## Open questions

**Does this feel like the right implementation?**

Other approaches:
- Google allows you to add in [fancy buttons via
JS](https://developers.google.com/search/docs/appearance/preferred-sources#standard-javascript)...
but this'd be adding a new request on every page load which feels not
ideal.
- [Vercel
KB](https://vercel.com/kb/guide/rag-chatbot-production-architecture-on-vercel)
uses the `deeplink` implementation as well, but they add a stylized
button to the righthand side of the page.

My initial thought was that it felt too visually disruptive to have a
separate button on the righthand side. Thematically this fits with other
AI affordances too, so matching the current `AI Tools` styling felt
better.

**Does this match Google branch guidelines?**

On the [preferred sources
page](https://developers.google.com/search/docs/appearance/preferred-sources#button-image-assets),
Google seems to suggest that this element can be relatively freeform.

```
You can design your own custom promotion badge or download official translated graphic assets provided by Google:
```

There's stricter guidelines for [`Sign in with
Google`](https://developers.google.com/identity/branding-guidelines#google-logo-in-the-sign-in-with-google-button)...
specifically, `don't Use monochrome versions of the Google "G" for the
button.`

Feel like that's more specific to *just* sign-in with Google, but worth
another brain confirming that.

## Preview links


https://docs-git-kody-devrel-728-preferred-source-google-docs-supabase.vercel.app/docs/guides/getting-started

---------

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
Co-authored-by: anthony lio <lionnet.ant@gmail.com>
2026-10-16 13:44:47 -05:00
Charis
27e6259a39 chore(studio): remove legacy status banner and incidentIoStatusPage flag (#51852)
## Summary

The incident.io status page is now the only status banner for everyone,
so the legacy status banner path is removed:

- Removed the `incidentIoStatusPage` ConfigCat flag. The incident.io
path is unconditional.
- Deleted the legacy status banner code (`StatusPageBanner` and its
utils/visibility hook) and its tests.
- Deleted the legacy API endpoints `/api/incident-banner`,
`/api/incident-status`, and `/api/status-override` (pages, app, and
routes variants), along with their data hooks, query keys, and lib
helpers.
- Removed `STATUSPAGE_*` env vars from the Turbo config and the
`INCIDENT_BANNER_DISMISSED_IDS` local storage key from
`packages/common`.
- Updated the AI tools and SQL generation endpoint that read the flag.

`NEXT_PUBLIC_ONGOING_INCIDENT` / the `ongoingIncident` override is kept.

The `incident_status_cache` table and its migration are intentionally
untouched. Studio no longer reads it, and dropping it is a separate
cleanup.

## Testing

- Studio typecheck passes.
- Related vitest suites pass (414 tests).
2026-10-16 14:18:32 -04:00
Charis
a499db95f9 refactor(studio): migrate execute_sql, deploy_edge_function, rename_chat, and load_knowledge to tool contracts (#51803)
## Summary

Migrates four more assistant tools to the contract + `.server.ts`
pattern used by the notebook tools. Each tool now declares its schemas,
opt-in level, approval and model-visible output once.

## Changes

* Add contracts and server factories for `execute_sql`,
`deploy_edge_function`, `rename_chat`, `load_knowledge`;
`getStudioTools` now composes them.
* Add `execute-sql-output.ts` (output schema, `toModelRows`,
`NO_DATA_PERMISSIONS`) and `knowledge-topics.ts` (topic names + UI
labels, replacing the copy in `Message.Parts.utils.ts`).
* Delete `executeSqlSanitizer` and `ALL_TOOL_SANITIZERS`; history replay
goes through `sanitizeContractPart` only.
* Drop the four tools from `TOOL_CATEGORY_MAP`; the UI and evals import
schemas from the contracts; `rename_chat` input casts now use the
contract type.

## Deviations worth reviewing

* `execute_sql` replay: a bare-array legacy output is stamped `schema`
via a union transform (still hidden from the model, still shown in the
UI). A malformed non-array output is now dropped, where before it passed
through at the data level.
* The "no data permission" message now reaches the model as a JSON
string value instead of a text part. The text the model sees is
unchanged.
* `deploy_edge_function` output is now strictly `{ success: boolean }`
in the UI parse (was optional/passthrough).
2026-10-16 12:40:54 -04:00
Alexis Aguilar
add223d7b3 docs(style-guide): add rules for list lead-ins and UI instruction order (#51632)
## Problem

Two writing patterns came up while editing the Vercel Marketplace guide
in #51630, and the style guide doesn't cover either one.

- **References to a list:** When another sentence sits between a
reference and its list, as in "start from these tabs. Each one opens a
different page:", _these_ has nothing to point back to. Nothing in the
style guide covers this.
- **Order of UI instructions:** Nothing says whether an instruction
names the location or the control first. "Click **Manage** next to
Supabase" asks the reader to look for **Manage** before they know where
it is.

Resolves DOCS-1452.

## Solution

`02-elements.md` gets a new rule for lists and an addition to the
existing step guidance, each with a recommended and a not recommended
example.

- **Point forward to a list with _the following_** (under **Lists**):
When another sentence sits between a reference and its list, use _the
following_, which points forward. When the reference is directly before
the list, _these_ works too.
- **Location before the action** (under **Procedures**): The step
guidance now says that a step can begin with a short location phrase
followed by the imperative verb, and that when a step says where to act,
the location comes first.

The examples use _click_ for buttons, following the `click` and `select`
entries in `WORD_LIST.md`.

## Review instructions

1. Open `apps/docs/style-guide/02-elements.md` in the **Files changed**
tab.
2. Read **Point forward to a list with _the following_** under
**Lists**, and confirm that the examples separate the two cases: a
reference directly before the list, and one with a sentence in between.
3. Read the step guidance at the start of **Procedures**, and confirm
that the examples agree with the `click` entry in `WORD_LIST.md`.

## 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: Miranda Limonczenko <miranda.limonczenko@supabase.io>
2026-10-16 09:07:04 -07:00
Kody Jackson
8f1e65f0a3 chore(www): add blog cross-links and fix outdated links (2024 posts) (#51767)
## Summary

- Adds cross-links from 2024 blog posts to related pages on supabase.com
where the post already mentions the topic.
- Updates existing links in these posts that redirected or returned 404
so they point to the final destination.

## Notes

- Link changes only; no prose changes beyond wrapping existing wording
in links.
- All internal targets were checked against the sitemap.

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

---------

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-16 09:54:00 -05:00
Kody Jackson
cc2517115c chore(www): add blog cross-links and fix outdated links (2023 posts) (#51766)
## Summary

- Adds cross-links from 2023 blog posts to related pages on supabase.com
where the post already mentions the topic.
- Updates existing links in these posts that redirected or returned 404
so they point to the final destination.

## Notes

- Link changes only; no prose changes beyond wrapping existing wording
in links.
- All internal targets were checked against the sitemap.

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

---------

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-16 09:53:51 -05:00
Kody Jackson
f6a6a8bff0 chore(www): add blog cross-links and fix outdated links (2025 posts) (#51768)
## Summary

- Adds cross-links from 2025 blog posts to related pages on supabase.com
where the post already mentions the topic.
- Updates existing links in these posts that redirected or returned 404
so they point to the final destination.

## Notes

- Link changes only; no prose changes beyond wrapping existing wording
in links.
- All internal targets were checked against the sitemap.

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

---------

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-16 09:53:22 -05:00
Kody Jackson
97df268569 chore(www): add blog cross-links and fix outdated links (2026 posts) (#51769)
## Summary

- Adds cross-links from 2026 blog posts to related pages on supabase.com
where the post already mentions the topic.
- Updates existing links in these posts that redirected or returned 404
so they point to the final destination.

## Notes

- Link changes only; no prose changes beyond wrapping existing wording
in links.
- All internal targets were checked against the sitemap.

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

---------

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-16 09:52:51 -05:00
Jordi Enric
4e1c6b5907 fix(logs): preserve pagination cursor precision DEBUG-229 (#51597)
## Problem

Rhe dashboard used only the last log's time to decide where to continue,
and shortened that time to milliseconds. This could skip logs with the
same recorded time, or times less than a millisecond apart, between one
page and the next. This could happen even with Live turned off.

## Fix

Use both the last log's full recorded time and its unique ID to decide
where the next page starts. This lets the dashboard continue from the
right log, even when several logs have the same time. The fix works with
both supported log services.

This PR fixes missing logs when loading older results. It does not
change how Live fetches new logs; that improvement is handled separately
in [#51599](https://github.com/supabase/supabase/pull/51599).

Part 1/9 of the replacement stack for #51090, tracked by
[DEBUG-229](https://linear.app/supabase/issue/DEBUG-229/make-live-mode-incremental).
Targets master; review and merge the stack in order. This diff contains
389 changed lines, including tests.

Stack: [#51597](https://github.com/supabase/supabase/pull/51597) →
[#51598](https://github.com/supabase/supabase/pull/51598) →
[#51599](https://github.com/supabase/supabase/pull/51599) →
[#51600](https://github.com/supabase/supabase/pull/51600) →
[#51601](https://github.com/supabase/supabase/pull/51601) →
[#51602](https://github.com/supabase/supabase/pull/51602) →
[#51603](https://github.com/supabase/supabase/pull/51603) →
[#51604](https://github.com/supabase/supabase/pull/51604) →
[#51605](https://github.com/supabase/supabase/pull/51605).

## How to test

- `pnpm --filter studio exec vitest run
data/logs/unified-logs-pagination.test.ts
data/logs/unified-logs.utils.test.ts`
- Check both log services: logs with the same recorded time, or times
less than a millisecond apart, should appear once when loading older
results.
- Validation: focused tests, full Studio typecheck, changed-file lint,
and formatting pass.
2026-10-16 16:22:13 +02:00
Jordi Enric
5b8f504ce3 fix(studio): preserve restore times across date edits FE-4129 (#51613)
## Problem

Changing the restore date resets the entered time, and the repeated hour
at the end of daylight saving time can resolve to the wrong occurrence.
Both can change the submitted recovery timestamp.

## Fix

Store the recovery point as a Unix timestamp and preserve its occurrence
when editing an ambiguous local time. Calendar edits carry the entered
hours, minutes, and seconds onto the selected day, applying that day's
timezone offset and retaining the existing backup-range clamping.

This focuses on date edits and repeated-hour handling from #48903. It
changes only the PITR form, its utilities, and regression tests. Related
to
[FE-4129](https://linear.app/supabase/issue/FE-4129/r2np-datetime-widget).

## How to test

- In PITR or restore-to-new-project, enter a time and select another
available calendar day. Expected result: the entered hours, minutes, and
seconds remain selected, and the submitted timestamp matches the new
date.
- Run the PITRForm and PITR.utils Vitest suites. Their fixtures cover
both occurrences of the repeated Madrid/New York hour, edits across DST,
spring-forward normalization, fractional offsets, and backup boundaries.
- Twelve focused regression cases passed under a Madrid browser
timezone. Those cases plus the existing selector component test passed
under Hong Kong, thirteen tests total. All CI checks passed, including
Studio tests, all four Next.js/TanStack E2E shards, typecheck, lint
ratchet, formatting, spelling, unused-code checks, and Docker build.
2026-10-16 16:20:25 +02:00
Ivan Vasilov
cb17091d2d feat(studio): default staging project creation to v3 (50%) (#51808)
## Problem

New projects created on staging default to v2 (`cloud_provider: 'AWS'`).
We want staging to start exercising v3 (`AWS_K8S`). Resolves FE-4640.

## Solution

In `ProjectCreationForm`, the initial cloud provider is now rolled once
per mount: on staging (`NEXT_PUBLIC_ENVIRONMENT === 'staging'`) it is
`AWS_K8S` with 50% probability, otherwise the existing default. v3 is
only rolled if the `infra:cloud_providers` custom content allows
`AWS_K8S`. Prod and local are unchanged, and the internal-only "Cloud
provider" selector still lets admins override the default.

## Review instructions

1. Run Studio with `NEXT_PUBLIC_ENVIRONMENT=staging` and the
`newProjectInternalOnlyConfiguration` flag on.
2. Reload the new-project page several times and check that the "Cloud
provider" select defaults to AWS and AWS (Revamped) about equally often.
3. Change the select manually and confirm the choice is kept and the
project is created with it.
4. With `NEXT_PUBLIC_ENVIRONMENT=prod` or `local`, confirm the default
is always AWS.

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

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

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-10-16 07:37:58 -06:00
Kody Jackson
c168c991f7 chore(www): add blog cross-links and fix outdated links (2022 posts) (#51765)
## Summary

- Adds cross-links from 2022 blog posts to related pages on supabase.com
where the post already mentions the topic.
- Updates existing links in these posts that redirected or returned 404
so they point to the final destination.

## Notes

- Link changes only; no prose changes beyond wrapping existing wording
in links.
- All internal targets were checked against the sitemap.

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

---------

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-16 08:19:53 -05:00
Kody Jackson
79c1d9b64c chore(www): add blog cross-links and fix outdated links (2021 posts) (#51764)
## Summary

- Adds cross-links from 2021 blog posts to related pages on supabase.com
where the post already mentions the topic.
- Updates existing links in these posts that redirected or returned 404
so they point to the final destination.

## Notes

- Link changes only; no prose changes beyond wrapping existing wording
in links.
- All internal targets were checked against the sitemap.

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

---------

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-16 08:07:21 -05:00
Lukas Bernert
a37e434aa4 chore(studio): track docs link clicks in the region selector footer (#51841)
Adds `free_tier_general_region_docs_link_clicked` event, fired when the
regions docs link in the selector footer is clicked
2026-10-16 15:03:36 +02:00
Kody Jackson
13d4d053c8 chore(www): add blog cross-links and fix outdated links (2020 posts) (#51763)
## Summary

- Adds cross-links from 2020 blog posts to related pages on supabase.com
where the post already mentions the topic.
- Updates existing links in these posts that redirected or returned 404
so they point to the final destination.

## Notes

- Link changes only; no prose changes beyond wrapping existing wording
in links.
- All internal targets were checked against the sitemap.

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

Co-authored-by: Claude Haiku 5.5 <noreply@anthropic.com>
2026-10-16 07:59:57 -05:00
Drew McLellan
f5288eb1e2 feat(studio): remember project home chart interval per project (#51833)
## Problem

The time-range dropdown above the request charts on the project home
page resets on every visit, so users who prefer a different range have
to re-select it each time.

Resolves FE-2828.

<img width="819" height="353" alt="Screenshot 2026-10-16 at 10 42 05"
src="https://github.com/user-attachments/assets/cb8d467b-e709-43b0-9ae4-b02ebccf5faf"
/>


## Solution

Persist the selection in localStorage, keyed per project
(`home-chart-interval-${ref}`), in both usage section variants
(`ProjectUsageSection` and `ProjectUsageSectionDeltas`, chosen by the
`newHomepageUsageDeltas` flag).

- New `resolveChartInterval` helper validates the stored value against
the known keys and the plan's log retention, falling back to the plan
default for corrupt values or after a plan downgrade. Unit tested.
- Removed the `useEffect` in `ProjectUsageSection` that reset the
interval on retention change, since it would overwrite the saved value.
- Moved `getDaysRequired` into `logs.utils.ts` so the dropdown and the
helper share the retention check.

Manually verified with the flag on and off: reload keeps the selection,
and each project keeps its own.
2026-10-16 13:52:23 +01:00
Andrey A.
bc27d2661e chore(self-hosted): update 2026-10-16 - 0.8.3 (#51839) self-hosted/v0.8.3 2026-10-16 14:38:49 +03:00
Lukas Klingsbo
8963a05479 chore(studio): drop anon key wording from connect snippet placeholders (#51793)
## Problem

Several snippets in the dashboard Connect sheet still mention anon keys
in placeholder text, even though publishable keys are now the
recommended client key:

- Swift, Kotlin, Expo, Ionic React and Ionic Angular show `<prefer
publishable key instead of anon key ...>` when the project has no
publishable key.
- Astro, Nuxt, Refine, TanStack, Flask and the three .NET snippets fall
back to `your-anon-key` when the project has neither key.
- Ionic React stores the key in a variable called `supabaseAnonKey`.

## Solution

- Both placeholders become `your-publishable-key`.
- The Ionic React variable becomes `supabaseKey`, matching the other
snippets.

Snippets that switch to `*_ANON_KEY` environment variables for projects
with only legacy keys (Next.js, Vite, SvelteKit and others) are
unchanged. There, `your-anon-key` still matches the variable name.

The Flutter snippet is handled separately in #51792.

## Review instructions

1. Open the Connect sheet for a project without a publishable key.
2. Go through the frameworks listed above and check that the
placeholders say `your-publishable-key`.

## Checklist

- [x] I have read
[CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md)
2026-10-16 13:30:08 +02:00
Pedro Rodrigues
e4ee46854a docs: add Antigravity to Supabase agent plugin docs (#51647)
## What this does

Adds **Antigravity** to the Supabase AI agent plugin docs.

- **Plugin docs** (`AgentPluginsPanel`): Antigravity client between
Cursor and Gemini CLI. The install step is a copyable `agy plugin
install https://github.com/supabase-community/supabase-plugin` (checked
with `agy` 1.4.0: it installs v0.1.17 with both skills and the MCP
server). A note below points to the `/plugin` slash command and
[Antigravity's plugin
docs](https://antigravity.google/docs/plugins/#managing-plugins-by-surface).
- **Icon**: replaces the existing Antigravity icon (MCP client picker
and "Pick your agent" grid share it) with the official full-color icon
from the [Antigravity press assets](https://antigravity.google/press/).
- **"Pick your agent" grid**: Antigravity now shows the "Plugin + MCP"
badge and links to the plugin page.

Plugin support shipped in supabase-community/supabase-plugin
[v0.1.17](https://github.com/supabase-community/supabase-plugin/releases/tag/v0.1.17)
(#66), validated with `agy` 1.3.5 and 1.4.0.

## Testing

Ran the docs app locally at 41bf5af, opened
`/docs/guides/ai-tools/plugins` and selected Antigravity. The icon and
install step render in light and dark mode, both links point to
`https://antigravity.google/docs/plugins/#managing-plugins-by-surface`,
and Claude Code is still the default selection.

<img width="771" height="349" alt="pr51647-antigravity-dark"
src="https://github.com/user-attachments/assets/a4c682f1-a67e-4a89-8060-7bf94adb2388"
/>

<img width="771" height="349" alt="pr51647-antigravity-light"
src="https://github.com/user-attachments/assets/65611703-789c-456e-b03f-b444b1e3958e"
/>


<img width="243" height="284" alt="image"
src="https://github.com/user-attachments/assets/b5c87b73-21d3-4665-ae75-4915b75dfefd"
/>


Closes AI-1315

---------

Co-authored-by: Barry Roodt <barry@jumptag.co.za>
Co-authored-by: Barry Roodt <barry.roodt@supabase.io>
2026-10-16 13:19:29 +02:00
Gildas Garcia
09a4374b14 Fix: ensure the scoped oauth apps new UI doesn't show if mocks are enabled (#51829)
## Problem

The feature flag enabling the new scoped oauth apps UI was enabled by
mistake in production but this UI currently only work with mocks. We
added an environment check in some places but not all so users did see
the new UI

## Solution

Add the environment check wherever needed
2026-10-16 11:55:02 +02:00
Joshen Lim
17f21bf6a8 Joshenlim/fe 4510 auditlogs filterbar for account logs (#51790)
## Context

Replaces the individual filters on the Account audit logs page with the
filter bar to match a consistent UX across log surfaces
<img width="1206" height="360" alt="image"
src="https://github.com/user-attachments/assets/c5bdfd7e-3277-4695-b9fc-1791df8720c7"
/>

Also uses the `supportOperators` param for the `FilterBar` to support
"OR" based operations when filtering for projects
<img width="1219" height="97" alt="image"
src="https://github.com/user-attachments/assets/d4748e6c-d1f3-4f23-b767-e0f4bb1c0a1c"
/>

The main changes for the `FilterBar` component made in this PR (which
would be more relevant for the design team) are:
- Added a divider between the options and "New group" 
  - Originally didn't have a divider
- So there's a clearer distinction that the "New group" isn't a option
to set as the value for
- Add a new `defaultGroupOperator` prop
  - Originally defaults to `AND`
- However, in the context of Audit Logs when filtering for projects,
you'd expect `OR` to be the default to filter across several projects
(`AND` wouldn't make sense here)
2026-10-16 13:30:19 +08:00
Drew McLellan
b74d799c3d fix(studio): sort edge function files by name and select the entrypoint by default (#51796)
## Problem

The file list in an Edge Function's code view is shown in the order the
Management API returns it (roughly `created_at` order), not sorted by
name. Users expect name order, as in VS Code.

Resolves FE-2799

## Solution

- `formatFunctionBodyToFiles` now sorts files by their displayed name
before assigning ids, using a case-insensitive numeric comparison
(`file2` before `file10`). The list is flat, so there is no folder
grouping.
- Sorting would have changed which file opens first, so the code page
now selects the function's entrypoint file by default.
`getDefaultSelectedFileId` matches the entrypoint's basename, then falls
back to `index.ts`, then to the first file. The entrypoint isn't always
`index.ts`: the docs allow any `.ts`, `.js`, `.tsx`, `.jsx` or `.mjs`
file.
- The shared `FileExplorerAndEditor` and the new-function page are
unchanged. The code page passes the selection through the explorer's
existing `selectedFileId` / `setSelectedFileId` props.
- Files added or renamed in the editor keep their position until the
next load.

Before:
<img width="259" height="370" alt="Screenshot 2026-10-15 at 16 44 50"
src="https://github.com/user-attachments/assets/611fe2b9-5676-496a-85a9-e50032708c7a"
/>

After:
<img width="259" height="371" alt="Screenshot 2026-10-15 at 16 35 19"
src="https://github.com/user-attachments/assets/7f433661-ef34-4e3f-9143-afc67be1b30a"
/>


## Review instructions

1. Open an Edge Function's Code tab for a function with several files,
for example `utils.ts`, `index.ts`, `deno.json`.
2. Confirm the files are listed alphabetically and that `index.ts` is
selected on load.
3. For a function with a custom entrypoint (for example `main.ts`),
confirm that file is selected on load.
4. Run `pnpm test:studio -- components/interfaces/EdgeFunctions`.
2026-10-16 13:28:59 +08:00
Danny White
4593b3ffc0 feat(studio): compose pipeline creation step navigation (#51776)
## Problem

The pipeline wizard in #49243 needs its merged components composed into
a full-page flow, with values preserved when moving backwards and
forwards.

## Solution

- Compose four full-page SteppedFlow steps behind **Pipeline creation
wizard**.
- Preserve values through step navigation and browser Back/Forward.
Refresh starts at Destination.
- Reuse Studio’s header controls and confirm before discarding changes.
- Defer step validation and creation; **Start pipeline** is disabled.
**Add pipeline** and preview-off visits keep the sheet.

| After |
| --- |
| <img width="1024" height="759" alt="New Pipeline Supabase"
src="https://github.com/user-attachments/assets/7c3c4511-9a00-4e64-a86a-d6d9489f7d75"
/> |
| _Only available by navigating to `database/pipelines/new` with the
feature preview on._ |

## Review instructions

1. Open the [Pipelines
preview](https://studio-staging-git-dnywh-featpipeline-stepped-n-ce5307-supabase.vercel.app/dashboard/project/_/database/pipelines),
select a test project and enable **Pipeline creation wizard**. Open the
[wizard
preview](https://studio-staging-git-dnywh-featpipeline-stepped-n-ce5307-supabase.vercel.app/dashboard/project/_/database/pipelines/new)
for that project. Check the full-page layout and header at desktop and
phone widths.
2. Enter connection details, select a publication and change
initial-sync and advanced settings. Use **Back/Continue**, browser
**Back/Forward**, and switch destinations to confirm values remain.
3. Check Review shows your settings, masks secrets and disables **Start
pipeline**. Refresh and confirm it restarts at Destination. Incomplete
steps are allowed in this navigation-only slice.
4. With changes, try header navigation or **Close**. Check **Keep
editing** preserves values and **Discard changes** leaves the flow. Turn
the preview off and confirm the wizard URL opens the sheet.
2026-10-16 11:09:21 +11:00
shaziya
780846e449 chore(www): add Native runtime hero images, hide hero on Parallel local projects (#51813)
## 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 (www feature catalog).

## What is the current behavior?

Follow-up to supabase/supabase#51773.

- `/features/native-local-runtime` has no hero image, so it shows the
green placeholder block.
- `/features/parallel-local-projects` shows the same placeholder.

## What is the new behavior?

- Native runtime uses the Local development hero images
(`local-development.png` and `-light.png`).
- Adds an optional `hideHero` field to the feature type. When true,
`pages/features/[slug].tsx` skips the hero block. Parallel local
projects sets it. All other features render as before.

## Additional context

The diff in `[slug].tsx` is mostly re-indentation from wrapping the hero
block in a conditional.
2026-10-15 16:03:55 -07:00
Danny White
3960e6ac41 chore(deps): bump lucide-react to v1 (#51770)
## Problem

Lucide React v1 improves screen reader behaviour (icons are hidden from
assistive tech by default). It also removes brand icons such as GitHub.
We were still on Lucide 0.x across the monorepo.

## Solution

- Move every workspace onto one shared Lucide React v1 version via the
pnpm catalog.
- But Lucide React v1 [deprecated brand
icons](https://github.com/lucide-icons/lucide/blob/main/BRAND_LOGOS_STATEMENT.md)
- Meaning we need to handle any _old_ brand icons we used from Lucide
0.x.
- Luckily, that was just `GitHubIcon`. So...
- Add a `GithubIcon` in `packages/ui` that matches Lucide’s previous
GitHub icon, and use it wherever we imported GitHub from Lucide.
  - No other Lucide brand icons were in use.
- Studio “Continue with GitHub” sign-in still uses the existing SVG
asset (`github-icon.svg`), not this component.
- Keep the `Icon` suffix import style [recently
introduced](https://github.com/supabase/supabase/pull/51659)
- Monorepo apps now use `catalog` Lucide React v1.

## Review instructions

1. Open [Studio
preview](https://studio-staging-git-dnywh-bump-lucide-react-v1-supabase.vercel.app/dashboard/org)
on a project that is connected to GitHub:
   - Project home → Activity stats “GitHub” row
   - Org project list → GitHub badge on a connected project card/row
- Branches → GitHub link on a branch row, or “Sync with a GitHub branch”
   - Project Settings → Integrations → GitHub integration panel
2. Open
[/kb/guides/sample-guide](https://supabase.com/kb/guides/sample-guide) →
confirm “Go to the GitHub discussion” shows the icon.
3. Open
[/docs/reference/javascript](https://supabase.com/docs/reference/javascript)
→ confirm the header GitHub control still shows the icon. Or
[/docs/guides/troubleshooting/rls-simplified-BJTcS8](https://supabase.com/docs/guides/troubleshooting/rls-simplified-BJTcS8)
→ “View discussion on GitHub”.
2026-10-15 23:00:55 +00:00
shaziya
dfe5d436da chore(www): add blog post on local Supabase projects per agent (#51777)
## 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: adds a new blog post to `apps/www/_blog`.

## What is the current behavior?

There is no blog post covering multiple local Supabase projects (one per
git worktree), the native no-Docker runtime, or faster remote branches
in CLI v2.119.0.

## What is the new behavior?

Adds "A local Supabase project per agent, with or without Docker" at
`/blog/local-supabase-project-per-agent-with-or-without-docker`, dated
2026-10-14.

Prettier passes on the new file. The `og.png` and `thumb.png` images are
not included in this PR yet.

## Additional context

Authors: `jgoux`, `wenbo` (both already in `authors.json`).
2026-10-15 21:51:43 +00:00
shaziya
008178c621 chore(www): add Local development feature page, update CLI and Branching (#51773)
## 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 (www feature catalog copy).

## What is the current behavior?

- No feature page for local development.
- The CLI entry predates multi-project local dev, config-driven
development, and declarative schemas.
- The Branching entry still says "Branching 2.0 (currently in public
alpha)" and links to `/platform/branching`.

Linear: MARKET-1648 (Local development, CLI), MARKET-1919 overlaps on
CLI bullet 3.

## What is the new behavior?

Updates `apps/www/data/features.tsx` so the catalog matches what shipped
at Select 2026:

- **New: Local development** (`/features/local-development`). Multiple
local projects per machine, one per git worktree, plus the native
runtime for environments without Docker. Experimental behind
`SUPABASE_EXPERIMENTAL_STACK=1`, so the stage is Public Alpha.
- **Rewrite: CLI** (`/features/cli`). New subtitle, body, and `docsUrl`.
- **Rewrite: Branching** (`/features/branching`). Dashboard branching is
the default, with inherited configuration and faster provisioning. Stage
is GA, and `docsUrl` moves to `/deployment/branching`.

Copy comes from the Notion Features Page database, reviewed 2026-10-14.

## Additional context

- Adds the Local development hero images
(`/images/features/local-development.png` and `-light.png`).
- The existing `parallel-local-projects` and `native-local-runtime`
entries are left as is. They overlap with the new page.

---------

Co-authored-by: Wen Bo Xie <wenbox323@gmail.com>
2026-10-15 14:42:11 -07:00
Wendie Cheung
43e18fa0d9 blog: how a new branch gets its config, migrations, and functions (#51789)
## Problem

We want a public engineering post that explains what runs when a
Supabase branch is created, in what order, and what to check when a step
fails.

## Solution

Adds the engineering post "How a new branch gets its config, migrations,
and functions" under the `engineering` category, with the OG and
thumbnail images at
`apps/www/public/images/blog/how-a-new-branch-gets-its-config-migrations-and-functions/`.

## Review instructions

1. Open
`/blog/how-a-new-branch-gets-its-config-migrations-and-functions` on the
preview link.
2. Check that the mermaid diagram renders and the H3 headings appear in
the table of contents.
3. Check that the post card and link preview show the images and that
the post appears under the Engineering filter on `/blog`.

🤖 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>
2026-10-16 08:38:32 +11:00
Stephen Morgan
09f80f528e docs: reference the ability to use custom dns from VPCE (#51778)
Quick update to privatelink walkthrough in reference to custom DNS
2026-10-16 10:16:52 +13:00
kemal.earth
991653aa36 chore(studio): allow project creation region flags to resolve independently (#51787)
## Problem

Updating our region experiment flags to be able to handle latest
experiment.

## Solution

Make flags resolve independently. cc @charislam 

## Review instructions

tbc

---------

Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
2026-10-15 14:22:28 -04:00
Anthony Lio
0612cbdb27 fix(ui): drop stray tab border (#51657)
## Problem

there's a legacy border style duplicating border after recent rabs
change in docs

## Solution

- removes stray border

| state | preview |
| -------|------|
| before | <img width="913" height="509" alt="image"
src="https://github.com/user-attachments/assets/dba5a5ee-5212-4be2-86c0-e96d9dac41fb"
/> |
| after | <img width="913" height="509" alt="image"
src="https://github.com/user-attachments/assets/1f7d20eb-2f03-45b0-9a2c-4af8fa335784"
/> |

<!--
## 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. visit
`/docs/guides/auth/passwords#signing-up-with-an-email-and-password`

## 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)
2026-10-15 18:20:55 +00:00