Nordr
Nordr is a lightweight static site generator written in Bash. It turns Markdown into a full site, articles, projects, fragments, RSS feeds, sitemaps, and themes, with as few dependencies as possible. It's meant for people who like plain text, version control, and a publishing workflow they can inspect, understand, and keep running for years without surprises.
I built Nordr on the same assumptions I want my own pages to carry: quiet systems often last longer, tools should stay understandable, and words deserve a stable home that doesn't rearrange itself around novelty. Content starts as plain text, passes through a few visible steps, and becomes a page. Deployments are tracked, backups pile up, and you can trace the whole path from source to result without guesswork. There's very little hidden machinery.
The aim is to keep things light enough to carry and clear enough to repair. A site built this way can stay small, hum along for years with almost no effort, and leave behind records that still make sense long after the environment around them has shifted. Nordr doesn't promise permanence. It just tries not to make disappearance more complicated than it needs to be.
Features
- Static site generation from Markdown using
cmark. - Relational content: articles, pages, and projects.
- Fragments: A system for grouping chapters and serialized writing.
- Standardized feeds: Automatic RSS and sitemap generation.
- Asset management: Simple copying for CSS, fonts, and images.
- Built-in tools: Development server and auto-rebuilding "watch" mode.
- Legacy aware: Targets everything from OS X 10.5 (PowerPC) to modern macOS and Linux.
- Zero JavaScript: The site remains functional and readable without a runtime.
License
This project was written by främling and is licensed under the GNU General Public License version 3 (or any later version).
See the LICENSE file for details.
Downloads
- Latest release:
Requirements
Nordr is built for the long term. It relies on standard Unix tools typically available on any POSIX-compliant system since the early 2000s (sed, awk, grep, cut, sort, tr, cp, du, etc.).
- Bash - The primary engine. Works on version 3.2+ (Leopard).
- cmark - For Markdown to HTML conversion.
- shortcodes.rules - An external file containing regex patterns for shortcode expansion.
- python3 - Used only for the local development server.
- rsync - Handles remote deployments to the
DEPLOY_TARGET. - zip - Creates compressed archives for backups.
- gdate - Recommended for macOS; falls back to system
dateelsewhere.
Commands
build
Generate the complete static site from content/ and templates/. This is the primary command for publication.
server
Starts a local Python development server at http://localhost:8080. It performs a fresh build before starting.
watch
A combined mode that starts the server and monitors content/, assets/, and templates/ for changes, rebuilding automatically when a file is saved.
deploy
Synchronizes the public/ directory with a remote server via rsync. Requires a DEPLOY_TARGET in nordr.conf.
backup
Creates a timestamped ZIP archive of the site source, excluding build artifacts and version control history.
new-article / new-page / new-project
Interactive helpers that prompt for a title and generate a new Markdown file with the correct metadata headers.
Shortcodes
Shortcodes provide structured HTML elements within Markdown. They are expanded during the build process and require no client-side JavaScript.
Notifications
[[notify]]
Standard informational block.
[[/notify]]
[[danger]]
Warning or critical information.
[[/danger]]
Annotations
[[whisper]]
Faint, low-contrast text for marginalia or aside notes.
[[/whisper]]
[[ambient]]
A marked paragraph (※) for atmospheric descriptions.
[[/ambient]]
[[nowplaying]]
♪ accompanied by [Song Title]
[[/nowplaying]]
Structure
[[details title="Summary"]]
Hidden content revealed on click via the `<details>` element.
[[/details]]
Media
[[image path="file.jpg" caption="Description"]]
Inserts an image from assets/images/. The caption is used for alt text and a visible <figcaption>.
[[file path="archive.zip" size="2.4 MB"]]
Creates a shareware-style download box. Files must reside in assets/files/.
Examples
# Start an interactive writing session
./nordr.sh watch
# Perform a final check and push to the web
./nordr.sh build
./nordr.sh deploy