An open list of awesome Level modules and resources. Add yours!
Click to expand
Abstract class for a lexicographically sorted key-value database.
Modules that implement abstract-level
.
Universal abstract-level
database for Node.js and browsers. Main entry point for beginners.
An abstract-level
database backed by LevelDB.
An abstract-level
database for browsers, backed by IndexedDB.
In-memory abstract-level
database for Node.js and browsers.
// Example of a custom encoding
const { Level } = require('level')
const charwise = require('charwise')
const db = new Level('./db', {
keyEncoding: charwise
})
await db.put(['users', 2], 'example')
Protocol Buffers for Node.js. Compiled messages are valid as encodings.
Encode / decode with same encoded sort order as bytewise
.
Binary serialization which sorts bytewise for arbitrarily complex data structures. NB. Use charwise
if possible. Gives you almost everything bytewise
does but much faster.
Wraps lexicographic-integer
.
Node.js stream, Web Streams or pull-stream
implementations for reading and writing data from/to databases.
Read from an abstract-level
database using Node.js streams.
Read from an abstract-level
database using Web Streams.
A basic writable stream for abstract-level
databases, using Node.js core streams. Has not been updated for abstract-level
2 yet (to use the promise API).
Share an abstract-level
database over the network or other kind of stream. Supersedes multileveldown
and multilevel
.
Use a LevelDB database from multiple processes with seamless failover. Supersedes level-party
.
Modules for indexing, alternative forms of querying data, MapReduce models and other forms of data processing. This section has not been updated for abstract-level
yet.
Automatic secondary indexing for levelup
and subleveldown
.
Query levelup
with a MongoDB-like query API that returns streams.
A full MongoDB query language implementation with indexes for querying levelup
.
Yet another indexing plugin for levelup
. By providing only a low-level querying mechanism it gives you the power to build more complicated and optimized queries on top of it.
NB. Relies on bytewise
and level-sublevel
, both of which have caveats.
Create an inverted index for full-text search.
A MapReduce implementation on top of levelup
. Allows you to define a map reduce query that will run on top of your db. The map reduces are incremental, and you can query the results in real-time.
Like map-reduce
but simpler. Has a batch component that runs periodically, and a real-time component that fills in the gaps. Good for generating inverted indexes.
A generic pluggable query-engine system (that supports indexes) for levelup
.
Triggers for levelup
. Runs an async job when a key changes. All jobs will eventually run, even across restarts!
A light-weight full text search engine for levelup
(Port of TJ's reds redis search engine).
Extends map-reduce
and level-mapped-index
to provide easy to setup chained MapReduce. An example use case is to find the top 10 values after a reduce.
Query levelup
using a JavaScript property path array syntax with indexes.
Generic pluggable indexing system for levelup
.
High-level API for creating secondary indexes.
Create and query secondary indexes.
Inverted index built upon levelup
.
Remove the old indexes in the same batch as the new ones are inserted.
Range indexes for levelup
.
Index properties of items that live in a tree of materialized paths.
SQL queries for levelup
.
Store any string into levelup
, and get a collision free hash of that value that you can use in an index (or similar).
Another high-level API for creating secondary indexes, using level-auto-index
.
Generic indexer for levelup
. Only stores document keys for space efficiency.
Lightweight indexing and querying with the LLCJ query language.
Index and filter level-sublevel
databases and watch for future changes.
Relational foreign key associations (hasMany
, belongsTo
) for levelup
.
Tree indexer for levelup
.
Create indexes from a changes-feed. Provides a way to create a materialized view on top of an append-only log.
levelup
interface that uses an abstract-leveldown
store that writes to a changes-feed to store its state.
A wrapper for level
that keeps inserted items ordered.
Complete Node.js databases built with Level.
Lets you build streaming data pipelines that can be shared and replicated by others.
PouchDB allows you to store and query data offline and then sync with CouchDB when online. For Node, browser and mobile.
A Graph database built on top of levelup
with pattern-matching and join support.
Persistent database on top of levelup
for Node.js/NW.js with MongoDB-style queries, Mongoose-like models and a map/reduce system.
Event-driven database based on pouchdb
. Optimized for reactive programming with observables. Events and state is automatically shared between multiple browser tabs. Queries are defined by the mongoDB mango-standard.
A persistent full text search engine for browser and Node.js.
Modules that utilize a specific key/value scheme to provide a higher-level data structure.
Merkle DAG on top of LevelDB
Implementation of the modified merkle patricia tree as specified in Ethereum's yellow paper.
The array datatype inside levelup
.
Add a set
method to levelup
for saving objects in a tree-like structure.
Add a push
method to levelup
for saving objects using level-set
with auto-generated UUID.
Store and retrieve versioned data in levelup
.
The queue datatype inside levelup
.
Priority queuing for levelup
.
A queue backed by levelup
, durable and FIFO.
The TRIE data structure and search algorithm, on top of levelup
.
Store key values pairs with lat/lon coordinates, and query using a radius.
Turn levelup
into one huge object of arbitrary size! Efficiently and atomically update and read parts of it.
Store and retrieve places near a lat/long pair.
Stream in nearby places using the browser's geolocation and level-places
.
Geospatial indexing for GeoJSON in levelup
Map lists of data stored in levelup
to DOM elements.
Reactive templating for data stored in levelup
.
Streaming pagination for levelup
.
Calculate rolling averages in levelup
.
Calculate sums in levelup
and get live updates.
Keep a history of all the changes of a JSON document.
levelup
immutable history and database snapshotting based on ideas in datomic
.
A higher-level module for creating content models using levelup
and JSON Schema validation.
Persist streams in levelup
.
An alternative approach to storing scuttlebutts in levelup
.
Turns a template string (like ${forumId}/${postId}
) into parse/serialize streams that transform objects like {forumId, postId, text}
into key-value pairs and back.
Auto incrementing keys with "fields" and "records".
Forking graph of cascading namespaces.
A geospatial index for levelup
.
Indexed geography storage in levelup
.
Persistent user accounts.
A wrapper around accountdown
that provides a few additional features
LRU cache implemented as an abstract-leveldown
layer.
Add a ttl
(time-to-live) option to levelup
. NB. Suffers from race issues. See also tiny-level-ttl
.
Add a ttl
(time-to-live) option to levelup
, level-sublevel
or level-spaces
. Also respects level-lock
.
An in-memory cache that keeps up to date with its source.
Simple LRU cache.
A pass-through cache for arbitrary objects or binary data using LevelDB, expired by a TTL.
A caching module you can place in front of a levelup
database. It will cache a subset of the database in an in-memory LRU cache based on configuration. It has an optional synchronous API which will return from the cache only.
Use levelup
to cache remote data.
In-memory advisory read/write locks for levelup
keys.
Mutex read/write lock for levelup
.
Update keys without overlapping changes - makes it possible to implement an atomic incrementer, JSON merger, etc.
Adds atomic updates, increments, array pushes, set additions and user-defined atomic operations to levelup
.
Add (parallel) atomic operations like insert
, replace
, increment
and decrement
to levelup
.
Transaction layer for levelup
.
A durable job scheduler.
Job Queue in levelup
.
levelup
and disk storage for queued batch jobs.
Full implementation of the Node.js fs
module on top of levelup
.
level-filesystem
as drop-in fs
replacement for the browser, to be used with browserify
.
Node's fs
module with levelup
as backend.
level-fs
as drop-in fs
replacement for the browser, to be used with browserify
.
A streaming storage engine based on levelup
.
Streaming static file server based on levelup
.
Expose a level-store
over HTTP.
Vinyl adapter and blob store. Saves file contents in a content addressable blob store, file metadata in levelup
.
Store blobs in levelup
An abstract-blob-store
using LevelDB as the storage backend
A pull-blob-store
implementation backed by LevelDB.
Standalone LevelDB file server based on level-serve
, multilevel
and level-sublevel
.
Encode data with built-in or custom encodings. Used in abstract-level
.
Inject temporary and isolated abstract-leveldown
stores (leveldown
, level-js
, memdown
or custom) into your tests.
Compose a database factory from abstract-leveldown
and levelup
layers. TBD if still relevant after abstract-level
.
Check if a datum exists without reading its value.
Move a value to another key.
Capped collections.
Insert a key if and only if it doesn't already exist
Insert a batch of keys if and only if none of the keys already exist
Modify an existing key in levelup
. Uses level-lock
. See also level-create
and level-move
.
Read values of random levelup
keys.
Share batches and commit collectively
Batch all operations made on a levelup
instance. Compatible with subleveldown
.
Test function for levelup
testing, based on level-test
.
Get the first record in a range, using an iterator or stream. NB. Not compatible with latest levelup
.
Automatically combine levelup
with the right abstract-leveldown
store for your configuration.
Lazily open a leveldown compatible backend.
Generate diff changesets for javascript objects, decomposing diffs into a series of puts and delete operations. The format is compatible with levelup
batch operations. Useful to synchronize objects.
Change the defaults settings on a levelup
instance by returning a new levelup
instance that uses the same abstract-leveldown
but different options.
Useful meta information about levelup
methods.
A two-phase commit protocol.
Replicate from CouchDB to LevelDB.
Master-Slave replication for levelup
.
Uses merkle-trees to replicate data sets. Data must be sets and currently, deletes are not supported.
Master-master replication with levelup
. Implements scuttlebutt style handshake, syncs data, then replicates real time changes.
Master-master replication. Same goal as level-replicate
but different approach.
CLI, GUI and web interfaces for exploring data.
A complete REPL & CLI for managing LevelDB instances
A simple command-line utility for writing data to LevelDB via levelup
.
A simple command-line utility for reading LevelDB data via levelup
.
Command-line tool for quickly printing a list of keys in a LevelDB database.
A CLI REPL interface for LevelDB.
Super simple REPL for LevelDB. Supports filter globbing.
LevelDB GUI with an interactive console.
A LevelDB GUI. Includes simple data visualization tools.
Interact with LevelDB on the command line.
A terminal program to visualize LevelDB data. Early stages.
CLI tool to repair a LevelDB.
Edit a LevelDB from the command line.
LevelDB command line scanning utility
A LevelDB GUI based on atom-shell
(now called Electron).
Benchmark abstract-leveldown
and levelup
stores.
Run benchmarks on different level-forks and see how they compare.
Log all levelup
operations, including method calls.
Log all operations made on an abstract-leveldown
compliant store. For node and browsers.
Log levelup
operations and their duration.
Dumps all values and/or keys of a levelup
or level-sublevel
instance to the console.
Run benchmarks against levelup-compatible engines
Website for Level
General discussion, cross-repo efforts and common information for projects in the community
Demo app loading LevelDB into an Electron context.
Demonstrates bundling level
for browsers using browserify
.
Demonstrates bundling level
for browsers using webpack
.
An open list of awesome Level libraries and resources.
Level Me Up Scotty! An intro to Node.js databases via a set of self-guided workshops.
Applications and libraries that use Level modules under the hood.
A peer-to-peer hypermedia protocol to make the web faster, safer, and more open.
Track project hours
A copy-on-write FUSE implementation
CLI to manipulate Chrome and Chromium's localStorage on disk.
Encrypt messages based on GitHub SSH public keys
Design musical algorithms
A todo list using LevelDB.
Aggregate crash reports for Electron apps
Blazing fast tile based geocoder that matches cross street (road intersections) entirely sourced by OSM QA Tiles.
Time tracking library.
An index of npm using levelup
.
A connect
/ express
session store backed by LevelDB via levelup
.
A hackable publishing platform using LevelDB as main database.
Music player server with a web-based user interface. Uses levelup
for the music library database.
Prerender plugin to use level as a cache store.
Spin up a quick server to visualize time series data.
Version feed for trusted application delivery
Watch a folder for audio and video arrivals and convert them to Apple-friendly formats.
Keep track of bleach levels for a hot tub or a pool.
Browserify CDN. Caches browserify bundles in LevelDB.
Modules that are deprecated, archived or superseded. Listed here for the historical record.
Wrapper for abstract-leveldown
stores. Superseded by abstract-level
.
An abstract prototype matching the leveldown
API. Superseded by abstract-level
.
Bundles memdown
with levelup
and encoding-down
. Superseded by memory-level
.
Bundles rocksdb
with levelup
and encoding-down
.
Bundles leveldown-hyper
with levelup
and encoding-down
.
Bundles indexeddown
with levelup
and encoding-down
.
An abstract-leveldown
implementation backed by LevelDB. Superseded by classic-level
.
An abstract-leveldown
implementation backed by in-memory RBTree. Superseded by memory-level
.
An abstract-leveldown
implementation backed by IndexedDB. Superseded by browser-level
.
An abstract-leveldown
implementation backed by RocksDB.
An abstract-leveldown
implementation backed by HyperLevelDB.
An abstract-leveldown
implementation backed by medea.
An abstract-leveldown
implementation backed by JSON on disk.
An abstract-leveldown
implementation backed by AsyncStorage (React Native).
An abstract-leveldown
implementation backed by MongoDB.
An abstract-leveldown
implementation backed by sqlite3
, pg
, mysql
or WebSQL.
An abstract-leveldown
implementation backed by AWS DynamoDB.
An abstract-leveldown
implementation backed by Windows Azure Table Storage.
An abstract-leveldown
implementation backed by IndexedDB (Apple).
An abstract-leveldown
implementation backed by localStorage.
An abstract-leveldown
implementation backed by riakpbc.
An abstract-leveldown
implementation backed by MySQL.
An abstract-leveldown
implementation backed by Redis.
An abstract-leveldown
implementation backed by Basho's LevelDB fork.
An abstract-leveldown
implementation backed by Google Sheets.
An abstract-leveldown
implementation backed by IndexedDB.
An abstract-leveldown
implementation backed by LMDB.
An abstract-leveldown
implementation backed by localStorage in Node.js.
An abstract-leveldown
implementation backed by Aerospike.
An abstract-leveldown
implementation backed by AWS S3.
An abstract-leveldown
implementation backed by Gaia.
An abstract-leveldown
implementation backed by AWS DynamoDB.
An abstract-leveldown
implementation backed by localForage.
An abstract-leveldown
implementation backed by LevelDB (React Native).
An abstract-leveldown
implementation backed by Hyperbee.
An abstract-leveldown
layer that provides key/value encoding. Superseded by abstract-level
.
An abstract-leveldown
layer that provides encryption for values.
An abstract-leveldown
layer that handles delayed-open. Built into levelup
. Both are superseded by abstract-level
.
Copy-on-write abstract-leveldown
layer.
A stream-based abstract-leveldown
prototype.
Turn an abstract-leveldown
iterator into a readable stream. Included in levelup
. For abstract-level
databases, this is superseded by level-read-stream
.
Streams2 writable stream for levelup
.
Streams2 writable stream for levelup
.
Streams1 writable stream for levelup
or abstract-leveldown
.
A live query of a range in levelup
. Similar to level-live-stream
but with a streams2 interface.
Find all K/V-pairs prefixed by a certain key. Streams1.
A stream "cursor" to iterate through a ReadStream / KeyStream / ValueStream.
Simple, light and correct live read stream implementation. NB. Uses an undefined streams version, as well as ltgt
which is not compatible with abstract-level
.
A streams2 read stream filtered and ordered by glob patterns. Keys in the database should be unix-like paths.
pull-stream
interface to levelup
with read streams, write streams and realtime (tail/live) reads. Not compatible with abstract-level
.
Like db.createReadStream()
except it's live / tailable. i.e. instead of ending, it will stay open and stream changes to the database as they are inserted. Not compatible with abstract-level
.
Concatenate items from an abstract-leveldown
iterator into an array. On abstract-level
databases, this is superseded by iterator.all()
.
Split a levelup
database into sublevels with their own keyspace, encoding and events. Superseded by abstract-level
.
Create a temporary subleveldown
sublevel that is guaranteed to be empty.
Mount multiple abstract-leveldown
stores by key prefix onto a single store. Can be used with subleveldown
.
Keypath subspaces prefixed with bytewise
tuples. Similar to level-sublevel
. NB. bytewise
- and thus bytespace
- can be slow. Consider using the charwise
encoding instead.
Adds the ability to create subsections with the same API as levelup
, but only write/read to a prefixed section, or bucket, of the key-space. Each section also has level-hooks
installed. NB. No longer maintained. Instead use subleveldown
for levelup
, or the built-in sublevels of abstract-level
.
Utility to prefix a key with a sublevel prefix.
Find level-sublevel
sublevels, not requiring them to be in memory already.
Generate a tree from level-sublevel
sublevels, useful when there is no manifest.
Superlevel adds a "super" level that allows accessing the entire database, discovering level-sublevel
sublevels and browsing the database without knowledge of the sublevel structure.
Use path-like keys to separate sections of levelup
, with hooks. Adapted from level-sublevel
.
Mirror and optionally transform data from one level-sublevel
sublevel into another.
A CouchDB implementation on top of levelup
.
A node.js implementation of firebase based on levelup
.
Len is a resource booking database using LevelDB for storage. Useful for calendar and gantt chart apps and for questions like 'can a customer book this resource starting X and ending Y'.
Lem is a telemetry storage database using LevelDB. Keys are indexed by timestamp and you can read values in-between 2 points in time.
A programmable database with document storage and unique indexing capabilities.
A responsive, Node.js-style database ideal for realtime data. Highly modular and adaptable, allowing extension with the Level ecosystem.
A full-featured timeseries database on top of LevelDB. Includes a library for streaming statistical operations on timeseries data including joins, aggregates, filters, and map-like operations.
Simple ORM built on levelup
.
REST wrapper for levelup
, as an extension to level-orm
.
REST wrapper for levelup
. Not compatible with latest levelup
.
levelup
implementation of LivelyDb for doing real-time data binding of a database with local javascript objects.
MongoDB-like database backed by LevelDB.
Stream based full-text search for Node.js and browser using levelup
.
Define JSON models and manage indexes, children, foreign keys and much more.
Store immutable facts and query them with datalog.
Tool belt to find lower or upper bounds, compare and filter keys and more. Incompatible with abstract-level
, because in abstract-level
gte
and lte
range options take precedence over gt
and lt
respectively.
Wrap ltgt
options with functions. Expose range options without leaking information about your internal key representations.
Convert an interval string to an ltgt
object. This is the counterpart to ltgt-to-interval
.
Convert an ltgt
object to an interval string. This is the counterpart to interval-to-ltgt
.
Range emitter. Publish keys and subscribe to ranges.
Encode keys, values and ltgte options. Used in encoding-down
. Superseded by level-transcoder
.
Error types for levelup
. Superseded by abstract-level
.
Legacy package helper to bundle an abstract-leveldown
store with levelup
and encoding-down
.
Share a levelup
instance across multiple processes or over the network. An alternative to multilevel
, implemented as abstract-leveldown
stores with seamless retry support. Superseded by many-level
.
Open a LevelDB (leveldown
) handle multiple times, transparently upgrading to multileveldown
when more than 1 process try to use the same LevelDB data directory at once and re-electing a new master when the primary unix socket (or named pipe) goes down. Superseded by rave-level
.
Share a levelup
instance over the network.
Expose a levelup
instance via HTTP.
Describe the functions that multilevel
should provide access to on the client.
A sandbox for hosting multilevel
enabled databases.
Client and server using multileveldown
, range-emitter
and ltgt
.
LevelDB server and client with optional client-side REPL. Built with subleveldown
and multileveldown
.
A network service that allows you to connect to a Riak database over HTTP.
Given a key, get all values from a cluster of multilevel
servers.
Connect to a level-party
and level-sublevel
enabled LevelDB over HTTP.
PubSub with server and client on top of levelup
.
Expose a level-sublevel
database over HTTP, searchable with query strings.
Another solution to expose levelup
over HTTP.
Fast RPC mechanism for levelup
. Intended as binary-compatible alternative to multilevel
.
Get an event everytime something is written / read / deleted using levelup
.
Simple levelup
hooks.
Consistent post hooks for levelup
.
Get notified when a condition is triggered inside a levelup
instance.
Implements a hook mechanism that allows you to intercept put
, delete
and batch
operations. You can then turn those operations into batches. Useful if you want to turn a put
into an atomic batch for say an automatic map operation.
NB. Author recommends using level-sublevel
instead of level-hooks
directly. Note that level-sublevel
is not maintained.
Both are now (anno 2024) superseded by abstract-level
which has builtin sublevels and hooks.
Add an iterator()
method to levelup
with Symbol.asyncIterator
. Superseded by builtin Symbol.asyncIterator
support on abstract-leveldown
iterators.
Decoding iterator for levelup
instances. Wraps iterators like level-iterator-stream
does. Superseded by encoding-down
and later abstract-level
.
A streams1 deleteStream for levelup
. Superseded by db.clear()
.
Delete a range of keys from levelup
. Superseded by db.clear()
.
Bundle for level-js
and leveldown
. No longer maintained: superseded by level
v5.0.0.
Indexes for levelup
built on map-reduce
. Uses a custom indexing function for each index to parse and record index values for each entry. Archived.
Implements the encoding logic of a levelup
-like database. This functionality lives on in level-codec
.
Adds bytewise
as a native encoding for levelup
. This can now be achieved with encoding-down
and { keyEncoding: bytewise }
.
Adds msgpack as a native encoding for levelup
. This can now be achieved with encoding-down
and { keyEncoding: msgpack }
.
Provides a chainable API for db.batch()
. This functionality is now provided by levelup
.
levelup
+ memdown
. Superseded by level-mem
.
Use abstract-leveldown
iterators instead of readable streams to traverse the database. Iterators are exposed by levelup
since levelup@3.1.0
.
A levelup
interface on top of IndexedDB. Superseded by level-js
and level
.
Make levelup
get()
, put()
and del()
methods accept multiples keys & values. Archived.
Split your db up into multiple namespaces. Deprecated.
levelup
with Q promises. levelup
has native Promise support now.
Use levelup
as a static file server. Abandoned.
A simple namespacing solution for levelup
. Deprecated.
Store objects in levelup
. Author recommends level-pathwise
instead.
Persist and query scuttlebutt documents (requires level-sublevel
). Abandoned.
Sync graph-style data real-time between browsers and servers. Discontinued.
levelup
wrappers for co. Instead use native ES6 features.
Framework-agnostic, LevelDB-backed web server session manager. Archived.
Backend server that exposes levelup
over authenticated cross domain websockets.
Client side library for authenticating with and moving data over level-socket
.
Manipulate string ranges for db.createReadStream()
. Abandoned.
Generate string ranges that group into ranges, suitable for use as database keys. Abandoned.
Extend levelup
to error if you write outside of a specified range of keys. Stalled work in progress.
Biniomial replication for levelup
. Abandoned.
levelup
with bytewise
key encoding and bytewise-friendly sublevels.
Get the first or last record in a range. Abandoned.
Defunct fork of level-party
.
Same as level
but with prebuilt binaries. This is now provided by level
too.
levelup
with Promises. This is now provided by levelup
out of the box.
Index and search every property in levelup
containing object values. Abandoned.
Range search with a query planner. Development stalled.
Defunct fork of leveldown
to add Android support. Merged into leveldown
.
Defunct fork of leveldown
to add prebuilt binaries. Now provided by leveldown
.
Another indexing module. Adapted from map-reduce
. Author recommends other solutions.
In memory view on top of levelup
. Abandoned.
HTTP request handlers for building web services on top of LevelDB. Not in active development.
Module and resource authors are welcome and encouraged to add an entry for their work via a pull request. To add a module, edit modules/*.json
and run npm run awesome
to update README.md
. A module can have the following properties:
github
: the GitHub slug, for exampleLevel/awesome
url
: homepage ifgithub
is not set meaning the project is hosted elsewheredescription
: a short description. Supports markdown including links to other modules.compatibility
: an array of npm package names, to declare compatibility with (for example)abstract-level
versions. Best explained by looking at examples.timeless
: if true, make the "last commit" badge green, to indicate that the module is feature-complete and can be used even if it seems old by lack of activity.copyrightYear
,author
andoldCategory
: not used, kept for the historical record.