Skip to content

Development setup

Folder structure

The benchmark is split into three separate packages:

  1. ./: integration tests and linters for Typescript and CSS
  2. ./app: our React frontend
  3. ./wrapper: our backend + electron to wrap everything up and build a single binary


  1. install NodeJS version 14.x or later
  2. install a C++ compiler and add it to your PATH
  3. the easiest way to accomplish this on Windows is installing the VisualStudio BuildTools for C++ (+ reboot)
  4. install Python3 for your distribution
  5. run npm install in ./, ./app and ./wrapper

Python3 and C++ are required to build the native extensions for sqlite3.



  • run npm start-api in ./wrapper to start the backend
  • run npm start in ./app to start the frontend and open a browser

If you want to start the electron wrapper:

  • run npm run release-app in ./ to build and copy the app to ./wrapper
  • run npm run erebuild in ./wrapper to recompile the dependencies to the NodeJS version of electron
  • run npm run start in ./wrapper to start backend and frontend inside electron
  • run npm run rebuild in ./wrapper to recompile the dependencies back to the global NodeJS version


Run the Start Stack compound to start frontend and backend and open Chrome. You can now use breakpoints in ./app and ./wrapper/api.


  • run npm run release in ./ to build the frontend and backend and package them in an executable file
  • the executable will be located at ./wrapper/build/<platform>/


  • run npm run lint or npm run lint-fix in ./ to lint the project
  • run npm run test in ./ (integration tests), ./app (frontend tests) and ./wrapper (backend tests) to test the project
  • the integration tests require a running instance of the backend and the frontend
  • use npm run test-ci to automatically start frontend and backend before running the integration tests

Backend API

The backend API can also be reached directly. Have a look at our REST API specification for details.

Command Line Arguments

The backend supports the following command line arguments:

  • --storageDirectory path/to/directory: Where the database and configuration files live
  • default if starting via npm run start-api: .../wrapper/storage
  • default if starting via npm run start or executable: electrons userData folder
  • --inMemory: If present, an in memory database will be used. This increases the performance. Keep in mind that any changes made will be lost when the process is stopped.
  • default: not present
  • --hostname The API will be available on this hostname only.
  • default: localhost
  • --port 12345: The API will be available on this port.
  • default: 8123
  • --headless: If present, does not show the UI but starts the API directly.
  • default: not present
  • --limitMemory 100000000: If present, limit the amount of memory (RAM). The allocated memory grows linear with this number. Incrementing the amount by one will increase the maximum amount of memory by a few bytes to a few hundred bytes.
  • default: not present

Those arguments can be passed to

  • npm run start and npm run start-api in ./wrapper (do not forget to use -- to separate the npm command and the arguments)
  • the built executable file