OLS OLS

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.

  • v2.12.0
  • GPL-3.0-only
  • Rust core · Tauri 2 shell
  • GUI · CLI · API · MCP
The OLS dashboard: environment overview with CPU, RAM and disk donuts and a traffic graph, the web server card, and a services list with per-service ports, state and start, stop, restart, reload and log controls.
What's new · v2.12.0

Safer migrations, better debugging, and your phone

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.

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.

Dump viewer

dump() and dd() from Laravel and Symfony show up inside OLS with clickable file and line, instead of breaking the page.

Database per Git branch

Each branch gets its own copy of the database, and switching branches switches .env for you. Your main database stays untouched.

Open a site on your phone

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.

Security checks

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.

Pull a server database

Copy staging or production over SSH with fake emails, names, phone numbers and passwords. The downloaded file is deleted right after import.

PHP upgrade check and Profiler

See what would break before switching a site to a newer PHP, then see where a slow request spent its time, inside OLS.

Free up space and sleeping services

Clear old node_modules, vendor and build caches, and let MariaDB, PostgreSQL, Redis, MongoDB and Memcached sleep when unused (off by default).

Move in from Laragon, XAMPP or WampServer

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.

What is this

One environment per project, without hand-editing your machine

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.

Desktop app React 19 · Tauri 2
Command line olsc setup · doctor · status
Local HTTP API 127.0.0.1:7420 · bearer token
MCP Server ols-mcp · stdio for Claude & Cursor

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.

Key features

Everything a local environment needs, with native AI MCP control

Runtimes, sites, databases, trusted HTTPS, and a built-in Model Context Protocol server for AI coding assistants.

Runtimes & toolchain

Side-by-side versions per runtime, with a default for new projects that a project can override.

  • PHP NTS 8.1–8.5 and Node 22/24 side by side, plus Composer, portable Git and k6
  • Python support: detects system Python (3.7–3.15) and local virtual environments (.venv, venv)
  • Bring your own: scan any folder for existing installs, or locate one executable
  • Per-version extensions, Xdebug and PECL; corepack for npm, pnpm and yarn
  • Downloads verified against vendor SHA-256; plugins can add more runtimes

Model Context Protocol (MCP)

Let AI coding assistants control and configure your local stack.

  • Native stdio MCP server (ols-mcp.exe) shipped directly in the installer
  • Direct integration with Claude Desktop, Cursor, VS Code, LM Studio, and AGY
  • Tools to inspect site folders, detect frameworks & venvs, and create domains
  • Manage services, query database tables, and run SQL queries through natural language

Sites & trusted HTTPS

Every project gets its own domain and a certificate Windows already trusts.

  • Any domain plus wildcard subdomains; automatic <folder>.test resolution
  • Automatic welcome page (HTML or PHP info) generated if document root has no index
  • On-device CA, 397-day leaf certificates, auto-renew under 30 days left
  • Multi-interface binding (0.0.0.0) for LAN access and router port forwarding
  • Site logos and icons with custom WebP uploads and offline Font Awesome catalog

Web servers

Three engines, generated configuration, and a history that shows every diff.

  • Nginx 1.28, Apache 2.4 and Caddy 2.11 — switch a site with one click
  • Managed, Advanced and Manual modes; validate before reload, roll back on failure
  • Drift detection plus config history with diff and restore
  • Reverse proxy to any local or remote host and port

Databases & SQL tools

Engines, users, backups, and built-in database inspection tools.

  • MariaDB 11.4, PostgreSQL 17, MongoDB, Redis, Memcached, Mailpit, SQLite
  • Database tools: table listing, schema inspection, and SQL query execution
  • One-click external GUIs: HeidiSQL, pgAdmin 4, NoSQLBooster, Tiny RDM
  • Live database import from other common Windows stacks without manual SQL dumps

Projects & site bundles

Reproducible environments, scheduled backups, and portable site bundles.

  • Framework detection from composer.json, package.json, manage.py
  • 14-step setup pipeline: resolve, plan, conflict report, dry run, apply with rollback
  • Site bundles: export/import sites as *.olsbundle.zip with encrypted .env and database dumps
  • Scheduled automatic backups with configurable retention and lossless .env editor

Dynamic DNS & tunnels

Broadcast sites to the web or sync custom domains with dynamic DNS.

  • Dynamic DNS: 12+ providers (Cloudflare, DuckDNS, No-IP, Route53, etc.) with auto-sync
  • Site Broadcast controls with live status, one-click public URL copying, and instant toggle
  • Tunnels: Cloudflare, ngrok, LocalTunnel, Tailscale with exposure confirmation
  • Forwarding traffic inspector with request log, replay, and webhook tester

Dashboard, diagnostics & manual

Real-time health, traffic, diagnostics, in-app updates, and offline docs.

  • Services overview with colour-coded actions and live TCP health
  • Traffic graph built from web access logs, with hover request inspection
  • Diagnostics as Problem / Cause / Fix with safe one-click auto-repair
  • Built-in User Manual & release notes viewer in Settings, plus verified self-updater

CLI, API & automation

The same engine, reachable the way your tools and scripts expect.

  • Ships as olsc.exe beside the app; works with GUI closed via background core
  • Local HTTP API (127.0.0.1:7420) with bearer tokens and scoped permissions
  • 13 Quick App recipes (Laravel, Symfony, WordPress, Vite, Next.js, Django, FastAPI…)
  • Queue workers, cron scheduler with no overlapping runs, and portable-pty terminals
Product tour

The app, as it runs

Screenshots captured from the running desktop app in its dark theme. Nothing on this page is a mock-up.

Dashboard with an overview of sites and projects, CPU, RAM and disk rings, a traffic graph, the web server status card, the services list, diagnostics and environment health.

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.

The Sites page: one table of sites and projects with a checkbox on every row, one row selected and a bulk bar offering Enable, Add auto domain, Disable, a web server dropdown with Move sites, Delete and Clear. Filter tabs for Enabled, Disabled, Folder not found, PHP, Reverse proxy, No domain and All, with Export and Hide/Exclude in the bulk bar and rows-per-page and page controls at the foot of the table. The sidebar now lists Docker under Sites.

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.

The Projects page showing project folders, project types, connected sites, search, and actions to add or clone a project.

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.

The Runtimes page listing Apache, Caddy, Composer, Git, k6, Mailpit, MariaDB, Memcached, MongoDB, Nginx, Node.js, PHP, PostgreSQL, Python, Redis and SQLite with installed versions, default badges, update buttons and manage actions.

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.

The PHP versions dialog: search and install a version, then the installed versions list with the default badge, per-version extensions, Xdebug, set default and remove.

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.

The Web server page showing the active engine, HTTP and HTTPS ports, one aligned row per server with site counts, and the generated configuration with validate and apply controls.

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.

The Databases page showing engines with their data folders, database and user management, connection details, backup and restore, and links to external database tools.

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.

The Tunnels page: an empty state explaining that a tunnel gives a site a temporary public address, and a providers list showing Cloudflare, ngrok and LocalTunnel with the binary locations OLS found them at.

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.

The Docker page: Docker's status and version, Containers and Compose tabs, and containers grouped by Compose project with their image, short ID, linked site, published ports, state and actions for start or stop, restart, pause, logs, create site and settings.

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.

The New compose file dialog: a project folder, a list of services grouped as My presets, App, Database, Cache and Tools, the picked PHP + Apache and MariaDB services with their versions and automatic ports, a note that two passwords go to the Windows credential store, and a preview of the compose.yaml that will be written.

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.

Getting started

Four steps, all inside the app

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.

Install the app

Run the downloaded OLS-2.12.0-setup.exe and open OLS. Windows 10 or 11, 64-bit.

Install a runtime

Open Runtimes and install a PHP version, plus Node or Python if you use them. Checksums are verified on download.

Point a site at it

Open Sites, add a project folder and give it a domain. .test names resolve without editing the hosts file.

Apply and trust

Apply the web config and trust the local certificate authority once, so HTTPS sites stop warning.

Command line (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:

  • Add the folder to PATH — Windows Settings → System → About → Advanced system settings → Environment Variables, add C:\OLS under Path, then open a new terminal. olsc status works from there on.
  • Call it by its full path — no change to the machine: 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.

Everyday commands

olsc
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

A project, end to end

PowerShell
# 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

Build from source

For working on OLS itself. Nothing in the four steps above needs this.

Prerequisites
# 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

Run it, or bundle it

From the repo root
# 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
For developers

One core, four front doors

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.

Stack

Core
Rust · ols-core · Tokio
Shell
Tauri 2 · tray · single IPC command
Frontend
React 19 · Vite 8 · Tailwind 4 · shadcn/ui · CodeMirror 6 · xterm.js
CLI
olsc — separate program beside the app; works once C:\OLS is on PATH
MCP Server
ols-mcp — stdio JSON-RPC 2.0 tools for Claude Desktop, Cursor, VS Code
Helper
ols-helper — hosts, NRPT and services over a named pipe or one UAC prompt
State
SQLite app.db; OLS_HOME overrides every path
Platform
Windows 10 / 11, 64-bit. Linux is planned last; macOS is not planned.
License
GPL-3.0-only
Rust Tauri 2 React 19 Tailwind 4 Tokio MCP Server JSON-RPC 2.0 Python / venv CodeMirror 6 xterm.js portable-pty minisign-verify oxlint

Model Context Protocol (MCP)

ols-mcp.exe ships beside the app. Connect Claude Desktop, Cursor, or any AI assistant to inspect projects, manage domains, and run database queries:

Claude Desktop / Cursor config
{
  "mcpServers": {
    "ols": {
      "command": "C:\\OLS\\ols-mcp.exe"
    }
  }
}

Local HTTP API

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:

HTTP
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

Extending it

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.

ProblemPort 3306 is already used by mysqld.exe (PID 4120).
CauseA second MariaDB data folder is running from an older install.
Fixolsc repair stops the orphan and reassigns the port. Review the plan, then apply.
Open source

GPL-3.0-only, and the specs are in the repository

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.

Your next project deserves its own environment

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.