Flat-file CMS

Websites made of folders and text.

No database. No build step. No lock-in. Every page is a folder on disk, every text is a file you can read in any editor — and a panel that loads in under a hundred milliseconds sits on top of it.

Read the notes →

Selected work

All projects →

Latest notes

All notes →
  • Why flat files outlive databases

    A database is a promise about the future that most projects cannot keep. A folder of text files is a much smaller promise.

  • Fluid type without the guesswork

    Two clamp() lines replace six breakpoints, and the result reads better at every width in between.

  • The cheapest performance win is doing less

    Before the caching layer, the CDN and the build pipeline, there is a much duller question: what are you sending that nobody asked for?

Why this exists

Most content systems ask you to trade ownership for convenience. You get a nice editor, and in return your writing lives in a database you will never open, behind a version you cannot pin, in a format nobody else reads.

Counterglow takes the opposite trade. The content is the filesystem:

content/
  3_notes/
    1_why-flat-files/
      note.txt
      cover.jpg

That folder is the page. Copy it, commit it to git, edit it on a train with no connection, hand it to someone who has never heard of this software — it keeps working.

The best format for your writing is the one you can still open in ten years.

What you get

  • Pages as folders — the folder name sets the URL, the number prefix sets the order
  • Markdown plus content tags for images, galleries, videos and links
  • Automatic image renditions in the sizes each layout actually needs
  • A panel that is server-rendered PHP with roughly nine kilobytes of JavaScript
  • JSON for every page — append .json to any URL and you have a headless CMS — see an example
  • Themes you can download — a whole catalogue of looks, one click to switch
  • Feeds, a sitemap and search built in, no plugins required