Level
Universal abstract-level database for Node.js and browsers.
**Universal [`abstract-level`](https://github.com/Level/abstract-level) database for Node.js and browsers.** This is a convenience package that exports [`classic-level`](https://github.com/Level/classic-level) in Node.js and [`browser-level`](https://github.com/Level/browser-level) in browsers, making it an ideal entry point to start creating lexicographically sorted key-value databases. The project is written primarily in JavaScript, distributed under the MIT License license, first published in 2013. It has gained significant community traction with 1,675 stars and 111 forks on GitHub. Key topics include: abstract-level, browsers, electron, javascript, level.
level
Universal abstract-level database for Node.js and browsers. This is a convenience package that exports classic-level in Node.js and browser-level in browsers, making it an ideal entry point to start creating lexicographically sorted key-value databases.
:pushpin: Which module should I use? What is
abstract-level? Head over to the FAQ.
Usage
If you are upgrading: please see UPGRADING.md.
jsconst { Level } = require('level') // Create a database const db = new Level('example', { valueEncoding: 'json' }) // Add an entry with key 'a' and value 1 await db.put('a', 1) // Add multiple entries await db.batch([{ type: 'put', key: 'b', value: 2 }]) // Get value of key 'a': 1 const value = await db.get('a') // Iterate entries with keys that are greater than 'a' for await (const [key, value] of db.iterator({ gt: 'a' })) { console.log(value) // 2 }
TypeScript type declarations are included and cover the methods that are common between classic-level and browser-level. Usage from TypeScript requires generic type parameters.
</details>ts// Specify types of keys and values (any, in the case of json). // The generic type parameters default to Level<string, string>. const db = new Level<string, any>('./db', { valueEncoding: 'json' }) // All relevant methods then use those types await db.put('a', { x: 123 }) // Specify different types when overriding encoding per operation await db.get<string, string>('a', { valueEncoding: 'utf8' }) // Though in some cases TypeScript can infer them await db.get('a', { valueEncoding: db.valueEncoding('utf8') }) // It works the same for sublevels const abc = db.sublevel('abc') const xyz = db.sublevel<string, any>('xyz', { valueEncoding: 'json' })
Install
With npm do:
bashnpm install level
For use in browsers, this package is best used with browserify, webpack, rollup or similar bundlers. For a quick start, visit browserify-starter or webpack-starter.
Supported Platforms
At the time of writing, level works in Node.js 18+ and Electron 30+ on Linux, Mac OS and Windows, including any future Node.js and Electron release thanks to Node-API, including ARM platforms like Raspberry Pi and Android, as well as in Chromium, Firefox and Safari. For details, see Supported Platforms of classic-level and Browser Support of browser-level.
Binary keys and values are supported across the board.
API
The API of level follows that of abstract-level. For additional options and methods specific to classic-level or browser-level, please see their respective READMEs. The documentation below only covers the common constructor.
db = new Level(location[, options])
Create a new database or open an existing database. The location argument must be a directory path (relative or absolute) where LevelDB will store its files, or in browsers, the name of the IDBDatabase to be opened.
Contributing
Level/level 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.
Donate
Support us with a monthly donation on Open Collective and help us continue our work.
License
Contributors
Showing top 12 contributors by commit count.
