
If you’re using Nx for your full-stack or monorepo setup, the latest v21 release is going to make your dev life way easier.
Say goodbye to running five terminals just to start your frontend and backend. With Continuous Tasks, you can now keep related long-running tasks running together — all from a single command.
Let’s unpack it. 👇
💡 What Are Continuous Tasks?
A continuous task is any command that stays alive while you work — for example:
nx serve
(dev server for frontend/backend)nx test --watch
nx lint --watch
- Custom scripts like file watchers or background syncers
Previously in Nx, these tasks couldn’t depend on each other properly. You had to start them manually — and hope you didn’t forget a terminal.
Now in Nx v21?
You can chain continuous tasks together — and Nx will keep all of them running behind the scenes.
✅ Why This Is a Big Deal
Before:
- Open one terminal for backend
- Open another for frontend
- Maybe another for tests or lint
After:
- Run one Nx command
- Everything spins up, stays in sync, and runs smoothly 🔥
This isn’t just for small projects. If you’re managing a microservice setup or large monorepo, this is a massive productivity win.
🛠 How to Set It Up
Let’s say you’ve got:
apps/frontend
→ Angular/React/Vite appapps/api
→ Node/Express backend
You want to run both in dev mode from one command. Here’s how.
Step 1: Define the Dependency in Frontend
In apps/frontend/package.json
:
{
"nx": {
"targets": {
"dev": {
"dependsOn": [
{ "projects": ["api"], "target": "serve" }
]
}
}
}
}
This says: “Before I run the frontend dev command, start the backend too.”
Step 2: Mark the Backend Task as Continuous
In apps/api/package.json
:
{
"nx": {
"targets": {
"serve": {
"continuous": true
}
}
}
}
This tells Nx, “Hey, this task keeps running — don’t expect it to exit.”
💥 Real-World Use Cases
1. Microservices
If you’ve got multiple backends like:
- auth service
- product catalog
- orders service
Just declare them as dependencies of your frontend:
"dependsOn": [
{ "projects": ["auth"], "target": "serve" },
{ "projects": ["products"], "target": "serve" },
{ "projects": ["orders"], "target": "serve" }
]
All will spin up automatically when you run your app.
2. Watch All the Things
Imagine a “dev” target that runs:
- Your API in dev mode
- Your frontend with HMR
- Tests in watch mode
- Linter in watch mode
jsonCopyEdit"dependsOn": [
{ "projects": ["api"], "target": "serve" },
{ "projects": ["frontend"], "target": "test" },
{ "projects": ["frontend"], "target": "lint" }
]
Mark each of them as "continuous": true
— and boom, your entire workflow is automated.
🧭 Bonus Tip: Visualize with nx graph
Want to see how everything connects?
nx graph
You’ll get a clean visualization of task dependencies and project relationships. Super useful for debugging and planning.
⌨️ One Command to Run It All
After setup, you just need:
nx run frontend:dev
That’s it.
- API? ✅
- Frontend? ✅
- Watchers? ✅
- Multiple terminals? ❌
❤️ Final Thoughts
Continuous Tasks in Nx v21 might seem small — but they’re huge in practice.
✅ Fewer manual steps
✅ No forgotten servers
✅ Cleaner workflows
✅ Perfect for monorepos and microfrontends
If you’re already using Nx, start using this today. If not — this might be the feature that gets you on board.
👉 What’s your Nx setup like? Have you tried Continuous Tasks yet?
Drop your thoughts or setup tips in the comments