A blog for a site that should stay static.

Nano CMS slots a small, SEO-complete blog into a site that is already plain HTML. Markdown files on disk are the database. No MySQL, no build step, and no permanent admin panel sitting on the server.

$ unzip nano-cms.zip -d /blog

1.4.0, released 4 June 2026 · zip, 350 KB · PHP 8.1+

posts/welcome.md
---
title:    Welcome to the blog
date:     2026-06-09
category: News
summary:  A short SEO description.
---

# Welcome

Plain Markdown on disk, no database.
Backups are a folder copy.
Version
1.4.0June 2026
Deployed
350 KB4,500 lines
Requires
PHP 8.1+shared hosting is fine
Licence
MITnothing to buy

Markdown files on disk are the database.

Nano CMS solves one specific problem. A client site should stay fast static HTML, but it needs a steady stream of fresh content for search ranking. Rather than converting the whole thing to WordPress, it slots a small blog into the site that is already there.

It is deliberately not a general purpose CMS. It does one thing and tries to do it well: serve a blog with strong SEO output in as little code as possible.

Two codebases. One on-disk format.

Frontend

Lives in the client's webroot. Renders pages, generates the sitemap and feed, and writes full metadata on every URL. Once it is there it never needs touching.

/blog/

Portable admin

Uploaded when you want to publish, removed when you are done. Writing a post does not need it back: you can leave it on while you work and take it off for months.

/blog/admin/

Config, kept out of reach

Settings and the password hash live above the webroot, so they are never served even if the server is misconfigured.

/blog-config/

Everything a small blog needs. Nothing it does not.

Writing

Flat-file by designMarkdown with YAML frontmatter. Backups are an rsync.
Markdown editorLive preview and a drag-and-drop media manager.
Category landing pagesManaged archives with their own hero and description.
Right-sized imagesThumbnails generated on demand, never the full original.

On the site

SEO without pluginsOpen Graph, cards, JSON-LD, sitemap and RSS on every page.
Clean URLsReadable addresses with no query strings, three levels deep.
Inherits your CSSRenders inside the host site, so it looks like part of it.
Removable adminTake the folder off the server and the site carries on as normal.

Five minutes, one setup wizard.

Upload the folder

Any host running PHP 8.1 or newer. Shared hosting is fine.

Open it in a browser

The installer picks a config directory above the webroot and writes it.

Set a password

Then publish. Take the admin folder off again whenever you like.

terminal
# unpack into the site you already have
unzip nano-cms-1.4.0.zip -d ./blog

# then open it once in the browser
open https://example.com/blog/install.php

# config lands above the webroot
/home/you/blog-config/config.json

Free, and staying that way.

Released under the MIT licence. Nothing to buy, no key to enter, no per-domain fee. Use it on your own sites and on client work, as many as you like.

All we ask is that the small Powered by Nano CMS · Developed by Digital Fracture line in the footer stays where it is. It is how most people find the project. If it saved you an afternoon, you can buy me a coffee.

Download Nano CMS 1.4.0 · zip, 350 KB · PHP 8.1+