NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
pub.dev · #962 most downloaded on pub.dev
Flutter database for super-fast NoSQL ACID compliant object persistence.
Last release 6 days ago
30 Sep 2026
Ships fairly regularly
a new release about every 3 weeks
Nearly every release is documented
notes for 59 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
7 years old
158 releases · first in 2019
Nothing published for this version
Nothing published for this version
Support for integer and floating point lists: store 8-bit, 16-bit, 32-bit and 64-bit integer lists as well as 32-bit and 64-bit floating point lists (
Support for integer and floating point lists: store 8-bit, 16-bit, 32-bit and 64-bit integer lists as well as 32-bit and 64-bit floating point lists (called "vectors" by ObjectBox).
Use a typed_data class like Int16List, Uint16List or Float32List for large lists, it uses
less memory and CPU. Otherwise just use a Dart number list.
A simple example is a shape entity that stores a palette of RGB colors:
@Entity()
class Shape {
@Id()
int id = 0;
// An array of RGB color values that are used by this shape.
Int32List? palette;
}
This can also be useful to store vector embeddings produced by machine learning:
@Entity()
class ImageEmbedding {
@Id()
int id = 0;
// Link to the actual image, e.g. on Cloud storage
String? url;
// The coordinates computed for this image (vector embedding)
@Property(type: PropertyType.floatVector)
List<double>? coordinates;
}
Note: for queries currently only the isNull and notNull conditions are supported.
Changed PropertyType.char from a 8-bit signed integer to a 16-bit unsigned integer to match the
ObjectBox database type.
Fix put returning an incorrect error message in a rare case.
Require at least Dart SDK 2.18 (shipped with Flutter 3.3.0).
Let Store.awaitQueueCompletion actually wait on the async queue to become idle. It previously
behaved like Store.awaitQueueSubmitted.
Fix analysis event send failure breaking the code generator. #542
One column per quarter.
Nothing published for this version
Breaking changes to generated code: run flutter pub run build_runner build (or dart run build_runner build for Dart Native apps) after updating!
flutter pub upgrade objectbox --major-versions
(or for Dart Native apps dart pub upgrade objectbox --major-versions).flutter pub run build_runner build
(or dart run build_runner build for Dart Native apps) after updating!Box:
getAsync, getManyAsync, getAllAsync,putAsync and putManyAsync which support objects with relations,putAsync to putQueuedAwaitResult,putAndGetAsync and putAndGetManyAsync which return a copy of the given objects with new
IDs set.removeAsync, removeManyAsync and removeAllAsync.Query APIs: findAsync, findFirstAsync, findUniqueAsync, findIdsAsync and
removeAsync.ToOne and ToMany across isolates, e.g. when using
store.runInTransactionAsync. #340Store.attach (and Store.fromReference) do not longer accept a null model, which was not
supported anyhow.store.awaitAsyncSubmitted and awaitAsyncCompletion to
awaitQueueSubmitted and awaitQueueCompletion to avoid any mix-up with the new async methods.Store.runIsolated.Nothing published for this version
Nothing published for this version
Nothing published for this version
Flutter Linux apps do not longer fail to run due to the shared ObjectBox C library not loading. #504
pod repo update and pod update ObjectBox.objectbox-android-objectbrowser dependency.Nothing published for this version
Send anonymous data when running code generator to help us analyze its usage.
Nothing published for this version
Query: add .containsElement, deprecate .contains condition for List . #481
// BEFORE
final query = (box.query()..order(Person_.name)).build();
// AFTER
final query = box.query().order(Person_.name).build();
analyzer with major version 5. #487.containsElement, deprecate .contains condition for List<String>. #481StorageException which is a ObjectBoxException with an errorCode (a OBX_ERROR code).DbFullException instead of ObjectBoxException with message 10101 Could not put (error
code OBX_ERROR_DB_FULL).Query.findUnique() to throw NonUniqueResultException instead of
UniqueViolationException if there is more than one result.Nothing published for this version
Nothing published for this version
Revert to objectbox-android 3.2.0 to restore query functionality (#460). If you are using Admin, make sure to update your objectbox-android-objectbrow
objectbox-android-objectbrowser dependency.Nothing published for this version
Nothing published for this version
Store: add option to pass debug flags. #134
// coverage:ignore-file to generated objectbox.g.dart skipping this file from coverage test.analyzer to v4. #443Query streams using watch to highlight it is a single-subscription
stream that can only be listened to once. Also updated code examples to not imply the stream is
re-usable.Nothing published for this version
Require at least Dart SDK 2.14 (shipped with Flutter 2.5.0).
Nothing published for this version
Nothing published for this version
Add Store.runInTransactionAsync to run database operations asynchronously in the background (requires Flutter 2.8.0/Dart 2.15.0 or newer). #415
Store.runInTransactionAsync to run database operations asynchronously in the background
(requires Flutter 2.8.0/Dart 2.15.0 or newer). #415Store.runIsolated to runAsync, drop unused mode parameter, propagate errors and
handle premature isolate exit. #415lib subfolder on desktop OS (macOS,
Linux, Windows). This is where the install.sh script downloads it by default.
E.g. it is no longer necessary to install the library globally to run dart test or flutter test.Query.stream to collect results in a worker isolate, which should typically be faster. #420Nothing published for this version
Resolve "another store is still open" issue after Flutter hot restart (hot reload continues to work). #387
Store.isClosed(). #390objectbox.g.dart on how to re-generate (update) it.Nothing published for this version
Nothing published for this version
Support ObjectBox Admin for Android apps to browse the database. #148
Store.runIsolated to run database operations (asynchronous) in the background
(requires Flutter 2.8.0/Dart 2.15.0 or newer). It spawns an isolate, runs the given callback in that
isolate with its own Store and returns the result of the callback. This is similar to Flutters
compute, but with the callback having access to a Store. #384Store.attach to attach to a Store opened in a directory. This is an improved replacement for
Store.fromReference to share a Store across isolates. It is no longer required to pass a
Store reference and the underlying Store remains open until the last instance is closed. #376output_dir in pubspec.yaml. #341Nothing published for this version
Nothing published for this version
Support annotating a single property with @Unique(onConflict: ConflictStrategy.replace) to replace an existing object if a conflict occurs when doing
@Unique(onConflict: ConflictStrategy.replace) to
replace an existing object if a conflict occurs when doing a put. #297Nothing published for this version
Fix Flutter apps crashing on iOS 15 simulator. #313
ToMany.applyToDb() not working after putting object with empty ToMany.3.0.1.Nothing published for this version
Nothing published for this version
Nothing published for this version
Add Query.findUnique() to find a single object matching the query.
Query.findUnique() to find a single object matching the query.@Backlink() annotation when specifying a ToOne relation by field name.Query.find*() exception forwarding when a user-provided property converter throws.analyzer dependency version to include v2.x major version.Add support for Query.param() on linked entities.
Query.param() on linked entities.openStore() for apps that don't enable null-safety yet.New openStore() in the generated code to simplify creating a store instance, especially on Flutter (uses application documents directory as a default)
openStore() in the generated code to simplify creating a store instance, especially on Flutter (uses application
documents directory as a default).@Entity(realClass: ) new field and its docs.Query.param() to support reusable queries (changing condition values before execution).
See Reusing queries in docs.QueryRelationProperty to QueryRelationToOne and QueryRelationMany to QueryRelationToMany
to help users pick the right link function: link() vs linkMany().ToOne relation cycles.Store instances are not allowed).macOS sandbox database directory permissions (see notes in Flutter-specific "Getting Started" docs).ToMany showing duplicate items after adding them before reading the previous list.Nothing published for this version
New Box putAsync() returning a Future and putQueued() for asynchronous writes.
putAsync() returning a Future and putQueued() for asynchronous writes.close() manually if you want to free native resources sooner
than they would be by Dart's garbage collector, but it's not mandatory anymore.PropertyQuery.find() now returns the appropriate List<...> type without casts.inside() renamed to oneOf(), notIn() and notInList() renamed to notOneOf().stream and findStream() are replaced by QueryBuilder.watch(), i.e. box.query(...).watch().stream() to stream objects all the while the query is executed in the background.between() for integers and IDs.subscribe<EntityType>() renamed to watch().subscribeAll() replaced by a shared broadcast stream entityChanges.final fields and they're properly stored/loaded (must be constructor params).UniqueViolationException thrown when an object you're trying to put() would violate a Unique() index.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Remove deprecated APIs from internal plugin interfaces (deprecation notice printed during Flutter build).
DateTime fields deserialization regression (introduced in v0.13.0) - fields were read as nanosecond instead of millisecond timestamp.PropertyQuery.count() with distinct = true (the result was always like with caseSensitive = true).findFirst() doesn't change Query object's offset and limit anymore.caseSensitive default to true, previously conditions were case-insensitive by default.queriesCaseSensitiveDefault - allows changing the default value of caseSensitive in queries.
This includes string PropertyQuery when using distinct = true.Nothing published for this version
Remove deprecated arguments offset, limit, withEqual from Query methods.
offset, limit, withEqual from Query methods.Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix ToMany relation internal ID assignment when multiple relations are used.
ToMany relation internal ID assignment when multiple relations are used.ToMany relation code generation regardless of order of class definitions.Further performance optimizations in our FlatBuffers fork.
Nothing published for this version
Recognize DateTime entity fields, setting PropertyType.date (millisecond storage precision).
DateTime entity fields, setting PropertyType.date (millisecond storage precision).PropertyType.dateNano for DateTime fields (nanosecond storage precision).Store.reference getter and Store.fromReference() factory - enabling access to store from multiple isolates.Store.subscribe<EntityType>() and Store.subscribeAll() data change event streams.SyncClient event streams.Query conditions for lessOrEqual/greaterOrEqual on integer and double property types.@Id(assignable: true).Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →