1.1.0 • Public • Published


Get the inner db of an (abstract-)level(up|down) onion.
Useful for modules like subleveldown to peel off redundant layers.

npm status node Travis build status JavaScript Style Guide


const reachdown = require('reachdown')
const db = require('level')('example')

Get the innermost db, which in this case is a leveldown instance in node or level-js in browsers:

const down = reachdown(db)

Get a specific layer by type:

const enc = reachdown(db, 'encoding-down')
const down = reachdown(enc)
const levelup = reachdown(db, 'levelup') // levelup === db

Use a visitor function:

const down = reachdown(db, function (db, type) {
  return db.someProperty && type !== 'levelup'


db = reachdown(db[, visit][, strict = false])

The db argument is required and must be a recent-ish levelup, abstract-leveldown or subleveldown instance. The visit argument can be:

  • A string, to find the first db with a matching type
  • A function, to find the first db for which visit returns a truthy value
  • Omitted or falsy, to find the innermost db.

If visit is non-falsy and no matching db is found, reachdown returns null unless strict is false in which case it returns the innermost db.

bool =, visit)

Utility to determine the type of db without reaching down. The visit argument is the same as above, i.e. a string or a function. Example:

if (, 'levelup')) {
  // ..

Which is the same as the following, except that also works on older versions that don't have a type property:

if (db.type === 'levelup') {
  // ..

Supported Types

  • levelup (>= 0.0.2 only if db is open, otherwise >= 2.0.0)
  • encoding-down (>= 1)
  • deferred-leveldown (>= 0.3.0 only if db is open, otherwise >= 2.0.0)
  • subleveldown (>= 4)
  • multileveldown (TBD)
  • Yours?

Implementations of abstract-leveldown can declare a type like so:

MyLeveldown.prototype.type = 'my-leveldown'

So that consumers can find that layer:

var down = MyLeveldown()
var db = levelup(down)
reachdown(db, 'my-leveldown') === down


With npm do:

npm install reachdown


MIT © 2019-present Vincent Weevers

Package Sidebar


npm i reachdown

Weekly Downloads






Unpacked Size

6.29 kB

Total Files


Last publish


  • vweevers