Web framework for prototyping hypermedia APIs.


Hello nerds. Fortune is a web framework for prototyping hypermedia APIs that implement the JSON API specification. It comes with a modular persistence layer, with adapters for NeDB (built-in), MongoDB, MySQL, Postgres, & SQLite.

Get it by installing from npm:

$ npm install fortune

There is a release tag for v1.0 of JSON API, though Fortune does not yet implement the entire feature set. What needs to be done:

  • Querying, pagination, sorting
  • Compound documents
  • Content negotiation between different formats (future, planned)
  • Ensuring specification compliance

Contributions welcome.

Fortune implements everything you need to get started with JSON API, with a few extra features:

  • Batteries included, Fortune handles routing and database interactions so you don't have to.
  • Serializers and deserializers for JSON API, and other hypermedia formats (in the future).
  • Hooks to implement application specific logic before/after interacting with resources.

It does not come with any authentication or authorization, you should implement your own application-specific logic (see keystore.js for an example).

The full guide and API documentation are located at

Here is a minimal application:

var fortune = require('fortune');
var app = fortune();
app.resource('person', {
  name: String,
  age: Number,
  pets: ['pet'] // "has many" relationship to pets 
app.resource('pet', {
  name: String,
  age: Number,
  owner: 'person' // "belongs to" relationship to a person 

This exposes a few routes for the person and pet resources, as defined by the JSON API specification:

GET/people/petsGet a collection of resources, accepts query ?ids=1,2,3...
POST/people/petsCreate a resource
GET/people/:id/pets/:idGet a specific resource, or multiple: 1,2,3
PUT/people/:id/pets/:idCreate or update a resource
PATCH/people/:id/pets/:idPatch a resource (see RFC 6902)
DELETE/people/:id/pets/:idDelete a resource
GET/people/:id/pets/pets/:id/ownerGet a related resource (one level deep)

Tests are written with Mocha, and are run against the built-in NeDB adapter, plus MongoDB & MySQL on Travis. You will also need to have the developer dependencies installed. To run tests:

$ npm test

For release history and roadmap, see

Fortune is licensed under the MIT license, see