Skip to main content
A package lives at packages/<category>/<name> and is published as @stackra/<name>. The category is only a folder: it never appears in the package name or an import path, so moving a package between categories changes nothing for its consumers.
A package never imports an app, a service or encore.dev, and never deep-imports another package’s src/.

A new package

  1. Create packages/<category>/<name>/ with package.json named @stackra/<name>.
  2. turbo.jsonc: { "extends": ["//"], "tags": ["tier:lib"] }.
  3. tsconfig.json: { "extends": "@stackra/typescript-config/library" } (or another preset).
  4. vitest.config.ts: extend a preset from @stackra/vitest-config.
  5. Every dependency is catalog:<name> or workspace:*.
pnpm validate checks steps 1, 2, 3 and 5.