Logo Developer Guide

Project Structure

As the application grew in complexity, we decided to switch to a monorepo based on pnpm. Our initial monorepo implementation used NX, but we've switched to pure pnpm workspaces and our own build scripts.

Project structure#

The mono-repo is mainly structured in:

  • apps, representing runnable entry-points such as the desktop, the server but also additional tooling.
    • client, representing the front-end that is used both by the server and the desktop application.
    • server, representing the Node.js / server version of the application.
    • desktop, representing the Electron-based desktop application.
  • packages, containing dependencies used by one or more apps.
    • commons, containing shared code for all the apps.

Working with the project#

For example to run the server instance:

pnpm server:start

Running and building#

Each application has a number of tasks. Here's a non-exhaustive list of the tasks that are useful during development. See Building.

Managing dependencies across the mono-repo#

We are using pnpm workspaces to manage the project structure. The workspace configuration is in pnpm-workspace.yaml at project level but it generally should not be modified.