Every developer who works on multiple projects locally knows the pain.
You've got an Ionic app on port 8101, a Laravel API on 8000, and an Angular portal on 4200. That's three terminal tabs, three commands to remember, three processes to track, and the moment you close a terminal by accident, you're back to square one. I built DevLaunch to fix exactly that.
What is DevLaunch?
DevLaunch is a single-file PHP dev server manager with a Vercel-inspired dark UI. You add your local projects, assign them a command and port, and then start, stop, and monitor them all from one browser tab.
No npm install. No composer. No build step. Drop one index.php into any folder served by PHP and open it in your browser.
Features
- Single file: the entire app (PHP backend + HTML/CSS/JS frontend) lives in one index.php
- Add any project: browse your filesystem server-side (yes, including Windows drives like D:) to select a project folder; the name is auto-detected
- Any command: ionic s, npm run dev, ng serve, vite, php artisan serve — whatever you run in the terminal
- Custom ports: assign a port per project; the --port flag is auto-appended if not already in your command
- Start/Stop: launches as a real detached background process, kills the full process tree on stop (no zombie node processes)
- Live log viewer: tail stdout/stderr from any running project in a slide-up terminal panel
- Running detection: auto-detects whether a process is still alive after page refresh or system events
- Windows + Linux + macOS: works everywhere PHP runs
Quick Start
git clone https://github.com/ManthanBhatt/dev-launch.git
Drop the folder inside your XAMPP/Laragon htdocs (or anywhere served by PHP), then open:
http://localhost/dev-launch/
Or use PHP's built-in server:
cd dev-launch
php -S localhost:8080
That's it.
How it works
The whole thing is a single PHP file that serves two roles depending on the request:
As an API - when a request comes in with the X-DevLaunch-API header, PHP handles actions like start_project, stop_project, browse_dirs, and get_log. Project data is stored in a plain devlaunch_data.json file, and running PIDs are tracked in devlaunch_pids.json.
As the UI - for every other request, PHP outputs the full HTML page with embedded CSS and JavaScript.
Starting a project uses proc_open() to launch the command as a real detached background process in the correct working directory. The process writes its output to a temp log file that the log viewer polls every 2 seconds.
$process = proc_open($p['cmd'], $descriptors, $pipes, $p['path']);
$status = proc_get_status($process);
$pid = (int)$status['pid'];
On Windows, it wraps the command in cmd /C so tools like ionic, npm, and ng resolve correctly from PATH. Stopping a project calls taskkill /F /T to kill the entire process tree - no orphan Node processes lingering in Task Manager.
Why PHP?
Honestly, the goal was zero setup. PHP is already running on most local dev environments - XAMPP, Laragon, MAMP, or the built-in server. No runtime to install, no package manager, no compilation. You just put a file somewhere and it runs.
Single-file PHP also means the whole thing is trivially auditable - there are no hidden dependencies, no transitive packages, nothing that phones home. It's ~1,200 lines of code you can read in one sitting.
What's next
Some ideas I'm thinking about for future versions:
- Environment variable editor per project
- Auto-restart on crash with configurable retry
- Multiple commands per project (e.g. spin up a frontend + backend simultaneously with one click)
- Export/import project list for sharing across machines
Try it / Contribute
The project is MIT licensed and open source on GitHub:
github.com/ManthanBhatt/dev-launch
If you work on multiple local projects and find this useful, a ⭐ on GitHub goes a long way. PRs, issues, and feature ideas are all welcome.
Built out of frustration with terminal tab juggling. Hope it helps someone else too.Share

Top comments (0)