isar
Extremely fast, easy to use, and fully async NoSQL database for Flutter.
3.1.0
4.1K downloads/mo
#4138 most downloaded on pub.dev
isar/isar
What this package is like to depend on
Last release 3 years ago
no release in 18 months
Release timing varies
gaps range from 8 days to 5 months
Nearly every release is documented
notes for 21 of 23 stable releases
8 versions withdrawn
withdrawn after publishing
6 years old
59 releases · first in 2020
0 releases in the last 12 months
see the full history below
Release timeline
59 releases · Jun 2020 to Aug 2023Releases
latest 59-
4.0.0-dev.1421 Aug 2023 pre-releaseRelease notes
Open source →⚠️ ISAR V4 IS NOT READY FOR PRODUCTION USE ⚠️
This version does not support database migration yet and cannot open Isar v3 databases. The stable version will be released in a few weeks and will support migration from v3.
Breaking
Changed transactions API:
old new writeTxn()writeAsync()writeTxnSync()write()txn()readAsync()txnSync()read()- All operations are now synchronous by default and there are
Asyncmethods for asynchronous operations. - Ids now need to be called
idor annotated with@id - Ids can no longer be
nullable. There is a newcollection.autoIncrement()function to automatically generate ids. - Enums no longer need to be annotated with
@enumeratedinstead there is a new@enumValueannotation to specify the value property of an enum - Where clauses have been removed in favor of automatic index handling
- Isar links have been removed in favor of embedded objects
- Indexes have been simplified
- The Android minimum SDK version is now 23
Enhancements
- Web support is back!!! In-memory only for now (persistence will come soon)
- Encrypted databases
- String ids
- Fetching multiple properties simultaneously
- Partial and Bulk updates using
collection.update()andquery.updateAll() - SQLite storage engine support
- Support for
dynamic,List<dynamic>andMap<String, dynamic>properties - Required parameters for embedded objects
- Case insensitive sorting
- Much faster database initialization
- Improved performance for all operations
- Decoding objects no longer blocks the UI isolate
- New
@utcannotation to receiveDateTimeobjects in UTC - Support for freezed and other code generators
- All operations are now synchronous by default and there are
-
4.0.0-dev.1320 Aug 2023 pre-releaseNothing published for this version
-
4.0.0-dev.1120 Aug 2023 pre-releaseRelease notes
Open source →- Enabled encryption for Linux and Windows
- Fixed rare crash when deleting objects using a query
-
4.0.0-dev.1017 Aug 2023 pre-releaseRelease notes
Open source →- the Inspector is back 🎉
- number of isolates using Isar in parallel are unlimited now
- the schema is exposed again
- async operations are more performant
-
4.0.0-dev.906 Aug 2023 pre-release -
4.0.0-dev.704 Aug 2023 pre-release -
4.0.0-dev.602 Aug 2023 pre-releaseRelease notes
Open source →- more tests
- consistent offset and limit parameters for query methods
- small fixes
-
4.0.0-dev.501 Aug 2023 pre-releaseNothing published for this version
-
4.0.0-dev.431 Jul 2023 pre-releaseNothing published for this version
-
4.0.0-dev.327 Jul 2023 pre-releaseNothing published for this version
-
4.0.0-dev.226 Jul 2023 pre-releaseNothing published for this version
-
4.0.0-dev.124 Jul 2023 pre-releaseNothing published for this version
-
4.0.0-dev.023 Jul 2023 pre-releaseNothing published for this version
-
3.1.016 Apr 2023Release notes
Open source →Breaking
Sorry for this breaking change. Unfortunately, it was necessary to fix stability issues on Android.
directoryis now required forIsar.open()andIsar.openSync()
Fixes
- Fixed a crash that occasionally occurred when opening Isar
- Fixed a schema migration issue
- Fixed an issue where embedded class renaming didn't work correctly
Enhancements
- Many internal improvements
- Performance improvements
-
3.1.0+125 Apr 2023 -
3.0.6-dev.023 Nov 2022 pre-releaseNothing published for this version
-
3.0.517 Nov 2022Release notes
Open source →Enhancements
- Improved performance for all operations
- Added
maxSizeMiBoption toIsar.open()to specify the maximum size of the database file - Significantly reduced native library size
- With the help of the community, the docs have been translated into a range of languages
- Improved API docs
- Added integration tests for more platforms to ensure high-quality releases
- Support for unicode paths on Windows
Fixes
- Fixed crash while opening Isar
- Fixed crash on older Android devices
- Fixed a native port that was not closed correctly in some cases
- Added swift version to podspec
- Fixed crash on Windows
- Fixed "IndexNotFound" error
-
3.0.414 Nov 2022 withdrawn -
3.0.313 Nov 2022 withdrawn -
3.0.203 Oct 2022Release notes
Open source →Enhancements
- The Inspector now supports creating objects and importing JSON
- Added Inspector check to make sure Chrome is used
Fixes
- Added support for the latest analyzer
- Fixed native ports that were not closed correctly in some cases
- Added support for Ubuntu 18.04 and older
- Fixed issue with aborting transactions
- Fixed crash when invalid JSON was provided to
importJsonRaw() - Added missing
exportJsonSync()andexportJsonRawSync() - Fixed issue where secondary instance could not be selected in the Inspector
-
3.0.123 Sep 2022Release notes
Open source →Enhancements
- Support for arm64 iOS Simulators
Fixes
- Fixed issue where
.anyOf(),.allOf(), and.oneOf()could not be negated - Fixed too low min-iOS version. The minimum supported is 11.0
- Fixed error during macOS App Store build
-
3.0.018 Sep 2022Release notes
Open source →This release has been a lot of work! Thanks to everyone who contributed and joined the countless discussions. You are really awesome!
Special thanks to @Jtplouffe and @Peyman for their incredible work.
Web support
This version does not support the web target yet. It will be back in the next version. Please continue using 2.5.0 if you need web support.
Enhancements
- Completely new Isar inspector that does not need to be installed anymore
- Extreme performance improvements for almost all operations (up to 50%)
- Support for embedded objects using
@embedded - Support for enums using
@enumerated - Vastly improved Isar binary format space efficiency resulting in about 20% smaller databases
- Added
id,byte,shortandfloattypedefs IsarLinksnow support allSetmethods based on the IsarIdof objects- Added
downloadoption toIsar.initializeIsarCore()to download binaries automatically - Added
replaceoption for indexes - Added verification for correct Isar binary version
- Added
collection.getSize()andcollection.getSizeSync() - Added
query.anyOf()andquery.allOf()query modifiers - Support for much more complex composite index queries
- Support for logical XOR and the
.oneOf()query modifier - Made providing a path optional
- The default Isar name is now
defaultand stored indir/name.isaranddir/name.isar.lock - On non-web platforms,
IsarLinkandIsarLinkswill load automatically .putSync(),.putAllSync()etc. will now save links recursively by default- Added
isar.getSize()andisar.getSizeSync() - Added
linksLengthEqualTo(),linksIsEmpty(),linksIsNotEmpty(),linksLengthGreaterThan(),linksLengthLessThan(),linksLengthBetween()andlinkIsNull()filters - Added
listLengthEqualTo(),listIsEmpty(),listIsNotEmpty(),listLengthGreaterThan(),listLengthLessThan(),listLengthBetween()filters - Added
isNotNull()filters - Added
compactOnLaunchconditions toIsar.open()for automatic database compaction - Added
isar.copyToFile()which copies a compacted version of the database to a path - Added check to verify that linked collections schemas are provided for opening an instance
- Apply default values from constructor during deserialization
- Added
isar.verify()andcol.verify()methods for checking database integrity in unit tests - Added missing float and double queries and an
epsilonparameter
Breaking changes
- Removed
TypeConvertersupport in favor of@embeddedand@enumerated - Removed
@Id()and@Size32()annotations in favor of theIdandshorttypes - Changed the
schemasparameter from named to positional - The maximum size of objects is now 16MB
- Removed
replaceOnConflictandsaveLinksparameter fromcollection.put()andcollection.putAll() - Removed
isarparameter fromIsar.txn(),Isar.writeTxn(),Isar.txnSync()andIsar.writeTxnSync() - Removed
query.repeat() - Removed
query.sortById()andquery.distinctById() - Fixed
.or()instead of.and()being used implicitly when combining filters - Renamed multi-entry where clauses from
.yourListAnyEqualTo()to.yourListElementEqualTo()to avoid confusion - Isar will no longer create the provided directory. Make sure it exists before opening an Isar Instance.
- Changed the default index type for all
Lists toIndexType.hash - Renamed
isar.getCollection()toisar.collection() - It is no longer allowed to extend or implement another collection
- Unsupported properties will no longer be ignored by default
- Renamed the
initialReturnparameter tofireImmediately - Renamed
Isar.initializeLibraries()toIsar.initializeIsarCore()
Fixes
There are too many fixes to list them all.
- A lot of link fixes and a slight behavior change to make them super reliable
- Fixed missing symbols on older Android phones
- Fixed composite queries
- Fixed various generator issues
- Fixed error retrieving the id property in a query
- Fixed missing symbols on 32-bit Android 5 & 6 devices
- Fixed inconsistent
nullhandling in json export - Fixed default directory issue on Android
- Fixed different where clauses returning duplicate results
- Fixed hash index issue where multiple list values resulted in the same hash
- Fixed edge case where creating a new index failed
-
3.0.0-dev.1517 Sep 2022 pre-releaseNothing published for this version
-
3.0.0-dev.1407 Sep 2022 pre-releaseNothing published for this version
-
3.0.0-dev.1328 Aug 2022 pre-releaseNothing published for this version
-
3.0.0-dev.1224 Aug 2022 pre-releaseNothing published for this version
-
3.0.0-dev.1124 Aug 2022 pre-release withdrawnNothing published for this version
-
3.0.0-dev.1022 Aug 2022 pre-releaseNothing published for this version
-
3.0.0-dev.922 Aug 2022 pre-release withdrawnNothing published for this version
-
3.0.0-dev.816 Jul 2022 pre-releaseNothing published for this version
-
3.0.0-dev.710 Jul 2022 pre-releaseNothing published for this version
-
3.0.0-dev.610 Jul 2022 pre-releaseNothing published for this version
-
3.0.0-dev.526 Jun 2022 pre-releaseNothing published for this version
-
3.0.0-dev.425 Jun 2022 pre-release withdrawnNothing published for this version
-
3.0.0-dev.325 Jun 2022 pre-release withdrawnNothing published for this version
-
3.0.0-dev.224 Jun 2022 pre-releaseNothing published for this version
-
3.0.0-dev.118 Jun 2022 pre-releaseNothing published for this version
-
3.0.0-dev.015 May 2022 pre-releaseNothing published for this version
-
2.5.002 May 2022Release notes
Open source →Enhancements
- Support for Android x86 (32 bit emulator) and macOS arm64 (Apple Silicon)
- Greatly improved test coverage for sync methods
col.clear()now resets the auto increment counter to0- Significantly reduced Isar Core binary size (about 1.4MB -> 800KB)
Minor Breaking
- Changed
initializeLibraries(Map<String, String> libraries)toinitializeLibraries(Map<IsarAbi, String> libraries) - Changed min Dart SDK to
2.16.0
Fixes
- Fixed issue with
IsarLink.saveSync() - Fixed
idqueries - Fixed error thrown by
BroadcastChannelin Firefox - Fixed Isar Inspector connection issue
-
2.4.024 Apr 2022Release notes
Open source →Enhancements
- Support for querying links
- Support for filtering and sorting links
- Added methods to update and count links without loading them
- Added
isLoadedproperty to links - Added methods to count the number of objects in a collection
- Big internal improvements
Minor Breaking
- There are now different kinds of where clauses for dynamic queries
isar.getCollection()no longer requires the name of the collectionIsar.instanceNamesnow returns aSetinstead of aList
Fixes
- Fixed iOS crash that frequently happened on older devices
- Fixed 32bit issue on Android
- Fixed link issues
- Fixed missing
BroadcastChannelAPI for older Safari versions
-
2.2.118 Feb 2022Release notes
Open source →Enhancements
- Reduced Isar web code size by 50%
- Made
directoryparameter ofIsar.open()optional for web - Made
nameparameter ofIsar.getInstance()optional - Added
Isar.defaultNameconstant - Enabled
TypeConverters with supertypes - Added message if
TypeConverternullability doesn't match - Added more tests
Fixes
- Fixed issue with date queries
- Fixed
FilterGroup.notconstructor (thanks for the PR @jtzell)
-
2.2.014 Feb 2022 withdrawnRelease notes
Open source →Isar now has full web support 🎉. No changes to your code required, just run it.
Web passes all unit tests but is still considered beta for now.
Minor Breaking
- Added
saveLinksparameter to.put()and.putAll()which defaults tofalse - Changed default
overrideChangesparameter oflinks.load()totrueto avoid unintended behavior
Enhancements
- Full web support!
- Improved write performance
- Added
deleteFromDiskoption toisar.close() - Added
.reset()and.resetSync()methods toIsarLinkandIsarLinks - Improved
links.save()performance - Added many tests
Fixed
- Fixed value of
nulldates to beDateTime.fromMillisecondsSinceEpoch(0) - Fixed problem with migration
- Fixed incorrect list values for new properties (
[]instead ofnull) - Improved handling of link edge-cases
- Added
-
2.2.0+114 Feb 2022Nothing published for this version
-
2.1.401 Feb 2022Release notes
Open source →- Removed
pathdependency - Fixed incorrect return value of
deleteByIndex() - Fixed wrong auto increment ids in some cases (thanks @robban112)
- Fixed an issue with
Isar.close()(thanks @msxenon) - Fixed
$escaping in generated code (thanks @jtzell) - Fixed broken link in pub.dev example page
- Removed
-
2.1.029 Jan 2022Release notes
Open source →isar_connectis now integrated intoisarEnhancements
- Added check for outdated generated files
- Added check for changed schema across isolates
- Added
Isar.openSync() - Added
col.importJsonRawSync(),col.importJsonSync(),query.exportJsonRawSync(),query.exportJsonSync() - Improved performance for queries
- Improved handling of ffi memory
- More tests
Fixed
- Fixed issue where imported json required existing ids
- Fixed issue with transaction handling (thanks @Peng-Qian for the awesome help)
- Fixed issue with
@Ignoreannotation not always working - Fixed issue with
getByIndex()not returning correct object id (thanks @jtzell)
-
2.0.021 Jan 2022Release notes
Open source →Breaking
- The id for non-final objects is now assigned automatically after
.put()and.putSync() doubleandList<double>indexes can no longer be at the beginning of a composite indexList<double>indexes can no longer be hashed.greaterThan(),.lessThan()and.between()filters and are now excluding fordoublevalues (>=->>)- Changed the default index type for lists to
IndexType.value IsarLinkandIsarLinkswill no longer be initialized by Isar and must not benullableorlate.- Dart
2.14or higher is required
Enhancements
- Added API docs for all public methods
- Added
isar.clear(),isar.clearSync(),col.clear()andcol.clearSync() - Added
col.filter()as shortcut forcol.where().filter() - Added
includeparameter to.greaterThan()and.lessThan()filters and where clauses - Added
includeLowerandincludeUpperparameters to.between()filters and where clauses - Added
Isar.autoIncrementto allow non-nullable auto-incrementing ids Isar.close()now returns whether the last instance was closed- List values in composite indexes are now of type
IndexType.hashautomatically - Allowed multiple indexes on the same property
- Removed exported packages from API docs
- Improved generated code
- Improved Isar Core error messages
- Minor performance improvements
- Automatic XCode configuration
- Updated analyzer to
3.0.0 - More tests
Fixed
IsarLinkandIsarLinkscan now be final- Fixed multi-entry index queries returning items multiple times in some cases
- Fixed
.anyLessThan()and.anyGreaterThan()issues - Fixed issues with backlinks
- Fixed issue where query only returned the first
99999results - Fixed issue with id where clauses
- Fixed default index type for lists and bytes
- Fixed issue where renaming indexes was not possible
- Fixed issue where wrong index name was used for
.getByX()and.deleteByX() - Fixed issue where composite indexes did not allow non-hashed Strings as last value
- Fixed issue where
@Ignore()fields were not ignored
- The id for non-final objects is now assigned automatically after
-
2.0.0-dev.114 Jan 2022 pre-releaseNothing published for this version
-
2.0.0-dev.014 Jan 2022 pre-releaseNothing published for this version
-
1.0.505 Jan 2022 -
1.0.031 Dec 2021Release notes
Open source →Switched from liblmdb to libmdbx for better performance, more stability and many internal improvements.
Breaking
The internal database format has been changed to improve performance. Old databases do not work anymore!
Fixes
- Fix issue with links being removed after object update
- Fix String index problems
Enhancements
- Support
greaterThan,lessThanandbetweenqueries for String values - Support for inheritance (enabled by default)
- Support for
finalproperties and getters - Support for
freezedand other code generators - Support getting / deleting objects by a key
col.deleteByName('Anne') - Support for list indexes (hash an element based)
- Generator now creates individual files instead of one big file
- Allow specifying the collection accessor name
- Unsupported properties are now ignored automatically
- Returns the assigned ids after
.put()operations (objects are no longer mutated) - Introduces
replaceOnConflictoption for.put()(instead of specifying it for index) - many more...
Internal
- Improve generated code
- Many new unit tests
-
1.0.0+101 Jan 2022 -
0.4.011 Apr 2021Release notes
Open source →Breaking
- Remove
.where...In()and...In()extension methods - Split
.watch(lazy: bool)into.watch()and.watchLazy() - Remove
includeoption for filters
Fixes
- Generate id for JSON imports that don't have an id
- Enable
sortByandthenBygeneration
Enhancements
- Add
.optional()and.repeat()query modifiers - Support property queries
- Support query aggregation
- Support dynamic queries (for custom query languages)
- Support multi package configuration with
@ExternalCollection() - Add
caseSensitiveoption to.distinctBy()
Internal
- Change iOS linking
- Improve generated code
- Set up integration tests and improve unit tests
- Use CORE/0.4.0
- Remove
-
0.2.026 Mar 2021 -
0.1.012 Mar 2021 -
0.0.407 Feb 2021 -
0.0.210 Jan 2021 -
0.0.110 Jan 2021 -
0.0.005 Jun 2020Nothing published for this version
-
0.0.0-placeholder31 Jul 2023 pre-release withdrawnNothing published for this version