Full implementation of the fs module on top of leveldb
Latest commit 213a7c1 Dec 1, 2015 @mafintosh 1.2.0
Failed to load latest commit information.
test octals for es6 strict mode Dec 1, 2015
.gitignore testling support Mar 29, 2014
.travis.yml added travis Mar 29, 2014
LICENSE add full license text Aug 21, 2014
README.md dat badge May 7, 2014
errno.js first commit Mar 29, 2014
index.js octals for es6 strict mode Dec 1, 2015
package.json 1.2.0 Dec 1, 2015
paths.js octals for es6 strict mode Dec 1, 2015
stat.js save link and blob paths Apr 14, 2014
watchers.js add internal notify api Oct 11, 2014



Full implementation of the fs module on top of leveldb (except sync ops)

npm install level-filesystem

build status dat

browser support

Current status

All async methods in the fs module are supported and well tested (including links!)

✓ fs.rmdir(path, callback)
✓ fs.mkdir(path, [mode], callback)
✓ fs.readdir(path, callback)
✓ fs.stat(path, callback)
✓ fs.exists(path, callback)
✓ fs.chmod(path, mode, callback)
✓ fs.chown(path, uid, gid, callback)
✓ fs.rename(oldPath, newPath, callback)
✓ fs.realpath(path, [cache], callback)
✓ fs.readFile(filename, [options], callback)
✓ fs.writeFile(filename, data, [options], callback)
✓ fs.appendFile(filename, data, [options], callback)
✓ fs.utimes(path, atime, mtime, callback)
✓ fs.unlink(path, callback)
✓ fs.createReadStream(path, [options])
✓ fs.createWriteStream(path, [options])
✓ fs.truncate(path, len, callback)
✓ fs.watchFile(filename, [options], listener)
✓ fs.unwatchFile(filename, [listener])
✓ fs.watch(filename, [options], [listener])
✓ fs.fsync(fd, callback)
✓ fs.write(fd, buffer, offset, length, position, callback)
✓ fs.read(fd, buffer, offset, length, position, callback)
✓ fs.close(fd, callback)
✓ fs.open(path, flags, [mode], callback)
✓ fs.futimes(fd, atime, mtime, callback)
✓ fs.fchown(fd, uid, gid, callback)
✓ fs.ftruncate(fd, len, callback)
✓ fs.fchmod(fd, mode, callback)
✓ fs.fstat(fd, callback)
✓ fs.lchown(path, uid, gid, callback)
✓ fs.lchmod(path, mode, callback)
✓ fs.symlink(srcpath, dstpath, [type], callback)
✓ fs.lstat(path, callback)
✓ fs.readlink(path, callback)
✓ fs.link(srcpath, dstpath, callback)

If any of the methods do not behave as you would expect please add a test case or open an issue.


var filesystem = require('level-filesystem');
var fs = filesystem(db); // where db is a levelup instance

// use fs as you would node cores fs module

fs.mkdir('/hello', function(err) {
	if (err) throw err;
	fs.writeFile('/hello/world.txt', 'world', function(err) {
		if (err) throw err;
		fs.readFile('/hello/world.txt', 'utf-8', function(err, data) {


When you get an error in a callback it is similar to what you get in Node core fs.

fs.mkdir('/hello', function() {
	fs.mkdir('/hello', function(err) {
		console.log(err); // err.code is EEXIST

fs.mkdir('/hello', function() {
	fs.readFile('/hello', function(err) {
		console.log(err); // err.code is EISDIR


Relation to level-fs

The goal of this module is similar to level-fs and is probably gonna end up as a PR to that module. I decided to make this as a standalone module (for now) since adding proper directory support to level-fs turned out to be non-trivial (more or a less a complete rewrite).