Development setup
Folder structure
The benchmark is split into three separate packages:
./
: integration tests and linters for Typescript and CSS./app
: our React frontend./wrapper
: our backend + electron to wrap everything up and build a single binary
Installation
- install NodeJS version
14.x
or later - install a C++ compiler and add it to your PATH
- the easiest way to accomplish this on Windows is installing the VisualStudio BuildTools for C++ (+ reboot)
- install Python3 for your distribution
- run
npm install
in./
,./app
and./wrapper
Python3 and C++ are required to build the native extensions for sqlite3.
Running
Manual
- 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
VSCode
Run the Start Stack
compound to start frontend and backend and open Chrome. You can now use breakpoints in ./app
and ./wrapper/api
.
Building
- 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>/
Testing
- run
npm run lint
ornpm 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: electronsuserData
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 example.org
: 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
andnpm run start-api
in./wrapper
(do not forget to use--
to separate thenpm
command and the arguments)- the built executable file