x51 // @kung-fu // minerva

x51@cyberspace:~$ man minerva

MINERVA(1)@kung-fu Commands ManualMINERVA(1)

name

minerva — static site generator for publishing markdown as HTML

synopsis

npm install @kung-fu/minerva
minerva --f ./pub.yml

description

@kung-fu/minerva is a minimalist static site generator for magazine and blog sites. It converts a folder of markdown files (with YAML frontmatter) into HTML through Handlebars templates, and generates listing pages, pagination, and RSS feeds along the way. A single YAML config file drives the whole build — there is no plugin system, no client runtime, and no JavaScript shipped to the reader.

Markdown is rendered with markdown-it (heading anchors included), frontmatter is parsed with gray-matter, and any file marked draft: true is skipped. Asset directories are copied through verbatim. This very site is a minerva build.

configuration

The config file passed to --f supports:

keydescription
source / destmarkdown input directory and build output directory
layoutthe Handlebars layout every template renders into
partials / helpersoptional custom Handlebars partials and helper modules
assetsdirectories copied verbatim into the output
globalsvariables available to every template (e.g. absoluteUrl)
output.listspaged listing pages: folder, page size, sort order, paging template
output.viewtemplates rendered once per markdown file (posts)
output.staticstandalone template pages with no markdown source
output.feedsRSS feeds: template, max items, optional property/key filter

A minimal blog:

source: posts
      dest: build
      layout: layouts/main.hbs
      assets: [assets]
      globals:
        siteTitle: My Blog
      output:
        lists:
          - name: default
            folder: blog
            size: 20
            order:
              orderBy: datePublished
              direction: desc
              type: date
            templates: [layouts/index.hbs]
        view:
          templates: [layouts/post.hbs]
        feeds:
          - name: default
            template: layouts/rss.hbs
            maxItems: 100

content

Each markdown file carries its metadata in YAML frontmatter; everything below the fence is the post body:

---
      title: My First Post
      datePublished: 2024-01-15
      tags: [tutorial, javascript]
      ---
      
      # Heading
      
      Content here...

see also

npmjs.com/package/@kung-fu/minerva, moneta(3), proto(3)

@kung-fu2026-06-04MINERVA(1)

x51@cyberspace:~$ cd ~/@kung-fu