Geen dienst. Geen headless API. Geen dashboard waar je elders op inlogt. Vinum is een handvol pakketten die je importeert: de admin hangt in je eigen routeboom, de loaders draaien op je eigen server, en je content staat in je eigen opslag, op je eigen schijf. Er is niets om in de lucht te houden en geen sleutel om te roteren.
// app/vinum.server.tsexport const vinum = registerVinum( defineVinum({ site: { name: "My Site" }, store: denoKvStore({ path: "./data/kv.sqlite" }), media: fsMedia({ dir: "./data/media" }), auth: { cookieName: "site_admin", secret: env("SESSION_SECRET") }, }),);Sleutels zijn strings, waarden gewone JSON. Geen ORM, geen migratieframework, geen eigen formaat — met een SQLite-viewer lees je je eigen content. Vendor lock-in is een bug.
Web-standaard Request en Response. Web Crypto. Een key-value-interface met vijf methodes. Elke afhankelijkheid die wij toevoegen is een upgrade die jij ooit moet uitvoeren, dus we voegen er bijna geen toe.
Niets wat is ingevoerd wordt vertrouwd — niet uit de editor, niet uit een importbestand, niet van een agent met een tool. Elke schrijfactie gaat door een zuivere sanitizer die weggooit wat hij niet herkent. Nooit rauwe HTML uit data.
Vinum levert structuur en een stijlcontract; jij levert de waarden. Een redacteur kiest wat een blok zegt en welke variant het draagt, nooit de kleur of de witruimte. Precies die grens zorgt dat een klant een middag kan tekstschrijven zonder de lay-out te slopen.
Op de pagina zelf, in de lay-out die hij echt krijgt, met jouw eigen componenten. Geen formulier links en een preview rechts. De inline-editor en de publieke renderer zijn één codepad in twee standen.
Dit stuk staat er omdat het antwoord elders vaak "dat kan niet" is. Wix schrijft in de eigen helpdocumentatie dat een Wix-site op Wix' servers gehost en beheerd moet worden; je exporteert een CMS-collectie als CSV en verder niets, dus weggaan betekent opnieuw bouwen.
Vinum exporteert alles als één JSON-bestand — vanuit de admin, of met één regel code. Het is geen aparte exportstand. Het is hetzelfde codepad dat het back-upscherm elke dag gebruikt.
{ "version": 1, "exportedAt": 1754481600000, "entries": [ { "key": ["page", "about"], "value": { "slug": "about", "title": "About" } }, { "key": ["rev", "about", 1754000000000], "value": {} } ]}Zeggen voor wie iets niet is, is hoe de juiste persoon zichzelf herkent. Niets hiervan staat op een roadmap.
Vinum is klein met opzet, en klein heeft een prijs. De laatste rij telt het zwaarst als je hiertussen moet kiezen.
| Vinum | WordPress | |
|---|---|---|
| Uitbreiden | TypeScript in je eigen repo, via dezelfde API als de kernblokken. | Een plugin-ecosysteem — en 91% van de 11.334 meldingen in 2025 zat in plugins. |
| Weggaan | Eén JSON-bestand met gedocumenteerde sleutels, te importeren in een verse installatie. | Exporters bestaan, met een betrouwbaarheid die afhangt van welke plugins je content schreven. |
| Waar je bewerkt | Op de pagina, in de echte lay-out, met jouw componenten. | Gutenberg. Het oordeel over 340+ meningen is ongeveer kop of munt. |
| Beheer | Geen. Het deployt met je app omdat het onderdeel is van je app. | Een PHP-host, updates voor kern en plugins, en een beveiligingsoppervlak om bij te houden. |
| Ecosysteem | Vrijwel geen. Heb je iets nodig dat niemand schreef, dan schrijf je het zelf. | Enorm, en een echt voordeel. Wat je nodig hebt bestaat waarschijnlijk al. |
npm install @vinumcms/core @vinumcms/adapters \ @vinumcms/server @vinumcms/react @vinumcms/admin npx vinumcms doctor # controleert de drie instellingen die stil falenDe installatiehandleiding — installeren, bekabelen, de drie build-instellingen en de achttien themavariabelen.
De pakketten — core, server, react, admin, adapters, en mail als je post verstuurt.
Vinum is klein met opzet. Voelt het ooit groot, dan is er iets misgegaan.