A flat-file static site engine for manifests and long-form opinion essays. Built with Astro.
- Markdown-based content — no database, no CMS
- Auto-discovery of content categories from
content/directories - Auto-generated Table of Contents from headings
- LaTeX math support via KaTeX (
$inline$and$$block$$) - License metadata per document (
text_license,image_license) - YAML-based site configuration
- Minimalist serif typography
npm install
npm run devOpen http://localhost:4321 in your browser.
Edit declare.config.yaml at the project root:
title: My Site
tagline: A flat-file engine for manifests and opinion essays.
showPoweredBy: true| Option | Type | Description |
|---|---|---|
title |
string | Site name shown in the header |
tagline |
string | Subtitle shown below the title |
showPoweredBy |
boolean | Show or hide the "Powered by declare.js" footer |
Also set your site URL in astro.config.mjs:
export default defineConfig({
site: 'https://your-domain.com',
// ...
});Every directory inside content/ automatically becomes a section on the homepage. No code changes needed.
content/
├── manifests/ → /manifests/{slug}
├── blog/ → /blog/{slug}
└── ideas/ → /ideas/{slug}
To add a title and description to a section, create a same-named Markdown file inside the directory:
content/manifests/manifests.md ← section meta
content/blog/blog.md ← section meta
The meta file uses only title and description in its frontmatter — no published date.
Create a Markdown file in any content directory:
---
title: "Your Title"
description: "A short description shown on the homepage."
published: 2026-01-01
author: "Your Name"
text_license: "AGPL-3.0-only"
image_license: "CC BY 4.0"
tags: ["tag1", "tag2"]
draft: false
---
## Section One
Supports **Markdown**, `code`, and math: $E = mc^2$.
$$\int_0^\infty e^{-x}\,dx = 1$$Set draft: true in frontmatter to hide an article from the homepage and skip building its page.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
title |
string | yes | — | Document title |
description |
string | yes | — | Short summary (homepage + meta) |
published |
date | no | — | Publication date (ISO 8601). Omit in section meta files |
updated |
date | no | — | Last updated date |
author |
string | no | AnmiTaliDev |
Author name |
text_license |
string | no | — | License for the text (e.g. CC BY-SA 4.0) |
image_license |
string | no | — | License for images |
tags |
string[] | no | [] |
Tag list |
draft |
boolean | no | false |
Set true to hide from listings and builds |
declare.js/
├── content/ ← your content (edit freely)
│ └── {category}/
│ ├── {category}.md ← optional section meta
│ └── {slug}.md ← articles
├── declare.config.yaml ← site settings (edit freely)
├── astro.config.mjs ← Astro config (set site URL)
└── src/ ← engine internals (do not modify)
| Command | Action |
|---|---|
npm run dev |
Start dev server at localhost:4321 |
npm run build |
Build to ./dist/ |
npm run preview |
Preview build locally |
AnmiTaliDev anmitalidev@nuros.org
AGPL-3.0-only. See LICENSE.