Though it may feel counterintuitive at first, using TurboRepo in a microservices system begins to make a lot of sense when you consider the valid and strategic advantages it brings.
Key Benefits
1. Monorepo with Microservices: Structure with Flexibility
Monorepo + Microservices = Shared code + Independent services
- TurboRepo supports a monorepo architecture where each microservice remains logically independent.
- This works particularly well for internal microservices developed and maintained by a single team or organization.
- Not ideal for third-party or externally hosted services, but excellent for cohesive systems.
2. Shared Code and Libraries
- Extract common logic into reusable packages (e.g., in the
/packages
folder). - Avoid duplication across microservices.
- Ensure updates and fixes to shared libraries are automatically reflected across all consuming services.
Example shared packages:
packages/
auth-lib/ # Shared authentication logic
config-utils/ # Common configuration tools
3. Consistent Tooling Across Services
- Use a unified configuration for tools like ESLint, Prettier, and TypeScript across all services.
- Manage dependencies via
pnpm
or Yarn workspaces. - Enforce best practices and streamline onboarding for new developers.
4. Incremental Builds and Caching
- TurboRepo provides smart caching of build artifacts.
- Supports incremental builds—only rebuilds packages/services that have changed.
- Use remote caching (e.g., with Vercel) to speed up CI/CD across machines and teams.
Saves time and compute in both local dev and CI environments.
5. Improved Developer Experience (DX)
- Use scoped commands like:
turbo run test --filter=payment-service
- Run, build, or test only the affected services or packages.
- CI pipelines are significantly faster due to parallel execution and caching.
- Local development becomes easier with co-located code and utilities.
Recommended Project Structure
apps/
api-gateway/ # API gateway or BFF layer

web-app/ # Frontend web application
mobile-app/ # Mobile frontend (React Native, Flutter, etc.)
packages/
auth-lib/ # Shared authentication logic
config-utils/ # Common config/environment utilities
services/
user-service/ # Microservice for user management
payment-service/ # Microservice for payments
notification-service/ # Microservice for sending notifications
When Does It Make the Most Sense?
Using TurboRepo for microservices is ideal when:
- You have closely related services developed in parallel.
- Your services are internally deployed or tightly coupled in purpose.
- You want to share code, config, and tools across services.
- You need fast, intelligent CI/CD pipelines and optimized builds.