From 561f4fffb461f681c18920b0dd5fb534b0dc71c9 Mon Sep 17 00:00:00 2001 From: Eyal Ehrlich Date: Thu, 29 Jan 2026 11:29:20 +0100 Subject: [PATCH 1/6] Add 'Eyal Ehrlich!' to the list of contributors (#42280) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## I have read the [CONTRIBUTING.md](https://github.com/supabase/supabase/blob/master/CONTRIBUTING.md) file. YES/NO ## What kind of change does this PR introduce? Bug fix, feature, docs update, ... ## 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. ## Summary by CodeRabbit * **Chores** * Updated contributors list. ✏️ Tip: You can customize this high-level summary in your review settings. --- apps/docs/public/humans.txt | 1 + 1 file changed, 1 insertion(+) diff --git a/apps/docs/public/humans.txt b/apps/docs/public/humans.txt index 8a16b89d8aa10..4897a221bbcd8 100644 --- a/apps/docs/public/humans.txt +++ b/apps/docs/public/humans.txt @@ -66,6 +66,7 @@ Eliot Whalan Emmett Folger Eric Kharitonashvili Etienne Stalmans +Eyal Ehrlich Fabrizio Cataldo Fabrizio Fenoglio Fady A From 5d85e33bc4e9db25a33420e234c44cbb37eeea4e Mon Sep 17 00:00:00 2001 From: "supabase-supabase-autofixer[bot]" <248690971+supabase-supabase-autofixer[bot]@users.noreply.github.com> Date: Thu, 29 Jan 2026 13:11:12 +0200 Subject: [PATCH 2/6] feat: update @supabase/*-js libraries to v2.93.2 (#42228) This PR updates @supabase/*-js libraries to version 2.93.2. **Source**: supabase-js-stable-release **Changes**: - Updated @supabase/supabase-js to 2.93.2 - Updated @supabase/auth-js to 2.93.2 - Updated @supabase/realtime-js to 2.93.2 - Updated @supabase/postgest-js to 2.93.2 - Refreshed pnpm-lock.yaml This PR was created automatically. Co-authored-by: supabase-releaser[bot] <223506987+supabase-releaser[bot]@users.noreply.github.com> --- pnpm-lock.yaml | 110 ++++++++++++++++++++++---------------------- pnpm-workspace.yaml | 8 ++-- 2 files changed, 59 insertions(+), 59 deletions(-) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index eae1ffc40d976..9a1e6d88148b0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -10,17 +10,17 @@ catalogs: specifier: ^10.26.0 version: 10.27.0 '@supabase/auth-js': - specifier: 2.93.1 - version: 2.93.1 + specifier: 2.93.2 + version: 2.93.2 '@supabase/postgrest-js': - specifier: 2.93.1 - version: 2.93.1 + specifier: 2.93.2 + version: 2.93.2 '@supabase/realtime-js': - specifier: 2.93.1 - version: 2.93.1 + specifier: 2.93.2 + version: 2.93.2 '@supabase/supabase-js': - specifier: 2.93.1 - version: 2.93.1 + specifier: 2.93.2 + version: 2.93.2 '@types/node': specifier: ^22.0.0 version: 22.13.14 @@ -440,10 +440,10 @@ importers: version: 1.0.3(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/nextjs': specifier: 'catalog:' - version: 10.27.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0) + version: 10.27.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0) '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@tailwindcss/container-queries': specifier: ^0.1.1 version: 0.1.1(tailwindcss@3.4.1(ts-node@10.9.2(@types/node@22.13.14)(typescript@5.9.2))) @@ -870,7 +870,7 @@ importers: version: 7.5.0 '@supabase/auth-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@supabase/mcp-server-supabase': specifier: ^0.6.2 version: 0.6.2(@modelcontextprotocol/sdk@1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76))(zod@3.25.76) @@ -882,7 +882,7 @@ importers: version: link:../../packages/pg-meta '@supabase/realtime-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@supabase/shared-types': specifier: 0.1.83 version: 0.1.83 @@ -891,7 +891,7 @@ importers: version: 0.1.6(encoding@0.1.13)(supports-color@8.1.1) '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@tanstack/react-query': specifier: ^5.0.0 version: 5.83.0(react@18.3.1) @@ -1402,7 +1402,7 @@ importers: version: 7.4.0(@react-router/dev@7.9.6(@types/node@22.13.14)(@vitejs/plugin-rsc@0.5.9(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(vite@7.1.11(@types/node@22.13.14)(jiti@2.5.1)(sass@1.77.4)(terser@5.39.0)(tsx@4.20.3)(yaml@2.8.1)))(babel-plugin-macros@3.1.0)(jiti@2.5.1)(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(sass@1.77.4)(supports-color@8.1.1)(terser@5.39.0)(tsx@4.20.3)(typescript@5.9.2)(vite@7.1.11(@types/node@22.13.14)(jiti@2.5.1)(sass@1.77.4)(terser@5.39.0)(tsx@4.20.3)(yaml@2.8.1))(yaml@2.8.1))(typescript@5.9.2) '@supabase/postgrest-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@supabase/supa-mdx-lint': specifier: 0.2.6-alpha version: 0.2.6-alpha @@ -1523,10 +1523,10 @@ importers: version: 1.6.0 '@supabase/ssr': specifier: ^0.7.0 - version: 0.7.0(@supabase/supabase-js@2.93.1) + version: 0.7.0(@supabase/supabase-js@2.93.2) '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@tanstack/react-router': specifier: ^1.114.27 version: 1.114.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -1637,10 +1637,10 @@ importers: version: 1.0.5(@types/react-dom@18.3.0)(@types/react@18.3.3)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@sentry/nextjs': specifier: 'catalog:' - version: 10.27.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0) + version: 10.27.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0) '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@vercel/og': specifier: ^0.6.2 version: 0.6.2 @@ -1727,13 +1727,13 @@ importers: version: 4.4.1(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(supports-color@8.1.1) next-seo: specifier: ^6.5.0 - version: 6.5.0(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) + version: 6.5.0(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) next-themes: specifier: ^0.3.0 version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nuqs: specifier: ^2.8.1 - version: 2.8.1(@tanstack/react-router@1.114.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) + version: 2.8.1(@tanstack/react-router@1.114.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) openai: specifier: ^4.75.1 version: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76) @@ -1872,10 +1872,10 @@ importers: dependencies: '@supabase/ssr': specifier: ^0.7.0 - version: 0.7.0(@supabase/supabase-js@2.93.1) + version: 0.7.0(@supabase/supabase-js@2.93.2) '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 class-variance-authority: specifier: ^0.7.1 version: 0.7.1 @@ -1915,7 +1915,7 @@ importers: version: 1.56.1 '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 cross-fetch: specifier: ^4.1.0 version: 4.1.0(encoding@0.1.13) @@ -1943,7 +1943,7 @@ importers: version: 0.18.5 '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 ai: specifier: 5.0.52 version: 5.0.52(zod@3.25.76) @@ -2037,10 +2037,10 @@ importers: dependencies: '@supabase/auth-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@types/dat.gui': specifier: ^0.7.12 version: 0.7.12 @@ -2521,7 +2521,7 @@ importers: version: 0.1.6(encoding@0.1.13)(supports-color@8.1.1) '@supabase/supabase-js': specifier: 'catalog:' - version: 2.93.1 + version: 2.93.2 '@vitest/coverage-v8': specifier: ^3.2.0 version: 3.2.4(supports-color@8.1.1)(vitest@3.2.4) @@ -8914,12 +8914,12 @@ packages: resolution: {integrity: sha512-Cq3KKe+G1o7PSBMbmrgpT2JgBeyH2THHr3RdIX2MqF7AnBuspIMgtZ3ktcCgP7kZsTMvnmWymr7zZCT1zeWbMw==} engines: {node: '>=12.16'} - '@supabase/auth-js@2.93.1': - resolution: {integrity: sha512-pC0Ek4xk4z6q7A/3+UuZ/eYgfFUUQTg3DhapzrAgJnFGDJDFDyGCj6v9nIz8+3jfLqSZ3QKGe6AoEodYjShghg==} + '@supabase/auth-js@2.93.2': + resolution: {integrity: sha512-uifI5vkhvHCQjn+LUPL5QlsuDMP4oVBD5SiliREgYuTJvCkbPLOcAPGrw88q7VUX9S0J0QuJn+37hrcTITisuw==} engines: {node: '>=20.0.0'} - '@supabase/functions-js@2.93.1': - resolution: {integrity: sha512-Ott2IcIXHGupaC0nX9WNEiJAX4OdlGRu9upkkURaQHbaLdz9JuCcHxlwTERgtgjMpikbIWHfMM1M9QTQFYABiA==} + '@supabase/functions-js@2.93.2': + resolution: {integrity: sha512-reSp7yj4KmvAFfmN+N7vYsHXOIZQh9cmRBh+VrZlm7qgIIUdYmzKuD85TvFnWApqcdI2pPnuZGKWE/2B4GXT1A==} engines: {node: '>=20.0.0'} '@supabase/mcp-server-supabase@0.6.2': @@ -8939,12 +8939,12 @@ packages: resolution: {integrity: sha512-vz5gc6RKNfDVnIfRUmH2ssTMYFI0U3MYOVyQ9R4YkzOS2dKSanjC4rTEDGjlMFwGTCUPW3N3pbY7HJIW81wMyg==} engines: {node: '>=16', npm: '>=8'} - '@supabase/postgrest-js@2.93.1': - resolution: {integrity: sha512-uRKKQJBDnfi6XFNFPNMh9+u3HT2PCgp065PcMPmG7e0xGuqvLtN89QxO2/SZcGbw2y1+mNBz0yUs5KmyNqF2fA==} + '@supabase/postgrest-js@2.93.2': + resolution: {integrity: sha512-W2AWDsYwRT217II5yD3jWaX3fJjB7DwyNi2KNi4sphdUI3DKY4fP2XYVDGfeb1clEFL18gw+GBhyQb3BcpNWkw==} engines: {node: '>=20.0.0'} - '@supabase/realtime-js@2.93.1': - resolution: {integrity: sha512-2WaP/KVHPlQDjWM6qe4wOZz6zSRGaXw1lfXf4thbfvk3C3zPPKqXRyspyYnk3IhphyxSsJ2hQ/cXNOz48008tg==} + '@supabase/realtime-js@2.93.2': + resolution: {integrity: sha512-YpAmJn7DLbMeYfQilcf3f0DKoY8O8TRbTF2oRpWFzHXTlEA+YWms8fBqM13Mf7RE72ouSNKDYyf5K2pWRSHvFw==} engines: {node: '>=20.0.0'} '@supabase/shared-types@0.1.83': @@ -8958,8 +8958,8 @@ packages: peerDependencies: '@supabase/supabase-js': ^2.43.4 - '@supabase/storage-js@2.93.1': - resolution: {integrity: sha512-3KVwd4S1i1BVPL6KIywe5rnruNQXSkLyvrdiJmwnqwbCcDujQumARdGWBPesqCjOPKEU2M9ORWKAsn+2iLzquA==} + '@supabase/storage-js@2.93.2': + resolution: {integrity: sha512-abRSVClfIQn+SqpdqL7S7b3VeyS8270/o0gqmGFtiidb7Lu0COsIV6Mor/mK9xE99KYWzyd37vwYYwv/jaANhw==} engines: {node: '>=20.0.0'} '@supabase/supa-mdx-lint-darwin@0.2.6-alpha': @@ -9052,8 +9052,8 @@ packages: resolution: {integrity: sha512-TNbBLSofM6jQg3JwzO4lttd59dScTTzW4p504/OWcgRWghQLRNfxXRJJtdui83gBMLWpgeUZqvgtfYIwS1Flzw==} hasBin: true - '@supabase/supabase-js@2.93.1': - resolution: {integrity: sha512-FJTgS5s0xEgRQ3u7gMuzGObwf3jA4O5Ki/DgCDXx94w1pihLM4/WG3XFa4BaCJYfuzLxLcv6zPPA5tDvBUjAUg==} + '@supabase/supabase-js@2.93.2': + resolution: {integrity: sha512-G3bZZi6rPwXcPtyHLXQTeHKa5ADZ2UW/+hv8YhwZFwngz4TlPnR4+TeO37EwU5+d/reD02qXozOZgz+QHv1Jtg==} engines: {node: '>=20.0.0'} '@swc/helpers@0.5.15': @@ -27407,7 +27407,7 @@ snapshots: '@sentry/core@10.27.0': {} - '@sentry/nextjs@10.27.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0)': + '@sentry/nextjs@10.27.0(@opentelemetry/context-async-hooks@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/core@2.2.0(@opentelemetry/api@1.9.0))(@opentelemetry/sdk-trace-base@2.2.0(@opentelemetry/api@1.9.0))(encoding@0.1.13)(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react@18.3.1)(supports-color@8.1.1)(webpack@5.94.0)': dependencies: '@opentelemetry/api': 1.9.0 '@opentelemetry/semantic-conventions': 1.38.0 @@ -27992,11 +27992,11 @@ snapshots: '@stripe/stripe-js@7.5.0': {} - '@supabase/auth-js@2.93.1': + '@supabase/auth-js@2.93.2': dependencies: tslib: 2.8.1 - '@supabase/functions-js@2.93.1': + '@supabase/functions-js@2.93.2': dependencies: tslib: 2.8.1 @@ -28031,11 +28031,11 @@ snapshots: - pg-native - supports-color - '@supabase/postgrest-js@2.93.1': + '@supabase/postgrest-js@2.93.2': dependencies: tslib: 2.8.1 - '@supabase/realtime-js@2.93.1': + '@supabase/realtime-js@2.93.2': dependencies: '@types/phoenix': 1.6.6 '@types/ws': 8.18.1 @@ -28056,12 +28056,12 @@ snapshots: - encoding - supports-color - '@supabase/ssr@0.7.0(@supabase/supabase-js@2.93.1)': + '@supabase/ssr@0.7.0(@supabase/supabase-js@2.93.2)': dependencies: - '@supabase/supabase-js': 2.93.1 + '@supabase/supabase-js': 2.93.2 cookie: 1.0.2 - '@supabase/storage-js@2.93.1': + '@supabase/storage-js@2.93.2': dependencies: iceberg-js: 0.8.1 tslib: 2.8.1 @@ -28130,13 +28130,13 @@ snapshots: '@supabase/supa-mdx-lint-win32-x64': 0.3.1 node-pty: 1.0.0 - '@supabase/supabase-js@2.93.1': + '@supabase/supabase-js@2.93.2': dependencies: - '@supabase/auth-js': 2.93.1 - '@supabase/functions-js': 2.93.1 - '@supabase/postgrest-js': 2.93.1 - '@supabase/realtime-js': 2.93.1 - '@supabase/storage-js': 2.93.1 + '@supabase/auth-js': 2.93.2 + '@supabase/functions-js': 2.93.2 + '@supabase/postgrest-js': 2.93.2 + '@supabase/realtime-js': 2.93.2 + '@supabase/storage-js': 2.93.2 transitivePeerDependencies: - bufferutil - utf-8-validate @@ -36388,7 +36388,7 @@ snapshots: next: 16.0.11(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4) react: 18.3.1 - next-seo@6.5.0(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): + next-seo@6.5.0(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-dom@18.3.1(react@18.3.1))(react@18.3.1): dependencies: next: 15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4) react: 18.3.1 @@ -36780,7 +36780,7 @@ snapshots: next: 16.0.11(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4) react-router: 7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) - nuqs@2.8.1(@tanstack/react-router@1.114.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): + nuqs@2.8.1(@tanstack/react-router@1.114.27(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4))(react-router@7.12.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): dependencies: '@standard-schema/spec': 1.0.0 react: 18.3.1 diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 2ff5cdb36a1a7..058cc24dc7f5f 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -6,10 +6,10 @@ packages: catalog: '@sentry/nextjs': ^10.26.0 - '@supabase/auth-js': 2.93.1 - '@supabase/postgrest-js': 2.93.1 - '@supabase/realtime-js': 2.93.1 - '@supabase/supabase-js': 2.93.1 + '@supabase/auth-js': 2.93.2 + '@supabase/postgrest-js': 2.93.2 + '@supabase/realtime-js': 2.93.2 + '@supabase/supabase-js': 2.93.2 '@types/node': ^22.0.0 '@types/react': ^18.3.0 '@types/react-dom': ^18.3.0 From 0c1bc80b89d5ae68a8a6489d4164d48060aed9d1 Mon Sep 17 00:00:00 2001 From: Joshen Lim Date: Thu, 29 Jan 2026 22:35:59 +0800 Subject: [PATCH 3/6] Fix queue operations stale state + refactor to reuse existing methods (#42283) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## Context Related to this PR [here](https://github.com/supabase/supabase/pull/42265) If you were to update a cell twice, then save, the value that get's saved is the first edited value. There's a number of changes in this PR but the main thing is just `useOperationQueueActions` to declare `operations` outside of `handleSave` since `snap` wouldn't trigger the re-render of that function in the dependency array. ## Other changes - Refactored `useOperationQueueShortcuts.ts` - Reuse an existing `useHotKey` method to handle the event listeners - Remove unnecessary prop drilling, call the necessary hooks within it instead - Simplify its calling by only calling this hook within `SaveQueueActionBar` (removed calling from `OperationQueueSidePanel` - Add tooltip for OperatioItem "Remove operation" - (Unrelated) Fix Table Editor sort "Apply sort" CTA not working for large tables when applying sort on an indexed column (e.g primary key) ## Summary by CodeRabbit ## Release Notes * **New Features** * Operation queue view now toggles open and closed with a single action * Simplified keyboard shortcuts: press **S** to save operations, **.** to toggle the queue view * **Bug Fixes** * Sort operations on large tables with non-primary-key sorting now show a confirmation warning and require explicit user approval before applying * **Improvements** * Operation queue panel automatically closes after successfully saving operations * Enhanced UI with improved delete action feedback and refined visual separators ✏️ Tip: You can customize this high-level summary in your review settings. --- .../footer/operations/SaveQueueActionBar.tsx | 30 +++---- .../header/sort/SortPopoverPrimitive.tsx | 14 ++-- .../grid/hooks/useOperationQueueActions.ts | 14 ++-- .../grid/hooks/useOperationQueueShortcuts.ts | 82 +++++++------------ .../OperationQueueSidePanel/OperationItem.tsx | 15 ++-- .../OperationQueueSidePanel.tsx | 14 +--- apps/studio/hooks/ui/useHotKey.ts | 44 +++++++--- apps/studio/lib/helpers.ts | 5 ++ apps/studio/state/table-editor.tsx | 22 ++--- 9 files changed, 118 insertions(+), 122 deletions(-) diff --git a/apps/studio/components/grid/components/footer/operations/SaveQueueActionBar.tsx b/apps/studio/components/grid/components/footer/operations/SaveQueueActionBar.tsx index 65be243d12739..f246726847596 100644 --- a/apps/studio/components/grid/components/footer/operations/SaveQueueActionBar.tsx +++ b/apps/studio/components/grid/components/footer/operations/SaveQueueActionBar.tsx @@ -1,21 +1,23 @@ -import { Eye } from 'lucide-react' +import { useOperationQueueActions } from 'components/grid/hooks/useOperationQueueActions' +import { useOperationQueueShortcuts } from 'components/grid/hooks/useOperationQueueShortcuts' +import { useIsQueueOperationsEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' import { AnimatePresence, motion } from 'framer-motion' +import { Eye } from 'lucide-react' import { createPortal } from 'react-dom' +import { useTableEditorStateSnapshot } from 'state/table-editor' import { Button } from 'ui' -import { - useOperationQueueShortcuts, - getModKey, -} from 'components/grid/hooks/useOperationQueueShortcuts' -import { useIsQueueOperationsEnabled } from 'components/interfaces/App/FeaturePreview/FeaturePreviewContext' -import { useTableEditorStateSnapshot } from 'state/table-editor' -import { useOperationQueueActions } from 'components/grid/hooks/useOperationQueueActions' +import { getModKeyLabel } from '@/lib/helpers' + +const modKey = getModKeyLabel() export const SaveQueueActionBar = () => { const snap = useTableEditorStateSnapshot() const isQueueOperationsEnabled = useIsQueueOperationsEnabled() const { handleSave } = useOperationQueueActions() + useOperationQueueShortcuts() + const operationCount = snap.operationQueue.operations.length const isSaving = snap.operationQueue.status === 'saving' const isOperationQueuePanelOpen = snap.sidePanel?.type === 'operation-queue' @@ -23,16 +25,6 @@ export const SaveQueueActionBar = () => { const isVisible = isQueueOperationsEnabled && snap.hasPendingOperations && !isOperationQueuePanelOpen - useOperationQueueShortcuts({ - enabled: isQueueOperationsEnabled && snap.hasPendingOperations, - onSave: handleSave, - onTogglePanel: () => snap.onViewOperationQueue(), - isSaving, - hasOperations: operationCount > 0, - }) - - const modKey = getModKey() - const content = ( {isVisible && ( @@ -49,7 +41,7 @@ export const SaveQueueActionBar = () => {
- + + {index < data.innovationEnablement.options.length - 1 && ( +
+ + + +
+ )} + + ) + )} + + + )} {data.platformStarterSection && } {data.mcp && } diff --git a/apps/www/public/images/customers/logos/accenture.svg b/apps/www/public/images/customers/logos/accenture.svg new file mode 100644 index 0000000000000..807a0b5e4c0b5 --- /dev/null +++ b/apps/www/public/images/customers/logos/accenture.svg @@ -0,0 +1,3 @@ + + + From 11972cc67e4e2c0c382885029e6f97ca5e491314 Mon Sep 17 00:00:00 2001 From: Maksym Ionutsa <123338468+peekknuf@users.noreply.github.com> Date: Thu, 29 Jan 2026 16:30:43 +0100 Subject: [PATCH 5/6] docs: clarify preview vs persistent branches (#41835) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 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? - Clarifies that preview branches are ephemeral and auto‑paused/deleted after inactivity or PR close/merge. - States that persistent branches are recommended for staging/QA/dev and do not auto‑pause/delete. Users often expect branches to behave like Git branches and be persistent by default. They create staging/dev environments without switching to persistent and are surprised when the preview branch is deleted. Relatively common cause for support tickets. ## Summary by CodeRabbit * **Documentation** * Enhanced branching guide with clarified behavior for Preview Branches (ephemeral with automatic cleanup) and Persistent Branches (long-lived without automatic cleanup). ✏️ Tip: You can customize this high-level summary in your review settings. --- apps/docs/content/guides/deployment/branching.mdx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/apps/docs/content/guides/deployment/branching.mdx b/apps/docs/content/guides/deployment/branching.mdx index 74782ceb45579..ab6c6dff990b3 100644 --- a/apps/docs/content/guides/deployment/branching.mdx +++ b/apps/docs/content/guides/deployment/branching.mdx @@ -10,8 +10,8 @@ Supabase branches create separate environments that spin off from your main proj ## How branching works - **Separate Environments**: Each branch is a separate environment with its own Supabase instance and API credentials. -- **Preview Branches**: You can create multiple Preview Branches for testing. -- **Persistent Branches**: Persistent branches are long-lived branches. They aren't automatically paused or deleted due to non-inactivity or merging. +- **Preview Branches**: Preview branches are ephemeral and best suited for focused testing. They are automatically paused after inactivity or deleted when a PR is merged or closed. +- **Persistent Branches**: Persistent branches are long-lived and recommended for environments like staging, QA, or development. Unlike preview branches, they aren't automatically paused or deleted due to inactivity or when a PR is merged or closed. - **Managing Branches**: You can create, review, and merge branches either automatically via our [GitHub integration](/docs/guides/deployment/branching/github-integration) or directly [through the dashboard](/docs/guides/deployment/branching/dashboard) (currently in beta). All branches show up in the branches page in the dashboard, regardless of how they were created. - **Data-less**: New branches do not start with any data from your main project. This is meant to better protect your sensitive production data. To start your branches with data, you can use a [seed file](/docs/guides/deployment/branching/github-integration#seeding) if using the GitHub integration. From 180925bc92b011425b8ab9eaba65bb9457aa39b1 Mon Sep 17 00:00:00 2001 From: "kemal.earth" <606977+kemaldotearth@users.noreply.github.com> Date: Thu, 29 Jan 2026 15:32:02 +0000 Subject: [PATCH 6/6] feat(studio): inline actions for projects list (#42141) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 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? Minor nit I wanted to address. Adds "more actions" to the projects list view so you can delete projects in line (eventually batch delete maybe?) ## Summary by CodeRabbit * **New Features** * Dropdown actions on project cards and rows: copy project reference with visual feedback and delete project action. * Delete confirmation modal accepts optional organization/project context. * Mini bar-chart metrics added to project cards for quick DB health visualization. * Header-focused card layout and compact project metadata for clearer presentation. * **Bug Fixes / UX** * Improved copy-to-clipboard feedback with toasts and icons. * Table header adjusted for proper column alignment. ✏️ Tip: You can customize this high-level summary in your review settings. --- .../Home/ProjectList/ProjectCard.tsx | 154 ++++++++---- .../Home/ProjectList/ProjectList.tsx | 1 + .../Home/ProjectList/ProjectTableRow.tsx | 227 ++++++++++++------ .../DeleteProjectPanel/DeleteProjectModal.tsx | 14 +- 4 files changed, 274 insertions(+), 122 deletions(-) diff --git a/apps/studio/components/interfaces/Home/ProjectList/ProjectCard.tsx b/apps/studio/components/interfaces/Home/ProjectList/ProjectCard.tsx index ed36761b42f3b..6530d5a579c91 100644 --- a/apps/studio/components/interfaces/Home/ProjectList/ProjectCard.tsx +++ b/apps/studio/components/interfaces/Home/ProjectList/ProjectCard.tsx @@ -1,8 +1,10 @@ -import { Github } from 'lucide-react' +import { Github, MoreVertical, Trash, Copy } from 'lucide-react' import InlineSVG from 'react-inlinesvg' +import { useState } from 'react' import CardButton from 'components/ui/CardButton' import { ComputeBadgeWrapper } from 'components/ui/ComputeBadgeWrapper' +import { DeleteProjectModal } from 'components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectModal' import type { IntegrationProjectConnection } from 'data/integrations/integrations.types' import { ProjectIndexPageLink } from 'data/prefetchers/project.$ref' import { getComputeSize, OrgProject } from 'data/projects/org-projects-infinite-query' @@ -12,10 +14,21 @@ import { useIsFeatureEnabled } from 'hooks/misc/useIsFeatureEnabled' import { BASE_PATH } from 'lib/constants' import { inferProjectStatus } from './ProjectCard.utils' import { ProjectCardStatus } from './ProjectCardStatus' +import type { Organization } from 'types' +import { toast } from 'sonner' +import { + copyToClipboard, + DropdownMenu, + DropdownMenuContent, + DropdownMenuItem, + DropdownMenuTrigger, + Button, +} from 'ui' export interface ProjectCardProps { slug?: string project: OrgProject + organization?: Organization rewriteHref?: string githubIntegration?: IntegrationProjectConnection vercelIntegration?: IntegrationProjectConnection @@ -25,12 +38,14 @@ export interface ProjectCardProps { export const ProjectCard = ({ slug, project, + organization, rewriteHref, githubIntegration, vercelIntegration, resourceWarnings, }: ProjectCardProps) => { const { name, ref: projectRef } = project + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false) const { infraAwsNimbusLabel } = useCustomContent(['infra:aws_nimbus_label']) const providerLabel = @@ -48,52 +63,105 @@ export const ProjectCard = ({ const projectStatus = inferProjectStatus(project.status) return ( -
  • - - {/* Text */} -
    -
    {name}
    -

    {desc}

    -
    - {/* Compute and integrations */} -
    - {project.status !== 'INACTIVE' && projectHomepageShowInstanceSize && ( - +
  • + +
    +
    +
    {name}
    +
    e.preventDefault()}> + + +
    +
    +

    {desc}

    +
    +
    + - )} - {isVercelIntegrated && ( -
    - -
    - )} - {isGithubIntegrated && ( -
    -
    - + )} + {isVercelIntegrated && ( +
    +
    -

    {githubRepository}

    -
    - )} + )} + {isGithubIntegrated && ( +
    +
    + +
    +

    {githubRepository}

    +
    + )} +
    - - } - footer={ - - } - containerElement={} + } + footer={ + + } + containerElement={} + /> +
  • + setIsDeleteModalOpen(false)} + project={project} + organization={organization} /> - + ) } diff --git a/apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx b/apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx index 6e25f8fa504de..f3c0c18b0d135 100644 --- a/apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx +++ b/apps/studio/components/interfaces/Home/ProjectList/ProjectList.tsx @@ -148,6 +148,7 @@ export const ProjectList = ({ organization: organization_, rewriteHref }: Projec Compute Region Created + diff --git a/apps/studio/components/interfaces/Home/ProjectList/ProjectTableRow.tsx b/apps/studio/components/interfaces/Home/ProjectList/ProjectTableRow.tsx index 2c158b0d6387b..a6e3e94951a15 100644 --- a/apps/studio/components/interfaces/Home/ProjectList/ProjectTableRow.tsx +++ b/apps/studio/components/interfaces/Home/ProjectList/ProjectTableRow.tsx @@ -1,6 +1,7 @@ -import { Github } from 'lucide-react' +import { Github, MoreVertical, Trash, Copy, Check } from 'lucide-react' import { useRouter } from 'next/router' import InlineSVG from 'react-inlinesvg' +import { useState } from 'react' import { ComputeBadgeWrapper } from 'components/ui/ComputeBadgeWrapper' import type { IntegrationProjectConnection } from 'data/integrations/integrations.types' @@ -9,10 +10,21 @@ import type { ResourceWarning } from 'data/usage/resource-warnings-query' import { BASE_PATH } from 'lib/constants' import { createNavigationHandler } from 'lib/navigation' import type { Organization } from 'types' -import { TableCell, TableRow } from 'ui' +import { + DropdownMenuTrigger, + DropdownMenuItem, + DropdownMenuContent, + DropdownMenu, + TableCell, + TableRow, + Button, +} from 'ui' import { TimestampInfo } from 'ui-patterns' import { inferProjectStatus } from './ProjectCard.utils' import { ProjectCardStatus } from './ProjectCardStatus' +import { DeleteProjectModal } from 'components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectModal' +import { toast } from 'sonner' +import { copyToClipboard } from 'ui' export interface ProjectTableRowProps { project: OrgProject @@ -34,93 +46,154 @@ export const ProjectTableRow = ({ const router = useRouter() const { name, ref: projectRef } = project const projectStatus = inferProjectStatus(project.status) + const [isDeleteModalOpen, setIsDeleteModalOpen] = useState(false) + const [isCopied, setIsCopied] = useState(false) const url = rewriteHref ?? `/project/${project.ref}` const isGithubIntegrated = githubIntegration !== undefined const isVercelIntegrated = vercelIntegration !== undefined const githubRepository = githubIntegration?.metadata.name ?? undefined - - const infraInformation = project.databases.find((x) => x.identifier === project.ref) - const handleNavigation = createNavigationHandler(url, router) + const handleCopyProjectRef = (e: React.SyntheticEvent) => { + e.stopPropagation() + copyToClipboard(projectRef) + setIsCopied(true) + toast.success('Copied project ID to clipboard') + setTimeout(() => setIsCopied(false), 2000) + } + return ( - - -
    - {/* Text */} -
    -
    {name}
    -

    ID: {projectRef}

    -
    - {/* Integrations */} - {(isGithubIntegrated || isVercelIntegrated) && ( -
    - {isVercelIntegrated && ( -
    - + + +
    +
    +
    {name}
    +
    - )} - {isGithubIntegrated && ( -
    -
    - -
    - {githubRepository && ( -

    {githubRepository}

    - )} -
    - )} + )} +
    - )} -
    - - - - - -
    - {project.status !== 'INACTIVE' ? ( - + {isVercelIntegrated && ( +
    + +
    + )} + {isGithubIntegrated && ( +
    +
    + +
    + {githubRepository && ( +

    {githubRepository}

    + )} +
    + )} +
    + )} +
    + + + + + +
    + {project.status !== 'INACTIVE' ? ( + + ) : ( + + )} +
    +
    + + + {project.cloud_provider} | {project.region || 'N/A'} + + + + {project.inserted_at ? ( + ) : ( - + N/A )} -
    -
    - - - {project.cloud_provider} | {project.region || 'N/A'} - - - - {project.inserted_at ? ( - - ) : ( - N/A - )} - -
    + + +
    e.stopPropagation()}> + + +
    +
    + + setIsDeleteModalOpen(false)} + project={project} + organization={organization} + /> + ) } diff --git a/apps/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectModal.tsx b/apps/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectModal.tsx index 67fd5a83bea62..32b76175d8ae6 100644 --- a/apps/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectModal.tsx +++ b/apps/studio/components/interfaces/Settings/General/DeleteProjectPanel/DeleteProjectModal.tsx @@ -7,22 +7,32 @@ import { CANCELLATION_REASONS } from 'components/interfaces/Billing/Billing.cons import { TextConfirmModal } from 'components/ui/TextConfirmModalWrapper' import { useSendDowngradeFeedbackMutation } from 'data/feedback/exit-survey-send' import { useProjectDeleteMutation } from 'data/projects/project-delete-mutation' +import type { OrgProject } from 'data/projects/org-projects-infinite-query' import { useOrgSubscriptionQuery } from 'data/subscriptions/org-subscription-query' import { useLocalStorageQuery } from 'hooks/misc/useLocalStorage' import { useSelectedOrganizationQuery } from 'hooks/misc/useSelectedOrganization' import { useSelectedProjectQuery } from 'hooks/misc/useSelectedProject' +import type { Organization } from 'types' import { Input } from 'ui' export const DeleteProjectModal = ({ visible, onClose, + project: projectProp, + organization: organizationProp, }: { visible: boolean onClose: () => void + project?: OrgProject + organization?: Organization }) => { const router = useRouter() - const { data: project } = useSelectedProjectQuery() - const { data: organization } = useSelectedOrganizationQuery() + const { data: projectFromQuery } = useSelectedProjectQuery() + const { data: organizationFromQuery } = useSelectedOrganizationQuery() + + // Use props if provided, otherwise fall back to hooks + const project = projectProp || projectFromQuery + const organization = organizationProp || organizationFromQuery const [lastVisitedOrganization] = useLocalStorageQuery( LOCAL_STORAGE_KEYS.LAST_VISITED_ORGANIZATION,