Package Exports
- json-server/package.json
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (json-server) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
JSON-Server
[!IMPORTANT] Viewing beta v1 documentation – usable but expect breaking changes. For stable version, see here
[!NOTE] Using React ⚛️ and tired of CSS-in-JS? See MistCSS 👀
Install
npm install json-serverUsage
Create a db.json or db.json5 file
{
"$schema": "./node_modules/json-server/schema.json",
"posts": [
{ "id": "1", "title": "a title", "views": 100 },
{ "id": "2", "title": "another title", "views": 200 }
],
"comments": [
{ "id": "1", "text": "a comment about post 1", "postId": "1" },
{ "id": "2", "text": "another comment about post 1", "postId": "1" }
],
"profile": {
"name": "typicode"
}
}View db.json5 example
{
posts: [
{ id: "1", title: "a title", views: 100 },
{ id: "2", title: "another title", views: 200 },
],
comments: [
{ id: "1", text: "a comment about post 1", postId: "1" },
{ id: "2", text: "another comment about post 1", postId: "1" },
],
profile: {
name: "typicode",
},
}You can read more about JSON5 format here.
Start JSON Server
npx json-server db.jsonThis starts the server at http://localhost:3000. You should see:
JSON Server started on PORT :3000
http://localhost:3000Access your REST API:
curl http://localhost:3000/posts/1Response:
{
"id": "1",
"title": "a title",
"views": 100
}Run json-server --help for a list of options
Sponsors ✨
Gold
Silver
Bronze
Become a sponsor and have your company logo here
Query Capabilities
JSON Server supports advanced querying out of the box:
GET /posts?views:gt=100 # Filter by condition
GET /posts?_sort=-views # Sort by field (descending)
GET /posts?_page=1&_per_page=10 # Pagination
GET /posts?_embed=comments # Include relations
GET /posts?_where={"or":[...]} # Complex queriesSee detailed documentation below for each feature.
Routes
Array Resources
For array resources like posts and comments:
GET /posts
GET /posts/:id
POST /posts
PUT /posts/:id
PATCH /posts/:id
DELETE /posts/:idObject Resources
For singular object resources like profile:
GET /profile
PUT /profile
PATCH /profileQuery params
Conditions
Use field:operator=value.
Operators:
- no operator ->
eq(equal) ltless than,lteless than or equalgtgreater than,gtegreater than or equaleqequal,nenot equalinincluded in comma-separated listcontainsstring contains (case-insensitive)startsWithstring starts with (case-insensitive)endsWithstring ends with (case-insensitive)
Examples:
GET /posts?views:gt=100
GET /posts?title:eq=Hello
GET /posts?id:in=1,2,3
GET /posts?author.name:eq=typicode
GET /posts?title:contains=hello
GET /posts?title:startsWith=Hello
GET /posts?title:endsWith=worldSort
GET /posts?_sort=title
GET /posts?_sort=-views
GET /posts?_sort=author.name,-viewsPagination
GET /posts?_page=1&_per_page=25Response:
{
"first": 1,
"prev": null,
"next": 2,
"last": 4,
"pages": 4,
"items": 100,
"data": [
{ "id": "1", "title": "...", "views": 100 },
{ "id": "2", "title": "...", "views": 200 }
]
}Notes:
_per_pagedefaults to10if not specified- Invalid
_pageor_per_pagevalues are automatically normalized to valid ranges
Embed
GET /posts?_embed=comments
GET /comments?_embed=postComplex filter with _where
_where accepts a JSON object and overrides normal query params when valid.
GET /posts?_where={"or":[{"views":{"gt":100}},{"author":{"name":{"lt":"m"}}}]}Delete dependents
DELETE /posts/1?_dependent=commentsStatic Files
JSON Server automatically serves files from the ./public directory.
To serve additional static directories:
json-server db.json -s ./static
json-server db.json -s ./static -s ./node_modulesStatic files are served with standard MIME types and can include HTML, CSS, JavaScript, images, and other assets.
Migration Notes (v0 → v1)
If you are upgrading from json-server v0.x, note these behavioral changes:
- ID handling:
idis always a string and will be auto-generated if not provided - Pagination: Use
_per_pagewith_pageinstead of the deprecated_limitparameter - Relationships: Use
_embedinstead of_expandfor including related resources - Request delays: Use browser DevTools (Network tab > throttling) instead of the removed
--delayCLI option
New to json-server? These notes are for users migrating from v0. If this is your first time using json-server, you can ignore this section.