# Turborepo + pnpm + shared UI package
URL: https://wwadd.dev/stacks/turborepo-pnpm-shared-ui
Last verified: 2026-09-28

For teams running several apps that must look and behave like one product.

## When to use it
- You have a marketing site, an app, and maybe a docs site drifting apart visually
- Multiple teams need to change shared components without a publish-and-wait cycle
- CI time is climbing because every push rebuilds everything

## How the pieces fit
pnpm workspaces link packages from disk, so editing the shared UI package is instantly reflected in every app — no versioning ceremony. Turborepo builds a task graph and caches by content hash, so untouched packages are skipped and CI only rebuilds what changed. Remote caching means a teammate's build result becomes your cache hit. Shared ESLint, TypeScript, and Tailwind config packages keep the rules identical everywhere.

## The tech and its role
- [pnpm workspaces](https://wwadd.dev/tools/pnpm): Dependency linking and disk-efficient installs
- [Turborepo](https://wwadd.dev/tools/turborepo): Task orchestration and build caching
- packages/ui: Shared component library
- packages/config: Shared ESLint / TS / Tailwind presets
- [Changesets](https://wwadd.dev/tools/changesets): Versioning if packages are published externally

## Real-world examples
- Vercel's design-system template: Turborepo's maintainer publishes a reference monorepo with a shared component package consumed by apps. A vendor example, not an independent one. (source: https://vercel.com/templates/react/turborepo-design-system)
- OpenStatus: Open-source uptime monitoring whose Turborepo + pnpm monorepo shares one @openstatus/ui package across its marketing site, dashboard, and public status pages — the exact drift problem this stack solves. (source: https://github.com/openstatusHQ/openstatus)

## Skip if
Skip if you have one app and one team — a monorepo adds tooling overhead that only pays off across multiple consumers.

