node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »



mind is not a database / minimal database is lightweight asynchronous persistence layer for node.

mind was inspired by anti-db's idea that often, "you don't need a database, you need an in-memory object that saves itself to disk". However, I needed Windows support, evented API, and asynchronous loading, which, while simpler and more elegant in implementation, it forgoes.


npm install mind


  • Evented API, as well as a simplified single-callback wrapper
  • Automatically persists database state
    • Autosave at intervals, and at process.exit();
    • On non-Windows systems, also autosave on SIGINT, SIGHUP, and SIGQUIT.
  • Database autocreation


Evented API

var mind = require('mind');
var opts = { encoding: 'UTF-8', autosave: 60000 };
var dbm = new mind('path/to/db.json', opts);
dbm.on('open', function (e) {
    console.log('[INFO] Opened db: ' + e.msg);
    e.db['foo'] = 'bar';
    e.db['baz'] = [1, 2, 3, 4];
dbm.on('close', function (e) {
    console.log('[INFO] Closed db: ' + e.msg);
dbm.on('save', function (e) {
    console.log('[INFO] Saved db: ' + e.msg);
dbm.on('error', function (e) {
    console.error('[ERROR] Error in db: ' + e.msg);

Callback API

var mind = require('mind');'path/to/db.json', function (err, db, data) {


Class: MindManager

new MindManager(fn, opts)
  • fn: String - Path writeable by the node process
  • opts: Object - Options hash containing any of:
    • autosave: Number - ms between save operations (0 or negative disables autosave). Default: 60000
    • encoding: String - encoding used to read and write JSON file. Default: 'UTF-8'

Create a new MindManager.
  • Emits open on success.

Open and read the database file, creating it if necessary.
  • Emits save on success.

Asynchronously save the database file to disk.

  • Emits close on success.

Synchronously closes the database file, persisting it to disk. This function is synchronous to support non-autosaved use of mind, and is suitable for calling within process.exit.

manager.startAutosave() / manager.stopAutosave()

Synchronously start and stop the autosave process.

  • db: Object - Database object for which to get the associated MindManager

Get the MindManager for a particular database object., cb(err, db, data), opts)
  • fn: see new MindManager
  • opts: see new MindManager
  • cb: Callback used to respond to all events emitted by the created manager:
    • open: passes db as the new database object
    • error: passes err as original error thrown, and
    • open, save, close, error: passes data as the complete event data object

Handles the creation of a manager object in a simplified single-callback model. It is recommended to not bind your callback to any particular context so you can access the manager instance at this. If you must, though, the instance managing a particular db object can be accessed by:




event.db: The database object opened. event.msg: Any message regarding the open operation.

Emitted on successful opening of a database.


event.msg: Any message regarding the close operation.

Emitted on successful closing of a database.


event.msg: Any message regarding the save operation.

Emitted on successful save of a database to persistent storage, either explicitly-initiated or autosave.


event.error: The originally-thrown error, if available. event.msg: Any message regarding the error.

Emitted on any non-fatal caught error.