Kenneth Falck's Blog

Persistent state for Node.js application servers

Posted on 2011-04-30 by Kenneth Falck

Node.js is a great tool for writing simple and efficient application servers with server-side JavaScript. A typical use case is a chat server, which might have a global data structure like this:

var CHAT = {
    channels: {
        '#general': {
            name: 'General',
            messages: [
            users: {

In this structure, each channel exists as an object that holds the channel's name, its message history and the current user list.

The problem with in-memory data structures is that they are lost when restarting the Node.js application. During development this happens all the time.

An easy way to solve this is to have a background task that regularly saves the global state to a JSON text file:

var fs = require('fs');

function saveState() { fs.writeFile('/tmp/chat-state.json', JSON.stringify(CHAT)); setTimeout(saveState, 10000); }

setTimeout(saveState, 10000);

When starting up, the application can then check if this file exists and restore its state from it:

function loadState() {
    fs.readFile('/tmp/chat-state.json', function(err, data) {
        CHAT = JSON.parse(data);

In a real world application you would probably want to add some error and sanity checking. Also, it might make sense to trigger a save whenever there is new activity, instead of a hardcoded 10 second interval.