Shipping an extension, a shared crypto SDK and an admin dashboard from one repo only works if the tooling stays out of your way.
Workspaces
pnpm links local packages so the SDK is imported like any dependency but edited in place. No publishing, no version drift.
{ "packages": ["apps/*", "packages/*"] }
Caching the build graph
Turborepo caches task outputs keyed by inputs. Change one package and only its dependents rebuild — everything else is a cache hit.
- Shared ESLint/TS config as internal packages
turbo run buildrespects the dependency graph- CI restores the remote cache, so cold builds are rare
> The monorepo isn't the hard part. Cache invalidation is — and Turbo makes it boring.