C++17  ·  BOOST.ASIO  ·  SINGLE BINARY  ·  MIT

A blazing-fast HTTP/1.1 server written in C++17.
Live admin dashboard on its own port, virtual hosts, URL rewrites, rate limiting — all compiled into one binary, zero config files.

⚡ GET STARTED EXPLORE FEATURES →
C++17
Standard
0
Lines of code
0
Runtime deps
2
Ports
0
Dashboard tabs
VIRTUAL HOSTING /// URL REWRITES /// RATE LIMITING /// LIVE DASHBOARD /// CACHE CONTROL /// SECURITY HEADERS /// CORS /// IP FIREWALL /// FILE BROWSER /// REGEX REWRITES /// CUSTOM ERROR PAGES /// ACCESS LOGS /// VIRTUAL HOSTING /// URL REWRITES /// RATE LIMITING /// LIVE DASHBOARD /// CACHE CONTROL /// SECURITY HEADERS /// CORS /// IP FIREWALL /// FILE BROWSER /// REGEX REWRITES /// CUSTOM ERROR PAGES /// ACCESS LOGS ///
01 LIVE OUTPUT
prono — bash
g++ -std=c++17 -O2 -o prono prono_server.cpp -lboost_system -lpthread
[ compiling... done in 2.1s ]
./prono 8080 ./www 8081
╔═══════════════════════════════════════════╗
║ 🔥 PRONO WEB SERVER v1.0                
║      by probloxworld                       
╠═══════════════════════════════════════════╣
║ Web   → http://192.168.1.42:8080/            
║ Admin → http://192.168.1.42:8081/pronoadmin 
╚═══════════════════════════════════════════╝
200 GET /index.html     192.168.1.5   0.2ms
200 GET /style.css      192.168.1.5   0.1ms
200 GET /app.js         192.168.1.9   0.1ms
429 GET /api/flood     10.0.0.4      [RATE LIMITED]
200 GET /favicon.ico   192.168.1.5   0.0ms
403 GET /secret        10.0.0.7      [IP BLOCKED]
02 CAPABILITIES

Every feature
is actually real.

No fake toggles. No stub endpoints. Every button in the dashboard hits a live C++ route that mutates config instantly — no restart, no reload, no config files.

01
Thread-Per-Connection

Each TCP connection spawns its own std::thread. No blocking, no queuing, true parallelism on all cores.

LIVE
02
Virtual Hosting

Route any hostname to a separate docroot at runtime via the Host header. Add and remove vhosts without restart.

LIVE
03
Regex URL Rewrites

Full ECMAScript regex with $1, $2 capture groups. 301/302 or internal rewrites, applied before file serving.

LIVE
04
Rate Limiting

Per-IP sliding-window token bucket. Violators get 429 before any file logic runs. State is visible and clearable in the dashboard.

LIVE
05
Security Headers

HSTS, CSP, X-Frame-Options, X-Content-Type-Options, XSS-Protection, Referrer-Policy — all AJAX-toggled live from the dashboard.

LIVE
06
Cache Control

Per-extension Cache-Control rules. Set immutable on fonts, 30-day on assets, no-store on HTML.

LIVE
07
Dual-Port Architecture

Web on 8080, admin on 8081. Two acceptors, two independent thread loops. Dashboard has zero impact on static serving.

LIVE
08
CORS

Full CORS — allow-origin, methods, headers, max-age, credentials flag. Toggle and configure from the dashboard, applied instantly.

LIVE
09
File Browser + Firewall

Browse, view, download, delete webroot files in the dashboard. Block any IP with one click — 403'd before any request logic.

LIVE
03 INTERNALS

Built on
Boost.Asio.

Prono uses Boost.Asio for TCP with a thread-per-connection model. The entire server is a single .cpp file — no CMake, no Makefiles, no build system. One compile command.

All runtime config lives in a Config struct behind a std::mutex. Every dashboard action writes to the live struct. Two separate handler functions share a common ParsedReq parser to avoid duplication.

  • Atomic counters on hot path — zero locking on request stats
  • Separate handleAdmin() — fully decoupled from web serving
  • Shared ParsedReq struct — request parsed once, used everywhere
  • std::regex engine — full rewrite support, no extra library
  • 30+ MIME types, std::filesystem for real directory traversal
  • Per-IP rate limit state map — 60-second sliding window
  • Custom error pages per status code — preview them live
DUAL ACCEPTOR PATTERN
main() — two ports, one process
// Static files — web port
tcp::acceptor webAcc(io);
webAcc.bind({any(), CFG.port});
webAcc.listen();

// Admin panel — own port, own thread
tcp::acceptor adminAcc(io);
adminAcc.bind({any(), CFG.adminPort});
adminAcc.listen();

std::thread([&]{
  while(true) {
    auto s = adminAcc.accept();
    std::thread(handleAdmin,
      std::move(s)).detach();
  }
}).detach();

while(true) {
  auto s = webAcc.accept();
  std::thread(handleClient,
    std::move(s)).detach();
}
toggle endpoint — live config
if(key == "hsts")       CFG.hsts = val;
else if(key == "csp")  CFG.csp  = val;
else if(key == "xcto") CFG.xcto = val;
// 14 more keys — one mutex write
resp = buildResp(msg, "text/plain");
04 DOWNLOAD

Build it or grab it.

Choose your path: compile from source with your own flags, or download prebuilt binaries straight from GitHub Releases. The wiki is one click away if you want deeper docs, configs, and FAQs.

SOURCE

Build from the repo

Clone the code, inspect every line, and compile with the one-liner shown below. Perfect if you want to tweak or audit.

BINARIES

Download & run

Skip the toolchain. Grab the latest prebuilt binaries from the Releases page and start the server in seconds.

05 INSTALL

Up in 30 seconds.

COPY
01
Install Boost

Boost.Asio is the only build-time dependency. One apt command on Debian / Ubuntu.

sudo apt install libboost-dev
COPY
02
Compile

Single file, no build system. Compiles in ~2 seconds on any modern machine.

g++ -std=c++17 -O2 -o prono prono_server.cpp -lboost_system -lpthread
COPY
03
Run

Web port, webroot, admin port. All optional — sane defaults out of the box.

./prono 8080 ./www 8081
COPY
04
Open Admin

Hit the admin port from any device on your network. Config changes apply instantly.

http://<your-ip>:8081/pronoadmin
06 ADMIN DASHBOARD

Real control.
Zero stubs.

12 Working Tabs

Overview, Logs, Vhosts, Config, Rewrites, Headers, Cache, Rate Limit, Firewall, Stats, Files, Error Pages — every tab has real backend C++ routes wired up.

39 Admin Endpoints

Every form, button, and toggle hits a real /pronoadmin/... C++ route. Config mutates live — zero restarts required.

🚫
Zero Dummy Buttons

All non-functional features (SSL stub, proxy stub, fake toggles) have been removed. If it's on the dashboard, it works. Full stop.

RUNNING
✓ TEST CONFIG
↺ REFRESH
◈ OVERVIEW
▤ LOGS
⬡ VHOSTS
⚙ CONFIG
⟲ REWRITES
≡ HEADERS
⚡ CACHE
⊘ RATE LIMIT
⬖ FIREWALL
◳ STATS
📂 FILES
✕ ERRORS
0
Total Requests
7d 3h
Uptime
142 MB
Data Sent
23
Errors
TOP PATHSHITS
/index.html5,204
/style.css4,891
/app.js3,440
/api/data1,829
STATUS CODESCOUNT
200 OK12,742
304 Not Modified82
429 Rate Limited18
404 Not Found5