Supabase SDK Capability Matrix
Updated 2026-10-25 · compliance.json
% of tracked features fully implemented in every core SDK (JavaScript, Flutter, Python, Swift) — a feature only counts if none of them are missing or partial.
% of features marked implemented in a core SDK that have a registered symbols list — real code evidence behind the "done" claim.
No features match your search.
Authentication
User sign-in flows, session management, MFA, passkeys, identity linking, and admin operations.
Client Initialization
Cross-cutting SupabaseClient configuration — third-party auth integration, custom HTTP client, pluggable session storage, schema selection, and observability.
| Feature | JavaScript | Flutter | Python | Swift | C# | Go | Kotlin |
|---|---|---|---|---|---|---|---|
| authentication_integration | |||||||
|
Provide an async token callback at construction time to use an external auth provider; the SDK disables its own auth client and injects the returned JWT into all downstream requests.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
|
The client listens for auth state change events and automatically propagates the current JWT to all sub-clients (database, realtime, storage, functions) so requests stay authenticated without manual intervention.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
OAuth Flow Type Selection
Choose between implicit and PKCE OAuth flows at construction time; PKCE is recommended for scenarios where the implicit flow is less secure.
|
✅ | ✅ | ✅ | ✅ | 🔶 | ⬜ | ✅ |
|
OAuth Redirect Detection Customization
Configure whether and how the client detects an incoming OAuth redirect; accepts a boolean or a custom predicate so apps using multiple OAuth providers can disambiguate callbacks.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
| session_management | |||||||
|
Pluggable Session Storage
Supply a custom storage backend at construction time to control where the user session is persisted; enables use of platform-native secure storage instead of the default.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Session Persistence Toggle
Disable automatic session persistence so the session exists only in memory for the lifetime of the client instance.
|
✅ | ✅ | ✅ | ✅ | 🔶 | ⬜ | ✅ |
| request_configuration | |||||||
|
Custom HTTP Client
Supply a custom HTTP client implementation at construction time; the SDK wraps it with automatic API key and authorization header injection and propagates it to all sub-clients.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ⬜ |
|
Global Request Headers
Attach extra HTTP headers to every request made by all sub-clients at construction time.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| observability | |||||||
|
Distributed Trace Context Propagation
Inject standard trace context headers into outgoing requests so server-side spans can be correlated with client-side traces in a distributed tracing system.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ✅ | ⬜ |
|
Supply a logger at construction time to receive the SDK's log emissions, such as request outcomes, retry decisions and background-work lifecycle events. The SDK is silent by default and never logs credentials, tokens or payloads.
|
🔶 | ✅ | ⬜ | ⬜ | ⬜ | ✅ | ⬜ |
Database (PostgREST)
Query builder over PostgREST — select, insert, update, delete, RPC, filters, and modifiers.
| Feature | JavaScript | Flutter | Python | Swift | C# | Go | Kotlin |
|---|---|---|---|---|---|---|---|
| mutate | |||||||
|
Insert or upsert multiple rows with different field sets in one request, without requiring callers to fill every omitted field explicitly.
|
✅ | ✅ | ✅ | ⬜ | ⬜ | ⬜ | ⬜ |
|
Request the number of rows affected by an insert, update, upsert, or delete operation.
|
✅ | ✅ | ✅ | ⬜ | ⬜ | ⬜ | ⬜ |
|
Delete Rows
Delete rows from a table or view that match a filter.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Insert one or more rows into a table or view.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Use database column defaults instead of null for fields omitted from bulk insert or upsert rows.
|
✅ | ✅ | ✅ | ⬜ | ⬜ | ⬜ | ⬜ |
|
Update Rows
Update rows in a table or view that match a filter.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Insert rows, or update them on conflict based on specified conflict columns.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| using_modifiers | |||||||
|
Select After Mutation
Chain a column selection onto an insert, update, upsert, or delete to return the affected rows in the response.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Dry Run
Execute the query against the database but discard any changes, returning what would have been affected.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
|
Explain Query Plan
Return the database query execution plan instead of the result data.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ |
|
Return as CSV
Return the query result as a CSV string instead of a structured object.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ |
|
Return as GeoJSON
Return the query result as a GeoJSON object.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
|
Limit Results
Limit the number of rows returned by the query.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Limit Affected Rows
Set the maximum number of rows that a mutation (update or delete) is allowed to affect.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ |
|
Return a single row if one exists, or null if no rows match. Errors if multiple rows are returned.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Order Results
Sort the query result by one or more columns.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Range
Return a slice of results by specifying a zero-based start and end offset.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Assert that the query returns exactly one row and unwrap it from the array. Errors if zero or multiple rows are returned.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Strip Null Fields
Omit null-valued properties from response objects using the nulls=stripped Accept header variant; requires PostgREST 11.2+.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Request Cancellation
Cancel an in-flight request at any point; merges cleanly with any client-level timeout.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Select columns from related tables within a single query using PostgREST's spread notation; supports inner joins, left joins, aliasing, and nested relationships.
|
✅ | ✅ | ✅ | ✅ | 🔶 | 🔶 | 🔶 |
| query | |||||||
|
Query Table or View
Scope a query to a specific table or view. The entry point for all table-level operations.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Retrieve the OpenAPI description PostgREST publishes for a schema, listing only the tables, views and functions the caller's role can access.
|
✅ | ➖ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ |
|
Call Function (RPC)
Invoke a database function via the PostgREST RPC interface.
|
✅ | ✅ | ✅ | ✅ | 🔶 | ✅ | ✅ |
|
Schema Selection
Target a non-default database schema for the query or function call.
|
✅ | ✅ | ✅ | ✅ | 🔶 | ✅ | ✅ |
|
Select Rows
Read rows from a table or view with column selection.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| using_filters | |||||||
|
Filter Contained By
For jsonb, array, and range columns — match only rows where every element in the column is contained by the given value.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Contains
For jsonb, array, and range columns — match only rows where the column contains every element in the given value.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Equal
Match only rows where a column equals a value.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Greater Than
Match only rows where a column is greater than a value.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Greater Than or Equal
Match only rows where a column is greater than or equal to a value.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Like (case-insensitive)
Match only rows where a column matches a pattern case-insensitively (SQL ILIKE).
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter ILike All Patterns
Match only rows where a column matches all of the given patterns case-insensitively.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Filter ILike Any Pattern
Match only rows where a column matches any of the given patterns case-insensitively.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Filter In
Match only rows where a column's value is in a given set.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Is
Match only rows where a column IS a value (null, true, or false).
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Is Distinct From
Match only rows where a column IS DISTINCT FROM a value (null-safe inequality).
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ✅ | ✅ |
|
Filter Like (case-sensitive)
Match only rows where a column matches a pattern case-sensitively (SQL LIKE).
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Like All Patterns
Match only rows where a column matches all of the given patterns case-sensitively.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Filter Like Any Pattern
Match only rows where a column matches any of the given patterns case-sensitively.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Filter Less Than
Match only rows where a column is less than a value.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Less Than or Equal
Match only rows where a column is less than or equal to a value.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Match Object
Match rows where each key/value pair in an object equals the corresponding column value. Shorthand for multiple equality filters.
|
✅ | ✅ | ✅ | ✅ | ✅ | ➖ | ✅ |
|
Filter Not Equal
Match only rows where a column does not equal a value.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Not
Negate a filter so only rows that do not satisfy it are returned.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Not In
Match only rows where a column's value is not in a given set.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Or
Match rows that satisfy at least one of multiple filters.
|
✅ | ✅ | ✅ | ✅ | ✅ | 🔶 | ✅ |
|
Filter Overlaps
For array and range columns — match only rows where the column and value share at least one element.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Range Adjacent
For range columns — match only rows where the column is mutually exclusive to the given range with no gap between them.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Range Greater Than
For range columns — match only rows where every element in the column is greater than any element in the given range.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Range Greater Than or Equal
For range columns — match only rows where every element in the column is contained in or greater than any element in the given range.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Range Less Than
For range columns — match only rows where every element in the column is less than any element in the given range.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Range Less Than or Equal
For range columns — match only rows where every element in the column is contained in or less than any element in the given range.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
|
Filter Raw
Apply a raw filter expression. Escape hatch for filter combinations not covered by the specific filter operations.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Filter Regex Match
Match only rows where a column matches a regex pattern case-sensitively.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Filter Regex Match (case-insensitive)
Match only rows where a column matches a regex pattern case-insensitively.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Filter Full-Text Search
For text and tsvector columns — match only rows where a column matches a full-text search query.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| configuration | |||||||
|
Automatic Retry with Backoff
Automatically retry idempotent requests on transient failures using exponential backoff; configurable per-client and overridable per-request.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ✅ | ✅ |
|
Attach an end-user access token to database requests - per derived or reconfigured client, or per single request - so they execute under that user's Row Level Security policies instead of the API key's default role.
|
🔶 | ✅ | 🔶 | ✅ | ⬜ | ✅ | ⬜ |
|
Request Timeout
Set a global request timeout in milliseconds at construction time; in-flight requests are cancelled once the deadline is reached.
|
✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| generated_types | |||||||
|
Typed Table Queries
Accept the database types generated by `supabase gen types` so that table and view queries are checked at compile time, with row, insert, and update types inferred per table and the result type narrowed to the selected columns and embedded relations.
|
⬜ | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ |
|
Typed Function Calls
Accept the database types generated by `supabase gen types` so that function calls are checked at compile time, with function names, argument types, and return types inferred from the schema, including overloaded and set-returning functions.
|
⬜ | ✅ | ⬜ | ⬜ | ⬜ | ⬜ | ⬜ |
Edge Functions
Invoke Supabase Edge Functions from the client with support for streaming, region routing, and flexible request configuration.
| Feature | JavaScript | Flutter | Python | Swift | C# | Go | Kotlin |
|---|---|---|---|---|---|---|---|
| invocation | |||||||
|
Invoke Function
Call a deployed Edge Function by name with an optional request body.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
HTTP Method Override
Invoke a function using a non-default HTTP method (GET, PUT, PATCH, DELETE) for RESTful Edge Function designs.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Receive a streaming response from a function; when the function returns text/event-stream the raw Response object is passed through for caller-controlled reading.
|
✅ | ✅ | ⬜ | ✅ | ✅ | ⬜ | ✅ |
| request_configuration | |||||||
|
Set Auth Token
Update the authorization token sent with all subsequent function invocations.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Region Selection
Route an invocation to a specific geographic deployment region set at client construction time or overridden per individual call.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Invocation Timeout
Cancel a function invocation after a specified timeout; composable with a caller-supplied cancellation signal.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Request Cancellation
Cancel an in-flight function invocation at any point before a response is received.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
Realtime
Websocket client and channel subscriptions: Postgres changes, broadcast, and presence.
| Feature | JavaScript | Flutter | Python | Swift | C# | Go | Kotlin |
|---|---|---|---|---|---|---|---|
| channel | |||||||
|
Broadcast via HTTP
Send a broadcast message to channel subscribers via the REST API instead of the websocket connection.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
|
Broadcast Message
Send a broadcast message to other subscribers of the channel over the websocket connection.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Subscribe
Register the channel with the server and start receiving events.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Unsubscribe
Leave the channel and stop receiving events.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
| client | |||||||
|
Create or Reuse Channel
Create a new channel or return an existing one for the given topic.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Connect
Open the websocket connection to the Realtime server.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Connection State
Return the current state of the websocket connection.
|
✅ | ✅ | 🔶 | ✅ | 🔶 | ⬜ | ✅ |
|
Disconnect
Close the websocket connection to the Realtime server.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Get Channels
Return all active channels for this client.
|
✅ | ✅ | ✅ | ✅ | 🔶 | ⬜ | ✅ |
|
Listen to Heartbeats
Register a callback that receives lifecycle events for internal heartbeat messages.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
|
Remove All Channels
Unsubscribe from and tear down all channels.
|
✅ | ✅ | ✅ | ✅ | ⬜ | ⬜ | ✅ |
|
Remove Channel
Unsubscribe from and tear down a single channel.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Set Auth Token
Update the access token used for channel subscription authorization and row-level security.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
| presence | |||||||
|
Get Presence State
Return the current presence state for all tracked clients on this channel.
|
✅ | ✅ | ✅ | ⬜ | 🔶 | ⬜ | ✅ |
|
Track Presence
Broadcast a presence payload so other subscribers can see this client as online.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Untrack Presence
Remove this client's presence state, making it appear offline to other subscribers.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
| subscriptions | |||||||
|
Subscribe to Broadcast
Listen for broadcast messages sent by other clients on this channel.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Subscribe to Postgres Changes
Listen for Postgres database change events (insert, update, delete) streamed over this channel.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Subscribe to Presence Events
Listen for presence events on this channel — when peers join, leave, or sync their presence state.
|
✅ | ✅ | ✅ | ✅ | 🔶 | ⬜ | ✅ |
|
Postgres Changes Row Filter
Apply a PostgREST-style filter expression (e.g. id=eq.200) to a Postgres changes subscription to receive events only for matching rows.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Apply more than one PostgREST-style filter expression to a single Postgres changes subscription, combined with AND, to receive events only for rows matching all of them.
|
✅ | ✅ | ✅ | ⬜ | ⬜ | ⬜ | ✅ |
|
Private Channel (RLS)
Mark a channel as private to enforce Row Level Security on Postgres change events and restrict broadcast and presence access to authorized users.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Broadcast Self-Delivery
Opt in to receiving broadcast messages that the current client sends on the same channel via the broadcast.self channel option.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Broadcast Acknowledgment
Require server confirmation of receipt for each broadcast message before the send resolves via the broadcast.ack channel option.
|
✅ | ✅ | 🔶 | ✅ | ✅ | ⬜ | ✅ |
|
Broadcast Message Replay
Replay historical broadcast messages from a point in time on a private channel via the broadcast.replay option (requires a since timestamp; supports an optional message limit).
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ⬜ |
|
Custom Presence Key
Set a stable identifier for the current client's presence entries so multiple connections from the same user share one logical key via the presence.key channel option.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
| configuration | |||||||
|
Custom WebSocket Transport
Inject a custom WebSocket constructor at client construction time for runtimes without a native global WebSocket, such as Node.js (<22), Cloudflare Workers, or Deno.
|
✅ | ✅ | ⬜ | ➖ | ✅ | ⬜ | ⬜ |
|
Configurable Reconnect Backoff
Provide a custom function mapping reconnect attempt count to delay milliseconds, replacing the default stepped backoff strategy.
|
✅ | ✅ | 🔶 | 🔶 | ✅ | ⬜ | ✅ |
|
Heartbeat Interval Configuration
Configure the WebSocket heartbeat interval in milliseconds; used to detect stale connections and trigger reconnection.
|
✅ | ✅ | ✅ | ✅ | ✅ | ⬜ | ✅ |
|
Dynamic Access Token Callback
Supply an async callback at construction time that returns the current JWT; called on connect and each heartbeat to keep WebSocket authorization fresh without manual intervention.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
|
Deferred Socket Disconnect
Delay WebSocket disconnection after all channels are removed instead of closing immediately, reducing reconnection overhead for short-lived channel patterns.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
|
Custom Logger
Provide a custom logging function and log level filter at construction time to route Realtime client diagnostics to an application logger.
|
✅ | ✅ | ➖ | ✅ | 🔶 | ⬜ | ✅ |
|
Binary Message Protocol
Select protocol version 2.0.0 for binary-serialized messages over the WebSocket connection.
|
✅ | ✅ | ⬜ | ✅ | ⬜ | ⬜ | ✅ |
Storage
Object storage — upload, download, list, and manage files in buckets; server-side image transformation; Iceberg analytics buckets.
