Serves JSON files through REST routes.

JSON Server

Get a full fake REST API with zero coding in less than 30 seconds (seriously)

Created with :sparkling_heart: for front-end developers who need a quick back-end for prototyping and mocking.

Create a db.json file

  "posts": [
    { "id": 1, "title": "json-server", "author": "typicode" }
  "comments": [
    { "id": 1, "body": "some comment", "postId": 1 }

Start JSON Server

$ json-server --watch db.json

Now if you go to http://localhost:3000/posts/1, you'll get

{ "id": 1, "title": "json-server", "author": "typicode" }

Also, if you make POST, PUT, PATCH or DELETE requests, changes will be automatically saved to db.json using lowdb.

Based on the previous db.json file, here are all the available routes. If you need more customization, you can use the project as a module.

GET    /posts
GET    /posts/1
GET    /posts/1/comments
GET    /posts?title=json-server&author=typicode
POST   /posts
PUT    /posts/1
PATCH  /posts/1
DELETE /posts/1

To slice resources, add _start and _end or _limit (an X-Total-Count header is included in the response).

GET /posts?_start=20&_end=30
GET /posts/1/comments?_start=20&_end=30

To sort resources, add _sort and _order (ascending order by default).

GET /posts?_sort=views&_order=DESC
GET /posts/1/comments?_sort=votes&_order=ASC

To make a full-text search on resources, add q.

GET /posts?q=internet

Returns database.

GET /db

Returns default index file or serves ./public directory.

$ npm install -g json-server

You can use JSON Server to serve your HTML, JS and CSS, simply create a ./public directory.

You can access your fake API from anywhere using CORS and JSONP.

You can load remote schemas:

$ json-server http://example.com/file.json
$ json-server http://jsonplaceholder.typicode.com/db

You can use JS to programmatically create data:

module.exports = function() {
  var data = { users: [] }
  // Create 1000 users 
  for (var i = 0; i < 1000; i++) {
    data.users.push({ id: i, name: 'user' + i })
  return data
$ json-server index.js

If you need to add authentication, validation, rewrite or add routes, you can use the project as a module in combination with other Express middlewares.

var jsonServer = require('json-server')
var server = jsonServer.create() // Returns an Express server 
var router = jsonServer.router('db.json') // Returns an Express router 
server.use(jsonServer.defaults) // logger, static and cors middlewares 
server.use(router) // Mount router on '/' 

For an in-memory database, you can pass an object to jsonServer.router(). Please note also that jsonServer.router() can be used in existing Express projects.

You can deploy JSON Server. For example, JSONPlaceholder is an online fake API powered by JSON Server and running on Heroku.

MIT - Typicode