Skip to content
elek.io
Alpha

Use your content and generate TypeScript types and API clients.

Every Project is a Git repository of plain JSON files. elek.io Core turns its content model into types, so your site and your apps know every field in every language.

elek.io Core is in Alpha and not ready for production use. See what doesn't work yet. 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.

How it works

Three files, and your content is typed all the way into your pages.

elek.io Core reads a Project from its Git remote, types every field in every language, generates types and a client for any app, and serves your content locally while you develop.

Live while you develop. While astro dev runs, a change to a Project reloads its Collection, and the open page shows it a moment later. A change to the content model itself needs a restart.

Git included. Git and Git LFS come with elek.io Core through dugite, so a build machine needs nothing else installed.

Pinned to a Release. A build reads the latest Release, the latest preview, the drafts or an exact version. What it shows changes when a Release is published, not when somebody saves.

Your content

A folder you can open.

Every Project is a Git repository of plain JSON files on your disk: one file per Entry, inside the folder of its Collection, with Assets in Git LFS. Open it in any editor, sync it to the Git host you choose, or keep it on your computer.

How a Project is stored

Questions

Before you install.

What developers ask first. elek.io Core's documentation answers the rest.

Which frameworks does elek.io Core work with?

Astro, through our integration, which is the only one today. You can also use Core by calling its methods directly, use the generated types with the JSON that elek export writes or use the local API.

Do I need elek.io Desktop?

No. elek.io Core is the library elek.io Desktop is built on. So you can create Projects, Collections and Entries in TypeScript or wait for the Desktop app to release.

How does a build on CI get the content?

The elek() integration fetches each Project from its Git remote before Astro builds, the latest Release by default. A private remote takes a read token in ELEK_IO_REMOTE_ACCESS_TOKEN, and a public one needs none. A Project declared without a remote is read from the data directory on disk. Alternatively, use Core's provision method to do that outside of the Astro integration.

Can I get my content as plain JSON?

Yes. elek export writes every Project to JSON, as one nested file or as a tree of separate files, and --watch keeps it current.

What doesn't work yet?

elek.io Core is in Alpha. An update may change how a Project is stored, so a Project an older version wrote may not open after you update. Creating a Project, writing its content and cutting a Release all take elek.io Core's API, in code, while elek.io Desktop is in development. Astro is the only framework with an integration. Astro's render() shows nothing for an Entry, so a Markdown Value renders through mdastRender instead. A change to the content model needs a restart of astro dev. There is no full-text search.

Get started

Try it in your Astro project.

Install elek.io Core, declare your Project and build. Or hand the setup to your coding agent.

Install it yourself

elek.io Core with its required peers, then the files the documentation shows.

Get started

Or ask your agent

Paste it into the coding agent you use, in your Astro project.

Agent prompt

Set up elek.io in this Astro project. Install @elek-io/core with its peers dugite and zod, and read the documentation it ships in node_modules/@elek-io/core/docs before you change anything else. Then declare the Project in elek.config.ts with its id and remote URL, add the elek() integration to astro.config.mjs, and derive the collections in src/content.config.ts.

elek.io is in development.

Get updates by following us on Bluesky.