Dexie.js is a wrapper library for indexedDB - the standard database in the browser. https://dexie.org.
Why Dexie.js?
IndexedDB is the portable database for all browser engines. Dexie.js makes it fun and easy to work with.
But also:
Dexie.js is widely used by 100,000 of web sites, apps and other projects and supports all browsers, Electron for Desktop apps, Capacitor for iOS / Android apps and of course pure PWAs.
Dexie.js works around bugs in the IndexedDB implementations, giving a more stable user experience.
Need sync? Dexie Cloud adds real-time sync, auth, and collaboration on top of Dexie.js — no backend needed.
Yes, it's that simple. Read the docs to get into the details.
Hello World (legacy script tags)
<!DOCTYPE html><html><head><scriptsrc="https://unpkg.com/dexie/dist/dexie.js"></script><script>//// Declare Database//const db = newDexie('FriendDatabase');
db.version(1).stores({
friends: '++id, age'
});
//// Play with it//
db.friends.add({ name: 'Alice', age: 21 }).then(() => {
return db.friends
.where('age')
.below(30)
.toArray();
}).then(youngFriends => {
alert (`My young friends: ${JSON.stringify(youngFriends)}`);
}).catch (e => {
alert(`Oops: ${e}`);
});
</script></head></html>
Hello World (React + Typescript)
Real-world apps are often built using components in various frameworks. Here's a version of Hello World written for React and Typescript. There are also links below this sample to more tutorials for different frameworks...
importReactfrom'react';
import { Dexie, typeEntityTable } from'dexie';
import { useLiveQuery } from'dexie-react-hooks';
// Typing for your entities (hint is to move this to its own module)exportinterfaceFriend {
id: number;
name: string;
age: number;
}
// Database declaration (move this to its own module also)exportconst db = newDexie('FriendDatabase') asDexie & {
friends: EntityTable<Friend, 'id'>;
};
db.version(1).stores({
friends: '++id, age',
});
// Component:exportfunctionMyDexieReactComponent() {
const youngFriends = useLiveQuery(() =>
db.friends
.where('age')
.below(30)
.toArray()
);
return (
<><h3>My young friends</h3><ul>
{youngFriends?.map((f) => (
<likey={f.id}>
Name: {f.name}, Age: {f.age}
</li>
))}
</ul><buttononClick={() => {
db.friends.add({ name: 'Alice', age: 21 });
}}
>
Add another friend
</button></>
);
}
Dexie has kick-ass performance. Its bulk methods take advantage of a lesser-known feature in IndexedDB that makes it possible to store stuff without listening to every onsuccess event. This speeds up the performance to a maximum.
Dexie Cloud is the easiest way to add sync, authentication, and real-time collaboration to your Dexie app. You keep writing frontend code with Dexie.js — Dexie Cloud handles the rest.
What you get:
🔄 Sync across devices — changes propagate in real time, no polling needed
🔐 Authentication — built-in user auth, no identity provider required
🛡️ Access control — share data between users with fine-grained permissions
📁 File & blob storage — store attachments alongside your structured data
✈️ Offline-first — works fully offline, syncs when back online
⚠️ These packages are legacy and no longer maintained.
If you find references to dexie-observable or dexie-syncable in tutorials, blog posts, or old code, be aware that these are deprecated sync solutions. They are not compatible with Dexie Cloud and should not be used in new projects.
For local-first sync, use dexie-cloud-addon instead. It is the modern, actively maintained solution for offline-first apps with real-time sync.
The 'idb' package is a small library that provides a more modern and promise-based API for IndexedDB. It is simpler and lighter than Dexie but does not offer as many advanced features such as observability and complex querying.
LocalForage is a library that provides a simple API for storing data in various storage backends, including IndexedDB, WebSQL, and localStorage. It is more versatile in terms of storage options but does not offer the same level of IndexedDB-specific features and optimizations as Dexie.
PouchDB is a JavaScript database that syncs with CouchDB. It provides a more comprehensive solution for offline-first applications with synchronization capabilities. However, it is heavier and more complex compared to Dexie, which is focused solely on IndexedDB.
The npm package dexie receives a total of 0 weekly downloads. As such, dexie popularity was classified as not popular.
We found that dexie demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.It has 2 open source maintainers collaborating on the project.
Malicious Firefox extensions mimic Phantom, Jupiter, and Bitget wallets to steal recovery phrases and private keys, with one fetching its payload remotely.