Multi-app development
3 apps running means 3 servers, 3 ports, 3 terminal tabs. You need efficient workflows to run all apps, test specific apps, and avoid port conflicts. Turborepo's filtering and parallelization make multi-app development seamless.
Outcome
Learn efficient patterns for developing multiple apps simultaneously.
Hands-on exercise 8.3
Run all apps
pnpm devOutput:
• Running dev in 3 packages
@geniusgarage/web:dev: ready on http://localhost:3000
@geniusgarage/snippet-manager:dev: ready on http://localhost:3001
@geniusgarage/docs:dev: ready on http://localhost:3002
All apps run in parallel with hot reload!
Run specific app
# Only marketing site
pnpm --filter @geniusgarage/web dev
# Only snippet manager
pnpm --filter @geniusgarage/snippet-manager dev
# Only docs
pnpm --filter @geniusgarage/docs devSaves resources when working on one app.
Run multiple specific apps
# Marketing + docs
pnpm --filter @geniusgarage/web --filter @geniusgarage/docs devRun by pattern
# All apps
pnpm --filter "./apps/*" dev
# All packages
pnpm --filter "./packages/*" devCross-app features
Link between apps
Update apps/web to link to docs:
<a href="http://localhost:3002" className="text-blue-500 underline">
View Component Docs
</a>Update apps/docs to link back:
<a href="http://localhost:3000" className="text-blue-500 underline">
Back to Marketing
</a>Run all apps and test navigation between them!
Shared state (future)
For apps that need to share data, use:
- API routes - one app exposes API, others consume
- Database - shared database layer in packages/db
- Event bus - packages/events for pub/sub
Port management
Current ports:
- 3000: apps/web (marketing)
- 3001: apps/snippet-manager (snippet manager)
- 3002: apps/docs (documentation)
Add fourth app:
- 3003: apps/admin (future admin dashboard)
Configure in package.json:
{
"scripts": {
"dev": "next dev --port 3003"
}
}VS code multi-root workspace
Create .vscode/monorepo.code-workspace:
{
"folders": [
{ "path": "apps/web", "name": "web" },
{ "path": "apps/snippet-manager", "name": "snippet-manager" },
{ "path": "apps/docs", "name": "docs" },
{ "path": "packages/ui", "name": "ui" },
{ "path": "packages/utils", "name": "utils" }
],
"settings": {
"typescript.tsdk": "node_modules/typescript/lib"
}
}Open with: File → Open Workspace → Select monorepo.code-workspace
Each folder appears in sidebar!
Debugging multiple apps
Use different browser profiles
- Profile 1: localhost:3000 (web)
- Profile 2: localhost:3001 (app)
- Profile 3: localhost:3002 (docs)
Keeps cookies, storage, and devtools separate!
Terminal multiplexer
Use tmux or screen:
# Create session with 3 panes
tmux new-session \; \
split-window -h \; \
split-window -v \; \
select-pane -t 0 \; \
send-keys "pnpm --filter @geniusgarage/web dev" C-m \; \
select-pane -t 1 \; \
send-keys "pnpm --filter @geniusgarage/snippet-manager dev" C-m \; \
select-pane -t 2 \; \
send-keys "pnpm --filter @geniusgarage/docs dev" C-mAll apps in one terminal window!
Performance tips
Selective dev mode
Only run apps you're working on:
# Working on docs? only run docs
pnpm --filter @geniusgarage/docs dev
# Testing UI changes? run all apps
pnpm devBuild watch mode
For packages, use build watch:
# Watch UI changes
pnpm --filter @geniusgarage/ui dev:build
# In separate terminal, run apps
pnpm --filter "./apps/*" devRestart strategy
Change to app code: Hot reload (automatic)
Change to shared package: Restart dev server
# Quick restart
Ctrl+C
pnpm devOr use nodemon/watch for auto-restart.
Common workflows
Frontend-focused work:
# Run all apps, watch for UI changes
pnpm devSingle-app feature:
# Run only that app
pnpm --filter @geniusgarage/snippet-manager devPackage development:
# Run package tests in watch mode
pnpm --filter @geniusgarage/ui dev:test
# Run one app to test integration
pnpm --filter @geniusgarage/web devFull-stack feature:
# Run all apps + packages in watch mode
pnpm devDone-when
Verify multi-app workflows:
- Ran
pnpm devand saw all 3 apps start - Ran specific app with
--filter - Ran multiple apps with multiple
--filterflags - Added cross-app links and tested navigation
- Understood port management (3000, 3001, 3002)
- Created VS Code multi-root workspace (optional)
- Tested selective dev mode for performance
- Understood when to run all vs specific apps
- Know how to restart on package changes
What's Next
Section 7 complete! You have:
- 3 apps running in the monorepo
- All apps deployed independently
- Efficient local development workflows
Section 8: Enterprise Patterns - Learn advanced patterns for scaling to large teams: Turborepo generators (auto-create components), Changesets (versioning), and code governance (CODEOWNERS, boundaries). These patterns help 10+ person teams work efficiently in monorepos.
Was this helpful?