Skip to content

Getting Started

DevAll is a unified development dashboard that helps you manage multiple services, processes, and development tools from one interface. This guide will walk you through installation and your first project setup.

Run DevAll directly with npx - always uses the latest version:

Terminal window
npx devall

Recommended: This approach ensures you always use the latest version without managing installations.

Install DevAll globally to use the devall command anywhere:

Terminal window
npm install -g devall

For Javascript or Typescript projects, you can also setup DevAll as a development dependency in your project to keep things self-contained:

Terminal window
npm install -D devall

Add to your package.json scripts:

{
"scripts": {
"devall": "devall"
}
}

Run with:

Terminal window
npm run devall

Or directly:

Terminal window
npx devall

Benefit: Adding DevAll to your npm scripts keeps it in your project’s node_modules without modifying your system PATH. Team members can simply run npm run devall without installing anything globally.

DevAll uses JSONC (JSON with comments) for configuration. Create a devall.jsonc file in your project root:

{
"dashboard": {
"port": 7777,
"open": true
},
"services": [
{
"name": "Frontend",
"command": "npm",
"args": ["run", "dev"],
"cwd": "./frontend",
"port": 3000,
"autostart": true,
"watchFiles": true
},
{
"name": "Backend API",
"command": "npm",
"args": ["run", "dev"],
"cwd": "./backend",
"port": 8080,
"autostart": true,
"stealPort": true
}
]
}
Terminal window
npx devall

Or specify a custom config file:

Terminal window
npx devall path/to/config.jsonc

DevAll will automatically open your browser to http://localhost:7777 (or your configured port). You’ll see:

  • Service Cards: Each configured service with status indicators
  • Live Logs: Real-time stdout/stderr output
  • Control Buttons: Start, stop, and restart services
  • System Resources: Monitor CPU, memory, and more

DevAll supports multiple configuration files with the following priority (highest first):

  1. devall.local.jsonc (gitignored by convention)
  2. devall.local.json
  3. devall.json
  4. devall.jsonc

This allows you to have team-wide settings in devall.jsonc and personal overrides in devall.local.jsonc.

The most common setup - a React frontend with an Express backend API:

devall.jsonc
{
"name": "My React + Express App",
"services": [
{
"id": "frontend",
"name": "React",
"command": "npm",
"args": ["start"],
"cwd": "./client", // Frontend folder
"port": 3000,
"autostart": true,
"openBrowser": true // Opens browser when ready
},
{
"id": "backend",
"name": "Express API",
"command": "npm",
"args": ["run", "dev"],
"cwd": "./server", // Backend folder
"port": 5000,
"autostart": true,
"stealPort": true, // Kills any process on port 5000
"env": {
"NODE_ENV": "development",
"DB_HOST": "localhost"
}
}
]
}

For Next.js apps with API routes:

{
"name": "Next.js App",
"services": [
{
"id": "nextjs",
"name": "Next.js",
"command": "npm",
"args": ["run", "dev"],
"port": 3000,
"autostart": true,
"openBrowser": true,
"stealPort": true
},
{
"id": "database",
"name": "MongoDB",
"command": "mongod",
"args": ["--dbpath", "./data"],
"port": 27017,
"secondary": true // Hide by default, toggle when needed
}
]
}

Mix different technologies easily:

{
"name": "Python + React",
"services": [
{
"id": "react",
"name": "React Frontend",
"command": "npm",
"args": ["start"],
"cwd": "./frontend",
"port": 3000,
"autostart": true
},
{
"id": "flask",
"name": "Flask API",
"command": "python",
"args": ["-u", "app.py"], // -u for unbuffered output
"cwd": "./backend",
"port": 5000,
"autostart": true,
"env": {
"FLASK_ENV": "development",
"FLASK_DEBUG": "1"
}
}
]
}
{
"name": "Monorepo",
"services": [
{
"id": "shared",
"name": "Shared Components",
"command": "npm",
"args": ["run", "build:watch"],
"cwd": "./packages/shared",
"autostart": true,
"background": true // Runs but doesn't show in UI
},
{
"id": "web",
"name": "Web App",
"command": "npm",
"args": ["run", "dev"],
"cwd": "./apps/web",
"port": 3000,
"autostart": true
},
{
"id": "admin",
"name": "Admin Panel",
"command": "npm",
"args": ["run", "dev"],
"cwd": "./apps/admin",
"port": 3001,
"secondary": true // Start manually when needed
}
]
}

Set stealPort: true to automatically kill processes occupying your service’s port before starting:

{
"name": "Development Server",
"command": "npm",
"args": ["run", "dev"],
"port": 3000,
"stealPort": true // Reclaim port 3000 if occupied
}

DevAll parses your service output to detect when it’s actually ready:

  • ✅ “Server running on…”
  • ✅ “Listening on port…”
  • ✅ “Ready on http://localhost:…”
  • ⚠️ “app crashed - waiting for file changes”