node package manager



Leveldown over IPFS

Build Status


$ npm install ipfs-level --save


const IPFSLevel = require('ipfs-level')


IPFSLevel(partition, options)

Returns a new IPFSLevel instance. This object obeys the LevelDown interface.


  • options (object, defaults to this): with the following keys:
    • ipfsOptions (object). IPFS options object.
    • log (LevelDown-compatible database that stores the log)
    • ipfs (IPFS object): an IPFS object instance. If you already can provide an IPFS object, pass it in here.
    • retainLog (boolean, defaults to false): whether or not the log should be retained. Besides wasting storage space, setting this option totrue` provides no direct benefit, except if you want to somehow explore the log database.

Default arguments

You can create a constructor that curries some default arguments by using IPFSLevel.defaults(options) like this:

const ipfsLevel = IPFSLevel.defaults({
  log: someLevelDownLogDatabase


An IPFSLevel instance emits the following events


When started.

emit("change", change)

Emitted whenever there is a change in the database. The event payload is a change object, which has the following properties:

  • type (string: "put" or "del")
  • key (string): the key affected by this change
  • value (any): the new value for the mentioned key

emit("new head", cid)

Whenever the log has a new head. The payload, cid is a content identifier (internal to IPFS)

With Levelup

This default options feature may be useful if you want to pass a constructor into which you'll have no saying about the options, like on the Levelup constructor:

const LevelUp = require('levleup')
const Memdown = require('memdown') // any leveldown db will do for caching log entries 
const const IPFSLevel = require('ipfs-level').defaults({
  log: Memdown('some-partition-name') // log database should be scoped to partition 
const db = LevelUp({ db: IPFSLevel })
// now you have a levelup db you can use 

Test and debug

This package uses debug, so you can activate debug messages by setting the environment variable DEBUG to ipfs-level:*




Feel free to join in. All welcome. Open an issue!

This repository falls under the IPFS Code of Conduct.