Documentation
Content and configuration
The folder layout, post frontmatter, images, links, and configuration Folder Blog supports today.
The connected content folder is the publishing boundary. New dashboard
connections currently use posts, so paths below are relative to that folder.
Folder structure
my-blog/
└── posts/ # connected content folder
├── hello-world.md
├── notes/
│ └── another-post.md
└── images/
└── photo.jpg
Every markdown file under the connected folder is processed recursively. The
filename becomes the default slug: hello-world.md becomes hello-world and
publishes at /posts/hello-world. A frontmatter slug overrides the filename.
Duplicate slugs receive a numeric suffix.
Images, audio, video, and PDFs inside the connected folder are uploaded as content-addressed media. Relative references are rewritten when the referenced file exists:

Absolute URLs and unresolved paths are left unchanged.
Frontmatter reference
All fields are optional, but title, date, and description make a post more
useful in listings and feeds.
---
title: Field Notes
date: 2026-08-08
description: A short summary shown in listings and feeds.
tags: [fieldwork, notes]
categories: [journal]
cover: ./images/photo.jpg
featured: true
author: Ada Lovelace
authorImage: ./images/ada.jpg
---
| Field | Accepted behavior |
|---|---|
title | String used as the post title. The filename is the fallback. |
slug | Explicit URL slug. Otherwise derived from the filename. |
date | String, number, or YAML date. A valid future value schedules the post. |
description | Listing, API, and feed summary. summary, then the first paragraph, are fallbacks. |
tags | String or list of strings used by the tags endpoint and filter. |
categories | String or list of strings used by the categories endpoint and filter. |
cover / coverImage | Relative media path or absolute URL for the post cover. |
featured | Only the boolean true marks a post as featured. |
author | String, or an object with a string name. |
authorImage | Author image URL or relative media path. |
hidden | true archives the post so public routes and API queries exclude it. |
draft | true keeps the post out of public routes and APIs. |
published | false also keeps the post as a draft. |
Self-hosted builds can opt into an inferred frontmatter contract for custom fields. It is generated from normalized, included posts and reports mixed types without narrowing them. See Self-hosting for the configuration, generated files, and local/remote TypeScript examples.
Scheduled posts
The hosted build enables scheduling using date. A valid future date marks the
post scheduled; it is not returned by public post queries until another build
publishes it. Dates without a timezone follow JavaScript date parsing, so use an
explicit ISO 8601 timezone when the exact instant matters:
date: 2026-09-01T09:00:00-04:00
Wikilinks and markdown links
Obsidian-style wikilinks are enabled:
See [[another-post]] or [[another-post#Details|the details]].
Folder Blog resolves a target by slug, alias, or filename and produces a
/posts/<slug> link. Heading-only links such as [[#Details]] become local
anchors. A missing target is rendered as a broken-link marker and reported in
the build issues. Normal relative markdown links are resolved too.
For self-hosted builds, set content.trackRelationships: true to also export
resolved body links as post hashes in posts.json and as edges in
graph.json. The local and HTTP SDKs use those edges for outgoing, incoming,
and mutual-link related-article rules. External URLs, same-page anchors, local
asset links, and unresolved targets do not create edges; unresolved wiki and
Markdown post links remain visible in processor-issues.json.
Site configuration today
The hosted worker currently gets the blog name, description, subdomain, theme,
SEO, and feature settings from the Folder Blog database. It does not read
index.md frontmatter or a repository styles.css as site configuration.
Likewise, when the connected content path is the default posts, repository
root files such as public/avatar.jpg, index.md, and styles.css are outside
the fetched publishing boundary. Keep post media inside posts for now.
The older index.md variant/palette convention and CSS-variable examples
remain design direction, not a promise of current hosted behavior. This page
will change when repository-driven site configuration ships.