- Finally dropped support for old EdgeHTML engine.
- Dropped support for browsers that don't support
cursor.request
. - Removed separate async iterators build. It's now one build with async iterator support.
- No longer committing
build
to GitHub. - Renamed files in dist.
- Added conditional exports.
- iife build is now a umd.
Some TypeScript definitions changed so write-methods are missing from 'readonly' transactions. This might be backwards-incompatible with code that performs a lot of type wrangling.
I moved some files around, so I bumped the major version for safety.
// Old 3.x way
import { openDb } from 'idb';
openDb('db-name', 1, (upgradeDb) => {
console.log(upgradeDb.oldVersion);
console.log(upgradeDb.transaction);
});
// New 4.x way
import { openDB } from 'idb';
openDB('db-name', 1, {
upgrade(db, oldVersion, newVersion, transaction) {
console.log(oldVersion);
console.log(transaction);
},
});
openDb
anddeleteDb
were renamedopenDB
anddeleteDB
to be more consistent with DOM naming.- The signature of
openDB
changed. The third parameter used to be the upgrade callback, it's now an option object which can include anupgrade
method. - There's no
UpgradeDB
anymore. You get the same databaseopenDB
resolves with. Versions numbers and the upgrade transaction are included as additional parameters.
The library turns all IDBRequest
objects into promises, but it doesn't know in advance which methods may return promises.
As a result, methods such as store.put
may throw instead of returning a promise.
If you're using async functions, there isn't a difference.
iterateCursor
anditerateKeyCursor
have been removed. These existed to work around browsers microtask issues which have since been fixed. Async iterators provide similar functionality.- All pseudo-private properties (those beginning with an underscore) are gone. Use
unwrap()
to get access to bare IDB objects. transaction.complete
was renamed totransaction.done
to be shorter and more consistent with the DOM.getAll
is no longer polyfilled on indexes and stores.- The library no longer officially supports IE11.
- The library now uses proxies, so objects will include everything from their plain-IDB equivalents.
- TypeScript support has massively improved, including the ability to provide types for your database.
- Optional support for async iterators, which makes handling cursors much easier.
- Database objects now have shortcuts for single actions (like
get
,put
,add
,getAll
etc etc). - For transactions that cover a single store
transaction.store
is a reference to that store. openDB
lets you add callbacks for when your database is blocking another connection, or when you're blocked by another connection.
The library became a module.
// Old 2.x way:
import idb from 'idb';
idb.open(…);
idb.delete(…);
// 3.x way:
import { openDb, deleteDb } from 'idb';
openDb(…);
deleteDb(…);