Configuration Reference
sequoia.json
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
siteUrl | string | Yes | - | Base URL of your website |
contentDir | string | Yes | - | Directory containing blog post files |
publicationUri | string | Yes | - | AT-URI of your publication record |
imagesDir | string | No | - | Directory containing cover images |
publicDir | string | No | "./public" | Static folder for .well-known files |
outputDir | string | No | - | Built output directory for inject command |
pathPrefix | string | No | "/posts" | URL path prefix for posts |
pdsUrl | string | No | "https://bsky.social" | PDS server URL, generated automatically |
identity | string | No | - | Which stored identity to use |
frontmatter | object | No | - | Custom frontmatter field mappings |
frontmatter.slugField | string | No | - | Frontmatter field to use for slug (defaults to filepath) |
ignore | string[] | No | - | Glob patterns for files to ignore |
removeIndexFromSlug | boolean | No | false | Remove /index or /_index suffix from slugs |
stripDatePrefix | boolean | No | false | Remove YYYY-MM-DD- date prefixes from slugs (Jekyll-style) |
bluesky | object | No | - | Bluesky posting configuration |
bluesky.enabled | boolean | No | false | Post to Bluesky when publishing documents (also enables comments) |
bluesky.maxAgeDays | number | No | 30 | Only post documents published within this many days |
ui | object | No | - | UI components configuration |
ui.components | string | No | "src/components" | Directory where UI components are installed |
Example
{
"siteUrl": "https://example.com",
"contentDir": "content/posts",
"imagesDir": "src/assets",
"publicDir": "public",
"outputDir": "dist",
"pathPrefix": "/posts",
"publicationUri": "at://did:plc:kq6bvkw4sxof3vdinuitehn5/site.standard.publication/3mdlavhxjhm2v",
"pdsUrl": "https://andromeda.social",
"frontmatter": {
"publishDate": "date"
},
"ignore": ["_index.md"],
"bluesky": {
"enabled": true,
"maxAgeDays": 30
},
"ui": {
"components": "src/components"
}
}Post Frontmatter
| Field | Type | Required | Default Mapping | Description |
|---|---|---|---|---|
title | string | Yes | "title" | Post title |
description | string | No | "description" | Post description/summary |
publishDate | string | Yes | "publishDate", "pubDate", "date", "createdAt", "created_at" | Publication date |
coverImage | string | No | "ogImage" | Cover image filename |
tags | string[] | No | "tags" | Post tags/categories |
draft | boolean | No | "draft" | If true, post is skipped during publish |
Example
---
title: My First Post
description: An introduction to my blog
publishDate: 2024-01-15
ogImage: cover.jpg
tags: [welcome, intro]
draft: false
---Custom Frontmatter Mapping
Override default field names in sequoia.json:
{
"frontmatter": {
"publishDate": "date",
"coverImage": "thumbnail",
"draft": "private"
}
}Slug Configuration
By default, slugs are generated from the filepath (e.g., posts/my-post.md becomes posts/my-post). To use a frontmatter field instead:
{
"frontmatter": {
"slugField": "url"
}
}If the frontmatter field is not found, it falls back to the filepath.
Jekyll-Style Date Prefixes
Jekyll uses date prefixes in filenames (e.g., 2024-01-15-my-post.md) for ordering posts. To strip these from generated slugs:
{
"stripDatePrefix": true
}This transforms 2024-01-15-my-post.md into the slug my-post.
Ignoring Files
Some frameworks use special files like _index.md (Zola) for section pages that aren't actual blog posts. Use the ignore field to skip these files during publishing:
{
"ignore": ["_index.md", "**/drafts/**"]
}Patterns use glob syntax and are matched against relative paths from contentDir.