An open list of awesome Level modules and resources. Add yours!
Click to expand
Convenience modules that bundle a store with levelup
and encoding-down
.
Bundle for leveldown
and level-js
. Main entry point for beginners.
Bundle for memdown
.
Bundle for rocksdb
.
Bundle for leveldown-hyper
.
Bundle for indexeddown
. Alternative to level
.
The glue that holds everything together. Use this when you need a custom or swappable store.
An abstract prototype matching the leveldown
API. Use this to implement your own store.
Package helper to export a bundle. Use this to create a new level-*
bundle.
Modules that implement abstract-leveldown
as storage for levelup
.
Backed by LevelDB.
Backed by in-memory RBTree.
Backed by IndexedDB.
Backed by RocksDB.
Backed by HyperLevelDB.
Backed by medea.
Backed by JSON on disk
Backed by AsyncStorage (React Native).
Backed by MongoDB.
Backed by sqlite3
, pg
, mysql
or WebSQL.
Backed by AWS DynamoDB.
Backed by Windows Azure Table Storage.
Backed by IndexedDB (Apple).
Backed by localStorage.
Backed by riakpbc.
Backed by MySQL.
Backed by Redis.
Backed by Basho's LevelDB fork.
Backed by Google Sheets.
Backed by IndexedDB.
Backed by LMDB.
Backed by localStorage in Node.js.
Backed by Aerospike.
Backed by AWS S3.
Backed by Gaia.
Backed by AWS DynamoDB.
Backed by localForage.
Backed by LevelDB (React Native).
Backed by Hyperbee.
Modules that implement abstract-leveldown
to wrap another abstract-leveldown
. This is the preferred extension point.
Provides key/value encoding.
Provides encryption for values.
Handles delayed-open. Built into levelup
.
Copy-on-write abstract-leveldown
layer.
A stream-based abstract prototype.
Custom level-codec
compatible encodings for use with encoding-down
.
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.
Protocol Buffers for Node.js. Compiled messages are level-codec
compatible encodings.
Wraps lexicographic-integer
.
Modules related to splitting a database into sections a.k.a. sublevels.
Split a levelup
database into sublevels with their own keyspace, encoding and events.
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 subleveldown
paired with 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. We recommend subleveldown
instead.
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.
Modules for indexing, alternative forms of querying data, MapReduce models and other forms of data processing.
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 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 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 programmable database with document storage and unique indexing capabilities.
A persistent full text search engine for browser and Node.js.
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.
A small (10Kb) RDBMS abstraction on top of levelup
that also runs in the browser with undo/redo support, immutable objects and IndexedDB persistence.
LevelDB distributed, Server and Client!
FlashStore is a Key-Value persistent storage with easy to use ES6 Map-like API(both Async and Sync support), powered by LevelDB and TypeScript.
Store immutable facts and query them with datalog.
Define JSON models and manage indexes, children, foreign keys and much more.
Stream based full-text search for Node.js and browser using levelup
.
MongoDB-like database backed by LevelDB.
Simple ORM built on levelup
.
levelup
implementation of LivelyDb for doing real-time data binding of a database with local javascript objects.
REST wrapper for levelup
.
REST wrapper for levelup
, as an extension to level-orm
.
REST wrapper for levelup
. NB. Not compatible with latest levelup
.
Share a levelup
instance across multiple processes or over the network. An alternative to multilevel
, implemented as abstract-leveldown
stores with seamless retry support.
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.
Wrap a levelup
instance for cluster
usage among multiple processes.
Share a levelup
instance over the network.
Expose a levelup
instance via HTTP.
Client and server using multileveldown
, range-emitter
and ltgt
.
Describe the functions that multilevel
should provide access to on the client.
Given a key, get all values from a cluster of multilevel
servers.
Connect to a level-party
and level-sublevel
enabled LevelDB over HTTP.
A sandbox for hosting multilevel
enabled databases.
A network service that allows you to connect to a Riak database over HTTP.
LevelDB server and client with optional client-side REPL. Built with subleveldown
and multileveldown
.
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
.
Node.js stream or pull-stream
implementations for reading and writing data from/to levelup
.
General-case, streams3 writable stream for levelup
.
Streams2 writable stream for levelup
.
Streams2 writable stream for levelup
.
Streams1 writable stream for levelup
or abstract-leveldown
.
pull-stream
interface to levelup
with read streams, write streams and realtime (tail/live) reads.
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.
Simple, light and correct live read stream implementation. NB. Uses an undefined streams version.
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.
A streams2 read stream filtered and ordered by glob patterns. Keys in the database should be unix-like paths.
Modules that operate on abstract-leveldown
iterators.
Concatenate items from an iterator into an array.
Turn an abstract-leveldown
iterator into a readable stream. Included in levelup
.
Add an iterator()
method to levelup
with Symbol.asyncIterator
. NB. Conflicts with iterator()
added in levelup@3.1.0
.
Decoding iterator for levelup
instances. Wraps iterators like level-iterator-stream
does. NB. Not compatible with levelup
>= 2 due to encodings having moved out to encoding-down
. PR welcome.
Low-level utilities for hooking into a levelup
instance.
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.
Utilities for working with range options, known as ltgt(e), common to levelup
streams and abstract-leveldown
iterators.
Tool belt to find lower or upper bounds, compare and filter keys and more.
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.
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 keys, values and ltgte options. Used in encoding-down
.
Error types for levelup
.
Easily run your level-*
tests against all stores.
Compose a database factory from abstract-leveldown
and levelup
layers.
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.
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
.
Level/awesome
is an OPEN Open Source Project. This means that:
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
See the Contribution Guide for more details.