Level

A community and a collection of Node.js modules for creating transparent databases.

levellevelupleveldownmemdownlevel-js

Welcome!

Level is a community and a collection of Node.js modules for creating transparent databases. A solid set of primitives enable powerful databases to be built in userland. They can be embedded or networked, persistent or transient - in short, tailored to your needs.

At the core of Level are simple key-value stores that follow the characteristics of LevelDB. LevelDB is a key-value store built by Google, used in Google Chrome and many other products. It supports arbitrary byte arrays as both keys and values, singular reads and writes, batched writes and bi-directional iterators. LevelDB sorts entries lexicographically by keys which, when combined with ranged iterators, makes for a very powerful query mechanism.

To bring those concepts to Node.js and other JavaScript runtimes, Level utilizes idiomatic Node.js interfaces like streams, events and buffers. It offers a rich set of data types through encodings and allows for extensions like subleveldown to split a database into evented sections. Underlying stores can be easily swapped to target a wide range of runtime environments. The most common store is leveldown which is a pure C++ binding to LevelDB. Many alternatives are available such as level-js in the browser or memdown for an in-memory store.

The level module is the recommended way to get started. Visit awesome to discover more modules. See our project board to find out what we're working on. If you need help - technical, philosophical or other - feel free to open an issue in community or a more specific repository.

Live Demo

As of level@5, the above code works in Node.js, Electron and browsers!

Highlights

Simple

Most databases are mysterious black boxes. Level provides a highly transparent, light-weight foundation for you to compose higher-level features on top of. First and foremost, it offers simple key-value stores. No SQL, schemas or indexes are involved - unless you want to!

Universal

Swap out the underlying store as needed. Many stores are available. This allows you to use the same API across different runtime environments.

Open

Projects in the Level organization are OPEN Open Source. Individuals making significant and valuable contributions are given commit-access to contribute as they see fit.

Modular

More complex and opinionated features such as replication, map-reduce and pub-sub can be - and hundreds are! - written in userland and published on npm. This is actively encouraged to keep the core of Level lean.

Sorted By Keys

Level databases store their entries by keys, usually sorted lexicographically. This is one of the main distinguishing features amongst similar data storage libraries and lends itself to flexible namespacing and fast range queries.

First-class Binary Support

Both keys and values are treated as simple arrays of bytes. Their content can be anything from ASCII strings to binary blobs.

Encodings

Arbitrary JavaScript objects and primitive types can be used for both keys and values, by converting input and output to types supported by the underlying store. Through this mechanism, you can customize how entries are sorted and queried. Some stores can also store richer types natively.

Embeddable & Networkable

Most Level databases are meant to be embedded in an application. If so desired, they can be networked by adding protocols such as HTTP, TCP or UDP to your process.

Donate

To sustain Level and its activities, become a backer or sponsor on Open Collective. Your logo or avatar will be displayed on our 28+ GitHub repositories and npm packages. 💖

Backers

Open Collective backers

Sponsors

Open Collective sponsors

Conference Talks

Level me up, Scotty!
Julian Gruber at NodeConf.eu (2013)
Yours?
Are you presenting? Let us know here!

Supported Platforms

Papers

Support

Open an issue in community or a more specific repository. You can also visit us on irc.freenode.net in ##leveldb. Please note that this channel is not affiliated with Google LevelDB. We may open a new channel soon to clarify this point.