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 thedesktop, theserverbut 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 moreapps.commons, containing shared code for all the apps.
Working with the project#
For example to run the server instance:
pnpm server:startRunning 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.