CMSnap-LITE
A complete website from one settings.json
Declare tables, views, routes and the admin — get a live site with a JSON API, passwordless-grade OPAQUE sign-in, native HTTPS and a built-in SQL IDE. One static binary, zero dependencies, hot reload without downtime. This very page serves ~80,000 requests/second on a single instance.
single binarySQLiteOPAQUE sign-inTLS + Let's EncryptSQL IDEJSON APImedia uploadsHTMX-awarehot reload~80k req/s
Nothing here is a mockup
This site runs on the engine it documents — every feature below is wired up
in settings.json and can be poked right now.
Content lives in the database
These docs are rows in the docs table, seeded on first start from
seed/*.json. Edit an article in the admin, refresh — done.
Views & URL filters
/docs/<group> is a list view filtering an indexed column straight
from the path parameter, with cursor pagination.
Publish flag
Doc pages use fixed_filter published=1 — untick “published” on an article
in the admin and it vanishes from the site.
Public forms
The contact page POSTs to an api route: validation, server-side
auto_fields, a honeypot for bots and a rate limit.
JSON API
Any view can be served as JSON. /api/docs returns these very articles —
try it live below.
Admin out of the box
CRUD for every table with an admin block, users, roles, invite links and
OPAQUE sign-in — the password never leaves your browser.
HTTPS out of the box
Point at your PEM files, or let the binary obtain and renew a Let's Encrypt certificate itself — port 80 answers the challenge and redirects to https.
SQL IDE included
Open this site's databases in the sqliteonline.com frontend over /soe:
per-user access flag, read-only for users, full write for admins.
Files & media
Upload from any form field. The file type is detected from content — a renamed .exe does not pass — and files are served with an immutable forever-cache.
Documentation
Loaded from the doc_groups table of this site's database
(3 groups). Signed-in users can edit every word at
/cms/docs.
Quick start, CLI commands, common recipes, what this example wires up.
Browse → ConfigurationEvery settings.json section: server, db, static, tables, views, routes, errors, auth, cms, seed.
Browse → Templates & frontendHandlebars layout and context, admin templates, the WASM sign-in client, HTMX.
Browse →Try the API — right here
The buttons call this site's own endpoints from your browser; the same
requests work with curl.
GET /api/docs?grp=configuration
An api GET route serving the doc_list view as
JSON: rows, total, next_cursor.
GET /docs/templates + HX-Request: true
The same URL as the page you can click — but with the HTMX header the server returns only the fragment, without the layout.