You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

5.0 KiB

Upgrade Guide

This document describes breaking changes and how to upgrade. For a complete list of changes including minor and patch releases, please refer to the changelog.

6.0.0

No breaking changes to the level API. If you're only using level in Node.js or Electron, you can upgrade without thinking twice.

The major bump is for browsers, because level upgraded to level-js@5:

Support of keys & values other than strings and Buffers has been dropped. Internally level-js now stores keys & values as binary which solves a number of compatibility issues (Level/memdown#186). If you pass in a key or value that isn't a string or Buffer, it will be irreversibly stringified.

Existing IndexedDB databases created with level-js@4 [via level@5] can be read only if they used binary keys and string or binary values. Other types will come out stringified, and string keys will sort incorrectly. Use the included upgrade() utility to convert stored data to binary (in so far the environment supports it):

var level = require('level')
var reachdown = require('reachdown')
var db = level('my-db')

db.open(function (err) {
  if (err) throw err

  reachdown(db, 'level-js').upgrade(function (err) {
    if (err) throw err
  })
})

New Features

In case you missed it (a few of these already floated into level@5) some exciting new features are now available in all environments:

Go forth and build amazing things.

5.0.0

Upgraded to leveldown@5.0.0 and (through level-packager@5) levelup@4 and encoding-down@6. Please follow these links for more information. A quick summary: range options (e.g. gt) are now serialized the same as keys, { gt: undefined } is not the same as {}, nullish values are now rejected and streams are backed by readable-stream@3.

In addition, level got browser support! It uses leveldown in node and level-js in browsers (backed by IndexedDB). As such, level-browserify is not needed anymore and will be deprecated later on. To learn what the integration of level-js means for platform, browser and type support, please see the updated README.

4.0.0

Dropped support for node 4. No other breaking changes.

3.0.0

No breaking changes to the level API.

This is an upgrade to leveldown@^3.0.0 which is based on abstract-leveldown@~4.0.0 which in turn contains breaking changes to .batch(). Though this is negated by levelup, we decided to release a new major version in the event of dependents reaching down into db.db.

2.0.0

No breaking changes to the level API.

The parts that make up level have been refactored to increase modularity. This is an upgrade to leveldown@~2.0.0 and level-packager@~2.0.0, which in turn upgraded to levelup@^2.0.0. The responsibility of encoding keys and values moved from levelup to encoding-down, which comes bundled with level-packager.

Being a convenience package, level glues the parts back together to form a drop-in replacement for the users of levelup@1, while staying fully compatible with level@1. One thing we do get for free, is native Promise support.

const db = level('db')
await db.put('foo', 'bar')
console.log(await db.get('foo'))

This does not affect the existing callback API, functionality-wise or performance-wise.

For more information please check the corresponding CHANGELOG.md for: