Content management without a server
Introducing elek.io
On this page
In short
elek.io is a content management system without a server. Content is stored as plain JSON files in Git. You can use elek.io Core today, free and in Alpha, and elek.io Desktop and elek.io Cloud are in development.
Your CMS doesn't need a server, and your website probably doesn't either. With elek.io, your CMS will run as a desktop app on your own device, even offline. We believe most websites should be static: rebuilt when their content changes, not built again on every request.
Desktop for editors. Core for developers. Cloud only if you need it. That is elek.io in one line. Here is where the idea came from, what you can use today and where we are taking it.
Why another CMS
I came to this from traditional content management systems, WordPress above all.
I never understood why a business website needs so much maintenance. Most websites change now and then. Their CMS runs around the clock anyway.
Such a site is easy to mess up, too. Editors can write almost anything into it, and they are rarely limited in how they format it.
So I looked into static websites, and found no real option with everything I wanted: strong types for the content above all, and limits on what editors can and cannot do.
We found no CMS for static sites that handles content like one on a server. So we're building one. Why static on the home page carries the whole argument.
Types and rules for your content
That is what elek.io Core does today. Every Project is a Git repository of plain JSON files, and elek.io Core turns its content model into types, so your site and your apps know every field in every language.
Collections for each kind of content, such as Vehicles, Locations or Pages, with the fields you define. 18 field types, from text and dates to select lists and Markdown, each with rules such as required, unique or a maximum length.
Components are groups of fields for many places, such as a hero, a gallery or opening hours. An Entry holds any number of them in any order, so a page is built from sections.
Entries link other Entries instead of copying them: a vehicle points to its location, so a new address is changed once.
Assets are images, PDFs and other files, stored once and linked from any Entry. An Asset that is still linked can't be deleted, so no page loses its image.
Languages translate text, numbers and links, and the names, labels and descriptions of your Collections and their fields with them. A required field without a translation fails validation.
Types come out of that model as zod schemas and TypeScript types, so your code knows every field and its type.
Your content stays a folder you can open: one file per Entry, inside the folder of its Collection, with Assets in Git LFS. Any program can read them without us, and elek export writes every Project to JSON, as one nested file or as a tree of separate files.
Three products
One for editors, one for developers, and one for when you do need a server.
elek.io Desktop
elek.io Desktop will be the app your editors write, translate and synchronize content in, offline on Windows, macOS and Linux. It is in development. Every change will be saved to their own disk first, so nothing will wait for a server, and your Git repository will bring the copies together.
elek.io Core
Use your content and generate TypeScript types and API clients. elek.io Core reads your Project into your Astro site, generates types and an API client from it, and serves it locally while you develop. You can use it today, free and in Alpha.
elek.io Cloud
When you do need a server. elek.io Cloud will serve your content through an API and reach other platforms. elek.io Cloud isn't live yet, and it's optional: elek.io Core works without it today, and elek.io Desktop will too.
Try elek.io Core today
elek.io Core is free, needs no account and is on npm as @elek-io/core. Install it with the two packages you install beside it:
npm install @elek-io/core dugite zodThen one file, elek.config.ts, declares the Project your site reads, and two more register the integration and derive your Collections. The elek.io Core page shows all three, and its reference walks through them, in English.
elek.io Core is in Alpha and not ready for production use. An update may change how a Project is stored, so a Project an older version wrote may not open after you update. What doesn't work yet on its page carries the rest.
This site is built that way. Every page, every article and every word of its header and footer is an Entry of one Project, this article among them.
Where elek.io is headed
From the first field to your website and apps. You will be able to create and manage content in elek.io Desktop, use it with elek.io Core, and optionally let elek.io Cloud host and deliver it to one or more websites and apps.
In elek.io Desktop, an editor will Model the fields of a Collection, Edit and Translate its Entries, read in the History who changed what, and cut a Release of the whole Project. Each of them will work on a copy on their own computer, even offline, and your Git repository will bring the copies together. As many editors as you need.
elek.io Cloud will serve every Release on request through a Content API. It will build your website on every Release, on your domain, and host the Git repository your Project syncs to, with nothing to set up. Connectors will send your content out to other platforms, one way. Your content will be stored in Germany: every Release you publish, every Git repository Cloud hosts and every backup. Everything Cloud will do, you can do without it.
There is no date yet, and no order in which its parts arrive.
Tell us what you think
We'd love you to try it and tell us in GitHub Discussions opens in a new tab what you find, so we can make it better.
None of these needs an account with us:
The feed of this blog, which every article goes into.
elek.io on Bluesky opens in a new tab, for short updates such as a new Release or a new article.
The elek.io Core repository opens in a new tab, where every Release and what changed in it are written down.
GitHub Discussions opens in a new tab, for questions, ideas and anything that is no issue.
elek.io on YouTube opens in a new tab, for videos about elek.io.