Quick start

CMSnap-LITE is a single static binary: settings.json describes tables, views, routes and the admin UI; SQLite stores the data; Handlebars templates render the pages. This documentation is itself table content — it lives in the docs table of this site's database. And it is built for the hot path: the landing page of this example serves about 80,000 requests/second on six cores — scaling linearly at ~13k/core (54k on four), p99 latency 7 ms at 200 concurrent connections. Overload degrades gracefully: at a 5× connection surge throughput stays flat and latency grows only with the queue (p99 under 20 ms at 500 connections) — no timeouts, no errors, no dropped keep-alives. Totals come from in-memory counters, error pages are prerendered, view SQL is precompiled.

  1. ./cms def-help — factory-reset to this example: unpacks config and templates, seeds this documentation into the database, creates the admin user with a generated password (printed once to the console) and starts the server.
  2. Or start plain: ./cms — on first run the example files are unpacked and the docs are seeded; create your admin with ./cms create-admin.
  3. Sign in at /cms/login. Open Articles in the admin — you can edit this very page and see the change after refresh.
  4. Edit settings.json, then apply with ./cms reload (no downtime) or restart.

There are no baked-in credentials. Passwords use the OPAQUE protocol and never leave the browser, so accounts are created only via CLI or invite links.

← All articles in this group