Skip to content

ADR 0008: Repository tooling conventions ​

  • Status: accepted
  • Date: 2026-10-04
  • Issues: #144, #150, #107
  • Pull requests: #145, #153
  • Builds on: ADR 0002

Context ​

Elysion started with a Prettier config per app, which disagreed (the NestJS apps used the default print width and trailing commas, the Angular app 100 columns), no shared editor settings and no root scripts to build, test or lint everything. GravionLabs/ariadne already solved this with a handful of root files.

Decision ​

  1. pnpm only, pinned through packageManager; Node is pinned in .nvmrc (24, matching the Dockerfiles).
  2. One root formatter configuration: .prettierrc (100 columns, single quotes, trailing commas, the Angular parser for HTML), .prettierignore and .editorconfig. Per-app Prettier configs are removed. pnpm format / pnpm format:check run over the whole repository.
  3. Root scripts fan out with pnpm -r --if-present: build, test, lint.
  4. oxlint is the linter for every TypeScript app. Each app has its own oxlint.json and a lint script: the NestJS apps lint src/ and test/; the canvas enables the React and React hooks rules; the Angular app turns on the typescript and oxc plugins. All of them treat the correctness category as errors, and the frontends also report suspicious findings as warnings. There is no root ESLint configuration as in ariadne. Rules that are switched off carry a reason in the config or in an oxlint-disable-next-line comment next to the code.
  5. No shared tsconfig.base.json. The apps need different module systems and compiler options (NestJS with nodenext and decorators, the canvas with a bundler and JSX, Angular with its own options), so a base would share almost nothing. This keeps ADR 0002.
  6. Editor setup is committed: .vscode/extensions.json, launch.json (one configuration per service and a full-stack compound) and tasks.json. Other files in .vscode stay ignored.
  7. The repository is MIT licensed.

Consequences ​

  • The initial reformat touched about 40 files; formatting-only commits will show up in git blame.
  • Every new app inherits the formatter without configuration. A new TypeScript app adds an oxlint.json and a lint script (pnpm lint at the root picks it up); compiler options are still chosen per app.
  • Ports for local runs are fixed in launch.json (frontend 4200, BFF 3000, realtime 3001, business backend 5174), and changing them means changing the configurations and the README table together.

A pre-release. Released under the MIT license.