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.
📌 Which module should I use? What is
abstract-level
? Head over to the FAQ.If you are upgrading: please see
UPGRADING.md
.const { 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
andbrowser-level
. Usage from TypeScript requires generic type parameters.TypeScript example
// 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' })With npm do:
npm install levelFor use in browsers, this package is best used with
browserify
,webpack
,rollup
or similar bundlers. For a quick start, visitbrowserify-starter
orwebpack-starter
.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 ofclassic-level
and Browser Support ofbrowser-level
.Binary keys and values are supported across the board.
The API of
level
follows that ofabstract-level
. For additional options and methods specific toclassic-level
orbrowser-level
, please see their respective READMEs. The documentation below only covers the common constructor.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 theIDBDatabase
to be opened.
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.
Support us with a monthly donation on Open Collective and help us continue our work.