NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #368 most downloaded on pub.dev
Flutter integration for Supabase. This package makes it simple for developers to build secure and scalable products.
Last release 5 days ago
30 Sep 2026
Release timing varies
gaps range from 8 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
1 version withdrawn
withdrawn after publishing
5 years old
154 releases · first in 2021
FIX: realtime ordering on double (#741).
One column per quarter.
BREAKING FEAT(realtime_client): Introduce type safe realtime methods (#725).
FIX: PKCE flow not emitting password recovery event (#744).
FIX: issue where .range() not respecting the offset given. (#722).
FIX(functions_client): use header for response parsing (#616).
Note: This release has breaking changes.
signInWithApple method and make generateRawNonce public (#650). (2f9fe41f)Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase - v1.11.11supabase_flutter - v1.10.24Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Packages with breaking changes:
Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase_flutter - v1.10.12Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase - v1.9.7Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase - v1.9.6Packages with breaking changes:
Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase - v1.9.5supabase_flutter - v1.10.5Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Update a dependency to the latest release.
Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
functions_client - v1.3.0gotrue - v1.8.0postgrest - v1.3.0realtime_client - v1.1.0storage_client - v1.4.0supabase - v1.9.0supabase_flutter - v1.10.0yet_another_json_isolate - v1.1.0Packages with breaking changes:
useSchema() method for making rest API calls on custom schema. (#525). (40a0f090)Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase - v1.9.9supabase_flutter - v1.10.11Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
functions_client - v1.3.1gotrue - v1.8.1postgrest - v1.3.1storage_client - v1.4.1supabase - v1.9.1supabase_flutter - v1.10.1FIX: Update http dependency constraints (#491).
Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase - v1.9.4supabase_flutter - v1.10.4// Initialize Supabase with AuthFlowType.pkce to enable PKCE flow for deep link related auth
await Supabase.initialize(
url: supabaseUrl,
anonKey: supabaseKey,
authFlowType: AuthFlowType.pkce,
);
FIX: Update http dependency constraints (#491).
FIX: reformat Provider type to be ordered alphabetically (#471).
signInWithOAuth with platformDefault option to open in app webview for iOS #431feat: Add signInWithApple method #437 `dart final AuthResponse response = await supabase.auth.signInWithApple(); `
fix: persist session to local storage on onAuthStateChanged event with a session #422
onAuthStateChanged event with a session #422fix: log errors from onAuthStateChange #416
feat: Added custom WebView for OAuth (LaunchMode.inAppWebView) #355
FEAT(postgrest,supabase): add useSchema() method for making rest API calls on custom schema. (#525).
fix: show web support on pub.dev #373
FIX: Update http dependency constraints (#491).
FIX: make Supabase client work in Dart Edge again (#675).
realtimeClientOptions to Supabase.initialize()realtimeClientOptions to SupabaseClientoptions parameter to rpcisolate parameter to SupabaseClientreturning parameter of .delete()onAuthStateChanged now emits the latest AuthStatecollection version to support wider range of Flutter SDK versionsFIX: Update http dependency constraints (#491).
Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase - v1.11.6supabase_flutter - v1.10.19authScreenLaunchMode to auth.signInWithOAuth() to change OAuth sign-in screen behavior #323await supabase.auth.signInWithOAuth(
Provider.goodle,
authScreenLaunchMode: LaunchMode.inAppWebView,
);
// Start the enrollment process for a new Multi-Factor Authentication (MFA) factor
final res = await client.mfa
.enroll(issuer: 'MyFriend', friendlyName: 'MyFriendName');
// Prepares a challenge used to verify that a user has access to a MFA factor.
final res = await client.mfa.challenge(factorId: factorId1);
// Verifies a code against a challenge.
final res = await client.mfa
.verify(factorId: factorId1, challengeId: challengeId, code: getTOTP());
Read more about MFA with Supabase hereadmin.listUsers()auth.admin.listUsers(page: 2, perPage: 10);
createSignedUrl(), getPublicUrl(), and .download() to transform images on the flyfinal signedUrl = await storage.from(newBucketName).createSignedUrl(uploadPath, 2000,
transform: TransformOptions(
width: 100,
height: 100,
));
final publicUrl = storage.from(bucket).getPublicUrl(path,
transform: TransformOptions(width: 200, height: 300));
final file = await storage.from(newBucketName).download(uploadPath,
transform: TransformOptions(
width: 200,
height: 200,
));
Packages with breaking changes:
Packages with breaking changes:
Packages with other changes:
Packages with dependency updates only:
Packages listed below depend on other packages in this workspace that have had changes. Their versions have been incremented to bump the minimum dependency versions of the packages they depend upon in this project.
supabase - v1.11.3supabase_flutter - v1.10.16FIX(realtime_client,supabase): pass apikey as the initial access token for realtime client (#596).
FEAT: add logLevel parameter to RealtimeClientOptions (#592).
// The following will initialize Supabase that will retry failed uploads up to 25 times,
// which is about 10 minutes of retrying.
await Supabase.initialize(
supabaseUrl,
supabaseAnonKey,
storageRetryAttempts: 25,
);
FIX: Format the files to adjust to Flutter 3.10.1 (#475).
onAuthStateChangesupabase.onAuthStateChange.listen((data) {
// handle auth state change here
}, onError: (error) {
// handle error here
});
.select()// data is `List<Map<String, dynamic>>`
final data = await supabase.from('users').select<List<Map<String, dynamic>>>();
// data is `Map<String, dynamic>`
final data = await supabase.from('users').select<Map<String, dynamic>>().eq('id', myId).single();
fix: update sample code on readme.md
BREAKING: update supabase to v1.0.0
.stream() now takes a named parameter primaryKey instead of a positional argument.supabase.from('my_table').stream(primaryKey: ['id']);
.stream() has 5 additional filters: neq, gt, gte, lt, lte (148auth.signUp() now uses named parameters // Before
final res = await supabase.auth.signUp('example@email.com', 'password');
// After
final res = await supabase.auth.signUp(email: 'example@email.com', password: 'password');
auth.signIn() is split into different methods // Magic link sign-in
// Before
final res = await supabase.auth.signIn(email: 'example@email.com');
// After
final res = await supabase.auth.signInWithOtp(email: 'example@email.com');
// Email and password sign-in
// Before
final res = await supabase.auth.signIn(email: 'example@email.com', password: 'password');
// After
final res = await supabase.auth.signInWithPassword(email: 'example@email.com', password: 'password');
auth.onAuthStateChange is now a stream // Before
supabase.auth.onAuthStateChange((event, session) {
// ...
});
// After
final subscription = supabase.auth.onAuthStateChange.listen((data) {
final AuthChangeEvent event = data.event;
final Session? session = data.session;
});
// Don't forget to cancel the subscription when you're done
subscription.cancel();
auth.update() is renamed to auth.updateUser() // Before
final res = await supabase.auth.update(
UserAttributes(
email: 'new@email.com',
data: {
'username': 'new_username',
},
),
);
// After
final res = await supabase.auth.updateUser(
UserAttributes(
email: 'new@email.com',
data: {
'username': 'new_username',
},
),
);
SupabaseAuth.instance.onAuthChange() is now removed and supabase.auth.onAuthStateChange() should be used insteadfix: update supabase to v1.0.0-dev.9
PostgrestClient with proper auth headers when calling .rpc() (#143)SupabaseClient (#144)BREAKING: update supabase to v1.0.0-dev.7
returning behavior in postgrest v1.0.0-dev.4chore: update supabase to v1.0.0-dev.6
.stream() typing issue #138deprecated: .stream() no longer needs .execute()
.stream() no longer needs .execute()eq filter on .stream() is a separate method now// before
Supabase.instance.client.from('my_table:title=eq.Supabase')
.stream(['id'])
.order('created_at')
.limit(10)
.execute()
.listen((payload) {
// do something with payload here
});
// now
Supabase.instance.client.from('my_table')
.stream(['id'])
.eq('title', 'Supabase')
.order('created_at')
.limit(10)
.listen((payload) {
// do something with payload here
});
final channel = Supabase.instance.client.channel('can_be_any_string');
// listen to insert events on public.messages table
channel.on(
RealtimeListenTypes.postgresChanges,
ChannelFilter(
event: 'INSERT',
schema: 'public',
table: 'messages',
), (payload, [ref]) {
print('database insert payload: $payload');
});
// listen to `location` broadcast events
channel.on(
RealtimeListenTypes.broadcast,
ChannelFilter(
event: 'location',
), (payload, [ref]) {
print(payload);
});
// send `location` broadcast events
channel.send(
type: RealtimeListenTypes.broadcast,
event: 'location',
payload: {'lat': 1.3521, 'lng': 103.8198},
);
// listen to presence states
channel.on(RealtimeListenTypes.presence, ChannelFilter(event: 'sync'),
(payload, [ref]) {
print(payload);
print(channel.presenceState());
});
// subscribe to the above changes
channel.subscribe((status) async {
if (status == 'SUBSCRIBED') {
// if subscribed successfully, send presence event
final status = await channel.track({'user_id': myUserId});
}
});
chore: add example app in example directory
WidgetsBinding warningBREAKING: update supabase package v1.0.0-dev.4
BREAKING: update supabase package v1.0.0-dev.3
- feat: custom http client
feat: add Mac OS and Windows support for deep links
// Before
await Supabase.initialize(
url: 'SUPABASE_URL',
anonKey: 'SUPABASE_ANON_KEY',
);
...
// Class extending `SupabaseAuthState` or `AuthRequiredState` was necessary
// to persist auth state
class AuthState<T extends StatefulWidget> extends SupabaseAuthState<T> {
...
}
// After
// Initializing Supabase is all you need to do to persist auth state
// Deep links will also be automatically handled when you initialize Supabase.
await Supabase.initialize(
url: 'SUPABASE_URL',
anonKey: 'SUPABASE_ANON_KEY',
);
...
// You can get the initial session of the user with `SupabaseAuth.instance.initialSession`
try {
final initialSession = await SupabaseAuth.instance.initialSession;
} catch(error) {
// Handle errors in session initial recovery here
}
// You should now use `onAuthStateChanged` as the
Supabase.instance.client.auth.onAuthStateChange((event, session) {
// handle sign-in/signups here
});
Your coding agent can read these notes before it upgrades. Set up the MCP server →