diff --git a/.github/workflows/ui-tests.yml b/.github/workflows/ui-tests.yml
index 0e8de49a0f3..e97bda26030 100644
--- a/.github/workflows/ui-tests.yml
+++ b/.github/workflows/ui-tests.yml
@@ -70,6 +70,11 @@ jobs:
continue-on-error: true
runs-on: blacksmith-4vcpu-ubuntu-2404
steps:
+ - uses: actions/checkout@08eba0b27e820071cde6df949e0beb9ba4906955 # v4.3.0
+ with:
+ sparse-checkout: |
+ packages/ui
+ patches
- name: Download coverage artifact
uses: actions/download-artifact@d3f86a106a0bac45b974a628896c90dbdf5c8093 # v4.3.0
with:
diff --git a/apps/design-system/content/docs/components/sheet.mdx b/apps/design-system/content/docs/components/sheet.mdx
index 75edbb53860..5ef059a69bf 100644
--- a/apps/design-system/content/docs/components/sheet.mdx
+++ b/apps/design-system/content/docs/components/sheet.mdx
@@ -13,13 +13,11 @@ source:
1. **Use for side panels**
-
- Forms with multiple fields
- Settings panels
- Detailed editors
2. **Consider screen size**
-
- Sheets work well on desktop
- On mobile, consider full-screen or bottom sheet variants
diff --git a/apps/design-system/content/docs/icons.mdx b/apps/design-system/content/docs/icons.mdx
index eefdbb97749..e433bceab58 100644
--- a/apps/design-system/content/docs/icons.mdx
+++ b/apps/design-system/content/docs/icons.mdx
@@ -52,7 +52,6 @@ function app() {
Follow these steps to add a new custom icon to the Supabase icon library.
1. **Create SVG file**: Add your SVG file to `packages/icons/src/raw-icons/` with a kebab-case name (e.g., `my-new-icon.svg`). Make sure it follows these requirements:
-
- Exported at 24×24px with `viewBox="0 0 24 24"`
- Uses `stroke="currentColor"` for strokes (no hardcoded colors)
- Uses `stroke-width="1.5"` (deviate based on optical weight if necessary)
diff --git a/apps/design-system/content/docs/ui-patterns/forms.mdx b/apps/design-system/content/docs/ui-patterns/forms.mdx
index eb71580c536..8c2794495f5 100644
--- a/apps/design-system/content/docs/ui-patterns/forms.mdx
+++ b/apps/design-system/content/docs/ui-patterns/forms.mdx
@@ -32,7 +32,6 @@ Forms in side panels (Sheets) use `FormItemLayout` with `layout="horizontal"` on
1. **Always use FormItemLayout**: Use `FormItemLayout` instead of manually composing `FormItem`, `FormLabel`, `FormMessage`, and `FormDescription`.
2. **Layout selection**:
-
- Use `layout="flex-row-reverse"` for page layouts (horizontal alignment)
- Use `layout="horizontal"` for side panels with more width
- Use `layout="vertical"` for side panels with limited width
diff --git a/apps/docs/content/_partials/billing/pricing/pricing_edge_functions.mdx b/apps/docs/content/_partials/billing/pricing/pricing_edge_functions.mdx
index 4a6e51cb3b6..cf0abdbf7b8 100644
--- a/apps/docs/content/_partials/billing/pricing/pricing_edge_functions.mdx
+++ b/apps/docs/content/_partials/billing/pricing/pricing_edge_functions.mdx
@@ -1,5 +1,5 @@
- per 1 million invocations. You are only charged for usage exceeding your subscription
-plan's quota.
+ per 1 million invocations. You are only charged for usage exceeding your
+subscription plan's quota.
| Plan | Quota | Over-Usage |
| ---------- | --------- | --------------------------------------------- |
diff --git a/apps/docs/content/_partials/billing/pricing/pricing_mau_sso.mdx b/apps/docs/content/_partials/billing/pricing/pricing_mau_sso.mdx
index 8ba7741e9b9..7ff5176ad63 100644
--- a/apps/docs/content/_partials/billing/pricing/pricing_mau_sso.mdx
+++ b/apps/docs/content/_partials/billing/pricing/pricing_mau_sso.mdx
@@ -1,6 +1,6 @@
## Pricing
- per SSO MAU. You are only charged for usage exceeding your subscription plan's
-quota.
+ per SSO MAU. You are only charged for usage exceeding your subscription
+plan's quota.
For a detailed breakdown of how charges are calculated, refer to [Manage Monthly Active SSO Users usage](/docs/guides/platform/manage-your-usage/monthly-active-users-sso).
diff --git a/apps/docs/content/_partials/billing/pricing/pricing_mau_third_party.mdx b/apps/docs/content/_partials/billing/pricing/pricing_mau_third_party.mdx
index cbfccef3877..05f5adbca7e 100644
--- a/apps/docs/content/_partials/billing/pricing/pricing_mau_third_party.mdx
+++ b/apps/docs/content/_partials/billing/pricing/pricing_mau_third_party.mdx
@@ -1,6 +1,6 @@
## Pricing
- per Third-Party MAU. You are only charged for usage exceeding your subscription
-plan's quota.
+ per Third-Party MAU. You are only charged for usage exceeding your
+subscription plan's quota.
For a detailed breakdown of how charges are calculated, refer to [Manage Monthly Active Third-Party Users usage](/docs/guides/platform/manage-your-usage/monthly-active-users-third-party).
diff --git a/apps/docs/content/_partials/billing/pricing/pricing_mfa_phone.mdx b/apps/docs/content/_partials/billing/pricing/pricing_mfa_phone.mdx
index 6708ec7a9d0..8cc187a5a5e 100644
--- a/apps/docs/content/_partials/billing/pricing/pricing_mfa_phone.mdx
+++ b/apps/docs/content/_partials/billing/pricing/pricing_mfa_phone.mdx
@@ -1,7 +1,7 @@
## Pricing
- per hour ( per month) for the first project. per
-hour ( per month) for every additional project.
+ per hour ( per month) for the first project.
+ per hour ( per month) for every additional project.
| Plan | Project 1 per month | Project 2 per month | Project 3 per month |
| ---------- | -------------------- | -------------------- | -------------------- |
diff --git a/apps/docs/content/_partials/billing/pricing/pricing_realtime_connections.mdx b/apps/docs/content/_partials/billing/pricing/pricing_realtime_connections.mdx
index 5e8737d0af3..5f744d4d79f 100644
--- a/apps/docs/content/_partials/billing/pricing/pricing_realtime_connections.mdx
+++ b/apps/docs/content/_partials/billing/pricing/pricing_realtime_connections.mdx
@@ -1,5 +1,5 @@
- per 1,000 peak connections. You are only charged for usage exceeding your subscription
-plan's quota.
+ per 1,000 peak connections. You are only charged for usage exceeding your
+subscription plan's quota.
| Plan | Quota | Over-Usage |
| ---------- | ------ | ----------------------------------------------- |
diff --git a/apps/docs/content/_partials/billing/pricing/pricing_realtime_messages.mdx b/apps/docs/content/_partials/billing/pricing/pricing_realtime_messages.mdx
index 3cbea00db4f..d6a1f8875f8 100644
--- a/apps/docs/content/_partials/billing/pricing/pricing_realtime_messages.mdx
+++ b/apps/docs/content/_partials/billing/pricing/pricing_realtime_messages.mdx
@@ -1,5 +1,5 @@
- per 1 million messages. You are only charged for usage exceeding your subscription
-plan's quota.
+ per 1 million messages. You are only charged for usage exceeding your
+subscription plan's quota.
| Plan | Quota | Over-Usage |
| ---------- | --------- | --------------------------------------------- |
diff --git a/apps/docs/content/_partials/billing/pricing/pricing_storage_image_transformations.mdx b/apps/docs/content/_partials/billing/pricing/pricing_storage_image_transformations.mdx
index 3d05742e871..5ced3ca7023 100644
--- a/apps/docs/content/_partials/billing/pricing/pricing_storage_image_transformations.mdx
+++ b/apps/docs/content/_partials/billing/pricing/pricing_storage_image_transformations.mdx
@@ -1,5 +1,5 @@
- per 1,000 origin images. You are only charged for usage exceeding your subscription
-plan's quota.
+ per 1,000 origin images. You are only charged for usage exceeding your
+subscription plan's quota.
diff --git a/apps/docs/content/_partials/universal_links_apple.mdx b/apps/docs/content/_partials/universal_links_apple.mdx
index ef9ada6753b..a6016206bc0 100644
--- a/apps/docs/content/_partials/universal_links_apple.mdx
+++ b/apps/docs/content/_partials/universal_links_apple.mdx
@@ -5,7 +5,6 @@ For a better user experience, you can use **Universal Links** instead of custom
To enable Universal Links, you need to:
1. **Configure Associated Domains** in your Xcode project:
-
- Add your domain to the Associated Domains capability
- Format: `applinks:yourdomain.com`
diff --git a/apps/docs/content/guides/ai/hybrid-search.mdx b/apps/docs/content/guides/ai/hybrid-search.mdx
index 8664ee9e32e..69a6fafa9de 100644
--- a/apps/docs/content/guides/ai/hybrid-search.mdx
+++ b/apps/docs/content/guides/ai/hybrid-search.mdx
@@ -134,13 +134,11 @@ $$;
Let's break this down:
- **Parameters:** The function accepts quite a few parameters, but the main (required) ones are `query_text`, `query_embedding`, and `match_count`.
-
- `query_text` is the user's query text (more on this shortly)
- `query_embedding` is the vector representation of the user's query produced by the embedding model. We chose 512 dimensions for this example, but adjust this to match the size of the embedding vectors generated from your preferred model. This must match the size of the `embedding` vector on the `documents` table (and use the same model).
- `match_count` is the number of records returned in the `limit` clause.
The other parameters are optional, but give more control over the fusion process.
-
- `full_text_weight` and `semantic_weight` decide how much weight each search method gets in the final score. These are both 1 by default which means they both equally contribute towards the final rank. A `full_text_weight` of 2 and `semantic_weight` of 1 would give full-text search twice as much weight as semantic search.
- `rrf_k` is the `k` [smoothing constant](#smoothing-constant-k) added to the reciprocal rank. The default is 50.
diff --git a/apps/docs/content/guides/auth/general-configuration.mdx b/apps/docs/content/guides/auth/general-configuration.mdx
index 9a576119fab..0e79c0625c7 100644
--- a/apps/docs/content/guides/auth/general-configuration.mdx
+++ b/apps/docs/content/guides/auth/general-configuration.mdx
@@ -25,7 +25,6 @@ Supabase Auth provides these [general configuration options](/dashboard/project/
- **Allow new users to sign up**: Users will be able to sign up. If this config is disabled, only existing users can sign in.
- **Confirm Email**: Users will need to confirm their email address before signing in for the first time.
-
- Having **Confirm Email** disabled assumes that the user's email does not need to be verified in order to login and implicitly confirms the user's email in the database.
- This option can be found in the email provider under the provider-specific configuration.
{/* - If you previously relied on this config to autoconfirm a user's email address, you can switch to use **Allow unverified email sign in** instead. This new option allows the user to sign in with an unverified email which you can keep track of through the user object. It provides more versatility if you require your users to verify their email address in the future since you can structure your RLS policies to check the user's `email_verified` field. */}
diff --git a/apps/docs/content/guides/auth/rate-limits.mdx b/apps/docs/content/guides/auth/rate-limits.mdx
index dc543045bdf..3b8a0a4d9a7 100644
--- a/apps/docs/content/guides/auth/rate-limits.mdx
+++ b/apps/docs/content/guides/auth/rate-limits.mdx
@@ -34,7 +34,7 @@ curl -X PATCH "https://api.supabase.com/v1/projects/$PROJECT_REF/config/auth" \
## Rate limit behavior
-Supabase Auth uses a token bucket algorithm for endpoint operations that are limited by IP address.
+Supabase Auth uses a token bucket algorithm for endpoint operations that are limited by IP address.
Each bucket has a maximum capacity of 30 requests. When the bucket is full, brief bursts of up to 30 requests can be allowed in a short period. Once the bucket empties, requests are rate limited until tokens refill. The rate limit defines the rate at which the bucket is refilled.
diff --git a/apps/docs/content/guides/auth/social-login/auth-facebook.mdx b/apps/docs/content/guides/auth/social-login/auth-facebook.mdx
index 555828dd3a4..fef53130348 100644
--- a/apps/docs/content/guides/auth/social-login/auth-facebook.mdx
+++ b/apps/docs/content/guides/auth/social-login/auth-facebook.mdx
@@ -357,19 +357,16 @@ Development mode is sufficient for local development and testing. You only need
Before your app can be used by the general public, you need to complete Facebook's App Review process:
1. **Complete App Settings**: In your Facebook app's **Settings > Basic**, fill in all required fields including:
-
- App Icon
- Privacy Policy URL
- Terms of Service URL (if applicable)
- App Domain
2. **Request Permissions**: Navigate to **App Review > Permissions and Features** and request the permissions you need:
-
- `public_profile` - Usually pre-approved
- `email` - Requires verification that your app needs email access
3. **Submit for Review**: Click **Submit for Review** and provide:
-
- Detailed instructions for how Facebook reviewers should test your login flow
- A screencast video demonstrating the Facebook Login feature
- Explanation of how user data will be used
diff --git a/apps/docs/content/guides/database/import-data.mdx b/apps/docs/content/guides/database/import-data.mdx
index df2a6cc0b64..ca2e330b508 100644
--- a/apps/docs/content/guides/database/import-data.mdx
+++ b/apps/docs/content/guides/database/import-data.mdx
@@ -53,7 +53,6 @@ You can use it in conjunction with Supabase by following these steps:
```
Customize the source and Supabase database URL and options to fit your specific use case:
-
- `wal_buffers`: This parameter is set to '64MB' to allocate 64 megabytes of memory for write-ahead logging buffers. A larger value can help improve write performance by caching more data in memory before writing it to disk. This can be useful during data import operations to speed up the writing of transaction logs.
- `max_wal_senders`: It is set to 0, to disable replication connections. This is done during the data import process to prevent replication-related conflicts and issues.
- `statement_timeout`: The value is set to 0, which means it's disabled, allowing SQL statements to run without a time limit.
diff --git a/apps/docs/content/guides/database/replication/replication-setup.mdx b/apps/docs/content/guides/database/replication/replication-setup.mdx
index 6188318c9f2..659247e2e4c 100644
--- a/apps/docs/content/guides/database/replication/replication-setup.mdx
+++ b/apps/docs/content/guides/database/replication/replication-setup.mdx
@@ -136,21 +136,18 @@ Before configuring BigQuery as a destination, set up the following in Google Clo
1. **Google Cloud Platform (GCP) account**: [Sign up for GCP](https://cloud.google.com/gcp) if you don't have one
2. **BigQuery dataset**: Create a [BigQuery dataset](https://cloud.google.com/bigquery/docs/datasets-intro) in your GCP project
-
- Open the BigQuery console in GCP
- Select your project
- Click "Create Dataset"
- Provide a dataset ID (e.g., `supabase_replication`)
3. **GCP service account key**: Create a [service account](https://cloud.google.com/iam/docs/keys-create-delete) with appropriate permissions:
-
- Go to IAM & Admin → Service Accounts
- Click "Create Service Account"
- Grant the **BigQuery Data Editor** role
- Create and download the JSON key file
Required permissions:
-
- `bigquery.datasets.get`
- `bigquery.tables.create`
- `bigquery.tables.get`
@@ -171,13 +168,11 @@ Before configuring BigQuery as a destination, set up the following in Google Clo
/>
3. Configure the general settings:
-
- **Destination name**: A name to identify this destination (e.g., "BigQuery Warehouse")
- **Publication**: The publication to replicate data from (created in [Step 1](#step-1-create-a-postgres-publication))
- **Destination type**: Select **BigQuery**
4. Configure BigQuery-specific settings:
-
- **Project ID**: Your BigQuery project identifier (found in the GCP Console)
- **Dataset ID**: The name of your BigQuery dataset (without the project ID)
@@ -190,7 +185,6 @@ Before configuring BigQuery as a destination, set up the following in Google Clo
- **Service Account Key**: Your GCP service account key in JSON format (from Step 1)
5. Configure **Advanced Settings** (optional):
-
- **Batch wait time (milliseconds)**: How long to wait for more changes before sending a batch. Default is recommended for optimal performance.
6. Click **Create and start** to begin replication
diff --git a/apps/docs/content/guides/deployment/going-into-prod.mdx b/apps/docs/content/guides/deployment/going-into-prod.mdx
index 1b23ede39a9..a44b3d0cc56 100644
--- a/apps/docs/content/guides/deployment/going-into-prod.mdx
+++ b/apps/docs/content/guides/deployment/going-into-prod.mdx
@@ -107,13 +107,11 @@ Stay informed about Supabase service status by subscribing to the [Status Page](
### Setting up Slack notifications
1. Install the RSS app in Slack:
-
- Visit the [RSS app page](https://slack.com/marketplace/A0F81R7U7-rss) in the Slack marketplace
- Click `Add to Slack` if not already installed
- Otherwise you will get straight to next step, no need to reinstall the app
2. Configure the Supabase status feed:
-
- Create a channel (e.g., `#supabase-status-alerts`) for status updates
- On the [RSS app page](https://slack.com/marketplace/A0F81R7U7-rss) go to _Add a Feed_ section and set Feed URL to `https://status.supabase.com/history.rss`
- Select your designated channel and click "Subscribe to this feed"
diff --git a/apps/docs/content/guides/functions/architecture.mdx b/apps/docs/content/guides/functions/architecture.mdx
index d074e55b864..5bb5eb07f08 100644
--- a/apps/docs/content/guides/functions/architecture.mdx
+++ b/apps/docs/content/guides/functions/architecture.mdx
@@ -13,7 +13,6 @@ This guide explains the architecture and inner workings of Supabase Edge Functio
To illustrate how edge functions operate, consider a photo-sharing app where users upload images and apply filters (e.g., grayscale or sepia) before saving them.
- **Workflow Overview**:
-
- A user uploads an original image to Supabase Storage.
- When the user selects a filter, the client-side app (using the Supabase JavaScript SDK) invokes an edge function named something like "apply-filter."
- The edge function:
@@ -34,7 +33,6 @@ This example highlights edge functions as lightweight, on-demand code snippets t
Deploying an edge function is straightforward and automated, requiring no manual server setup.
- **Steps to Deploy**:
-
1. Write the function code in your local Supabase project (e.g., in `supabase/functions/apply-filter/index.ts`).
2. Run the command `supabase functions deploy apply-filter` via the Supabase CLI.
3. The CLI bundles the function and its dependencies into an **ESZip file**—a compact format created by Deno that includes a complete module graph for quick loading and execution.
@@ -52,7 +50,6 @@ Once deployed, the function is ready for invocation from anywhere, with Supabase
Edge functions leverage a distributed architecture to minimize latency by running code close to the user.
- **Architecture Components**:
-
- **Global API Gateway**: Acts as the entry point for all requests. It uses the requester's IP address to determine geographic location and routes the request to the nearest edge location (e.g., routing a request from Amsterdam to Frankfurt).
- **Edge Locations**: Supabase's network of data centers worldwide where functions are replicated. The ESZip bundle is automatically distributed to these locations upon deployment.
- **Routing Logic**: Based on geolocation mapping, ensuring the function executes as close as possible to the user for optimal performance.
@@ -68,20 +65,17 @@ This global edge network is what makes edge functions "edge-native," providing c
The core of edge functions' efficiency lies in their execution environment, which prioritizes speed, isolation, and scalability.
- **Request Handling**:
-
1. A client sends an HTTP request (e.g., POST) to the function's URL, including parameters like auth headers, image ID, and filter type.
2. The global API gateway routes it to the nearest edge location.
3. At the edge, Supabase's **edge runtime** validates the request (e.g., checks authorization).
- **Execution Environment**:
-
- A new **V8 isolate** is spun up for each invocation. V8 is the JavaScript engine used by Chrome and Node.js, providing a lightweight, sandboxed environment.
- Each isolate has its own memory heap and execution thread, ensuring complete isolation—no interference between concurrent requests.
- The ESZip bundle is loaded into the isolate, and the function code runs.
- After execution, the response (e.g., filtered image path) is sent back to the client.
- **Performance Optimizations**:
-
- **Cold Starts**: Even initial executions are fast (milliseconds) due to the compact ESZip format and minimal Deno runtime overhead.
- **Warm Starts**: Isolates can remain active for a period (plan-dependent) to handle subsequent requests without restarting.
- **Concurrency**: Multiple isolates can run simultaneously in the same edge location, supporting high traffic.
@@ -95,7 +89,6 @@ Compared to traditional serverless or monolithic architectures, this setup offer
## Benefits and use cases
- **Advantages**:
-
- **Low Latency**: Proximity to users reduces round-trip times.
- **Scalability**: Handles variable loads without provisioning servers.
- **Developer-Friendly**: Focus on code; Supabase manages the rest.
diff --git a/apps/docs/content/guides/functions/examples/og-image.mdx b/apps/docs/content/guides/functions/examples/og-image.mdx
index e47bc9fcec0..ec076c16b7c 100644
--- a/apps/docs/content/guides/functions/examples/og-image.mdx
+++ b/apps/docs/content/guides/functions/examples/og-image.mdx
@@ -26,21 +26,19 @@ import { ImageResponse } from 'https://deno.land/x/og_edge@0.0.4/mod.ts'
export default function handler(req: Request) {
return new ImageResponse(
- (
-
- Hello OG Image!
-
- )
+
+ Hello OG Image!
+
)
}
```
diff --git a/apps/docs/content/guides/local-development/testing/overview.mdx b/apps/docs/content/guides/local-development/testing/overview.mdx
index eb212ec063e..1b17a3cfae3 100644
--- a/apps/docs/content/guides/local-development/testing/overview.mdx
+++ b/apps/docs/content/guides/local-development/testing/overview.mdx
@@ -281,13 +281,11 @@ jobs:
## Best practices
1. **Test Data Setup**
-
- Use begin and rollback to ensure test isolation
- Create realistic test data that covers edge cases
- Use different user roles and permissions in tests
2. **RLS Policy Testing**
-
- Test Create, Read, Update, Delete operations
- Test with different user roles: anonymous and authenticated
- Test edge cases and potential security bypasses
@@ -310,7 +308,6 @@ For more complex, real-world examples of database testing, check out:
Common issues and solutions:
1. **Test Failures Due to RLS**
-
- Ensure you've set the correct role `set local role authenticated;`
- Verify JWT claims are set `set local "request.jwt.claims"`
- Check policy definitions match your test assumptions
diff --git a/apps/docs/content/guides/local-development/testing/pgtap-extended.mdx b/apps/docs/content/guides/local-development/testing/pgtap-extended.mdx
index 1e4fbf57411..ac6e42168de 100644
--- a/apps/docs/content/guides/local-development/testing/pgtap-extended.mdx
+++ b/apps/docs/content/guides/local-development/testing/pgtap-extended.mdx
@@ -67,13 +67,11 @@ create extension if not exists "basejump-supabase_test_helpers" version '0.0.6';
The test helpers package provides several advantages over writing raw pgTAP tests:
1. **Simplified User Management**
-
- Create test users with `tests.create_supabase_user()`
- Switch contexts with `tests.authenticate_as()`
- Retrieve user IDs using `tests.get_supabase_uid()`
2. **Row Level Security (RLS) Testing Utilities**
-
- Verify RLS status with `tests.rls_enabled()`
- Test policy enforcement
- Simulate different user contexts
@@ -262,7 +260,6 @@ This demo app implements:
### What makes this complex?
1. **Layered Permissions**
-
- Role hierarchies affect access rights
- Plan types influence user capabilities
- Content state (draft/published) affects permissions
diff --git a/apps/docs/content/guides/platform/access-control.mdx b/apps/docs/content/guides/platform/access-control.mdx
index fdb8f357949..5a8dca998dd 100644
--- a/apps/docs/content/guides/platform/access-control.mdx
+++ b/apps/docs/content/guides/platform/access-control.mdx
@@ -269,9 +269,15 @@ The table below shows the actions each role can take on the resources belonging
| | Delete | | | | |
[^1]: Available on the Team and Enterprise Plans.
+
[^2]: Sending anonymous data to OpenAI is opt in and can improve Studio AI Assistant's responses.
+
[^3]: Invites sent from a SSO account can only be accepted by another SSO account coming from the same identity provider. This is a security measure that prevents accidental invites to accounts not managed by your company's enterprise systems.
+
[^4]: Available on the Team and Enterprise Plans.
+
[^5]: Read-Only role is able to access secrets.
+
[^6]: Listed permissions are for the API and Dashboard.
+
[^7]: Limited to executing SELECT queries. SQL Query Snippets run by the Read-Only role are run against the database using the **supabase_read_only_user**. This role has the [predefined Postgres role pg_read_all_data](https://www.postgresql.org/docs/current/predefined-roles.html).
diff --git a/apps/docs/content/guides/platform/aws-marketplace/getting-started.mdx b/apps/docs/content/guides/platform/aws-marketplace/getting-started.mdx
index 858aa8081b5..30b23d54033 100644
--- a/apps/docs/content/guides/platform/aws-marketplace/getting-started.mdx
+++ b/apps/docs/content/guides/platform/aws-marketplace/getting-started.mdx
@@ -67,6 +67,7 @@ src="/docs/img/guides/platform/aws-marketplace-listing-subscribe.png"
width={2270}
height={632}
/>
+
@@ -79,6 +80,7 @@ src="/docs/img/guides/platform/aws-marketplace-listing-success.png"
width={1944}
height={1254}
/>
+
@@ -94,6 +96,7 @@ src={{
width={3048}
height={1058}
/>
+
diff --git a/apps/docs/content/guides/platform/compute-and-disk.mdx b/apps/docs/content/guides/platform/compute-and-disk.mdx
index b0c5d466c40..caa6fc6a91e 100644
--- a/apps/docs/content/guides/platform/compute-and-disk.mdx
+++ b/apps/docs/content/guides/platform/compute-and-disk.mdx
@@ -32,7 +32,9 @@ In paid organizations, Nano Compute are billed at the same price as Micro Comput
| >16XL | - | [Contact Us](/dashboard/support/new?category=sales&subject=Enquiry%20about%20larger%20instance%20sizes) | Custom | Custom | Custom |
[^1]: Database max connections are recommended values and can be [customized via `max_connections`](/docs/guides/database/custom-postgres-config) depending on your use case. Be aware of [these considerations](/docs/guides/troubleshooting/how-to-change-max-database-connections-_BQ8P5) before modifying.
+
[^2]: Database size for each compute instance is the default recommendation but the actual performance of your database has many contributing factors, including resources available to it and the size of the data contained within it. See the [shared responsibility model](/docs/guides/platform/shared-responsibility-model) for more information.
+
[^3]: Compute resources on the Free plan are subject to change.
Compute sizes can be changed by first selecting your project in the dashboard [here](/dashboard/project/_/settings/compute-and-disk) and the upgrade process will [incur downtime](/docs/guides/platform/compute-and-disk#upgrades).
diff --git a/apps/docs/content/guides/platform/migrating-to-supabase/auth0.mdx b/apps/docs/content/guides/platform/migrating-to-supabase/auth0.mdx
index 7ba4fc78a28..5bd2ffc10ce 100644
--- a/apps/docs/content/guides/platform/migrating-to-supabase/auth0.mdx
+++ b/apps/docs/content/guides/platform/migrating-to-supabase/auth0.mdx
@@ -112,7 +112,6 @@ Migrate existing users to Supabase Auth. This requires two main steps: first, ch
1. To sign in your migrated users, use the Supabase Auth [sign in methods](/docs/reference/javascript/auth-signinwithpassword).
To check for edge cases where users aren't successfully migrated, use a fallback strategy. This ensures that users can continue to sign in seamlessly:
-
1. Try to sign in the user with Supabase Auth.
1. If the signin fails, try to sign in with Auth0.
1. If Auth0 signin succeeds, call the admin create user method again to create the user in Supabase Auth.
diff --git a/apps/docs/content/guides/platform/read-replicas/getting-started.mdx b/apps/docs/content/guides/platform/read-replicas/getting-started.mdx
index 33e0193ff84..34dc491e36b 100644
--- a/apps/docs/content/guides/platform/read-replicas/getting-started.mdx
+++ b/apps/docs/content/guides/platform/read-replicas/getting-started.mdx
@@ -16,15 +16,12 @@ Projects must meet these requirements to use Read Replicas:
1. Running on AWS.
2. Running on at least a [Small compute add-on](/docs/guides/platform/compute-add-ons).
-
- Read Replicas are started on the same compute instance as the Primary to keep up with changes.
3. Running on Postgres 15+.
-
- For projects running on older versions of Postgres, you need to [upgrade to the latest platform version](/docs/guides/platform/migrating-and-upgrading-projects#pgupgrade).
4. Not using [legacy logical backups](/docs/guides/platform/backups#point-in-time-recovery)
-
- Physical backups are automatically enabled if using [Point in time recovery (PITR)](/docs/guides/platform/backups#point-in-time-recovery)
## Creating a Read Replica
diff --git a/apps/docs/content/guides/queues.mdx b/apps/docs/content/guides/queues.mdx
index 8130a357edc..2d69042c249 100644
--- a/apps/docs/content/guides/queues.mdx
+++ b/apps/docs/content/guides/queues.mdx
@@ -19,10 +19,12 @@ Queues couples the reliability of Postgres with the simplicity Supabase's platfo
A Message is delivered exactly once to a consumer within a customizable visibility window.
- **Message Durability and Archival**
- Messages are stored in Postgres and you can choose to archive them for analytical or auditing purposes.
+ Messages are stored in Postgres and you can choose to archive them for analytical or auditing
+ purposes.
- **Granular Authorization**
- Control client-side consumer access to Queues with API permissions and Row Level Security (RLS) policies.
+ Control client-side consumer access to Queues with API permissions and Row Level Security (RLS)
+ policies.
- **Queue Management and Monitoring**
Create, manage, and monitor Queues and Messages in the Supabase Dashboard.
diff --git a/apps/docs/content/guides/self-hosting/self-hosted-auth-keys.mdx b/apps/docs/content/guides/self-hosting/self-hosted-auth-keys.mdx
index 955c0b00022..1cbdd4d4199 100644
--- a/apps/docs/content/guides/self-hosting/self-hosted-auth-keys.mdx
+++ b/apps/docs/content/guides/self-hosting/self-hosted-auth-keys.mdx
@@ -100,15 +100,15 @@ This should return the EC public key (the symmetric key is excluded). Third-part
New variables default to empty values in `.env.example`. When empty, the API gateway and all services operate in legacy-only mode: `sb_publishable` and `sb_secret` API keys are not configured.
-| Environment variable (existing and new) | Type | Description |
-|---|---|---|
-| `JWT_SECRET` | Symmetric secret | **Existing:** Shared secret for signing and verifying HS256 JWTs. Used by multiple services. |
-| `ANON_KEY` | HS256 JWT | **Existing:** Legacy client-side API key. Embedded JWT with `role: "anon"`. |
-| `SERVICE_ROLE_KEY` | HS256 JWT | **Existing:** Legacy server-side API key. Embedded JWT with `role: "service_role"`. |
-| `SUPABASE_PUBLISHABLE_KEY` | Opaque | **New:** Short random key with checksum. Replaces `ANON_KEY` for **client-side** use. |
-| `SUPABASE_SECRET_KEY` | Opaque | **New:** Short random key with checksum. Replaces `SERVICE_ROLE_KEY` for **server-side** use. |
-| `JWT_KEYS` | JSON array | **New:** JSON array of signing JWKs containing the new asymmetric key pair and the legacy symmetric key. Used by Auth to sign tokens. |
-| `JWT_JWKS` | JWKS (JSON) | **New:** Contains the new public key and the legacy symmetric key. Used by PostgREST, Realtime, and Storage to verify tokens. |
+| Environment variable (existing and new) | Type | Description |
+| --------------------------------------- | ---------------- | ------------------------------------------------------------------------------------------------------------------------------------- |
+| `JWT_SECRET` | Symmetric secret | **Existing:** Shared secret for signing and verifying HS256 JWTs. Used by multiple services. |
+| `ANON_KEY` | HS256 JWT | **Existing:** Legacy client-side API key. Embedded JWT with `role: "anon"`. |
+| `SERVICE_ROLE_KEY` | HS256 JWT | **Existing:** Legacy server-side API key. Embedded JWT with `role: "service_role"`. |
+| `SUPABASE_PUBLISHABLE_KEY` | Opaque | **New:** Short random key with checksum. Replaces `ANON_KEY` for **client-side** use. |
+| `SUPABASE_SECRET_KEY` | Opaque | **New:** Short random key with checksum. Replaces `SERVICE_ROLE_KEY` for **server-side** use. |
+| `JWT_KEYS` | JSON array | **New:** JSON array of signing JWKs containing the new asymmetric key pair and the legacy symmetric key. Used by Auth to sign tokens. |
+| `JWT_JWKS` | JWKS (JSON) | **New:** Contains the new public key and the legacy symmetric key. Used by PostgREST, Realtime, and Storage to verify tokens. |
### Differences from the Supabase platform
@@ -186,7 +186,6 @@ For **Realtime WebSocket** connections, the API key is sent as a `?apikey=` quer
**Storage** and **Edge Functions** accept requests without an API key. These services handle their own authentication.
-
### API gateway routing
Kong is configured with two consumers that each accept both the legacy and new API keys:
@@ -195,27 +194,27 @@ Kong is configured with two consumers that each accept both the legacy and new A
consumers:
- username: anon
keyauth_credentials:
- - key: $SUPABASE_ANON_KEY # legacy HS256 JWT (ANON_KEY)
- - key: $SUPABASE_PUBLISHABLE_KEY # new opaque key (omitted when not configured)
+ - key: $SUPABASE_ANON_KEY # legacy HS256 JWT (ANON_KEY)
+ - key: $SUPABASE_PUBLISHABLE_KEY # new opaque key (omitted when not configured)
- username: service_role
keyauth_credentials:
- - key: $SUPABASE_SERVICE_KEY # legacy HS256 JWT (SERVICE_ROLE_KEY)
- - key: $SUPABASE_SECRET_KEY # new opaque key (omitted when not configured)
+ - key: $SUPABASE_SERVICE_KEY # legacy HS256 JWT (SERVICE_ROLE_KEY)
+ - key: $SUPABASE_SECRET_KEY # new opaque key (omitted when not configured)
```
When new API keys have not been added yet, the `kong-entrypoint.sh` script removes the empty credential entries before Kong loads the config.
To assist with the authorization flows a specialized configuration in `kong.yml` substitutes internal, gateway-level-only pre-signed JWTs for `sb_publishable` and `sb_secret` API keys. These pre-signed JWTs are also auto-configured in `.env` but **should not** be used in any application code.
-| Route | Service | API key required | Header substitution |
-|---|---|---|---|
-| `/auth/v1/*` | Auth | Yes | `Authorization` |
-| `/rest/v1/*` | PostgREST | Yes | `Authorization` |
-| `/graphql/v1` | PostgREST | Yes | `Authorization` |
-| `/realtime/v1/api/*` | Realtime (REST) | Yes | `Authorization` |
-| `/realtime/v1/*` | Realtime (WebSocket) | Yes | `x-api-key` |
-| `/storage/v1/*` | Storage | No | `Authorization` |
-| `/functions/v1/*` | Edge Functions | No | - |
+| Route | Service | API key required | Header substitution |
+| -------------------- | -------------------- | ---------------- | ------------------- |
+| `/auth/v1/*` | Auth | Yes | `Authorization` |
+| `/rest/v1/*` | PostgREST | Yes | `Authorization` |
+| `/graphql/v1` | PostgREST | Yes | `Authorization` |
+| `/realtime/v1/api/*` | Realtime (REST) | Yes | `Authorization` |
+| `/realtime/v1/*` | Realtime (WebSocket) | Yes | `x-api-key` |
+| `/storage/v1/*` | Storage | No | `Authorization` |
+| `/functions/v1/*` | Edge Functions | No | - |
### Request flows
diff --git a/apps/docs/content/guides/storage/s3/compatibility.mdx b/apps/docs/content/guides/storage/s3/compatibility.mdx
index 1e69c541a76..9127228a05e 100644
--- a/apps/docs/content/guides/storage/s3/compatibility.mdx
+++ b/apps/docs/content/guides/storage/s3/compatibility.mdx
@@ -55,7 +55,7 @@ The most commonly used endpoints are implemented, and more will be added. Implem
| ✅ [PutObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_PutObject.html) | System Metadata: ✅ Content-Type ✅ Cache-Control ✅ Content-Disposition ✅ Content-Encoding ✅ Content-Language ✅ Expires ❌ Content-MD5 ❌ Object Lifecycle ❌ Website: ❌ x-amz-website-redirect-location ❌ SSE-C: ❌ x-amz-server-side-encryption ❌ x-amz-server-side-encryption-customer-algorithm ❌ x-amz-server-side-encryption-customer-key ❌ x-amz-server-side-encryption-customer-key-MD5 ❌ x-amz-server-side-encryption-aws-kms-key-id ❌ x-amz-server-side-encryption-context ❌ x-amz-server-side-encryption-bucket-key-enabled ❌ Request Payer: ❌ x-amz-request-payer ❌ Tagging: ❌ x-amz-tagging ❌ Object Locking: ❌ x-amz-object-lock-mode ❌ x-amz-object-lock-retain-until-date ❌ x-amz-object-lock-legal-hold ❌ ACL: ❌ x-amz-acl ❌ x-amz-grant-full-control ❌ x-amz-grant-read ❌ x-amz-grant-read-acp ❌ x-amz-grant-write-acp ❌ Bucket Owner: ❌ x-amz-expected-bucket-owner |
| ✅ [DeleteObject](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObject.html) | ❌ Multi-factor authentication: ❌ x-amz-mfa ❌ Object Locking: ❌ x-amz-bypass-governance-retention ❌ Request Payer: ❌ x-amz-request-payer ❌ Bucket Owner: ❌ x-amz-expected-bucket-owner |
| ✅ [DeleteObjects](https://docs.aws.amazon.com/AmazonS3/latest/API/API_DeleteObjects.html) | ❌ Multi-factor authentication: ❌ x-amz-mfa ❌ Object Locking: ❌ x-amz-bypass-governance-retention ❌ Request Payer: ❌ x-amz-request-payer ❌ Bucket Owner: ❌ x-amz-expected-bucket-owner |
-| ✅ [ListMultipartUploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html) | ✅ Query Parameters: ✅ delimiter ✅ encoding-type ✅ key-marker ✅️ max-uploads ✅ prefix ✅ upload-id-marker |
+| ✅ [ListMultipartUploads](https://docs.aws.amazon.com/AmazonS3/latest/API/API_ListMultipartUploads.html) | ✅ Query Parameters: ✅ delimiter ✅ encoding-type ✅ key-marker ✅️ max-uploads ✅ prefix ✅ upload-id-marker |
| ✅ [CreateMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CreateMultipartUpload.html) | ✅ System Metadata: ✅ Content-Type ✅ Cache-Control ✅ Content-Disposition ✅ Content-Encoding ✅ Content-Language ✅ Expires ❌ Content-MD5 ❌ Website: ❌ x-amz-website-redirect-location ❌ SSE-C: ❌ x-amz-server-side-encryption ❌ x-amz-server-side-encryption-customer-algorithm ❌ x-amz-server-side-encryption-customer-key ❌ x-amz-server-side-encryption-customer-key-MD5 ❌ x-amz-server-side-encryption-aws-kms-key-id ❌ x-amz-server-side-encryption-context ❌ x-amz-server-side-encryption-bucket-key-enabled ❌ Request Payer: ❌ x-amz-request-payer ❌ Tagging: ❌ x-amz-tagging ❌ Object Locking: ❌ x-amz-object-lock-mode ❌ x-amz-object-lock-retain-until-date ❌ x-amz-object-lock-legal-hold ❌ ACL: ❌ x-amz-acl ❌ x-amz-grant-full-control ❌ x-amz-grant-read ❌ x-amz-grant-read-acp ❌ x-amz-grant-write-acp ❌ Storage class: ❌ x-amz-storage-class ❌ Bucket Owner: ❌ x-amz-expected-bucket-owner |
| ✅ [CompleteMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_CompleteMultipartUpload.html) | ❌ Bucket Owner: ❌ x-amz-expected-bucket-owner ❌ Request Payer: ❌ x-amz-request-payer |
| ✅ [AbortMultipartUpload](https://docs.aws.amazon.com/AmazonS3/latest/API/API_AbortMultipartUpload.html) | ❌ Request Payer: ❌ x-amz-request-payer |
diff --git a/apps/docs/content/troubleshooting/high-cpu-and-slow-queries-with-error-must-be-a-superuser-to-terminate-superuser-process.mdx b/apps/docs/content/troubleshooting/high-cpu-and-slow-queries-with-error-must-be-a-superuser-to-terminate-superuser-process.mdx
index 43a460c9e17..43c59abaa73 100644
--- a/apps/docs/content/troubleshooting/high-cpu-and-slow-queries-with-error-must-be-a-superuser-to-terminate-superuser-process.mdx
+++ b/apps/docs/content/troubleshooting/high-cpu-and-slow-queries-with-error-must-be-a-superuser-to-terminate-superuser-process.mdx
@@ -43,7 +43,6 @@ This situation often arises in large, high-write tables (e.g., `your_table`, whi
Since the wraparound prevention autovacuum cannot be stopped, the best approach is to provide the database with sufficient resources to complete the operation as quickly and efficiently as possible.
1. **Upgrade your Database Compute Instance:**
-
- **Action:** Temporarily scale up your instance's CPU (e.g., from `m6g.4xlarge` to `m6g.8xlarge` or higher).
- **Why it helps:** More CPU cores and processing power will help the autovacuum operation run faster, reducing the overall time it impacts your database.
- **Considerations:** This usually causes a brief downtime (typically 1-2 minutes) as the instance restarts. However, the autovacuum process is designed to pause and resume automatically.
diff --git a/apps/docs/content/troubleshooting/how-to-delete-vercel-linked-projects-9d08aa.mdx b/apps/docs/content/troubleshooting/how-to-delete-vercel-linked-projects-9d08aa.mdx
index 90e8989f2a2..5265d41de50 100644
--- a/apps/docs/content/troubleshooting/how-to-delete-vercel-linked-projects-9d08aa.mdx
+++ b/apps/docs/content/troubleshooting/how-to-delete-vercel-linked-projects-9d08aa.mdx
@@ -24,17 +24,14 @@ This method requires two steps - first delete in Supabase, then clean up in Verc
2. **Clean up in Vercel**
After deleting from Supabase, clean up in Vercel:
-
- Navigate to your [Vercel dashboard](https://vercel.com/dashboard)
- Go to the **Storage** tab
- Click on the Supabase project (it will show as "uninstalled")

-
- Scroll down and find the **Settings** tab in the sidebar

-
- Click **Delete Database** to completely remove it

@@ -84,7 +81,6 @@ If you want to move a Vercel-linked project to a different organization:
2. **Clean up in Vercel**
After transferring, the project will show as "uninstalled" in Vercel but still appear under Storage. You need to manually delete it:
-
- Navigate to your [Vercel dashboard](https://vercel.com/dashboard)
- Go to the **Storage** tab
- Click on the Supabase project (it will show as "uninstalled")
diff --git a/apps/docs/content/troubleshooting/pkce-flow-errors-cannot-parse-response-or-zgotmplz-in-magic-link-emails-433665.mdx b/apps/docs/content/troubleshooting/pkce-flow-errors-cannot-parse-response-or-zgotmplz-in-magic-link-emails-433665.mdx
index 4aad6fcfb37..fdd60cd2fbd 100644
--- a/apps/docs/content/troubleshooting/pkce-flow-errors-cannot-parse-response-or-zgotmplz-in-magic-link-emails-433665.mdx
+++ b/apps/docs/content/troubleshooting/pkce-flow-errors-cannot-parse-response-or-zgotmplz-in-magic-link-emails-433665.mdx
@@ -32,7 +32,6 @@ The email templating system often uses a language like Go, which has built-in se
You may observe two distinct issues:
1. **The `#ZgotmplZ` Error**:
-
- **Cause**: This error occurs when you attempt to use a non-standard URL scheme (like `your-app-scheme://` for a mobile app deep link) directly within a template variable like `{{ .SiteURL }}` in your email templates. Go's security features sanitize this perceived "unsafe" URL, replacing it with the `#ZgotmplZ` placeholder. This prevents the link from being rendered correctly and thus from working.
2. **The 'Cannot Parse Response' Error**:
diff --git a/apps/docs/content/troubleshooting/realtime-project-suspended-for-exceeding-quotas.mdx b/apps/docs/content/troubleshooting/realtime-project-suspended-for-exceeding-quotas.mdx
index 8644c9f4650..dc2eddd2bb7 100644
--- a/apps/docs/content/troubleshooting/realtime-project-suspended-for-exceeding-quotas.mdx
+++ b/apps/docs/content/troubleshooting/realtime-project-suspended-for-exceeding-quotas.mdx
@@ -37,7 +37,6 @@ In most cases, quota overages are accidental rather than intentional:
## What to do if your project is suspended
1. **Open a support ticket**: [Contact support](/dashboard/support/new) and include:
-
- Your project reference ID
- A description of your Realtime use case (what features use Broadcast, Presence, or Postgres Changes)
- An estimate of your expected concurrent connections and message throughput
diff --git a/apps/docs/content/troubleshooting/supabase-cli-failed-sasl-auth-or-invalid-scram-server-final-message.mdx b/apps/docs/content/troubleshooting/supabase-cli-failed-sasl-auth-or-invalid-scram-server-final-message.mdx
index 2bb26125c04..61b57decaf4 100644
--- a/apps/docs/content/troubleshooting/supabase-cli-failed-sasl-auth-or-invalid-scram-server-final-message.mdx
+++ b/apps/docs/content/troubleshooting/supabase-cli-failed-sasl-auth-or-invalid-scram-server-final-message.mdx
@@ -13,12 +13,10 @@ This typically indicates an authentication failure where the database connection
**To resolve this, consider one of the following solutions:**
1. **Check Network Bans:**
-
- Navigate to your project's [Database Settings](/dashboard/project/_/database/settings) page.
- Review any listed IP addresses that are blocked. Remove any entries that correspond to your current connection and then try the CLI action again.
2. **Use the old Password-Based authentication flow instead:**
-
- Provide your database password directly through an environment variable when running the CLI command.
```bash
@@ -26,7 +24,6 @@ This typically indicates an authentication failure where the database connection
```
3. **Skip the Pooler and connect directly to the database with the Supabase CLI (Requires IPv6):**
-
- If your network supports IPv6, you can use the beta CLI version with the `--skip-pooler` flag to bypass the connection pooler to avoid this particular issue.
```bash
diff --git a/apps/docs/docs/ref/csharp/v0/release-notes.mdx b/apps/docs/docs/ref/csharp/v0/release-notes.mdx
index 2ce380a99fc..df2d78c8fdf 100644
--- a/apps/docs/docs/ref/csharp/v0/release-notes.mdx
+++ b/apps/docs/docs/ref/csharp/v0/release-notes.mdx
@@ -265,7 +265,6 @@ Thanks [@wiverson](https://github.com/wiverson) for the work in this release!
## 0.9.0 - 2023-04-12
- Update dependency: gotrue-csharp@3.1.0
-
- [Minor] Implements PKCE auth flow. SignIn using a provider now returns an instance of `ProviderAuthState` rather
than a `string`.
diff --git a/apps/docs/features/docs/Reference.introduction.tsx b/apps/docs/features/docs/Reference.introduction.tsx
index f799668bfe3..5ccb90e47c3 100644
--- a/apps/docs/features/docs/Reference.introduction.tsx
+++ b/apps/docs/features/docs/Reference.introduction.tsx
@@ -10,13 +10,13 @@ import commonClientLibSections from '~/spec/common-client-libs-sections.json' wi
function hasIntro(sections: typeof commonClientLibSections, excludeName?: string) {
return Boolean(
sections[0]?.type === 'markdown' &&
- sections[0]?.slug === 'introduction' &&
- (!excludeName ||
- !(
- 'excludes' in sections[0] &&
- Array.isArray(sections[0].excludes) &&
- sections[0].excludes?.includes(excludeName)
- ))
+ sections[0]?.slug === 'introduction' &&
+ (!excludeName ||
+ !(
+ 'excludes' in sections[0] &&
+ Array.isArray(sections[0].excludes) &&
+ sections[0].excludes?.includes(excludeName)
+ ))
)
}
diff --git a/apps/docs/features/docs/Reference.ui.tsx b/apps/docs/features/docs/Reference.ui.tsx
index f9d13bef8a2..30721abeaab 100644
--- a/apps/docs/features/docs/Reference.ui.tsx
+++ b/apps/docs/features/docs/Reference.ui.tsx
@@ -200,7 +200,7 @@ function ParamOrTypeDetails({ paramOrType }: { paramOrType: object }) {
'description' in paramOrType
? (paramOrType.description as string)
: isFromTypespec(paramOrType)
- ? paramOrType.comment?.shortText ?? ''
+ ? (paramOrType.comment?.shortText ?? '')
: ''
const subContent =
diff --git a/apps/docs/layouts/MainSkeleton.tsx b/apps/docs/layouts/MainSkeleton.tsx
index a2f0bf178e8..6f899c66cfb 100644
--- a/apps/docs/layouts/MainSkeleton.tsx
+++ b/apps/docs/layouts/MainSkeleton.tsx
@@ -236,7 +236,7 @@ const MobileHeader = memo(function MobileHeader(props: MobileHeaderProps) {
{mobileMenuOpen
? 'Close'
: 'menuId' in props
- ? levelsData[props.menuId]?.name ?? levelsData['home'].name
+ ? (levelsData[props.menuId]?.name ?? levelsData['home'].name)
: props.menuName}
diff --git a/apps/learn/components/side-navigation-item.tsx b/apps/learn/components/side-navigation-item.tsx
index 619f4ae6bb1..a652774dd06 100644
--- a/apps/learn/components/side-navigation-item.tsx
+++ b/apps/learn/components/side-navigation-item.tsx
@@ -14,8 +14,7 @@ import { Badge, cn } from 'ui'
// 2. AnchorHTMLAttributes - for standard HTML anchor props (className, etc)
// We omit href from both since we compute it internally from item.href
interface NavigationItemProps
- extends Omit,
- Omit, 'href'> {
+ extends Omit, Omit, 'href'> {
item: SidebarNavItem
onClick?: (e: React.MouseEvent) => void
level?: number
diff --git a/apps/studio/components/grid/components/editor/DateTimeEditor.tsx b/apps/studio/components/grid/components/editor/DateTimeEditor.tsx
index 129cf6440be..445e55e1af7 100644
--- a/apps/studio/components/grid/components/editor/DateTimeEditor.tsx
+++ b/apps/studio/components/grid/components/editor/DateTimeEditor.tsx
@@ -18,8 +18,10 @@ import { TimestampInfo, timestampLocalFormatter } from 'ui-patterns'
import { Input } from 'ui-patterns/DataInputs/Input'
import { BlockKeys } from '../common/BlockKeys'
-interface BaseEditorProps
- extends RenderEditCellProps {
+interface BaseEditorProps extends RenderEditCellProps<
+ TRow,
+ TSummaryRow
+> {
type: 'date' | 'datetime' | 'datetimetz'
isNullable: boolean
}
diff --git a/apps/studio/components/grid/components/editor/JsonEditor.tsx b/apps/studio/components/grid/components/editor/JsonEditor.tsx
index 4922d306c7a..bc30143a74d 100644
--- a/apps/studio/components/grid/components/editor/JsonEditor.tsx
+++ b/apps/studio/components/grid/components/editor/JsonEditor.tsx
@@ -25,8 +25,10 @@ const verifyJSON = (value: string) => {
}
}
-interface JsonEditorProps
- extends RenderEditCellProps {
+interface JsonEditorProps extends RenderEditCellProps<
+ TRow,
+ TSummaryRow
+> {
isEditable: boolean
onExpandEditor: (column: string, row: TRow) => void
}
diff --git a/apps/studio/components/grid/components/editor/SelectEditor.tsx b/apps/studio/components/grid/components/editor/SelectEditor.tsx
index f2922a4e5c5..f217efa7383 100644
--- a/apps/studio/components/grid/components/editor/SelectEditor.tsx
+++ b/apps/studio/components/grid/components/editor/SelectEditor.tsx
@@ -1,8 +1,10 @@
import type { RenderEditCellProps } from 'react-data-grid'
import { Select } from 'ui'
-interface SelectEditorProps
- extends RenderEditCellProps {
+interface SelectEditorProps extends RenderEditCellProps<
+ TRow,
+ TSummaryRow
+> {
isNullable?: boolean
options: { label: string; _value: string }[]
}
diff --git a/apps/studio/components/grid/components/editor/TimeEditor.tsx b/apps/studio/components/grid/components/editor/TimeEditor.tsx
index ca89fb895d8..a6e863d7d47 100644
--- a/apps/studio/components/grid/components/editor/TimeEditor.tsx
+++ b/apps/studio/components/grid/components/editor/TimeEditor.tsx
@@ -10,8 +10,10 @@ function autoFocusAndSelect(input: HTMLInputElement | null) {
input?.select()
}
-interface TimeEditorProps
- extends RenderEditCellProps {
+interface TimeEditorProps extends RenderEditCellProps<
+ TRow,
+ TSummaryRow
+> {
format: string
}
diff --git a/apps/studio/components/grid/utils/queueOperationUtils.ts b/apps/studio/components/grid/utils/queueOperationUtils.ts
index 02dc378e8cc..d9a0ffe401d 100644
--- a/apps/studio/components/grid/utils/queueOperationUtils.ts
+++ b/apps/studio/components/grid/utils/queueOperationUtils.ts
@@ -12,8 +12,10 @@ import {
QueuedOperationType,
} from '@/state/table-editor-operation-queue.types'
-interface EditCellKeyOperation
- extends Omit {
+interface EditCellKeyOperation extends Omit<
+ EditCellContentOperation,
+ 'payload' | 'id' | 'timestamp'
+> {
type: QueuedOperationType.EDIT_CELL_CONTENT
tableId: number
payload: {
diff --git a/apps/studio/components/interfaces/App/CommandMenu/StorageSearchResults.tsx b/apps/studio/components/interfaces/App/CommandMenu/StorageSearchResults.tsx
index e65f1d37d94..2e7e5a1d7e0 100644
--- a/apps/studio/components/interfaces/App/CommandMenu/StorageSearchResults.tsx
+++ b/apps/studio/components/interfaces/App/CommandMenu/StorageSearchResults.tsx
@@ -235,8 +235,8 @@ export function StorageSearchResults({ query }: StorageSearchResultsProps) {
const totalBucketsEstimate = useMemo(() => {
const fileBucketCount = fileBucketsEstimate ?? 0
- const analyticsBucketCount = isAnalyticsBucketsEnabled ? analyticsBuckets?.length ?? 0 : 0
- const vectorBucketCount = isVectorBucketsEnabled ? vectorBuckets?.length ?? 0 : 0
+ const analyticsBucketCount = isAnalyticsBucketsEnabled ? (analyticsBuckets?.length ?? 0) : 0
+ const vectorBucketCount = isVectorBucketsEnabled ? (vectorBuckets?.length ?? 0) : 0
return fileBucketCount + analyticsBucketCount + vectorBucketCount
}, [
diff --git a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx
index 74fda3915a0..a7672b64b28 100644
--- a/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx
+++ b/apps/studio/components/interfaces/App/FeaturePreview/FeaturePreviewModal.tsx
@@ -130,7 +130,7 @@ export const FeaturePreviewModal = () => {
>
+ — Supabase (@supabase){' '}
+
+ January 13, 2022
+
+
+
Thanks to your contributions and upvotes, Supabase UI has made it to the finals, and to celebrate we'd like to invite you all to hang out with us on Discord (at least whoever manages to stay up) to watch the Awards Ceremony on Thursday Jan 27th at 9am PT (Thursday 5pm GMT, Friday 1am SG).
diff --git a/apps/www/_blog/2022-01-20-supabase-beta-december-2021.mdx b/apps/www/_blog/2022-01-20-supabase-beta-december-2021.mdx
index 27e1f94c084..81ceb8e57f2 100644
--- a/apps/www/_blog/2022-01-20-supabase-beta-december-2021.mdx
+++ b/apps/www/_blog/2022-01-20-supabase-beta-december-2021.mdx
@@ -114,15 +114,18 @@ Divjoy announced their [Supabase Integration](https://divjoy.com/?database=supab
The table above uses PostgreSQL's built-in
- uuid functionality, which is
- available from version 14. For backwards compatibility you can use the uuid-ossp extension.
+ uuid functionality, which
+ is available from version 14. For backwards compatibility you can use the uuid-ossp extension.
create extension if not exists "uuid-ossp";
diff --git a/apps/www/_blog/2022-04-01-hackathon-bring-the-func.mdx b/apps/www/_blog/2022-04-01-hackathon-bring-the-func.mdx
index d20f1b00a5a..3df6234f7f0 100644
--- a/apps/www/_blog/2022-04-01-hackathon-bring-the-func.mdx
+++ b/apps/www/_blog/2022-04-01-hackathon-bring-the-func.mdx
@@ -40,10 +40,15 @@ Finally, we're delighted to be partnering with [the Future Forest Company](https
+ — Dherrbie (@Debbyiecodes){' '}
+
+ April 20, 2024
+
+
+
## Contributing to open source
diff --git a/apps/www/_blog/2024-12-04-supabase-cron.mdx b/apps/www/_blog/2024-12-04-supabase-cron.mdx
index d577acf6234..1c48baf94a6 100644
--- a/apps/www/_blog/2024-12-04-supabase-cron.mdx
+++ b/apps/www/_blog/2024-12-04-supabase-cron.mdx
@@ -121,7 +121,8 @@ Wondering why a Job failed? You can view the history of all Jobs and their logs
alt="Observe and debug Jobs"
src="/images/blog/launch-week-13/day-3-supabase-cron/history.jpg"
/>
-For a deeper dive, you can view Jobs in the [Logs Explorer](https://supabase.com/dashboard/project/_zvmkyvanngopzqaabmvx_/logs/pgcron-logs).
+For a deeper dive, you can view Jobs in the [Logs
+Explorer](https://supabase.com/dashboard/project/_zvmkyvanngopzqaabmvx_/logs/pgcron-logs).
### Try Supabase Cron today
diff --git a/apps/www/_blog/2025-02-26-pgrouting-postgres-graph-database.mdx b/apps/www/_blog/2025-02-26-pgrouting-postgres-graph-database.mdx
index 842aa5a2436..9af6d5e33ba 100644
--- a/apps/www/_blog/2025-02-26-pgrouting-postgres-graph-database.mdx
+++ b/apps/www/_blog/2025-02-26-pgrouting-postgres-graph-database.mdx
@@ -273,7 +273,6 @@ values
(1, 2, 'same_category', 5), -- "Intro to Graph Theory" and "Advanced Graph Algorithms" are in the same category
(2, 3, 'watched_by_same_users', 3), -- "Advanced Graph Algorithms" and "Graph Neural Networks" are often watched together
(4, 5, 'same_category', 5); -- "Beginner Python Tutorial
-
create table interactions (
user_id int references auth.users (id),
video_id int references videos (id),
diff --git a/apps/www/_blog/2025-05-08-event-triggers-wo-superuser.mdx b/apps/www/_blog/2025-05-08-event-triggers-wo-superuser.mdx
index b7c8d089f08..657c2697d6c 100644
--- a/apps/www/_blog/2025-05-08-event-triggers-wo-superuser.mdx
+++ b/apps/www/_blog/2025-05-08-event-triggers-wo-superuser.mdx
@@ -135,5 +135,7 @@ Finally, we want to give a special shout out to the [Zero Sync](https://zero.roc
---
[^1]: This is so the event trigger can be altered or dropped by end users.
+
[^2]: This is not true if you mark the event trigger function as `security definer`, then it will run with the privileges of the function owner. But this is not a usual practice on event triggers, as they usually want to preserve the context of the current user.
+
[^3]: These are configurable. You can read more about reserved roles [here](https://supabase.com/blog/roles-postgres-hooks).
diff --git a/apps/www/app/api-v2/ticket-og/route.tsx b/apps/www/app/api-v2/ticket-og/route.tsx
index 46b216f66f4..d3f62abbd6a 100644
--- a/apps/www/app/api-v2/ticket-og/route.tsx
+++ b/apps/www/app/api-v2/ticket-og/route.tsx
@@ -109,91 +109,90 @@ export async function GET(req: Request) {
const TICKET_BOTTOM_TEXT_FONT_SIZE = 20
const generatedTicketImage = new ImageResponse(
- (
- <>
+ <>
+
+ {/* Background */}
+
+
+ {/* LINEAR GRADIENT */}
+
+ {/* LEFT */}
+
- {/* Background */}
-
-
- {/* LINEAR GRADIENT */}
-
-
- {/* LEFT */}
-
` elements aren't g
- **For example, here's another nested list.**
But this time with a second paragraph.
-
- These list items won't have `
` tags
- Because they are only one line each
- **But in this second top-level list item, they will.**
This is especially annoying because of the spacing on this paragraph.
-
- As you can see here, because I've added a second line, this list item now has a `