Self-host the MIT-licensed engine, free forever. Add a license key to activate
the plugins you need — GraphQL, gRPC, S3, webhooks, SMTP, multi-tenant.
One ~45 MB image.
Real SQL tables.
No lock-in.
No credit card required · Free tier never expires · Cancel any time
# One image. Free without a key, paid with one. FROM ghcr.io/lyeve/cms:latest # Optional — sets which plugins activate at boot ENV CMS_LICENSE_KEY=cms_live_xxxxxxxxxxxx
That's the entire upgrade path. Rebuild and restart. Done.
Visual schema builder. Instant REST and GraphQL. A content editor that feels like the admin you'd build yourself — packed into one ~45 MB image.
All six paid plugins compiled in. ~80 MB at idle. Cold starts under 200 ms. Runs comfortably on a $5 VPS — no cloud account needed.
Every collection becomes a real table — no JSONB blobs. Query with raw SQL, index anything, dump it with your database's native tools. Same schema on PostgreSQL, MySQL, or MSSQL.
REST API, schema builder, RBAC, MFA, drafts, revisions, locales — all MIT licensed and complete. The free tier is a real CMS, not a teaser.
Add CMS_LICENSE_KEY to your env. The JWT decides which compiled-in plugins activate. No sidecar, no CDN download, no operator.
No trial period. No feature degradation. The core never expires. You get a production-grade CMS before spending a cent.
Full CRUD, cursor pagination, filtering, full-text search. Auto-generated from your schema.
Drag-drop canvas with pan/zoom, all field types, belongs_to / has_many / many_to_many relations.
Role-level and policy-level access control. Field-level masks per role.
Stream live content events per schema. Backpressure-safe, 1000 concurrent clients per replica.
Per-record _status column, revision history, single-tenant or multi-tenant safe.
Per-record _locale column, sys_locales table, content reads scoped by header or query param.
Local filesystem driver out of the box. Stdlib JPEG/PNG resize. Add S3 plugin later if you need it.
Google + GitHub PKCE, JWKS validation, TOTP with backup codes — all in the free engine.
Single dialect adapter. One codebase, three databases. Pick the one you already run.
cms schema export / apply, migrations, seed, generate. Full schema-as-code workflow.
Every mutation in sys_audit_log. OpenTelemetry tracing, Prometheus metrics, JSON logging.
sys_jobs table + cron scheduler. POST any URL on a schedule with a JSON payload.
Every plugin is its own monthly subscription, priced by implementation complexity — starting at $0.25/mo. Stack two and save 10%, three saves 15%, four saves 20%, five saves 25%, six saves 30%. Same image ships them all — your license JWT decides what activates. 7-day offline grace, 7-day cancel grace, your data is never touched.
FROM ghcr.io/lyeve/cms:latest # Always required ENV DATABASE_URL=postgres://... ENV JWT_SECRET=change-me-32chars # Add this to activate paid plugins ENV CMS_LICENSE_KEY=cms_live_...
Argon2id, MFA, RBAC, audit log, signed webhooks, JWT rotation. None of these live behind a paid tier. They ship with the free engine.
Found a vulnerability? Email [email protected] — please don't open a public GitHub issue.
Where we beat them. Where we tie. Where they still win. Decide on facts, not vibes.
| Feature | LyEve ← you | Strapi | Directus | Payload |
|---|---|---|---|---|
| Runtime | Go | Node.js | Node.js | Node.js |
| Engine license | MIT | MIT | BSL 1.1 ⚠ | MIT |
| REST API | ✓ free | ✓ free | ✓ free | ✓ free |
| GraphQL | $1.50 /mo | ✓ plugin | ✓ free | ✓ free |
| gRPC | $1.00 /mo | ✗ | ✗ | ✗ |
| Multi-tenant | $3.00 /mo | manual | manual | manual |
| Per-plugin pricing | ✓ | ✗ | ✗ | ✗ |
| Volume discount | up to −30% | ✗ | ✗ | ✗ |
| Indie / OSS discount | ✓ program | ✗ | ✗ | ✗ |
| MFA / TOTP | ✓ free | cloud only | ✓ | ✗ |
| Audit log | ✓ free | enterprise | ✓ | partial |
| Idle RAM (est.)(Approximate at idle) | ~80 MB | ~500 MB | ~400 MB | ~400 MB |
| Container size | ~45 MB | ~320 MB | ~220 MB | ~180 MB |
| License activation | ENV var | dashboard | dashboard | N/A |
⚠ BSL 1.1 = Business Source License. Not OSI open source; converts to MIT after 4 years.
Container size and RAM estimates are approximate at idle with a minimal schema. Actual usage varies.
Side by side with Strapi, Directus, and Payload. Click any bar to read the methodology behind it.
Idle RAM
Empty database, no traffic, default config.
~80 MB
idle RAM
on a $5 VPS
< 50 ms
p99 REST + GraphQL
at 1000 RPS
< 100 ms
plugin activation
in-process, no subprocess
Stripe blocks Indonesia, so we don't make it the default. Xendit, Midtrans, and DOKU run the local rail. Stripe and PayPal cover international cards. Coinbase covers crypto.
Indonesia · primary
Invoice-renewal flow with callback-token verified webhooks.
Indonesia · secondary
Backup gateway for Indonesian customers.
Indonesia · retail
Cash-at-counter for buyers without cards or e-wallets.
International
Auto-recurring subscriptions for non-Indonesian buyers.
International
Auto-recurring subscriptions, secondary international.
Global · crypto
Settles to USD; license issued on confirmation.
Phases 0–5 are live. Billing, licensing, and the customer portal are in production. Below is the unedited list of what's done and what's next.
Indie maker, multi-tenant SaaS, or all-in. Each preset is just a plugin cart underneath — change one click, change the price.
Self-hosted. MIT core. Written in Go. Stored in real SQL tables. Your data, your infrastructure, your rules.
No credit card required · v1.0 live · Phases 0–5 shipped