Monorepos are not a moral good. They are a coordination technology: one graph of tasks, shared types, and atomic changes across apps. Arche defaults to a monorepo for TypeScript fullstack because the product shape is inherently multi-surface (web, API, worker, packages).
When a monorepo wins
- Shared contracts —
packages/trpcandpackages/storechange withapps/serverandapps/webin one commit - One CI graph — Turborepo runs lint/typecheck/test/build in dependency order
- One catalog — Bun or pnpm workspace catalogs keep versions aligned
- Agent context — a single
AGENTS.mdmap with workspace children
That is the TypeScript fullstack preset in one sentence.
When to split repos
Consider separate repositories when:
- Release cadences are completely independent and you accept manual contract versioning
- Teams have hard legal/security boundaries between artifacts
- The “shared” code is tiny relative to coordination tax
Arche does not forbid polyrepo workflows—it simply optimizes for the case where you are building a product, not publishing a library in isolation.
Turborepo in generated projects
Root turbo.json is rendered, not copied blindly:
- Transit nodes for dev servers
db:*when Prisma existsmdx:generatewhen the web app ships Fumadocs content
Remote cache is not promised by default. You can wire CI credentials later; the template does not claim remote cache is on.
Boundaries that matter
apps/* → compose features, stay thin
packages/* → domain logic, no UI importsThe Architecture page shows the TypeScript layout. Breaking the rule (“just this once import Prisma in a component”) is how monorepos become mud.
Package managers
Bun default, pnpm where verified. See Package managers. Mixing lockfiles after scaffold is self-inflicted pain.
Solana and Rust presets
Not every preset is a JS monorepo—Rust uses Cargo workspaces; Solana splits program/client/mobile. The monorepo lesson still applies: one graph, explicit boundaries, different manifests.
Practical takeaway
If you are building a fullstack product with shared types, start monorepo. If you are publishing a single npm package, use a library preset or another tool. Arche’s typescript-fullstack is aimed squarely at the first case.