mirror of
https://github.com/supabase/supabase.git
synced 2026-05-06 08:56:46 -04:00
d8bb0ade65e3ea8225db446ab92bf21d5b7fd744
36080 Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
d8bb0ade65 |
feat(studio): add timezone picker to user dropdown (#45517)
## Problem The dashboard renders all timestamps in the browser's local timezone. When debugging app issues, users often want to see logs and timestamps in a different timezone (e.g. their app's deployment region) without changing their OS clock. ## Fix - New Timezone submenu in the user-avatar dropdown, sitting next to the existing Theme picker. Search-as-you-type combobox over the full IANA catalog plus an Auto detect option. - Selection persists in localStorage (`supabase-ui-timezone`) and survives `clearLocalStorage()`. No backend schema change. - New `lib/datetime.tsx` exposes pure timezone-aware formatters (`formatDateTime`, `formatDate`, `formatTime`, `formatFromNow`, `toTimezone`) plus a `TimezoneProvider` and matching React hooks (`useTimezone`, `useFormatDateTime`, ...). The pure functions take `tz` explicitly so they're easy to unit test (17 vitest cases covering DST transitions, multi-tz formatting, unix-micro/Date inputs, invalid-tz fallback). - The selected timezone propagates to every existing `<TimestampInfo>` in Studio via a new `TimestampInfoProvider` context exported from `ui-patterns`. No per-callsite changes needed for those ~20+ surfaces. - The `UnifiedLogs` date column migrates off `date-fns` to the new `useFormatDateTime` hook (the rest of the date-fns callers stay as-is, since they're either internal range math or non-display). - `ALL_TIMEZONES` (~600 entries) moves out of `PITR.constants.ts` into a shared `lib/constants/timezones.ts`. PITR keeps a re-export shim so its callers don't move. New `TIMEZONES_BY_IANA` dedupes the catalog by primary IANA name (the original list contains both PDT and PST rows for `America/Los_Angeles`, etc.) and `findTimezoneByIana` provides reverse lookup. - Telemetry: `timezone_picker_clicked` PostHog event with `previousTimezone`, `nextTimezone`, `isAutoDetected` properties. Notes for reviewers: - Bare `dayjs(x).format(...)` calls (~157 files) intentionally still render in browser-local time. Surfaces opt in by switching to the new wrappers, so this PR is the abstraction plus logs adoption; broader migration is a follow-up. - Two `// prettier-ignore` lines (`apps/studio/pages/_app.tsx`, `apps/studio/components/interfaces/UnifiedLogs/UnifiedLogs.fields.tsx`) work around a pre-existing local-tooling issue where `prettier-plugin-sql-cst` strips angle-bracket type arguments under certain conditions. Project's pinned prettier (3.8.1) does not strip; the issue surfaces with a globally-installed prettier. Worth tracking separately. - Hydration: `guessLocalTimezone()` and `useLocalStorageQuery` are client-only. Studio is mostly CSR via the Pages Router, but any SSR'd `<TimestampInfo>` may briefly render in the server's tz before client hydration. Existing behavior already had this mismatch with `.local()`; this PR does not regress it. - Backend timestamps round-tripped through query params and mutations stay UTC. The picker is display-only. ## How to test - Run `pnpm dev:studio`, sign in. - Open the user avatar dropdown (top right). Hover Timezone. - Search for "tokyo", pick `(UTC+09:00) Osaka, Sapporo, Tokyo`. - Open any project, navigate to Logs (e.g. `Project > Logs > Edge Functions`). Hover a log row's timestamp; the popover should show UTC, the chosen tz (`Asia/Tokyo`), and the relative time. Visible cell text should be in JST. - Visit any page that uses `<TimestampInfo>` (Database > Backups, Project Pause state, Edge Function details). Same tooltip should reflect Asia/Tokyo. - Refresh the page; timezone is still Asia/Tokyo. - Reopen the picker, choose Auto detect; timestamps revert to browser local. - Run `pnpm --filter studio test lib/datetime.test.ts`. 17 tests should pass. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Timezone selector added to the user menu with auto-detect and manual override * App-wide timezone provider and hooks plus a shared timezone catalog for consistent timezone-aware display * Timestamp components accept an optional timezone prop and respect user preference (persisted) * **Bug Fixes / Improvements** * Logs and timestamp displays now use the new timezone formatting hooks * **Tests** * Added comprehensive datetime and timezone catalog tests * **Telemetry** * Telemetry event added for timezone picker interactions <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
d859176eac |
fix(studio): restore readable warning banner and toast close button after Tailwind v4 (#45585)
## Problem Two visual regressions surfaced after the Tailwind v4 migration (#45318): 1. The Postgres upgrade-failed banner used the deprecated `Alert` component, whose `warning` variant relies on custom `amber-1100` / `amber-1200` color tokens that no longer resolve. The title rendered as near-white on the yellow background. 2. The sonner toast close button forced `bg-transparent! hover:bg-transparent!`, letting the library's default translucent circle bleed through against the toast's overlay background on hover. ## Fix - Migrate `ProjectUpgradeFailedBanner` to `Admonition` (the recommended replacement per the deprecation note on `Alert`), which uses semantic `warning-*` tokens defined in the theme. - Drop the transparent-bg overrides on the sonner close button and give it a proper `hover:bg-surface-200` with a fixed `size-6` hit area so the X has a clean hover target. ## Before <img width="2940" height="338" alt="image" src="https://github.com/user-attachments/assets/2cf2cf52-cdf2-429d-b50c-5dc4e5b9c84b" /> ## After <img width="1642" height="506" alt="CleanShot 2026-05-06 at 11 14 03@2x" src="https://github.com/user-attachments/assets/b6c9b3e2-9d3e-437d-92a6-95d12730e842" /> ## Testing - [ ] Trigger a failed Postgres upgrade state and confirm the banner title/description/actions are all readable on the amber background. - [ ] Fire a toast and hover the close button — the hover should show a subtle square background, not a translucent circle. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fix** * Project upgrade failure banner now only appears when an upgrade has failed and no longer supports dismissing. * **Style** * Replaced the warning banner UI with a streamlined admonition that shows only a “Contact support” action. * Improved toast close-button styling for clearer sizing, color, and interaction states. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
b6a307f079 |
chore: Bump vulnerable dependencies (#45634)
<!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated core SDK dependencies to latest compatible versions for improved system stability and security. * Enhanced workspace dependency configuration management by expanding and reorganizing package constraints to optimize compatibility across all modules and reduce potential build conflicts. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
72525c66de | chore(self-hosted): standardize on override vs overlay for compose in docs and configs (#45627) | ||
|
|
3592df1652 |
docs: add details for unhealthy edge functions to troubleshooting guide (#45612)
## 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 to add additional guidance when Edge Functions service shows unhealthy. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added troubleshooting guide for Edge Functions unhealthy state, including steps to verify functions, check invocation logs, and potential solutions for resolving the issue. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
dc957ffc1b |
chore(studio/www/docs): uniform changelog icon across apps (#45624)
Use same `changelog` icon on all apps. ## What is the current behavior? Each app shows a different icon. | app | preview | |---|---| | www | <img width="1166" height="403" alt="Screenshot 2026-05-06 at 10 52 25" src="https://github.com/user-attachments/assets/fac62c31-d76b-4f59-907e-824cdd840b1c" /> | | docs | <img width="524" height="231" alt="Screenshot 2026-05-06 at 10 52 39" src="https://github.com/user-attachments/assets/749a2726-eb7e-47b3-84fe-24d191b56b72" /> | | studio | <img width="367" height="423" alt="Screenshot 2026-05-06 at 10 51 20" src="https://github.com/user-attachments/assets/eec1a489-8544-4bb4-8408-37e1e0a9345e" /> | ## What is the new behavior? | app | preview | |---|---| | www | <img width="1114" height="393" alt="Screenshot 2026-05-06 at 10 49 15" src="https://github.com/user-attachments/assets/1d0e9cff-6390-4005-9656-98f8f45a4657" />| | docs | <img width="498" height="227" alt="Screenshot 2026-05-06 at 10 49 22" src="https://github.com/user-attachments/assets/3d41f219-f179-4fc7-b87b-fdb92626e0f7" /> | | studio | <img width="367" height="423" alt="Screenshot 2026-05-06 at 10 51 20" src="https://github.com/user-attachments/assets/eec1a489-8544-4bb4-8408-37e1e0a9345e" /> | <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Updated navigation menu icons and developer documentation icons for improved visual consistency across the interface. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
863d7af4c2 |
fix(studio): improve readability of logs refresh badge (#45582)
## Problem The new-logs counter badge on the Logs refresh button became hard to read. The number rendered as 0.6rem white text positioned absolutely over two stacked semi-transparent green circles (`bg-green-800 opacity-60` ping plus `bg-green-900 opacity-80` solid). After the Tailwind v4 upgrade shifted the default palette to OKLCH, the greens rendered darker and the digit was nearly invisible. ## Fix Replace the stacked opacity layers with a single solid `bg-brand-500` pill, with a sized container (`h-4 min-w-4`), centered `text-[10px] text-white`, and the ping animation rendered behind it instead of layered on top. Same change applied to both `PreviewFilterPanel` and `PreviewFilterPanelWithUniversal`. ## Before <img width="274" height="194" alt="CleanShot 2026-05-05 at 13 55 53@2x" src="https://github.com/user-attachments/assets/a5967091-b60f-42a9-9394-890c41df544c" /> ## After <img width="384" height="198" alt="CleanShot 2026-05-05 at 13 57 22@2x" src="https://github.com/user-attachments/assets/30c440ce-f46f-4fda-8b96-08b068552da2" /> ## How to test - Open Studio and navigate to any Logs page (e.g. Logs > API Gateway). - Wait for new log events to arrive, or trigger some traffic against the project. - Look at the refresh icon button in the filter bar. - Expected result: the green badge in the top-right of the refresh icon shows the new-event count clearly readable in white text, with a subtle ping animation behind it. - Verify counts in the 1, 10, 100, and 1000+ ranges (the 1000+ formats as e.g. `1.2K`). <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Refined the "new logs" count badge: simplified markup, adjusted positioning, color and opacity for a cleaner look. * Updated refresh button badge to a brand-colored design with an animated ping ring; count formatting and visibility rules (including K-format for >1000) remain unchanged. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
50eabe067a |
Update humans.txt (#45538)
Added myself to humans.txt ## 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? Doc update ## What is the current behavior? N/A ## What is the new behavior? N/A ## Additional context Add any other context or screenshots. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated contributor information in team documentation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
cc59344000 |
feat: update @supabase/*-js libraries to v2.105.3 (#45541)
This PR updates @supabase/*-js libraries to version 2.105.3. **Source**: supabase-js-stable-release **Changes**: - Updated @supabase/supabase-js to 2.105.3 - Updated @supabase/auth-js to 2.105.3 - Updated @supabase/realtime-js to 2.105.3 - Updated @supabase/postgest-js to 2.105.3 - Refreshed pnpm-lock.yaml --- ## Release Notes ## v2.105.3 ## 2.105.3 (2026-05-04) ### 🩹 Fixes - **auth:** narrow OAuth/CustomProvider types to fix downstream consumer typecheck ([#2326](https://github.com/supabase/supabase-js/pull/2326)) ## v2.105.2 ## 2.105.2 (2026-05-04) ### 🩹 Fixes - **auth:** forward lockAcquireTimeout to SupabaseAuthClient ([#2309](https://github.com/supabase/supabase-js/pull/2309)) - **auth:** add toJSON to WebAuthnError for correct JSON serialization ([#2317](https://github.com/supabase/supabase-js/pull/2317)) - **misc:** widen enum-like unions with (string & {}) for forward compat ([#2303](https://github.com/supabase/supabase-js/pull/2303)) - **misc:** reduce any usage across packages ([#2314](https://github.com/supabase/supabase-js/pull/2314)) - **postgrest:** unify insert/upsert signatures ([#2315](https://github.com/supabase/supabase-js/pull/2315)) ### ❤️ Thank You - Muzzaiyyan Hussain @MuzzaiyyanHussain ## v2.105.1 ## 2.105.1 (2026-04-28) ### 🩹 Fixes - **postgrest:** query reassignment regression ([#2292](https://github.com/supabase/supabase-js/pull/2292)) - **realtime:** surface real Error on transport-level CHANNEL_ERROR ([#2299](https://github.com/supabase/supabase-js/pull/2299)) ### ❤️ Thank You - Vaibhav @7ttp ## v2.105.0 ## 2.105.0 (2026-04-27) ### 🚀 Features - **auth:** add passkey support with WebAuthn registration, authentication, and management ([#2283](https://github.com/supabase/supabase-js/pull/2283)) - **realtime:** Realtime deferred disconnect ([#2282](https://github.com/supabase/supabase-js/pull/2282)) ### 🩹 Fixes - **postgrest:** narrow column types after not(column, is, null) ([#2264](https://github.com/supabase/supabase-js/pull/2264)) - **realtime:** annotate Timer/Vsn getters to avoid deep phoenix imports ([#2284](https://github.com/supabase/supabase-js/pull/2284)) - **storage:** apply metadata, headers, and cacheControl dedupe to uploadToSignedUrl ([#2275](https://github.com/supabase/supabase-js/pull/2275)) - **storage:** forward duplex option for stream uploads via uploadToSignedUrl ([#2289](https://github.com/supabase/supabase-js/pull/2289)) ### ❤️ Thank You - Katerina Skroumpelou @mandarini - oniani1 This PR was created automatically. Co-authored-by: supabase-workflow-trigger[bot] <266661614+supabase-workflow-trigger[bot]@users.noreply.github.com> |
||
|
|
bcf54b0eaa |
fix: using 'authMode' instead of 'authType' (#45626)
## What kind of change does this PR introduce? docs update ## What is the current behavior? Current docs using `authType` ## What is the new behavior? Using new `authMode` syntax |
||
|
|
5065e3ae9f | build: Enable static generation on preview (#45592) | ||
|
|
9fc5258004 |
feat(docs): Supabase Agent Plugin page (#45523)
## Summary - Adds a new `/guides/getting-started/plugins` docs page with an `AgentPluginsPanel` component - Per-client install instructions for Claude Code, Codex, Cursor, and Gemini CLI - Adds the page to the navigation under AI Tools - Removes the Claude Code plugin subsection from the AI Skills page (now covered here) Closes [AI-690](https://linear.app/supabase/issue/AI-690/agent-plugins-documentation) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Interactive plugin installation panel to choose from multiple AI coding agents with agent-specific setup instructions and quick links for help/feedback. * **Documentation** * New "Supabase Agent Plugin" guide describing features, included components, and one‑click installation UI. * Navigation updated to include the Supabase Agent Plugin guide under Getting Started → AI Tools. * AI skills guide streamlined by removing a specific plugin install snippet and clarifying agent compatibility. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com> |
||
|
|
5ab15751d2 |
chore(www): add feature matrix to features page (#45420)
## What changed Adds a **matrix (table) view** toggle to `supabase.com/features` alongside the existing card grid. The new view surfaces feature stage and self-hosted availability at a glance — the same information previously shown on the now-deprecated `docs/guides/getting-started/features` page — but richer and integrated into the live features page. Also adds `products` and `stage` badges on feature cards in gallery view. https://github.com/user-attachments/assets/9214204b-85e7-4ad4-acfe-b39970a928af |
||
|
|
937897a172 | fix: applying '@supabase/server' sdk api changes (#45607) | ||
|
|
000d0c73bd |
fix(studio): align child sidebar hover states (#45613)
## What kind of change does this PR introduce? UI polish. ## What is the current behavior? - A few product sidebar areas render menu rows outside the shared ProductMenu/Menu.Item styling path, so their hover and selected states differ from the rest of Studio. - Database product menu shortcut tooltips are also scoped to the text label instead of the full hoverable row. ## What is the new behavior? - Integrations Explore/Installed, Observability, and Reports sidebar rows now use the shared ProductMenu or Menu.Item pill styling. - Observability spacing is tightened after the ProductMenu conversion. - Product menu shortcut tooltips now wrap the full row trigger, so the entire Database sidebar row opens the tooltip. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Enhanced navigation menu components with improved loading and error state handling across the dashboard. * Streamlined menu structure and styling consistency for integrations, reports, and observability sections. * Added enhanced tooltip support for navigation items. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
5357cd308a |
Update www contact us page email addresses from io to com domain (#45616)
## Context As per PR title - for consistency <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Updated contact email addresses from supabase.io to supabase.com for Legal, Privacy, Abuse & Acceptable Use, Security, and Grievance Officer channels. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
f7ea722b35 |
Consolidate grid header actions in table editor into a single row (#45504)
## Consolidate Table Editor grid header actions into a single row https://github.com/user-attachments/assets/1020c385-8fa9-4ef1-b5e7-03983111508b ## Changes involved - Index advisor, Realtime, and API docs are now behind a dropdown menu button (Treated as secondary actions) - Grid header actions shifted into the same row as filter bar (more space for data grid) - Header actions will hide while filter bar is in focus (remove distractions, more space for filter bar) ## Changes to filter bar - Filter bar will refocus when deleting a filter - Clicking on the search icon will focus on the free form input of the filter bar <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a “More” dropdown in grid actions to access Realtime, API docs, and Index Advisor. * New dialogs for enabling Index Advisor and toggling Realtime are now consistently managed. * **Improvements** * Improved filter focus handling with auto-refocus when conditions change and responsive header behavior. * Adjusted popover alignment, separator visuals, header/footer/pagination layout and sizing. * Filter bar now supports programmatic focus; Connect button supports icon-only mode. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Gildas Garcia <1122076+djhi@users.noreply.github.com> |
||
|
|
aee4c8fdd7 |
chore: migrate Input usages to Shadcn component in database screens/components (#45600)
## Screenshots ### Extensions search input Before: <img width="955" height="256" alt="image" src="https://github.com/user-attachments/assets/c69e428a-8ab5-4dce-a45a-5d6a6d30472d" /> After: <img width="965" height="212" alt="image" src="https://github.com/user-attachments/assets/a08294cc-14ea-4c8d-af24-a207de3dada9" /> ### Triggers search input Before: <img width="961" height="249" alt="image" src="https://github.com/user-attachments/assets/21df2aeb-cc83-42e2-a35e-23e6451182ad" /> After: <img width="979" height="248" alt="image" src="https://github.com/user-attachments/assets/f365661d-5075-4041-a4f2-8fd1b7fdeb4b" /> ### Hooks search input Before: <img width="974" height="361" alt="image" src="https://github.com/user-attachments/assets/baaad7fb-1ede-46a4-8148-3cc05a53c955" /> After: <img width="976" height="363" alt="image" src="https://github.com/user-attachments/assets/9c3b2467-1e9a-4919-a6df-9e3ff46a30b8" /> ### Backups - restore to new project dialog Before: <img width="544" height="656" alt="image" src="https://github.com/user-attachments/assets/181018ac-cda6-4a57-bfc3-028ac6a1eeed" /> After: <img width="536" height="643" alt="image" src="https://github.com/user-attachments/assets/4c177884-4415-4744-b3d1-67fe83065565" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Standardized search inputs across database interfaces by consolidating into a grouped input pattern for consistent behavior and keyboard focus. * **Style** * Improved layout of the database creation dialog’s password field, including visible reveal control and relocated strength indicator for clearer form presentation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Ali Waseem <waseema393@gmail.com> |
||
|
|
153f2619bc |
feat(studio): show expand affordance for large SQL result cells (#45589)
## Summary
- Adds a hover-revealed expand button to SQL result cells whose value is
unlikely to fit on one line (objects, arrays, strings >60 chars, or
strings with newlines). Clicking opens the existing `CellDetailPanel`
for that cell.
- Switches the expand state from a boolean tied to the selected cell to
a direct `{ column, value }` reference, so the context menu and the new
button both target the right-clicked / clicked cell.
- Extracts the per-cell renderer into its own `ResultCell` component to
keep `Results.tsx` digestible and the new affordance isolated.
- Covers the new logic with exhaustive `isLargeValue` unit tests and a
`ResultCell` component test (visibility, click, right-click).
Linear: [FE-3130](https://linear.app/supabase/issue/FE-3130)
## Test plan
- [x] Run a SQL query that returns mixed cell types (short strings, long
strings, JSON objects, arrays, nulls) and confirm the expand button
appears only on cells where content is likely truncated.
- [x] Hover a large cell and click the expand button — `CellDetailPanel`
opens with the correct column + value.
- [x] Right-click a large cell and choose "View cell content" — same
panel opens with the right cell.
- [x] Right-click a small cell and "Copy cell content" — clipboard
contains the raw value.
- [x] Resize a column wider than its content and confirm the button
still positions correctly.
- [x] `pnpm vitest` for `Results.utils.test.ts`, `Results.test.tsx`,
`ResultCell.test.tsx` — all green.
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Enhanced SQL result cells with automatic detection and expansion
functionality for large values (exceeding 60 characters or containing
line breaks)
* Added expand button to view full cell content directly in results
* Integrated right-click context menu for cell content options
* Improved display of null values in query results
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
|
||
|
|
4f28e5ccb4 |
chore: migrate Input usages to Shadcn component in settings (#45596)
screens/components ## Screeshots ### Delete project modal textarea Before: <img width="792" height="928" alt="image" src="https://github.com/user-attachments/assets/f8276696-7bc0-415e-958c-b8794762013b" /> After: <img width="788" height="928" alt="image" src="https://github.com/user-attachments/assets/4b0991c1-7926-4b0a-b1cb-942f809f4a02" /> ### Edge functions logs search input Before: <img width="667" height="219" alt="image" src="https://github.com/user-attachments/assets/991b09ce-8d4f-4ccc-b787-3da611c78893" /> After: <img width="695" height="231" alt="image" src="https://github.com/user-attachments/assets/2623faeb-d636-4dec-8244-8e9bdad3acfb" /> ### Infrastructure Before: <img width="1144" height="419" alt="image" src="https://github.com/user-attachments/assets/25b27819-a3f6-4d67-9edc-f8225d07d592" /> After: <img width="1153" height="440" alt="image" src="https://github.com/user-attachments/assets/10eea888-09b0-463b-a307-6c58b4feb948" /> ### DNS Record Haven't been able to test this one <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Streamlined form and input layouts across Settings: DNS, Project Deletion, Infrastructure Info, and Log Preview panels for a more consistent, accessible editing experience. * Replaced various single-line inputs with grouped controls, read-only/display variants, and input-with-addon patterns, improving readability, copy/readonly behavior, and control affordances (buttons, badges, tooltips) in settings and log search. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
da81b2f14d |
feat(studio): add click tracking for top bar buttons (#45414)
## Summary Adds PostHog click/open tracking for every interactive element in the Studio top bar. Previously only 5 of ~16 surfaces were tracked. ### New events (16) | Event | Surface | |---|---| | `home_logo_clicked` | Supabase logo | | `header_back_to_dashboard_clicked` | Mobile back chevron | | `header_exceeding_usage_badge_clicked` | "Exceeding usage limits" badge | | `organization_dropdown_opened` | Org dropdown trigger | | `project_dropdown_opened` | Project dropdown trigger | | `branch_dropdown_opened` | Branch dropdown trigger | | `merge_request_button_clicked` | MR trigger (separate from existing success event) | | `connect_button_clicked` | Connect CTA | | `feedback_dropdown_opened` | Feedback dropdown trigger | | `advisor_button_clicked` | Advisor toggle | | `inline_editor_button_clicked` | SQL editor toggle | | `assistant_button_clicked` | AI Assistant toggle | | `user_dropdown_opened` | Account dropdown | | `local_dropdown_opened` | Local-dev settings dropdown | | `local_version_popover_opened` | CLI version popover | ### Notes - Uses `useTrack` (per `telemetry-standards`), all event names use approved `_clicked` / `_opened` verbs. - Dropdown `onOpenChange` handlers guard against Radix's double-fire by only tracking when `open === true`. - `merge_request_button_clicked` fires on the trigger click; the existing `branch_create_merge_request_button_clicked` continues to fire on successful MR creation. - Pre-existing tracked surfaces (`command_menu_opened`, `help_button_clicked`, `header_upgrade_cta_clicked`, `send_feedback_button_clicked`) are unchanged. ## Test plan - [x] Spot-check each event fires once per interaction in PostHog Live Events - [x] Verify no double-fire on dropdown close <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Added telemetry tracking for many header/navigation interactions (logo, back-to-dashboard, usage badge, connect/merge/advisor/assistant/inline-editor buttons, and multiple dropdowns/popovers). * **Tests** * Updated tests to stub telemetry calls so UI tests remain stable and deterministic. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
2c892acec4 |
feat(www): add Notion database as form destination for /go pages (#45175)
## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## What kind of change does this PR introduce? Feature ## What is the current behavior? `/go` page form submissions can be routed to HubSpot and Customer.io, but there's no way to send the same data to a Notion database. Partnerships needs Notion as a third destination. Relates to [DEBR-265](https://linear.app/supabase/issue/DEBR-265/notion-database-for-go-pages). ## What is the new behavior? Adds a `notion` provider alongside `hubspot` and `customerio` in the form CRM config. Each page can now declare: ```ts notion: { database_id: '21b5004b775f8058872fe8fa81e2c7ac', columnMap: { email_address: 'email', first_name: 'first_name' }, staticProperties: { source: 'Website Go Page' }, } ``` A new `NotionClient` fetches the target database schema once per submission to auto-detect each column's property type (`title`, `rich_text`, `email`, `number`, `select`, etc.) so the config stays a plain string→string map. Unknown columns are silently skipped. The submit action reads `NOTION_API_KEY` from env and dispatches in parallel with the existing providers. ## Additional context - New env var required on Vercel: `NOTION_API_KEY` (a Notion internal integration token with write access to the target database). - Simplified `CRMConfig` from a discriminated-union-of-all-combinations to a plain object with optional providers; the "at least one provider" invariant still lives in the Zod schema refinement. This avoided a 2^3 - 1 = 7 member union and a generic `CRMClient<T>` whose call site was already casting to `any`. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added Notion as a CRM provider for form submissions with schema-backed mapping, validation, and automatic creation of Notion database pages. * Exposed a typed Notion form config for configuration and validation; example lead-gen form includes a Notion mapping. * **Bug Fixes / Improvements** * Simplified CRM option handling and made submission behavior clearer. * HubSpot submissions now URI-encode identifiers to avoid endpoint errors. * Improved Notion request handling, caching, and error reporting; Notion sends in parallel when configured. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
3f97eeea5a |
feat(studio): extend safe SQL model to policy editor and related interfaces (#45560)
## 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? Refactor / security improvement ## What is the current behavior? SQL fragments across Studio are built from plain `string` values with no type-level distinction between developer-authored SQL, DB-sourced identifiers, and user-typed or externally-influenced content. ## What is the new behavior? Extends the safe SQL model to additional Studio interfaces, using `SafeSqlFragment`, `safeSql`, `ident()`, `literal()`, `untrustedSql()`, and `acceptUntrustedSql()` from `@supabase/pg-meta/src/pg-format`: - **Policy editor**: template constants typed as `SafeSqlFragment` via `safeSql` tagged literals; Monaco editor `onInputChange` emits `untrustedSql()`; `acceptUntrustedSql()` called only at the Save gesture; roles selector emits a composed `SafeSqlFragment` via `ident()` + `joinSqlFragments()` - **Auth hooks**: grant/revoke SQL statements use `ident()` for schema and function names - **Docs description editor**: `COMMENT ON` queries use `ident()` and `literal()` for table/column/function names and values - **Cron jobs**: `cron.schedule()` call and HTTP request builder use `literal()` for all user-provided values - **GraphQL linter CTA**: `REVOKE` statement uses `ident()` for schema, table, and role - **Storage public bucket warning**: `DROP POLICY` uses `ident()` for policy name - **View security autofix modal**: `ALTER VIEW` uses `ident()` for schema and view name - **API settings**: `CREATE SCHEMA` mutation uses `safeSql` tagged literal - **Database event trigger delete**: `DROP EVENT TRIGGER` uses `ident()` for trigger name - **Database queues query**: queue list query uses `safeSql` tagged literal - **Role impersonation**: function invocation SQL uses `ident()` and `literal()` ## Manual testing checklist - Authentication > Policies - Authentication > Hooks - Integrations > Queues - Database > Event Triggers - Integrations > Cron Jobs - Table Editor > View entity security autofix - API Settings > expose schema - Linter > GraphQL exposure CTA - Docs > table/column description editor - Role impersonation (user impersonation panel) ## Additional context <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Replaced ad-hoc SQL string building with a safer, fragment-based SQL construction across auth, policies, integrations, storage, and DB operations to improve SQL safety while preserving behavior. * **Bug Fixes / UX** * Policy editor and code editor now propagate role and input changes more reliably, improving editor responsiveness and policy handling without UI changes. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
c26b64a033 |
feat(www): emit BreadcrumbList JSON-LD on marketing surfaces (#45478)
## Summary
- Adds `breadcrumbListSchema(items)` helper to `apps/www/lib/json-ld.ts`
and a hand-curated `apps/www/lib/breadcrumbs.ts` route map.
- Wires inline `<script type="application/ld+json">` BreadcrumbList
blocks into 18 marketing surfaces: blog (index + slug), customers (index
+ slug), events (index + slug), 5 product pages (database, auth,
storage, edge-functions, realtime), 3 modules (vector, cron, queues),
pricing, careers, company, features.
- Pages router callers wrap the script in `<Head>`; app router callers
place it directly in JSX. Dynamic surfaces append a leaf at render time
using the page's title (`frontmatter.title` for blog, `meta_title ??
title` for customers, `event.meta_title ?? event.title` for events).
- Modules sit at `Home > {Name}` since no `/modules` index page exists;
products sit at `Home > {Product}` (no shared products parent). Absolute
`https://supabase.com` URLs match the existing `CANONICAL_ORIGIN`
convention so anchors stay stable across Vercel previews.
Linear:
[GROWTH-822](https://linear.app/supabase/issue/GROWTH-822/add-breadcrumblist-json-ld-to-www-marketing-surfaces)
(sub-issue under
[GROWTH-724](https://linear.app/supabase/issue/GROWTH-724)).
> **Note on branch name:** the branch is
`pamela/growth-820-www-breadcrumb-jsonld`; the actual Linear issue is
GROWTH-822. The branch was named before the sub-issue was created.
Ignore the `820` in the branch.
Explicitly deferred (separate PRs / low SEO ROI): `/launch-week/*`,
`/solutions/*`, `/partners/*`, `/alternatives/*`, `/changelog`,
`/legal/dpa`, `/aws-reinvent-2025`, `/wrapped`, `/contribute/*`,
`/brand-assets`, `/ga`, `/ga-week`, `/state-of-startups*`, and the
homepage (Organization + WebSite already cover homepage entity signals;
single-item BreadcrumbList is ignored by Google).
## Test plan
- [x] On the Vercel preview, `curl -s https://<preview>/database | grep
'"BreadcrumbList"'` returns the script block with `Home > Database`.
- [x] `curl -s https://<preview>/blog/<recent-slug> | grep
'"BreadcrumbList"'` returns `Home > Blog > {post title}`.
- [x] `curl -s https://<preview>/customers/<slug> | grep
'"BreadcrumbList"'` returns `Home > Customer Stories > {customer
title}`.
- [x] `curl -s https://<preview>/events/<slug> | grep
'"BreadcrumbList"'` returns `Home > Events > {event title}`.
- [x] `curl -s https://<preview>/modules/vector | grep
'"BreadcrumbList"'` returns `Home > Vector`.
|
||
|
|
2e904abebf |
feat(studio): add D + letter shortcuts for Database sub-pages (#45546)
## Summary Adds a contextual `D + <letter>` chord pattern for jumping between Database sub-pages, mounted only while `DatabaseLayout` is active. Establishes the pattern we can repeat for other sections (Auth, Storage, Functions, etc.). Linear: [FE-3140](https://linear.app/supabase/issue/FE-3140/define-subnavigation-pattern-for-database-management-page) ## Pattern - Chords are 2-key sequences (`D`, `<letter>`) — no global leader, no `G` prefix. - Registration is contextual: `<DatabaseNavShortcuts />` lives inside `DatabaseLayout`, so the leading `D` is only "owned" while the user is under `/project/<ref>/database/*`. Doesn't burn a global key. - Hover tooltips on each sub-menu item show the chord, anchored to the label text (Linear-style). Powered by `<ShortcutTooltip>` already used in the main nav. - Items hidden by feature flags (Roles, Column Privileges, Replication) auto-disable the chord — no muscle-memory navigating to a 404. ## Shortcuts added | Sub-page | Chord | Notes | |---|---|---| | Tables | `D T` | | | Functions | `D F` | | | Triggers | `D R` | t**R**iggers — `T` taken by Tables | | Indexes | `D I` | | | Extensions | `D X` | e**X**tensions | | Schema Visualizer | `D V` | | | Enumerated Types | `D E` | | | Publications | `D U` | p**U**blications — avoids collision with Schema Visualizer's `D P` (Download as PNG) | | Column Privileges | `D C` | flag-gated | | Settings | `D ,` | mirrors global `G ,` for project settings — avoids collision with Schema Visualizer's `D S` (Download as SVG) | | Replication | `D L` | rep**L**ication — flag-gated | | Roles | `D O` | r**O**les — flag-gated | | Backups | `D B` | platform-only | | Migrations | `D M` | | External-link sub-menu items (Policies, Wrappers, Webhooks, Security Advisor, Performance Advisor, Query Performance) are intentionally not chorded — they route out of `/database/*` and don't belong to the section's namespace. ## Collision audit Other shortcuts active on database pages (table-list, schema-visualizer) were checked against the new chords: - **Schema Visualizer** (`/database/schemas`): `D P` (Download PNG), `D S` (Download SVG), `O A`, `O S`. Publications and Settings were remapped to `D U` and `D ,` to avoid the `D P` / `D S` clashes. - **List pages** (`/database/tables`, etc.): `Shift+F`, `Shift+N`, `O S`, `F C` — no overlap with `D + <letter>`. ## Files - `state/shortcuts/registry/database-nav.ts` — new registry module with the 14 chord definitions. - `state/shortcuts/registry.ts` — spreads the new IDs/definitions into the canonical registry. - `components/interfaces/DatabaseNavShortcuts.tsx` — null-rendering hook component that wires `useShortcut` for each chord, keyed off `useGenerateDatabaseMenu` so URLs and feature gating stay in sync with the sidebar. - `components/layouts/DatabaseLayout/DatabaseLayout.tsx` — mounts the component. - `components/layouts/DatabaseLayout/DatabaseMenu.utils.tsx` — tags each menu item with its `shortcutId`. - `components/ui/ProductMenu/ProductMenu.types.ts` — adds optional `shortcutId?: ShortcutId` field. - `components/ui/ProductMenu/ProductMenuItem.tsx` — renders the hover tooltip when an item has a `shortcutId`, anchored to the label span. ## Test plan - [ ] On `/project/<ref>/database/tables`, press `D F` — navigates to `/database/functions`. - [ ] On `/project/<ref>/database/schemas`, press `D P` — downloads the PNG (Schema Visualizer wins, no nav conflict). - [ ] On `/project/<ref>/database/schemas`, press `D U` — navigates to `/database/publications`. - [ ] On `/project/<ref>/database/tables`, press `D ,` — navigates to `/database/settings`. - [ ] Hover any sub-menu item with a chord — pill appears next to the label after ~1s. - [ ] On a project with the Replication flag off — `D L` does nothing. - [ ] Navigate to `/auth` — pressing `D F` does nothing (chord unmounts with the layout). - [ ] Type `D` then `F` slowly inside an input — does not navigate (input-focus guard). |
||
|
|
9240478816 |
chore: migrate Input usages to Shadcn component in integrations screens/components (#45591)
## Screenshots ### New cron job edge function timeout Before: <img width="1157" height="259" alt="image" src="https://github.com/user-attachments/assets/b5e056e7-6216-45a6-9cc6-15e56621c62a" /> After: <img width="1162" height="258" alt="image" src="https://github.com/user-attachments/assets/bfb12a20-8a11-47f1-b7e6-c1ebc2fc187e" /> ### New cron job http request timeout Before: <img width="1161" height="237" alt="image" src="https://github.com/user-attachments/assets/ad1dc7ef-e9ec-4219-8f84-f20025aa1c68" /> After: <img width="1160" height="231" alt="image" src="https://github.com/user-attachments/assets/eb4d0df2-db20-4e04-a78d-fa36656a2987" /> ### New queue, partition configuration Before: <img width="786" height="677" alt="image" src="https://github.com/user-attachments/assets/34b3f1fc-b1e8-434f-bfc7-8a5686bd1c29" /> After: <img width="778" height="668" alt="image" src="https://github.com/user-attachments/assets/f7423240-b810-47d6-af1d-9d5647c78843" /> ### Queue: send message dialog Before: <img width="522" height="411" alt="image" src="https://github.com/user-attachments/assets/f9cf5993-c7e4-4bd0-9718-0c9e85e41378" /> After: <img width="532" height="414" alt="image" src="https://github.com/user-attachments/assets/d965bfcc-c074-44a1-8a8f-ecdd4e766221" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Enhanced input field presentation for timeout, delay, and interval configurations with inline unit labels (milliseconds, seconds, messages) for improved clarity and consistency across integration settings. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
fe93df7d6b |
chore: migrate Input usages to Shadcn component in auth and policies screens/components (#45590)
## Screenshots ### Auth: Create or edit custom Auth provider See the callback URL input at the bottom. Before: <img width="1179" height="1309" alt="image" src="https://github.com/user-attachments/assets/b15d38fd-6e32-489e-8ef6-bff519d38123" /> After: <img width="1176" height="1318" alt="image" src="https://github.com/user-attachments/assets/dedc72cc-7756-4995-af9a-5f7a4554f76f" /> ### Custom Auth provider list search input Before: <img width="1135" height="236" alt="image" src="https://github.com/user-attachments/assets/ced8538a-91ca-428b-8d90-544962c1eb5b" /> After: <img width="1147" height="227" alt="image" src="https://github.com/user-attachments/assets/695a5c87-f371-4d90-91a8-761266526345" /> ### Auth hooks Before: <img width="1150" height="301" alt="image" src="https://github.com/user-attachments/assets/20341d7b-6a2f-491a-b23f-74d92398192f" /> After: <img width="1143" height="305" alt="image" src="https://github.com/user-attachments/assets/95d73950-eb55-459d-9cb9-3077bcd10985" /> ### OAuth App list search input Before: <img width="1147" height="371" alt="image" src="https://github.com/user-attachments/assets/be935f9d-1b32-4488-bf37-6153f7d39262" /> After: <img width="1146" height="365" alt="image" src="https://github.com/user-attachments/assets/628b77c8-074b-455a-94ea-b8e20b4da2db" /> ### New policy sheet template search input Before: <img width="536" height="268" alt="image" src="https://github.com/user-attachments/assets/d5ea6ee9-02fa-48fc-a727-cb56e5f57f8f" /> After: <img width="534" height="260" alt="image" src="https://github.com/user-attachments/assets/34ac4c40-5613-47f1-b724-0780499afa26" /> ### Storage new policy dialog Before: <img width="1180" height="660" alt="image" src="https://github.com/user-attachments/assets/afb4b1d3-f42b-4379-9197-c47a97340eaa" /> After: <img width="1175" height="646" alt="image" src="https://github.com/user-attachments/assets/427e2f0f-553b-4ea8-a8ae-f1835c1c791b" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Refactor** * Updated search input design across authentication interfaces for improved consistency. * Standardized input control layout in auth configuration forms. * **Bug Fixes** * Corrected webhook configuration field behavior. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
ce214c1ca5 | Update humans.txt (#45599) | ||
|
|
e8ad071e64 |
fix(docs): update Realtime Postgres Changes + Authorization interaction (#44199)
## 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 docs on Realtime Postgres Changes + Authorization interaction ## What is the current behavior? It can be misleading to say `The `private` Channel option does not apply to Postgres Changes.` As Postgres Changes can happen under a private channel. ## What is the new behavior? Fix docs <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Updated the authorization guide to clarify how Postgres Changes interact with Channel authorization, including RLS policy enforcement and channel type compatibility. <!-- end of auto-generated comment: release notes by coderabbit.ai --> Co-authored-by: Chris Chinchilla <chris.ward@supabase.io> |
||
|
|
d401fd89da |
blog: Realtime or ETL? How to choose the right tool (#45568)
## 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 ## What is the current behavior? N/A ## What is the new behavior? Adds a new blog post explaining when to use Supabase Realtime vs Supabase ETL, covering delivery guarantees, destinations, scale characteristics, and common mistakes. ## Additional context N/A <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a comprehensive blog post comparing Supabase Realtime and ETL, covering technical differences, delivery guarantees, use cases, and best practices to help users select the appropriate tool for their data integration needs. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Ana <ana1337x@users.noreply.github.com> |
||
|
|
97a8df0a23 |
feat: Handle the classic-dark theme in www and docs apps (#45214)
This PR fixes a bug where a user might choose `classic-dark` as a theme in `studio` but then `docs` and `marketing` apps will look weird. To test: - Change the localStorage value of `theme` to `classic-dark` - Open `www` and `docs` apps, they should look ok <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a new "classic-dark" theme option for enhanced visual customization. * **Improvements** * Unified and simplified theme handling across apps for more consistent behavior. * Improved system-theme detection and smoother transitions when switching themes. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
89ed7f1a24 |
Add Kai M to the humans.txt list (#45563)
Onboarding Task - adding myself to the list! <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Chores** * Updated team information. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
daa3119b2f |
chore(studio): align sidebar hover states (#45569)
## What kind of change does this PR introduce? UI polish. Updates sidebar and submenu navigation hover and active styling. ## What is the current behavior? Product submenu navigation items either lack a hover fill or use a hover fill that visually matches the active state. Adjacent hovered and selected rows can appear to touch. ## What is the new behavior? Primary sidebar buttons, sidebar sub-buttons, and product submenu pills now share a muted hover fill while preserving the full accent fill for active/selected states. Product submenu rows also get a small visual gap with slightly reduced vertical padding to keep the overall spacing compact. | After | | --- | | <img width="988" height="408" alt="CleanShot 2026-05-05 at 11 53 05@2x" src="https://github.com/user-attachments/assets/560ac8a5-1262-41af-a196-618c86580150" /> | <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Refined sidebar hover/active states with subtle accent alpha colors for a more polished visual experience. * Updated sidebar menu spacing and rounded corners for improved touch and visual clarity. * **UI Improvements** * Sidebar now only displays when sections exist and uses a streamlined submenu flow for more consistent, predictable navigation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
2fcd4fab69 |
fix: quote mcp url (#45272)
- closes https://github.com/supabase/supabase/issues/45266 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **Bug Fixes** * Updated the formatting of MCP URLs in generated Codex setup commands to include proper quotation marks for correct CLI execution. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
b55c1d85e6 |
fix(studio): restore 3xx/4xx log status badge colors (#45581)
## Problem After the Tailwind v4 upgrade, the 3xx/4xx HTTP status badge in the Logs explorer rendered with a saturated yellow background and washed-out text, because `bg-amber-300`/`text-amber-1100` no longer resolve as they did under v3. ## Fix Switch the 3xx/4xx case in `ResponseCodeFormatter` to the existing `bg-warning/10 text-warning` semantic tokens, matching the pattern used by the shared `Badge` warning variant. ## Before <img width="798" height="722" alt="CleanShot 2026-05-05 at 12 13 23@2x" src="https://github.com/user-attachments/assets/a2d37f37-4260-4ec6-bf1c-ff96b6f51be0" /> ## After <img width="642" height="530" alt="CleanShot 2026-05-05 at 12 12 55@2x" src="https://github.com/user-attachments/assets/7c82aee2-0d40-4213-8533-14ffb04fb5de" /> ## How to test - Run `pnpm dev:studio` - Open any project's Logs explorer (API, Edge Functions, Auth, etc.) - Find a row with a 3xx or 4xx status code - Expected: faint yellow background with a darker amber/yellow text, consistent with other warning badges in the app - Confirm 2xx (brand) and 5xx (red) badges still render as before <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Updated the visual styling of response codes in the logs display for improved consistency. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
019d10aab6 |
feat(studio): add token_endpoint_auth_method field to OAuth app (#45519)
## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES ## Summary - Added token_endpoint_auth_method field to the OAuth app create/update sheet, visible only when client type is set to "Confidential" - Supports client_secret_basic (HTTP Basic Auth header) and client_secret_post (request body) options; public clients automatically use none - Wired the field into both create and update API payloads ## Test plan - Create a confidential OAuth app -> Token Endpoint Auth Method selector should appear and submit correctly for both options - Create a public OAuth app -> selector should not appear; none is sent in the payload - Edit an existing confidential app -> selector should pre-populate from the saved value ## What is the new behavior? <img width="1244" height="1660" alt="image-KvVBmAG6@2x" src="https://github.com/user-attachments/assets/76ab2687-6be4-4b74-a830-e670a2bb4be2" /> <img width="1264" height="1652" alt="image-gLARAPwt@2x" src="https://github.com/user-attachments/assets/fd5770d5-acfd-4edb-bd5e-af582108f092" /> related: https://github.com/supabase/supabase/pull/43128 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added token endpoint authentication method configuration for OAuth app creation and updates * Authentication method automatically adjusts based on client type (public clients use 'none') * Token endpoint auth method field conditionally displayed for confidential clients only <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
5c7370f2d7 |
chore(docs): add Daniel Mitterdorfer to humans.txt (#45576)
## 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 to add `Daniel Mitterdorfer` to `humans.txt`. ## What is the current behavior? `Daniel Mitterdorfer`is not present in `humans.txt`. ## What is the new behavior? `Daniel Mitterdorfer`is present in `humans.txt`. |
||
|
|
9e3efd1b78 |
docs: Add datconnlimit resolution to troubleshooting guide (#43855)
## 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 based on https://www.postgresql.org/docs/current/catalog-pg-database.html ## What is the current behavior? Please link any relevant issues here. ## What is the new behavior? Feel free to include screenshots if it includes visual changes. ## Additional context Add any other context or screenshots. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Documentation** * Added a troubleshooting guide for the PostgreSQL "too many connections" error. * Describes how to diagnose connection-limit settings and detect non-default configurations. * Offers recommended recovery steps to restore default connection limits and safely recover affected databases, with links to relevant PostgreSQL documentation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Chris Chinchilla <chris.ward@supabase.io> Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> Co-authored-by: Chris Chinchilla <chris@chrischinchilla.com> |
||
|
|
b01941275b |
docs: update js sdk docs (2.105.2) (#45559)
Updates JS sdk documentation following stable release.
Ran `make` in apps/docs/spec to regenerate tsdoc files.
**Details:**
- **Version:** `2.105.2`
- **Source:** `supabase-js-stable-release`
- **Changes:** Regenerated tsdoc files from latest spec files
🤖 Auto-generated from @supabase/supabase-js stable release.
Co-authored-by: supabase-releaser[bot] <223506987+supabase-releaser[bot]@users.noreply.github.com>
|
||
|
|
777871aa68 |
feat(docs): add storage operation RLS helpers (#43859)
## What kind of change does this PR introduce? Docs ## What is the new behavior? Documents new Storage operation RLS helpers. ## Additional context Related to https://github.com/supabase/storage/pull/903 Signed-off-by: ferhat elmas <elmas.ferhat@gmail.com> Co-authored-by: Chris Chinchilla <chris.ward@supabase.io> |
||
|
|
d6a8591019 |
Opt to use HoverCard instead of Popover for project status (#45575)
## Context It isn't clear that the project status on the project home page is clickable to show the status of each service of the project <img width="283" height="454" alt="image" src="https://github.com/user-attachments/assets/c91ade86-b16d-4ea5-9046-5e8f71e7dd6e" /> Which can cause confusion, especially when starting branches - that the project status is just "Coming up" with no additional information. Opting to use a hover card instead of a popover to hopefully mitigate this gap <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit ## Release Notes * **UI Improvements** * Enhanced status tooltip interactions with improved hover behavior and customizable delay controls for a better user experience. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
4c70efb562 |
RLS Tester to include policies that are applied to public (#45574)
## Context For a table that has RLS enabled, but a policy with just `true` for the role `public` The RLS tester was incorrectly reporting that `anon` doesn't have access Was happening as we weren't considering policies that apply to the `public` role (which applies to _all_ roles) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * RLS tester now treats explicitly-public policies as applicable regardless of the impersonated role, improving policy coverage accuracy. * **Refactor** * Consolidated RLS test state computation to improve consistency of access badges and policy messaging. * **Tests** * Added comprehensive tests validating RLS scenarios, badge states, and policy/role messaging. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
8a5e609936 |
fix: add query params for simple-redirect integrations (#45562)
This change updates the handler for simple GET installations to correctly appending the organization_slug and project_ref parameters as documented in our Partner Integrations Guide. Fixes INT-111 <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Integration installs now open in a new browser tab instead of replacing the current page. * Organization and project context are appended to integration installation links so setups receive correct context. * Missing or invalid installation links now fall back to the home page to avoid navigation errors. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Joshen Lim <joshenlimek@gmail.com> |
||
|
|
e98a302428 |
Refactor merge page into smaller components + add admonition if branch cannot be merged via dashboard (#45515)
## Context Main fix is actually just the disabled check on the "Merge branch" button We're preventing merging of branches via the dashboard if the project has GH integration + "Deploy to production" enabled (the latter we're checking via if the `git_branch` property from the main branch exists, from the GET branches API endpoint) However, the `git_branch` property persists even after disabling the GH integration (by design), and hence we were incorrectly disabling the "Merge branch" button if the user removed the GH integration. Hence the fix is to also check if the project has an active GH integration ## Other changes - Refactored the merge page into smaller components - Added an admonition to callout the "Deploy to production" + what steps to take (otherwise it's not clear at all what to do in this scenario) <img width="1451" height="524" alt="image" src="https://github.com/user-attachments/assets/9df7d432-b220-4f71-b8f4-5ed0fd426afc" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Redesigned merge request page interface with dedicated components for title, subtitle, and merge actions, improving user clarity and experience. * Added GitHub production deployment restriction messaging—users cannot proceed with merge requests when this integration deployment method is enabled. * **Refactor** * Enhanced GitHub integration connection query patterns and overall code organization. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
4ac1231c0e |
Fix multi selector content not scrollable if rendered in a sheet (#45573)
## Context Realised that MultiSelector's content is not scrollable when rendered within a sheet (e.g Auth policies, Database indexes) ### Explanation from Claude: - The issue is that Radix Dialog (Sheet) adds @radix-ui/react-remove-scroll which intercepts wheel events. The Popover portal renders outside the Sheet's DOM tree, so the scroll lock blocks wheel events on CommandList. - The fix is to stop wheel event propagation on the CommandList so it doesn't reach the RemoveScroll handler. ### To test - [ ] Verify that MultiSelector can be scrollable within a sheet (e.g Auth policies roles) and outside of a sheet (e.g Data API -> Exposed schemas) <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * Fixed scroll wheel propagation in multi-select dropdown to prevent unintended scrolling of parent elements. * **Updates** * Simplified filter component interface by removing an unused configuration property. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
b539cc0529 |
feat(docs): return page suggestions in markdown 404 pages (#45439)
Markdown guides (`/docs/guides/**/*.md`) that 404 currently return a text/plain `Not found` response. Since agents often hallucinate URL paths, this PR proactively provides page suggestions so that agents can find the page they are looking forward without further guessing. It uses the docs Content API to fetch related pages, similar to the [HTML 404 page](https://supabase.com/docs/404): ``` # 404 - Page Not Found The page `/docs/guides/mcp.md` does not exist. ## You might be looking for... - [Model context protocol (MCP)](https://supabase.com/docs/guides/getting-started/mcp.md) - [Building an MCP Server with mcp-lite](https://supabase.com/docs/guides/functions/examples/mcp-server-mcp-lite.md) - [Model Context Protocol (MCP) Authentication](https://supabase.com/docs/guides/auth/oauth-server/mcp-authentication.md) - [Deploy MCP servers](https://supabase.com/docs/guides/getting-started/byo-mcp.md) - [Enabling MCP Server Access](https://supabase.com/docs/guides/self-hosting/enable-mcp.md) See also: [Changelog](https://supabase.com/changelog.md) ``` ## How to test 1. Use curl to fetch a non-existent page with an `.md` extension: ```shell curl -i https://docs-git-docs-markdown-404-suggestions-supabase.vercel.app/docs/guides/mcp.md ``` Confirm that relevant pages are suggested (ballpark - our search algo needs some improvement). Also confirm that the response has content type `text/markdown`. 2. Use curl to fetch a non-existent page using the `Accept: text/markdown` header ```shell curl -i -H 'Accept: text/markdown' \ https://docs-git-docs-markdown-404-suggestions-supabase.vercel.app/docs/guides/mcp ``` And confirm the same result as 1. <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Bug Fixes** * 404 pages for missing guides now return a formatted Markdown response with proper content-type and no-cache headers, and include up to five related documentation suggestions to help users find relevant content. * **Chores** * Build environment now preserves an additional hosting URL variable to improve build/task consistency. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
b554f58106 |
chore: migrate Input usages to Shadcn components (#45429)
## Problem We want to reduce the code we ship and maintain. ## Solution - Migrate old `Input` usage to the new Shadcn `input` This PR focuses on: - DevToolbar - design-system examples - `www` usages - `docs` usages ## Screenshots ### Docs: OAuth Apple Before: <img width="613" height="508" alt="image" src="https://github.com/user-attachments/assets/1d2d7726-cc5e-471f-a2c2-995b9d7f70ee" /> After: <img width="606" height="530" alt="image" src="https://github.com/user-attachments/assets/ca4f522f-de9c-4edf-966b-70cad5015d0c" /> NOTE: Also used the `DataInput` for the secret once the inputs are filled. ### Docs: Extensions Before: <img width="596" height="161" alt="image" src="https://github.com/user-attachments/assets/16d2f548-90dc-4987-9954-7c47ac58e76e" /> After: <img width="604" height="227" alt="image" src="https://github.com/user-attachments/assets/62c74102-98c6-47a6-b19b-cbf67dfad68f" /> ### WWW: Blog search Before: <img width="971" height="417" alt="image" src="https://github.com/user-attachments/assets/efb0307e-60b5-4d8f-9823-c8b8996cdf32" /> After: <img width="964" height="403" alt="image" src="https://github.com/user-attachments/assets/2dc0decd-b773-4bc6-9a72-c43f352f8cbf" /> ### WWW: Blog author search Before: <img width="953" height="337" alt="image" src="https://github.com/user-attachments/assets/1f629704-ab7d-4e4b-878e-1838ab16037f" /> After: <img width="1028" height="341" alt="image" src="https://github.com/user-attachments/assets/d8d54dcb-3c00-46ea-b97f-55c16cda917f" /> ### WWW: Assistant demo Before: <img width="421" height="715" alt="image" src="https://github.com/user-attachments/assets/bcc4a591-d53c-4202-acf8-2b3d6cfd52d2" /> After: <img width="435" height="731" alt="image" src="https://github.com/user-attachments/assets/8a57c5da-5c9e-474d-a89e-2835d3498aef" /> ### WWW: Integrations Before: <img width="740" height="599" alt="image" src="https://github.com/user-attachments/assets/cf3d3d8a-b247-4e20-b47d-11976ca49c57" /> After: <img width="911" height="492" alt="image" src="https://github.com/user-attachments/assets/dcb5b6e8-f4e2-4801-b390-352390a0b486" /> ### WWW: features Before: <img width="1098" height="491" alt="image" src="https://github.com/user-attachments/assets/ea3645c5-df03-4eb9-b28c-41018e01c41e" /> After: <img width="976" height="479" alt="image" src="https://github.com/user-attachments/assets/4439a38e-6342-42cd-a859-1e599a8cf0f4" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **Style** * Adjusted input widths and spacing for more consistent search and form layouts. * **Refactor** * Standardized input components across apps and docs, and reimplemented search controls as composed input groups with dedicated icon/action areas. * **Chores** * Removed a deprecated legacy input variant along with its legacy styles and tests. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
4812ffa0f7 |
Add admonition RE ipv4 addon for connect if direct connection selected (#45511)
## Context Adds an admonition in the Connect sheet to inform users about the IPv4 addon if direct connection is selected and project doesn't have the IPv4 addon Decided to place it below the copy prompt CTA since it's technically a secondary action (users with IPv6 networks wouldn't need this) <img width="755" height="707" alt="image" src="https://github.com/user-attachments/assets/f1d29a56-db5f-4807-9545-a862434fea8f" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Displays contextual guidance in direct connection mode when the IPv4 add-on is not enabled, including quick-access links to configure IPv4 settings and to open IPv4 documentation. <!-- end of auto-generated comment: release notes by coderabbit.ai --> --------- Co-authored-by: Alaister Young <10985857+alaister@users.noreply.github.com> |
||
|
|
89760b26e0 |
Refactor database publications to use page layout component (#45456)
## Context Just refactors Database publications pages to use the `PageLayout` component, otherwise was missing a header currently Also fix search results empty state for publications pages ### Before <img width="1144" height="550" alt="image" src="https://github.com/user-attachments/assets/e178d31a-313e-48f3-a87c-bf26b13fef9e" /> ### After <img width="1145" height="396" alt="image" src="https://github.com/user-attachments/assets/82a29529-46d8-40eb-ad25-9b424995e89e" /> <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added a dedicated shimmering skeleton for publications table loading states * **Refactor** * Restructured Publications interface for unified table rendering * Unified loading, error, empty and "missing selection" states into the table * Moved empty-results to render inside the table * Removed the back-navigation button * Page layout and section structure refactored for clearer spacing and navigation * **Style** * Improved loading visuals with skeleton rows * Updated empty-results styling for a cleaner table appearance <!-- end of auto-generated comment: release notes by coderabbit.ai --> |
||
|
|
aab3924eef |
Refactor Invoice estimate tooltip in plan update confirmation dialog (#45446)
## Context Main fix is to ensure that the tooltip here is scrollable - but also adding some refactors This is the org billing page when downgrading an org ### Before <img width="400" alt="image" src="https://github.com/user-attachments/assets/6094c2e6-c1bb-460f-a2d2-347c1d7d2e77" /> ### After <img width="400" alt="image" src="https://github.com/user-attachments/assets/9d0ac9a6-6e89-4758-af14-8144a8a86469" /> ## Changes involved - Use HoverCard for invoice estimate in plan confirmation dialog - Also nudge the UI a little, e.g use a separate column for the compute prices + adjust text color to improve clarity - Refactor usage of `any` for some of the TS declarations <!-- This is an auto-generated comment: release notes by coderabbit.ai --> ## Summary by CodeRabbit * **New Features** * Added an invoice estimate tooltip in subscription settings showing monthly charges with plan fees, combined compute rows, per-project compute costs, optional compute credits, and a total monthly estimate. * **Refactor** * Simplified the plan update flow by consolidating subscription preview handling and extracting the invoice UI into the new tooltip component. * **Chores** * Improved internal type definitions for subscription preview data and pricing tier identifiers. <!-- end of auto-generated comment: release notes by coderabbit.ai --> |