Publish Markdown from git as a static site, with tags, feeds, and a theme you can adapt. Start with a folder of posts, or use the supported import workflow to bring an existing site into plain files.

No CMS. No database. No server at runtime.

Shortest path

A content-only folder is enough:

my-blog/
  filepress.config.ts
  package.json
  posts/2026-09-10-hello.md

Write posts as Markdown files. Build the site locally, then publish the generated files to your static host.

package.json depends on getfilepress ^0.1.37, a compatible range, and maps the commands. Commit the lockfile if you want later installs to resolve the same set. "Pin" here means an exact version, not a caret range:

{
  "type": "module",
  "scripts": {
    "dev": "filepress dev",
    "build": "filepress build",
    "preview": "filepress preview"
  },
  "devDependencies": { "getfilepress": "^0.1.37" }
}

filepress.config.ts needs title and url. Add logo: null for a text title, or put a logo.png in static/. The build fails if it links a logo that is not there.

import { defineFilepressConfig } from 'getfilepress';

export default defineFilepressConfig({ title: 'My Blog', url: 'https://my.blog', logo: null });

The post needs title and date (YYYY-MM-DD) in frontmatter. Then:

pnpm install
pnpm build      # writes ./build/
pnpm preview    # serves build/ at http://127.0.0.1:27777, no Genie

pnpm dev is the optional design loop. It is not required to produce a site. FilePress does not pick a host or upload build/ for you. Getting started has the scaffold command if you want a full starter tree.

Live result of this engine: getfilepress.com (this page). In-repo fixture: sites/demo (pnpm filepress dev --site demo from a FilePress clone).

Why this engine

Markdown, RSS, tags, and static hosting are common. Two FilePress paths that are less generic:

Import a public site. filepress import --source https://example.com crawls sitemap or RSS when it can, writes Markdown into a sibling folder, and can draft a first theme.css. You review the files. Nothing is published until you build and deploy. --no-llm stays deterministic when Ollama is down. Import

Genie, locally. In filepress dev only, a floating cockpit can steer theme.css, static/, and a few config fields (lede, tagline, logo). Experiments stay in gitignored .filepress-genie/. What you commit is ordinary CSS, files, and config. Genie

Dev versus production

CommandWhat runs
filepress devVite preview plus the Genie FAB
filepress buildStatic build/. A leak check fails the build if Genie markers appear
filepress previewServes build/ with no Genie

A static host never needs Genie, Ollama, or filepress dev.

First-party examples

These are Catalyst Forge sites, not independent customer adoption. All of them use the default Essay chrome plus a site-root theme.css. Named presets ink and folio exist in the engine. These live pages do not switch those presets.

SiteCustomization
getfilepress.comEssay plus theme.css (wider measure, product chrome)
haulout.devEssay plus theme.css
localslip.devEssay plus theme.css
In-repo sites/demoEssay plus an accent override in theme.css

Start here

What ships

A reverse-chronological index, or a custom home like this one (homePage). Tags, RSS, sitemap, robots.txt. Essay theme, plus ink / folio presets and a site-root theme.css. Optional paths mounts for a site-owned HTML tree. Optional Genie, locally. Experiments stay in .filepress-genie/. What gets committed is CSS, files, and config.