Migration guard
Before OLS runs a migration (Laravel, Symfony, Django, Prisma, Sequelize, Alembic, WP-CLI) it saves the project's database. Rewind puts it back.
Open Local Server is a local development environment manager for
Windows. It installs and supervises runtimes, gives every project its
own .test domain with trusted HTTPS, and keeps databases,
mail and caches behind one core engine.
Windows 10 / 11, 64-bit. OLS-2.12.0-setup.exe, a
portable zip,
and SHA-256 sums
to check either against. Source on
GitHub.
OLS 2.12.0 protects your data before it changes, shows you what your code is doing, and lets you test on a real phone. Everything new is opt-in or runs only when you ask.
Before OLS runs a migration (Laravel, Symfony, Django, Prisma, Sequelize, Alembic, WP-CLI) it saves the project's database. Rewind puts it back.
dump() and dd() from Laravel and Symfony show up inside OLS with clickable file and line, instead of breaking the page.
Each branch gets its own copy of the database, and switching branches switches .env for you. Your main database stays untouched.
Scan a QR code on the same Wi-Fi and install OLS's certificate once, with guided steps, for working HTTPS on a real phone.
Diagnostics flags PHP, Node, Python and database versions that no longer get security fixes, and each project's Security tab checks Composer, npm and pnpm packages for known vulnerabilities.
Copy staging or production over SSH with fake emails, names, phone numbers and passwords. The downloaded file is deleted right after import.
See what would break before switching a site to a newer PHP, then see where a slow request spent its time, inside OLS.
Clear old node_modules, vendor and build caches, and let MariaDB, PostgreSQL, Redis, MongoDB and Memcached sleep when unused (off by default).
The import dialog lists their sites and adds the ones you pick, with trusted HTTPS, without changing their files. Settings → Performance can also exclude project folders from Windows Defender's scan, and explains Dev Drive.
Other local stacks give you one PHP, one database and one shared web root, and the next project that needs a different PHP version changes it for everybody.
OLS keeps one environment per project instead. Multiple runtimes sit side by side, a version is pinned to the project that needs it, and the web server configuration, the database, the certificate and the domain registration are all done for you.
Every error it shows is a Diagnostic — what broke, why, and
how to fix it. It never overwrites configuration you edited by hand:
generated files are tracked, drift is detected, and history keeps a diff
and a restore for every change.
All four send the same CoreCommand JSON to
ols-core. The CLI and MCP server drive the running app, or communicate through the local control channel.
Runtimes, sites, databases, trusted HTTPS, and a built-in Model Context Protocol server for AI coding assistants.
Side-by-side versions per runtime, with a default for new projects that a project can override.
.venv, venv)Let AI coding assistants control and configure your local stack.
ols-mcp.exe) shipped directly in the installerEvery project gets its own domain and a certificate Windows already trusts.
<folder>.test resolution0.0.0.0) for LAN access and router port forwardingThree engines, generated configuration, and a history that shows every diff.
Engines, users, backups, and built-in database inspection tools.
Reproducible environments, scheduled backups, and portable site bundles.
composer.json, package.json, manage.py*.olsbundle.zip with encrypted .env and database dumps.env editorBroadcast sites to the web or sync custom domains with dynamic DNS.
Real-time health, traffic, diagnostics, in-app updates, and offline docs.
The same engine, reachable the way your tools and scripts expect.
olsc.exe beside the app; works with GUI closed via background core127.0.0.1:7420) with bearer tokens and scoped permissionsScreenshots captured from the running desktop app in its dark theme. Nothing on this page is a mock-up.
Dashboard Sites and projects counted, resource rings, a traffic graph built from the access log, all nine services with their ports, and diagnostics. Unavailable services are shown flat grey rather than looking clickable.
Sites
One table for sites and projects. Tick rows and the bulk bar appears — enable, disable, add auto domains, move them to another web server, or delete — and a batch reports what changed and what it skipped. Each row's own settings open its web config, servers, terminal, .env, Git, workers, snapshots, repair and load testing.
Projects Keep project folders organized independently from sites. Search by name, path or site, filter by project type, connect a project to a local site, or add a folder and clone from Git.
Runtimes Every runtime with its installed versions, a default badge and a manage action — plus the two ways to bring your own: scan a folder, or locate a single executable.
Version manager Per runtime: search the vendor catalog, download and install, then manage extensions, Xdebug and the default for each installed version. SHA-256 is checked when the vendor publishes it.
Web server Engine choice, ports and ownership mode. The config is validated before the reload, rolled back if it fails, and compared against what is on disk so hand edits surface as drift instead of being overwritten.
Databases
Engines, databases and users with the connection details to paste. Backup takes a safety copy first; SQLite runs .backup and an integrity check. Databases from other common Windows stacks import live, without a dump file.
Tunnels
Nothing is made public without starting it and confirming the exposure. Provider binaries are found on PATH or in a known location rather than installed for you; tokens stay in Windows Credential Manager.
Docker Containers grouped by Compose project, with ports that open in the browser, the site each one serves, logs, a settings panel and Create site. OLS talks to Docker only while the page is open, and never installs it.
Compose builder Pick services or your own presets; OLS chooses free ports on 127.0.0.1, generates passwords into the Windows credential store, and shows the exact file before writing it. Stacks run from the Compose tab with live output.
Everything below is done in the desktop app. The command line is optional and there is a section below for it, because most of the work is not terminal work.
Run the downloaded OLS-2.12.0-setup.exe and open OLS.
Windows 10 or 11, 64-bit.
Open Runtimes and install a PHP version, plus Node or Python if you use them. Checksums are verified on download.
Open Sites, add a project folder and give it a domain.
.test names resolve without editing the hosts file.
Apply the web config and trust the local certificate authority once, so HTTPS sites stop warning.
olsc) & AI (ols-mcp)
The install folder (C:\OLS) holds OLS.exe (the app),
olsc.exe (the command line), and ols-mcp.exe (the MCP
server for AI assistants). (olsc rather than ols because
Windows does not tell file names apart by case: the app is
OLS.exe, so anything called ols finds the app
and opens a window instead of running a command.) The installer does not
add that folder to your PATH, which is why olsc
can come back as "not recognised". Pick whichever of these suits you:
C:\OLS under Path, then open a new
terminal. olsc status works from there on.
C:\OLS\olsc.exe status
olsc and ols-mcp talk to the app while it is open and communicate through the local control channel, so they behave consistently.
olsc status # services, sites, runtimes
olsc start # start every enabled service
olsc stop # stop everything
olsc doctor # problems as Problem / Cause / Fix
olsc project list # registered projects
olsc service list # MariaDB, Postgres, Redis, Mailpit…
olsc runtime list # installed PHP and Node versions
olsc runtime eol # versions without security fixes
olsc project audit my-site # Composer, npm, pnpm vulnerabilities
olsc project reclaim --days 90 # rebuildable folders in idle projects
olsc php check-upgrade my-site 8.4 # what breaks before switching PHP
olsc db guard list # database copies saved before migrations
olsc tunnel start --provider cloudflared --port 443
olsc worker run --queue default
olsc snapshot create --name "before-upgrade"
olsc search "mailpit"
olsc docker ps # containers
olsc docker dockerize my-site # plan: what OLS found, nothing written
olsc docker dockerize my-site --create --services mariadb,redis
olsc docker compose watch compose.yaml
# Clone any PHP / Node / Python project
git clone https://github.com/example/my-laravel-app.git
cd my-laravel-app
# Runtimes, database, domain, DNS, SSL, mail, workers
olsc setup
# Preview the plan without applying it
olsc setup --dry-run
# Health, then safe fixes
olsc doctor
olsc repair
For working on OLS itself. Nothing in the four steps above needs this.
# Rust toolchain (if missing)
winget install Rustlang.Rustup
# Node 22 (if missing)
winget install OpenJS.NodeJS.LTS --version 22
# UI dependencies
cd ui
npm install
# Tauri + Vite + Rust core, with hot reload
.\scripts\dev.bat
# Quality gates
cargo fmt --all
cargo clippy -p ols-core -p ols-helper --all-targets
cargo test -p ols-core -p ols-helper
cd ui; npm run lint; npm run build
cd ..
# NSIS / MSI bundle
cargo tauri build
ols-core is a single CoreCommand dispatcher over
shared state. The GUI, the CLI, the HTTP API, and the MCP server are four front doors onto
the same managers — there is no second implementation of anything.
ols-core · Tokioolsc — separate program beside the app; works once C:\OLS is on PATHols-mcp — stdio JSON-RPC 2.0 tools for Claude Desktop, Cursor, VS Codeols-helper — hosts, NRPT and services over a named pipe or one UAC promptapp.db; OLS_HOME overrides every path
ols-mcp.exe ships beside the app. Connect Claude Desktop, Cursor, or any AI assistant to inspect projects, manage domains, and run database queries:
{
"mcpServers": {
"ols": {
"command": "C:\\OLS\\ols-mcp.exe"
}
}
}
The local API is off by default and listens on
127.0.0.1:7420. Every request needs a bearer token;
requests carrying an Origin header are refused:
curl -H "Authorization: Bearer ols_..." \
http://127.0.0.1:7420/v1/ping
curl -H "Authorization: Bearer ols_..." \
-H "Content-Type: application/json" \
-d '{"type":"list_services"}' \
http://127.0.0.1:7420/v1/command
Plugins are declarative: a plugin.yaml checked against a
schema, contributing runtimes, Quick App recipes, project detections
or health checks. A plugin stays off until you approve exactly the
permissions it lists, and remote catalogs are minisign-signed and
re-verified on every load.
OLS keeps specs/ as its source of truth for architecture,
modules, data models and API. A pull request that changes behaviour
without updating the matching spec is rejected in review — so the
documentation cannot drift away from the code.
Reports and discussions go to the issue tracker. Security issues follow the published policy rather than a public issue.
Start with the installer. The four steps above take a project folder from a clone to a working site on a certificate your browser already trusts.