Fork on GitHub Piggu Fortune.js

Fortune is a high-level I/O library for web applications. It provides an implementation of entity-relationship modelling, is agnostic about data storage, and can be used to power real-time (WebSocket) and hypermedia applications (RMM Level 3).

Version 1.0 was released on 16 August 2015, which should be considered stable. The latest version is 1.3.1, get it from npm:

npm install fortune --save


Let's build an API that models Twitter's basic functionality:

import fortune from 'fortune'
import http from 'http'

const store = fortune.create()

// The `net.http` function returns a listener function which does content
// negotiation, parses headers, and maps the response to an HTTP response.
const server = http.createServer(

store.defineType('user', {
  name: { type: String },

  // Following and followers are inversely related (many-to-many).
  following: { link: 'user', inverse: 'followers', isArray: true },
  followers: { link: 'user', inverse: 'following', isArray: true },

  // Many-to-one relationship of user posts to post author.
  posts: { link: 'post', inverse: 'author', isArray: true }

store.defineType('post', {
  message: { type: String },

  // One-to-many relationship of post author to user posts.
  author: { link: 'user', inverse: 'posts' }

store.connect().then(() => server.listen(1337))

This yields an ad hoc JSON-over-HTTP API. There are serializers for Micro API (JSON-LD) and JSON API.

By default, the data is persisted in memory. There are adapters for databases such as MongoDB, Postgres, and NeDB.

See the plugins page for more details.