What is Nick?

Nick, a headless CMS build with Node.js

Provides a RESTful hypermedia API and works flawlessly with the Volto frontend!

Why Nick?


Nick is build with Node.js and works fully asynchronous for optimal performance. PostgreSQL is used as the database which provides storage of relational and json data. Files and images are stored in a blobstorage.


All content is stored in a tree. The tree is used as a base for the navigation of the site and also determines the url of each content object. Permissions can also be set on a per content basis and will be inherited from parent to child node when enabled.


All documents and api methods are protected by an extensive security system. Users and groups can have global or local roles which in their turn have permissions which are used to protect api methods.

Workflows can also be applied to documents to have even more flexibility for settings authorization.



All api calls are part of a transaction. If an error occurs the transaction will be rolled back so all data will stay in sync.

JSON Schema

Each content object can be defined based on a JSON Schema. The schema can contain manually added fields or predefined behaviors.


All CRUD (Create, Read, Update, Delete) operations are available for all data. This includes document, users, groups, roles, workflows etc.


CORS configuration is available by default can be easily specified in the configuration.


The api provides an extensive search mechanism which can be used to search for content. Batching and sorting is also available.


Workflow allows you to have content objects go through specific states. Transitions are specified to transfer between states.


All content objects have versioning enabled. This means all changes are saved from each update to the content object.


To prevent multiple users working on the same content at the same time locking is available to prevent data from being lost.


All changes to a document including editing and workflow changes are saved and can be viewed later. You can also revert to an older version.


Documents can be shared to provide access to specific users. You can specify any role you want the shared user to have.


Profiles can be used to import data into Nick. This can be all data including; documents, workflows, users, groups, permissions etc.


All messages send by the backend are translated. Specify the Accept-Language header to select your language of choice.

Get started

Nick uses Node.js 16.x and PostgresSQL make sure you have both installed before installing Nick. To create the database run the following SQL commands:

            $ CREATE DATABASE nick;
            $ CREATE USER nick WITH ENCRYPTED PASSWORD 'nick';
            $ GRANT ALL PRIVILEGES ON DATABASE nick TO nick;

Clone the repository and run the following command to bootstrap and start your application:

            $ yarn bootstrap
            $ yarn start

The rest api is now available at http://localhost:8000. If you want to run the Volto fronted follow the instructions in the README.md file in the frontend folder.

Learn more


A live demo of Volto connected to Nick can be found on demo.nickcms.org. You can login with username: admin and password: admin. Feel free to make any changes the content will be reset every night.


All documentation can be found on docs.nickcms.org. The documentation includes information on how to get your own installation running.

The documentation also describes all the REST API calls which can be made. For each call an example request and response is provided.

Want to contribute?

Join the development of Nick!