A free, open-source local development environment manager for Windows — runtimes, sites, databases, and trusted HTTPS, without touching your system by hand.
OLS (Open Local Server) is an all-in-one local development environment for Windows with broad runtime coverage and full extensibility. Every project gets isolated runtimes, its own .test domain, and trusted local HTTPS. One core engine (ols-core) powers three front doors: desktop GUI, CLI (olsc), and local HTTP API.
Free, open source, and no limit on the number of sites.
I found plenty of free tools, but none of them had everything I wanted in one place. So I built one that does, first of all for myself. It is not made for profit, just to have the tool I wanted and to share it. It is and will stay completely free.
It is still in the early stages, so expect rough edges. Feedback and bug reports are very welcome.
Grab the latest installer from the Releases page.
Captured from running app (dark theme).
Dashboard — health, services, diagnostics at a glance
Sites — domains, per-site PHP, HTTPS, reverse proxy
Runtimes — side-by-side versions and defaults
Version manager — install and manage versions per runtime
Databases — engines, users, backups
Web server — engine config and control
Tunnels — share a local site, inspect traffic
<folder>.test; static sites; reverse proxy to any host:port. Run on a domain, on localhost, or both at the same time..test / .localhost / .internal; optional elevated helper for hosts/NRPT (no repeated UAC prompts).composer.json, package.json, manage.py, markers; workspace scan..openlocalserver/*.yaml): environment, services, commands, lock file..env lossless editor (comments/order/CRLF preserved).redis-windows), Memcached, Mailpit, SQLite..backup + integrity checks..env planner with diff preview).Diagnostic{problem, cause, fix}.Ctrl+Shift+P), global search (Ctrl+K).Provider binaries are found, not installed. Put the program on PATH or in a
known location before starting a tunnel:
winget install --id Cloudflare.cloudflared # cloudflared -> <prefix>.trycloudflare.com
winget install --id ngrok.ngrok # ngrok -> needs an authtoken
PATH, plus C:\Program Files\cloudflared\ and
C:\Program Files (x86)\cloudflared\.olsc): setup [--dry-run] | doctor | repair | status | start | stop, plus project | runtime | service | tunnel | worker | snapshot | quick-command | search; background daemon keeps working with GUI closed.127.0.0.1:7420): same CoreCommand JSON, bearer token, origin reject, read-only vs operate scopes.plugin.yaml (runtimes, quick apps, detections, health checks) via minisign-signed catalogs, re-verified each load.latest.json + SHA check), tray icon, notifications, start with Windows, leftover-server cleanup, memory limits. See docs/PLUGINS.md, docs/API.md, docs/AI_ASSISTANT.md.Most people only need the installer from the Download section. The steps below are for building from source.
| Requirement | Version | Notes |
|---|---|---|
| Windows | 10 / 11 (64-bit) | Windows-only |
| Rust | stable | rustup toolchain |
| Node.js | 22+ | UI build |
| Tauri prerequisites | — | WebView2, MSVC, WiX — see Tauri 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
# From repo root — starts Tauri + Vite + Rust core
.\scripts\dev.bat
This launches the desktop app with hot-reload (Vite on http://localhost:1420).
# Core + helper checks
cargo fmt --all
cargo clippy -p ols-core -p ols-helper --all-targets
cargo test -p ols-core -p ols-helper
# UI lint + build
cd ui
npm run lint
npm run build
# Tauri bundle (NSIS/MSI)
cd ..
cargo tauri build
# Clone any PHP / Node / Python project
git clone https://github.com/example/my-laravel-app.git
cd my-laravel-app
# Full environment setup: runtimes → DB → domain → DNS → SSL → mail → workers
olsc setup
# Preview plan without applying
olsc setup --dry-run
# Check health, auto-fix safe issues
olsc doctor
olsc repair
olsc status # services, sites, runtimes
olsc start # start all enabled services
olsc stop # stop all
olsc project list # registered projects
olsc service list # MariaDB, Postgres, Redis, Mailpit…
olsc runtime list # installed PHP/Node versions
olsc tunnel start --provider cloudflared --port 443
olsc worker run --queue default
olsc snapshot create --name "before-upgrade"
olsc search "mailpit" # global search
https://myapp.test with trusted cert, per-site PHP.env editor, terminal, Git tab, logs, Mailpit for mailAll errors surface as
Diagnostic{ problem, cause, fix }— what broke, why, and how to fix it.
OpenLocalServer/
├── crates/
│ ├── ols-core/ # All logic — CoreCommand dispatcher (~150-200 variants),
│ │ # managers: Runtime, Service, Web, Domain, Certs, Project,
│ │ # ProcessSupervisor, Workers, Scheduler, Tunnel, Mail,
│ │ # Diagnostics, QuickApp, Plugin
│ ├── ols-helper/ # Elevated helper — hosts/NRPT/service via UAC or
│ │ # LocalSystem named pipe (closed validated set)
│ └── ols-cli/ # CLI (`olsc.exe` beside the app) — drives the app or a background daemon
├── src-tauri/ # Tauri 2 shell — window, tray, single IPC `run_command`
├── ui/src/ # React 19 + Vite 8 + Tailwind 4 + shadcn/ui,
│ │ # CodeMirror 6, xterm.js, `core.ts` IPC wrapper
│ ├── pages/ # Dashboard, Sites, Environment, Git, Workers,
│ │ # Snapshots, Tunnels, Profiles, Repair, Doctor…
│ └── components/ # shadcn/ui primitives, dialogs, editors
├── data/ # SQLite app database (app.db),
│ # OLS_HOME env overrides all paths
├── docs/ # STATUS.md, IMPLEMENTATION_PLAN.md, AI_ASSISTANT.md…
├── specs/ # Single source of truth — architecture, catalog,
│ # relationships, data models, API reference, diagrams
├── installer/ # Inno Setup script (open-local-server.iss)
├── scripts/ # dev.bat, build-installer.bat, upload-release.bat
├── assets/ # App icons + README screenshots (dashboard, sites,
│ # runtimes, version-manager, databases, webserver,
│ # tunnels — all .webp)
└── OLS_Master_SRS_v4.md # Full requirements spec (v4)
Architecture (one core, many front doors):
GUI (React) ──┐
CLI (olsc) ────┼──> Core::dispatch(CoreCommand) -> Inner (Arc-shared state)
HTTP API ─────┘ |
v
Managers: Runtime, Service, Web, Domain, Certs,
Project, ProcessSupervisor, Workers, Scheduler,
Tunnel, Mail, Diagnostics, QuickApp, Plugin
The whole project is documented so an AI agent can understand it and keep building it:
specs/ is the single source of truth: architecture, catalog, data models, API reference, diagrams.AGENTS.md tells an agent how the project works, what to do, and what to avoid.docs/ and the Master SRS explain the plan and the requirements.Fork it, point your own AI agent (Claude Code, Cursor, or any other) at the repo, and turn it into the tool you want.
Contributions welcome. Please read CONTRIBUTING.md and the Code of Conduct first.
# Quality gates — must pass before PR
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
specs/ is source of truth. Any behavior change must update matching specs/ files in same PR + append log line to specs/runtime.md. Behavior PR without spec update gets rejected. See AGENTS.md.Diagnostic{problem,cause,fix} · downloads verify SHA-256 · secrets in OS keyring only, never logs/files/bundles.feat:, fix:, docs: …).olsc is GPL-3.0-only (see LICENSE).
The installer ships OLS only — no third-party software is bundled. Runtimes, web servers, and databases are downloaded by you on demand from the vendor and SHA-256 verified, and are installed into OLS-managed folders you can delete at any time. Tunnel binaries are neither downloaded nor installed — OLS only finds them already on your PATH (see Tunnels).
| Component | License | Source |
|---|---|---|
| PHP (NTS 8.1–8.5) | PHP License 3.01 | windows.php.net |
| Composer | MIT | getcomposer.org |
| Node.js 22 / 24 | MIT | nodejs.org |
| corepack / npm / pnpm / yarn | MIT | nodejs.org |
| Portable Git | GPL-2.0-only | git-scm.com/downloads |
| Python | PSF License | python.org |
| k6 | AGPL-3.0-only | grafana.com/docs/k6 |
| Nginx 1.28 | BSD-2-Clause | nginx.org |
| Apache httpd 2.4 | Apache-2.0 | httpd.apache.org |
| Caddy 2.11 | Apache-2.0 | caddyserver.com |
| MariaDB 11.4 | GPL-2.0-only | mariadb.org |
| PostgreSQL 17 | PostgreSQL License | postgresql.org |
| MongoDB | SSPL-1.0 | mongodb.com |
Redis (redis-windows) | RSALv2 / SSPLv1 | redis.io |
| Memcached | BSD-3-Clause | memcached.org |
| Mailpit | MIT | github.com/axllent/mailpit |
| HeidiSQL | GPL-3.0-only | heidisql.com |
| pgAdmin 4 | PostgreSQL License | pgadmin.org |
| NoSQLBooster | MIT | nosqlbooster.com |
| Tiny RDM | MIT | github.com/rvigster/TinyRDM |
| cloudflared | Apache-2.0 | github.com/cloudflare/cloudflared |
| ngrok | Apache-2.0 | github.com/ngrok/ngrok |
| localtunnel | MIT | github.com/localtunnel/localtunnel |
| Tailscale | BSD-3-Clause | tailscale.com |
PATH, never downloaded or installed by OLS.GPL-3.0-only — see LICENSE. See SECURITY.md for reporting policy.
Feel free to use the code, edit it, and make your own version.
Built with Rust · Tauri 2 · React 19 · Tokio
Status ·
Implementation Plan ·
Master SRS v4 ·
Contributing
Rust
65.4%
TypeScript
29.0%
HTML
1.6%
Inno Setup
1.1%
A free, open-source local development environment manager for Windows — runtimes, sites, databases, and trusted HTTPS, without touching your system by hand.
OLS (Open Local Server) is an all-in-one local development environment for Windows with broad runtime coverage and full extensibility. Every project gets isolated runtimes, its own .test domain, and trusted local HTTPS. One core engine (ols-core) powers three front doors: desktop GUI, CLI (olsc), and local HTTP API.
Free, open source, and no limit on the number of sites.
I found plenty of free tools, but none of them had everything I wanted in one place. So I built one that does, first of all for myself. It is not made for profit, just to have the tool I wanted and to share it. It is and will stay completely free.
It is still in the early stages, so expect rough edges. Feedback and bug reports are very welcome.
Grab the latest installer from the Releases page.
Captured from running app (dark theme).
Dashboard — health, services, diagnostics at a glance
Sites — domains, per-site PHP, HTTPS, reverse proxy
Runtimes — side-by-side versions and defaults
Version manager — install and manage versions per runtime
Databases — engines, users, backups
Web server — engine config and control
Tunnels — share a local site, inspect traffic
<folder>.test; static sites; reverse proxy to any host:port. Run on a domain, on localhost, or both at the same time..test / .localhost / .internal; optional elevated helper for hosts/NRPT (no repeated UAC prompts).composer.json, package.json, manage.py, markers; workspace scan..openlocalserver/*.yaml): environment, services, commands, lock file..env lossless editor (comments/order/CRLF preserved).redis-windows), Memcached, Mailpit, SQLite..backup + integrity checks..env planner with diff preview).Diagnostic{problem, cause, fix}.Ctrl+Shift+P), global search (Ctrl+K).Provider binaries are found, not installed. Put the program on PATH or in a
known location before starting a tunnel:
winget install --id Cloudflare.cloudflared # cloudflared -> <prefix>.trycloudflare.com
winget install --id ngrok.ngrok # ngrok -> needs an authtoken
PATH, plus C:\Program Files\cloudflared\ and
C:\Program Files (x86)\cloudflared\.olsc): setup [--dry-run] | doctor | repair | status | start | stop, plus project | runtime | service | tunnel | worker | snapshot | quick-command | search; background daemon keeps working with GUI closed.127.0.0.1:7420): same CoreCommand JSON, bearer token, origin reject, read-only vs operate scopes.plugin.yaml (runtimes, quick apps, detections, health checks) via minisign-signed catalogs, re-verified each load.latest.json + SHA check), tray icon, notifications, start with Windows, leftover-server cleanup, memory limits. See docs/PLUGINS.md, docs/API.md, docs/AI_ASSISTANT.md.Most people only need the installer from the Download section. The steps below are for building from source.
| Requirement | Version | Notes |
|---|---|---|
| Windows | 10 / 11 (64-bit) | Windows-only |
| Rust | stable | rustup toolchain |
| Node.js | 22+ | UI build |
| Tauri prerequisites | — | WebView2, MSVC, WiX — see Tauri 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
# From repo root — starts Tauri + Vite + Rust core
.\scripts\dev.bat
This launches the desktop app with hot-reload (Vite on http://localhost:1420).
# Core + helper checks
cargo fmt --all
cargo clippy -p ols-core -p ols-helper --all-targets
cargo test -p ols-core -p ols-helper
# UI lint + build
cd ui
npm run lint
npm run build
# Tauri bundle (NSIS/MSI)
cd ..
cargo tauri build
# Clone any PHP / Node / Python project
git clone https://github.com/example/my-laravel-app.git
cd my-laravel-app
# Full environment setup: runtimes → DB → domain → DNS → SSL → mail → workers
olsc setup
# Preview plan without applying
olsc setup --dry-run
# Check health, auto-fix safe issues
olsc doctor
olsc repair
olsc status # services, sites, runtimes
olsc start # start all enabled services
olsc stop # stop all
olsc project list # registered projects
olsc service list # MariaDB, Postgres, Redis, Mailpit…
olsc runtime list # installed PHP/Node versions
olsc tunnel start --provider cloudflared --port 443
olsc worker run --queue default
olsc snapshot create --name "before-upgrade"
olsc search "mailpit" # global search
https://myapp.test with trusted cert, per-site PHP.env editor, terminal, Git tab, logs, Mailpit for mailAll errors surface as
Diagnostic{ problem, cause, fix }— what broke, why, and how to fix it.
OpenLocalServer/
├── crates/
│ ├── ols-core/ # All logic — CoreCommand dispatcher (~150-200 variants),
│ │ # managers: Runtime, Service, Web, Domain, Certs, Project,
│ │ # ProcessSupervisor, Workers, Scheduler, Tunnel, Mail,
│ │ # Diagnostics, QuickApp, Plugin
│ ├── ols-helper/ # Elevated helper — hosts/NRPT/service via UAC or
│ │ # LocalSystem named pipe (closed validated set)
│ └── ols-cli/ # CLI (`olsc.exe` beside the app) — drives the app or a background daemon
├── src-tauri/ # Tauri 2 shell — window, tray, single IPC `run_command`
├── ui/src/ # React 19 + Vite 8 + Tailwind 4 + shadcn/ui,
│ │ # CodeMirror 6, xterm.js, `core.ts` IPC wrapper
│ ├── pages/ # Dashboard, Sites, Environment, Git, Workers,
│ │ # Snapshots, Tunnels, Profiles, Repair, Doctor…
│ └── components/ # shadcn/ui primitives, dialogs, editors
├── data/ # SQLite app database (app.db),
│ # OLS_HOME env overrides all paths
├── docs/ # STATUS.md, IMPLEMENTATION_PLAN.md, AI_ASSISTANT.md…
├── specs/ # Single source of truth — architecture, catalog,
│ # relationships, data models, API reference, diagrams
├── installer/ # Inno Setup script (open-local-server.iss)
├── scripts/ # dev.bat, build-installer.bat, upload-release.bat
├── assets/ # App icons + README screenshots (dashboard, sites,
│ # runtimes, version-manager, databases, webserver,
│ # tunnels — all .webp)
└── OLS_Master_SRS_v4.md # Full requirements spec (v4)
Architecture (one core, many front doors):
GUI (React) ──┐
CLI (olsc) ────┼──> Core::dispatch(CoreCommand) -> Inner (Arc-shared state)
HTTP API ─────┘ |
v
Managers: Runtime, Service, Web, Domain, Certs,
Project, ProcessSupervisor, Workers, Scheduler,
Tunnel, Mail, Diagnostics, QuickApp, Plugin
The whole project is documented so an AI agent can understand it and keep building it:
specs/ is the single source of truth: architecture, catalog, data models, API reference, diagrams.AGENTS.md tells an agent how the project works, what to do, and what to avoid.docs/ and the Master SRS explain the plan and the requirements.Fork it, point your own AI agent (Claude Code, Cursor, or any other) at the repo, and turn it into the tool you want.
Contributions welcome. Please read CONTRIBUTING.md and the Code of Conduct first.
# Quality gates — must pass before PR
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
specs/ is source of truth. Any behavior change must update matching specs/ files in same PR + append log line to specs/runtime.md. Behavior PR without spec update gets rejected. See AGENTS.md.Diagnostic{problem,cause,fix} · downloads verify SHA-256 · secrets in OS keyring only, never logs/files/bundles.feat:, fix:, docs: …).olsc is GPL-3.0-only (see LICENSE).
The installer ships OLS only — no third-party software is bundled. Runtimes, web servers, and databases are downloaded by you on demand from the vendor and SHA-256 verified, and are installed into OLS-managed folders you can delete at any time. Tunnel binaries are neither downloaded nor installed — OLS only finds them already on your PATH (see Tunnels).
| Component | License | Source |
|---|---|---|
| PHP (NTS 8.1–8.5) | PHP License 3.01 | windows.php.net |
| Composer | MIT | getcomposer.org |
| Node.js 22 / 24 | MIT | nodejs.org |
| corepack / npm / pnpm / yarn | MIT | nodejs.org |
| Portable Git | GPL-2.0-only | git-scm.com/downloads |
| Python | PSF License | python.org |
| k6 | AGPL-3.0-only | grafana.com/docs/k6 |
| Nginx 1.28 | BSD-2-Clause | nginx.org |
| Apache httpd 2.4 | Apache-2.0 | httpd.apache.org |
| Caddy 2.11 | Apache-2.0 | caddyserver.com |
| MariaDB 11.4 | GPL-2.0-only | mariadb.org |
| PostgreSQL 17 | PostgreSQL License | postgresql.org |
| MongoDB | SSPL-1.0 | mongodb.com |
Redis (redis-windows) | RSALv2 / SSPLv1 | redis.io |
| Memcached | BSD-3-Clause | memcached.org |
| Mailpit | MIT | github.com/axllent/mailpit |
| HeidiSQL | GPL-3.0-only | heidisql.com |
| pgAdmin 4 | PostgreSQL License | pgadmin.org |
| NoSQLBooster | MIT | nosqlbooster.com |
| Tiny RDM | MIT | github.com/rvigster/TinyRDM |
| cloudflared | Apache-2.0 | github.com/cloudflare/cloudflared |
| ngrok | Apache-2.0 | github.com/ngrok/ngrok |
| localtunnel | MIT | github.com/localtunnel/localtunnel |
| Tailscale | BSD-3-Clause | tailscale.com |
PATH, never downloaded or installed by OLS.GPL-3.0-only — see LICENSE. See SECURITY.md for reporting policy.
Feel free to use the code, edit it, and make your own version.
Built with Rust · Tauri 2 · React 19 · Tokio
Status ·
Implementation Plan ·
Master SRS v4 ·
Contributing
Rust
65.4%
TypeScript
29.0%
HTML
1.6%
Inno Setup
1.1%