Skip to content

Split customer-specific clients into separate repositories

Status

Accepted.

Context

The new architecture, as introduced by ADR 0009, has a generic NPM package (@polar/polar, which replaces the packages @polar/core, @polar/lib-X, @polar/plugin-X and @polar/client-generic) and several customer-specific clients (@polar/client-X).

The customer-specific clients are developed because of individual contracts and are (usually) not of major interest for other users. The maintenance of these clients is done primarily for the customers and does not contribute to the project's vision.

Decision

Customer-specific clients (i.e., clients that are not the snowbox or the generic client) are moved to separate repositories (one repository per client).

The new structure shall ensure that core changes can still be developed against a customer-specific client using HMR.

Consequences

  • (+) The repository structure is easier to understand (no monorepo).
  • (+) Rules for contributions can be different between core and clients.
  • (+) Contributors do not have to deal with customer-specific clients.
  • (+) Real-world examples for implementing your own client in your own repository are provided.
  • (+) Generating SBOMs is easier.
  • (-) Following up with updates needs to be done in different repositories.
  • (+) However, SemVer is used and helpers such as renovate exist.
  • (o) Documentation of breaking changes including a migration guide is necessary.