Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/level/level
Universal abstract-level database for Node.js and browsers.
https://github.com/level/level
abstract-level browsers electron javascript level leveldb nodejs
Last synced: 4 days ago
JSON representation
Universal abstract-level database for Node.js and browsers.
- Host: GitHub
- URL: https://github.com/level/level
- Owner: Level
- License: mit
- Created: 2013-05-19T11:33:49.000Z (over 11 years ago)
- Default Branch: master
- Last Pushed: 2024-01-27T17:20:40.000Z (about 1 year ago)
- Last Synced: 2024-10-29T15:04:38.205Z (3 months ago)
- Topics: abstract-level, browsers, electron, javascript, level, leveldb, nodejs
- Language: JavaScript
- Homepage:
- Size: 196 KB
- Stars: 1,561
- Watchers: 19
- Forks: 106
- Open Issues: 11
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# level
**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.
> :pushpin: Which module should I use? What is `abstract-level`? Head over to the [FAQ](https://github.com/Level/community#faq).
[![level badge][level-badge]](https://github.com/Level/awesome)
[![npm](https://img.shields.io/npm/v/level.svg)](https://www.npmjs.com/package/level)
[![Node version](https://img.shields.io/node/v/level.svg)](https://www.npmjs.com/package/level)
[![Test](https://img.shields.io/github/actions/workflow/status/Level/level/test.yml?branch=master&label=test)](https://github.com/Level/level/actions/workflows/test.yml)
[![Coverage](https://img.shields.io/codecov/c/github/Level/level?label=\&logo=codecov\&logoColor=fff)](https://codecov.io/gh/Level/level)
[![Standard](https://img.shields.io/badge/standard-informational?logo=javascript\&logoColor=fff)](https://standardjs.com)
[![Common Changelog](https://common-changelog.org/badge.svg)](https://common-changelog.org)
[![Community](https://img.shields.io/badge/community-join-%2370B99E?logo=github)](https://github.com/Level/community/issues)
[![Donate](https://img.shields.io/badge/donate-orange?logo=open-collective\&logoColor=fff)](https://opencollective.com/level)## Usage
_If you are upgrading: please see [`UPGRADING.md`](UPGRADING.md)._
```js
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` and `browser-level`. Usage from TypeScript requires generic type parameters.
TypeScript example
```ts
// Specify types of keys and values (any, in the case of json).
// The generic type parameters default to Level.
const db = new Level('./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('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('xyz', { valueEncoding: 'json' })
```## Install
With [npm](https://npmjs.org) do:
```bash
npm install level
```For use in browsers, this package is best used with [`browserify`](https://github.com/browserify/browserify), [`webpack`](https://webpack.js.org/), [`rollup`](https://rollupjs.org/) or similar bundlers. For a quick start, visit [`browserify-starter`](https://github.com/Level/browserify-starter) or [`webpack-starter`](https://github.com/Level/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](https://nodejs.org/api/n-api.html), including ARM platforms like Raspberry Pi and Android, as well as in Chromium, Firefox and Safari. For details, see [Supported Platforms](https://github.com/Level/classic-level#supported-platforms) of `classic-level` and [Browser Support](https://github.com/Level/browser-level#browser-support) of `browser-level`.
Binary keys and values are supported across the board.
## API
The API of `level` follows that of [`abstract-level`](https://github.com/Level/abstract-level). For additional options and methods specific to [`classic-level`](https://github.com/Level/classic-level) or [`browser-level`](https://github.com/Level/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`](https://developer.mozilla.org/en-US/docs/Web/API/IDBDatabase) to be opened.
## Contributing
[`Level/level`](https://github.com/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](https://github.com/Level/community/blob/master/CONTRIBUTING.md) for more details.
## Donate
Support us with a monthly donation on [Open Collective](https://opencollective.com/level) and help us continue our work.
## License
[MIT](LICENSE)
[level-badge]: https://leveljs.org/img/badge.svg