Skip to content

How Zeku reads your site

Zeku has no project file of its own. Everything it knows about your site, it reads from your site, every time you open it.

Zeku reads src/content.config.ts (or .js, .mjs, or .mts) and offers every collection defined there. For each one, it uses:

  • the loader’s base folder, so a collection can live anywhere, even inside another collection’s folder
  • the schema, for the fields each entry has
  • the loader pattern, to see whether the collection accepts .mdx

A collection that loads a single data file with file() isn’t shown, since it has no posts to write.

Astro writes a JSON schema for each collection to .astro/collections/ whenever astro sync or astro dev runs. Zeku reads those files for exact field types, including which fields are required, and reads your config for the two helpers the JSON loses: image() and reference().

Zeku shows each entry’s URL on the dashboard, uses it for the site preview and the SEO audit, and writes it when you link to the entry. It works the URL out the way Astro does:

  1. It finds the dynamic route in src/pages that renders the collection, such as src/pages/blog/[...slug].astro, for the part before the entry.
  2. For the entry itself, a slug field in the frontmatter wins, used exactly as written.
  3. Otherwise it takes the file’s path inside the collection, drops the extension, and slugifies each part the way Astro does, so My Post.md becomes my-post and trip/index.md becomes trip.

A collection with no route of its own has no URL in Zeku either, since your site doesn’t publish its entries as pages. A collection whose loader has its own generateId function keeps the file path as written, since Zeku can’t run that function.

Every collection shows on the dashboard, with one exception: a collection that has no route of its own and lives inside another collection’s folder starts hidden, because it’s a detail of that collection rather than something you browse. Show or hide any collection in Settings > Content.

Choices that describe the project, not your computer, go in a .zeku folder inside the folder Zeku opened, usually your content folder:

File Holds
.zeku/config.json Which collections and folders you’ve shown or hidden
.zeku/types.json Field types you’ve set by hand
.zeku/snippets/ CSS snippets

Zeku creates these only when you change one of those choices, writes them the same way on every computer so they merge cleanly, and never puts anything specific to your machine in them. Commit the folder, and the choices follow the project.