Level
A community and a collection of Node.js modules for creating transparent databases.
levellevelupleveldownmemdownlevel-jsWelcome!
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
Sponsors
Conference Talks
- How to Cook a Graph Database in a Night
- Matteo Collina at JSConf.it (2014)
- A Real Database Rethink
- Rod Vagg at NodeConf.eu (2013)
- A modular database?
- Dominic Tarr at NodeConf.eu (2013)
- Level me up, Scotty!
- Julian Gruber at NodeConf.eu (2013)
- Yours?
- Are you presenting? Let us know here!
Supported Platforms
- OS X
- Linux
- Windows
- Illumos
Papers
Rodd Vagg
Patrick O'Neil & al.
Ilya Grigorik
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.