Every part of an install, drawn apart. Assembled, all of it sits inside the boundary of an app you already deploy — which is the whole of the argument.
An admin at /admin, pages at /<slug>, drafts, revisions, scheduled publishing, media, forms and redirects — inside the app you already deploy.
The figures on this page are not mockups. Vinum renders no colour of its own: nineteen CSS variables style the public renderer and the entire admin alike, and this site sets them once. So the admin is ink on bond because the page is, and Fig. 2 and Fig. 3 are what you would actually see.

Each one costs something to keep. That is what makes it a commitment.
What is claimed is:
Keys are strings, values are plain JSON. No ORM, no migrations framework, no proprietary encoding — anyone with a SQLite viewer can read your content. Lock-in is a bug.
Web-standard Request and Response. Web Crypto. A key-value interface with five methods. Every dependency we add is an upgrade you will one day have to perform, so we add almost none.
Nothing authored is trusted — not from an editor, not from an import file, not from an agent holding a tool. Every write passes through a pure sanitizer that drops what it does not recognise. No raw HTML from data reaches output, ever.
Vinum ships structure and a styling contract; you ship the values. An editor chooses what a block says and which variant it wears, never its colour or its spacing. That boundary is why a client can edit all afternoon without breaking the layout.
On the page it renders on, in the layout it will actually have, with your real components. Not a form on the left and a preview on the right.

This section exists because the answer elsewhere is often "you cannot". Wix's own help centre states a Wix site needs to be hosted and operated on Wix's servers, so leaving means rebuilding rather than moving.
Vinum exports everything as one JSON file. One command, on a site you have not touched in a year, without reading anything first.
Also from the admin, or one call in code. It is not a special export mode — it is the same code path the Backup screen uses every day. Run it before you commit to Vinum, not after: an escape route you have not checked is not one.
npx vinumcms export{ "version": 1, "exportedAt": 1754481600000, "entries": [ { "key": ["page", "about"], "value": { "slug": "about", "title": "About" } }, { "key": ["rev", "about", 1754000000000], "value": {} } ]}If you want to query content over GraphQL from a separate frontend, Vinum is the wrong tool. It is deliberately coupled to the app that renders it — that coupling is what buys inline editing and one-deployment operations.
One install, one site, one filesystem. Anything else changes every security assumption in the codebase.
Extension happens in your own codebase, in TypeScript, with types. There is no plugin loader and there will not be one. Of 11,334 WordPress vulnerabilities disclosed in 2025, 91% were in plugins.
Core ships the blocks nearly every site needs, as a stock set you pick from and edit in place — not a box of primitives, and not a palette that needs a search field. Your weird hero belongs in your repo.
Vinum grew inside a watch shop and the shop code stayed there. Vinum knows about pages, not products.
Vinum is small on purpose, and small has costs. The last row is the one that matters most if you are choosing between these.
| Vinum | WordPress | |
|---|---|---|
| Extending it | TypeScript in your own repo, through the same API the core blocks use. | A plugin ecosystem — and 91% of 2025's 11,334 disclosed vulnerabilities were in plugins. |
| Getting out | One JSON file with documented keys, importable into a fresh install. | Exporters exist, with fidelity that depends on which plugins wrote your content. |
| Where you edit | On the page, in its real layout, with your components. | Gutenberg. Sentiment across 340+ opinions is roughly a coin flip. |
| Operations | None. It deploys with your app because it is part of your app. | A PHP host, core and plugin updates, and a security surface to watch. |
| Ecosystem | Almost none. If you need a feature nobody wrote, you write it. | Enormous, and a real advantage. Whatever you need probably exists already. |
npm install @vinumcms/core @vinumcms/adapters \ @vinumcms/server @vinumcms/react @vinumcms/admin npx vinumcms doctor # checks the three settings that fail silentlyThe setup guide — install, wiring, the three build settings, and the nineteen theme variables.
The docs — core, server, react, admin, adapters, and mail if you send any.