Привет Дима
the self-hosted Agentic Web Platform (AWP)
Generate websites — never generate backend code. CMSnap serves pages, forms, an admin panel, a JSON API, SQLite and HTTPS from one self-contained binary, and hosts many isolated sites — a site per domain. AI agents manage content, media, templates and settings over a secure MCP endpoint. No application runtime, database server or reverse proxy required.
Static speed. Static safety. Fully dynamic. Fully generated.
Download CMSnap-LITE Start in two commands →
./cmsone self-contained binaryA token is one site’s administrator, no more: the agent runs that site — content, media, templates, settings — and never reaches a neighbour or the server itself. IP-restrictable, revocable at any time.
single binarymulti-sitea SQLite per siteMCP-native
Nothing here is a mockup
This site runs on the engine it documents — one self-contained binary, a site
per domain, serving 383,284 requests/second on four physical cores (8 SMT threads). Every
feature below is wired up in settings.json, and you can try each one right now.
An AI agent can run this site
Issue a token on the MCP page and an agent builds and maintains pages, media and templates — inside a fenced scope you can restrict by IP and revoke any time.
Content lives in the database
These docs are rows in SQLite. Edit an article in the admin — or let the agent do it — refresh, done.
Passwords never leave the browser
The password itself never reaches the server — sign-in runs the OPAQUE protocol. The admin behind it: CRUD for every table, users, roles, invite links.
- Server-side rendering, no JS framework
- Every page is a Handlebars file on disk. Edit it, run
cms reload, zero downtime. - Views: filters, ordering, pagination
- A view filters by any indexed columns — several at once, from path parameters
and the query string — with declared ordering and cursor pagination.
/docs/<group>here is one such filter. - Publish flag
- Untick “published” on an article and it vanishes from the site. That's
fixed_filterat work. - Public forms
- Validation, a honeypot for bots, a rate limit and server-side timestamps: all declared in the config.
- JSON API
- Any view can be served as JSON at any path you declare in the config —
/api/docshere returns these very articles: try it below. - HTTPS without a reverse proxy
- Your PEM files, or a Let's Encrypt certificate the binary obtains and renews itself.
- SQL console & analytics
- Query this site's databases and the request log via sqliteonline.com — a per-user flag: users read, admins write; a DuckDB mode handles heavy traffic analytics.
- Files & media
- Uploads are verified by file contents, not by extension, and served with immutable cache headers.
- Many sites, one binary
- A domain → folder map in the root config: isolated databases, users and templates
per site; adding one is a
cms reload. - MCP for AI agents
- Issue a token in the admin and an agent runs that site over
/mcpwith an administrator’s reach — and never leaves it.
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 → ConfigurationThe root file (server, sites, cache, access_log, soe) and every site block: db, static, tables, views, routes, errors, auth, cms, media, seed, MCP.
Browse → Templates & frontendHandlebars layout and context, admin templates, the WASM sign-in client, AJAX fragments.
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 /api/doc/1
A single-record view behind a path parameter: the same article you can read as a page, served as raw JSON.