Skip to content

[pull] master from supabase:master#800

Merged
pull[bot] merged 17 commits intocode:masterfrom
supabase:master
Mar 31, 2026
Merged

[pull] master from supabase:master#800
pull[bot] merged 17 commits intocode:masterfrom
supabase:master

Conversation

@pull
Copy link
Copy Markdown

@pull pull bot commented Mar 31, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

djhi and others added 5 commits March 31, 2026 09:14
## Screenshots

On a number input with units:
<img width="660" height="162" alt="image"
src="https://github.com/user-attachments/assets/1758a6d9-0836-4d41-80d1-97a03292db91"
/>

focused state:
<img width="651" height="71" alt="image"
src="https://github.com/user-attachments/assets/a92a5c39-2c7e-4c5f-9e4b-eb89810cc45c"
/>

On a textarea:
<img width="989" height="294" alt="image"
src="https://github.com/user-attachments/assets/cc696cb9-3671-4719-bdd8-daa1aea4f041"
/>
## 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?

Fixes typo in Dashboard

## What is the current behavior?

In the [Billing
Dashboard](https://supabase.com/dashboard/org/_/billing), when one
updates the spend cap:
<img width="2376" height="502" alt="CleanShot 2026-03-29 at 14 52 01@2x"
src="https://github.com/user-attachments/assets/5169fc01-cf78-4450-9184-7d7d6a28b000"
/>

The pop-out modal has a typo (states "includedthen" instead of
"included, then"):
<img width="1182" height="1408" alt="CleanShot 2026-03-29 at 14 52
17@2x"
src="https://github.com/user-attachments/assets/53622f29-cc02-4138-aa83-4e098d31d1a2"
/>

## What is the new behavior?

Updated the line:
```jsx
<p className="text-xs pl-4">{item.plans['pro']}</p>
```

to
```jsx
<p className="text-xs pl-4">
  {Array.isArray(item.plans['pro'])
    ? item.plans['pro']?.join(', ')
    : item.plans['pro']}
</p>
```

Fixed the issue:
<img width="1302" height="1072" alt="CleanShot 2026-03-29 at 15 27
30@2x"
src="https://github.com/user-attachments/assets/722056c8-7b62-4993-83bb-a2ed4cbc5264"
/>

## Additional context

[A user reported the
error](https://supabase.frontapp.com/open/msg_32qr4hpa?key=RjpHZRymA4HTNLMFa-PQ6l_Ne7L66x8A)

The file containing pricing data
"[packages/shared-data/pricing.ts](https://github.com/supabase/supabase/blob/7d7de475ecf31f95d37199456482b665c80aadc8/packages/shared-data/pricing.ts#L125)"
has the following JS object:
```js
// example problematic entry
plans: { 
    //rest of object
    pro: ['8 GB disk size per project included', 'then $0.125 per GB'],
    //rest of object
},
...
// some other entry
plans: {
    //rest of object
    pro: false,
    //rest of object
}
...
```

The relevant content in the Dashboard is an array with two entries:
> ['8 GB disk size per project included', 'then $0.125 per GB']

The [modal
file](https://github.com/supabase/supabase/blob/7d7de475ecf31f95d37199456482b665c80aadc8/apps/studio/components/interfaces/Organization/BillingSettings/CostControl/SpendCapSidePanel.tsx#L174)
deconstructs it within the following element:
```jsx
{usageItems.map((item: any) => {
  return (
    <Table.tr key={item.title}>
      <Table.td>
        <p className="text-xs pl-4">{item.title}</p>
      </Table.td>
      <Table.td>
        <p className="text-xs pl-4">{item.plans['pro']}</p> <!--------RELEVANT LINE-->
      </Table.td>
    </Table.tr>
  )
})}
```

It doesn't bother to separate entries in the array, so the element just
concatenates the two entries without any spacing.

---------

Co-authored-by: Gildas Garcia <1122076+djhi@users.noreply.github.com>
## Context
Related to marketplace integrations, now shifting wrappers over to the
new UI (feature flagged)

## Changes involved
- Added a "Installed" indicator if the integration is installed
<img width="1155" height="171" alt="image"
src="https://github.com/user-attachments/assets/6de2ea49-64bb-46af-ba04-db6629ec7546"
/>
- New UI will only show the "Add new wrapper" + "Recent wrappers" table
only if the required extensions have been installed (Current UI shows
them both irregardless)
<img width="1147" height="518" alt="image"
src="https://github.com/user-attachments/assets/c428ff70-4a52-401e-a369-6948100d1cef"
/>
- Once required extensions are installed, the wrappers tab will also
show up
  - Currently the wrappers tab only shows up after a wrapper is created
- This change will affect the existing behaviour too (reckon it makes
more sense this UX)
<img width="1143" height="611" alt="image"
src="https://github.com/user-attachments/assets/b05f5196-854e-41c1-8a01-7a5e5cca9d4e"
/>
- In the install integration sheet, only extensions that have yet to be
installed will users be allowed to adjust schema selection for
<img width="553" height="583" alt="image"
src="https://github.com/user-attachments/assets/045e185a-6235-4dc5-a984-b039b64cd7fd"
/>
- Likewise, if the extension has already been installed, it will be
omitted from the SQL code output
<img width="575" height="267" alt="image"
src="https://github.com/user-attachments/assets/5e6c0a75-5738-4a0d-9e33-ff19aed074d3"
/>
- Updated docs URL for some of the integrations (vault, database
webhooks, graphql)
- Nit: This one's bugged me for the longest time but remove extra border
bottom in "Recent wrappers" table
<img width="1068" height="177" alt="image"
src="https://github.com/user-attachments/assets/1d6e24cf-072a-4605-8eca-ee0f37406d74"
/>

FWIW i think the integrations UI for wrappers is due for an update, but
we'll leave things as they are for now - at least until we're bit more
clearer on the requirements for marketplace integrations (less we make
changes now which then have to be redone again later)

## To test
- [ ] Verify that you can install + create wrappers still with the new
UI
- [ ] Verify that behaviour is status quo with flag off (except the ones
mentioned explicitly)
## 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?

The `getNextPageParam` function in
`database-queue-messages-infinite-query.ts` uses `<=` instead of `>=`,
which means pagination never stops. Since the result length is always
less than or equal to the page size, `hasNextPage` is always `true`,
causing infinite API requests when viewing queue messages in Studio.

Resolves #44291

## What is the new behavior?

Uses `>=` to correctly detect when there are more pages, consistent with
every other infinite query in the codebase:

- `database-cron-jobs-infinite-query.ts` uses `>=`
- `users-infinite-query.ts` uses `>=`
- `database-cron-jobs-runs-infinite-query.ts` uses `< PAGE_SIZE` to
return `undefined` (equivalent logic)

## Additional context

One character change: `<=` to `>=` on line 112.
@pull pull bot locked and limited conversation to collaborators Mar 31, 2026
@pull pull bot added the ⤵️ pull label Mar 31, 2026
joshenlim and others added 12 commits March 31, 2026 11:45
## Context

Resolves FE-2923

There's an issue with creating s3 keys in the storage settings at the
moment, where naming your key throws a form field validation error. This
PR fixes that - not sure when this was introduced though, but the main
fix was just using `field` from `render` instead of calling `register`

## To test

- [ ] Verify that you can create an s3 access key via the storage
settings
## Summary

Remove the privacy policy update notification banner that was added for
the March 2026 policy update. The effective date has passed and users
have had sufficient notice.

## Changes

- Remove `PrivacyUpdateBanner` component from `AnalyticsSettings.tsx`
and its unused imports
- Remove banner usage from the organizations list page and org projects
page
- Remove `PRIVACY_NOTICE_ACKNOWLEDGED` localStorage key

## Testing

No setup needed - this is a removal of UI elements.

Tested on Vercel preview:
- [x] Organizations page loads without the banner
- [x] Org projects page loads without the banner
- [ ] No console errors on either page
- [x] Analytics settings page still renders correctly

## Linear

- fixes GROWTH-692
## Problem

#44282 introduced a change in design for inputs used outside a form
layout such as search inputs on the project list page

## Solution

Fix padding and spacing
Those queries will always error out anyway as there's no data in place
yet.
## Problem

- The vault new secret form still uses `formik` and we want to remove it
in favour of `react-hook-form` to keep only one form library
- The vault new secret form does not follow the design system guidelines
(`Modal` instead of `Dialog`)

## Solution

- Migrate to `react-hook-form`
- Apply the design system guidelines

## Screenshots

Before:
<img width="539" height="396" alt="image"
src="https://github.com/user-attachments/assets/c1beda65-9bad-4ff6-9f5c-64b2bea615e5"
/>

After:
<img width="452" height="384" alt="image"
src="https://github.com/user-attachments/assets/86bfff23-924c-4e1d-9b28-66e131a5db1d"
/>
## Problem

Some forms register their inputs incorrectly by calling
`control.register` and spreading the `field`.
This makes the form unusable.

## Screenshots

Design of the new analytics buckets table

Before:
<img width="554" height="564" alt="image"
src="https://github.com/user-attachments/assets/6ddf7ead-f576-44c4-b184-8102a52a22e2"
/>

After:
<img width="395" height="791" alt="image"
src="https://github.com/user-attachments/assets/ee85fcdd-b2a5-410d-9296-8bd6f1aa0b2f"
/>
## 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?

SAML metadata URL cannot be saved with an empty string; it works through
the management API

<img width="781" height="412" alt="image"
src="https://github.com/user-attachments/assets/586d3de2-30bc-4e8a-9d4b-b039685cb455"
/>

## What is the new behavior?

Allow saving SAML 2.0 config with an empty SAML metadata URL
…43281)

When importing a CSV file, empty cells were always imported as empty
strings with no way to import NULL values instead. This adds a "Treat
empty cells as NULL" checkbox to the import configuration panel.

When enabled, PapaParse's transform option converts empty strings to
null before the data is parsed and previewed, so the imported rows
correctly contain NULL rather than empty strings.

Fixes #43258.

## What kind of change does this PR introduce?

Bug fix

## What is the current behavior?

Empty cells in a CSV file are always imported as empty strings with no
way to import NULL values instead. Fixes #43258.

## What is the new behavior?

"Treat empty cells as NULL" checkbox is added to the import
configuration panel. When enabled, empty cells are imported as NULL
instead of empty strings. Toggling the checkbox instantly re-parses the
preview.

## Additional context

The fix uses PapaParse's transform option to convert empty strings to
null before parsing. Applies to both file uploads and pasted text.

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Charis Lam <26616127+charislam@users.noreply.github.com>
## 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 UI to help users create partitioned queues when supported with
pg_partman. Updated the existing UI from 2024 to be a bit more user
friendly

## Walkthrough 

**Extension management page**
<img width="1575" height="155" alt="image"
src="https://github.com/user-attachments/assets/4b1895cf-4555-40c5-8a11-54208748b169"
/>

**pg partman call out in queues**
<img width="664" height="771" alt="image"
src="https://github.com/user-attachments/assets/92feff48-72bb-4816-b0aa-e24e70fa148e"
/>

**Updated recommended section with sane defaults**

<img width="663" height="918" alt="image"
src="https://github.com/user-attachments/assets/716d9411-f708-4b4d-8027-7ca7a41062c8"
/>

**Warning on disabling extension**
<img width="431" height="392" alt="image"
src="https://github.com/user-attachments/assets/129ab1eb-2bcc-49ca-a20c-72422460c60e"
/>

---------

Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…extension FE-2843 (#44357)

## Problem

On self-hosted Supabase instances where the `pg_stat_statements`
extension is not installed, the Observability Overview page
automatically queries the extension on every page load. This produces
"relation pg_stat_statements does not exist" errors in Postgres logs for
all projects without the extension. Additionally, if a user navigated to
the Query Performance page, they received a generic error with no
actionable guidance. A secondary issue allowed malformed sort URL params
(e.g. `?sort=created_at:asc&order=asc`) to be interpolated directly into
SQL ORDER BY clauses.

## Fix

- Wrapped the `useSlowQueriesCount` SQL in a `CASE WHEN EXISTS (SELECT 1
FROM pg_extension WHERE extname = 'pg_stat_statements')` guard. The
query now returns 0 silently instead of erroring when the extension is
absent.
- Added a `VALID_SORT_COLUMNS` whitelist in
`generateQueryPerformanceSql`. Invalid column names from URL params are
rejected and the query falls back to the preset default ORDER BY.
- When the Query Performance page fails because `pg_stat_statements`
does not exist, a `warning` admonition now appears with "Enable it in
Database -> Extensions" guidance instead of a generic destructive error.
The Sentry capture is skipped for this expected configuration state.
- Extracted `buildSlowQueriesCountSql` as a testable function and added
unit tests for both fixes.

## How to test

**Extension not installed (self-hosted):**
1. Run a self-hosted Supabase instance without the `pg_stat_statements`
extension enabled.
2. Navigate to the Observability Overview page.
3. Check Postgres logs -- no "relation pg_stat_statements does not
exist" errors should appear.
4. Navigate to the Query Performance page.
5. Expected: a yellow warning admonition appears saying the extension is
not enabled, with a link to Database -> Extensions. No red error.

**Extension installed (normal flow):**
1. With `pg_stat_statements` installed, navigate to Observability
Overview.
2. Expected: slow queries count loads as normal.
3. Navigate to Query Performance -- data loads as normal.

**Invalid sort URL param:**
1. Navigate to
`/project/<ref>/observability/query-performance?sort=created_at:asc&order=asc`.
2. Expected: the page loads and falls back to the default sort order
(total time descending). No SQL error in logs.

**Unit tests:**
```
node apps/studio/node_modules/vitest/dist/cli.js run --no-coverage \
  apps/studio/components/interfaces/Observability/useSlowQueriesCount.test.ts \
  apps/studio/components/interfaces/QueryPerformance/useQueryPerformanceQuery.test.ts
```
All 28 tests should pass.

---------

Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
`useOrgSSOConfigQuery` had an internal plan-based gate
(`canSetupSSOConfig`) that permanently disabled the query for
non-team/enterprise orgs.

The fix removes the redundant plan gate from the query hook, plan-based
access is already controlled upstream via the entitlement check in the
component.
…44396)

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

## Summary

Use supabase project url for CRUD custom oauth providers
@pull pull bot merged commit 1f4cdc4 into code:master Mar 31, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.