Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Configuration Reference

sequoia.json

FieldTypeRequiredDefaultDescription
siteUrlstringYes-Base URL of your website
contentDirstringYes-Directory containing blog post files
publicationUristringYes-AT-URI of your publication record
imagesDirstringNo-Directory containing cover images
publicDirstringNo"./public"Static folder for .well-known files
outputDirstringNo-Built output directory for inject command
pathPrefixstringNo"/posts"URL path prefix for posts
pdsUrlstringNo"https://bsky.social"PDS server URL, generated automatically
identitystringNo-Which stored identity to use
frontmatterobjectNo-Custom frontmatter field mappings
frontmatter.slugFieldstringNo-Frontmatter field to use for slug (defaults to filepath)
ignorestring[]No-Glob patterns for files to ignore
removeIndexFromSlugbooleanNofalseRemove /index or /_index suffix from slugs
stripDatePrefixbooleanNofalseRemove YYYY-MM-DD- date prefixes from slugs (Jekyll-style)
blueskyobjectNo-Bluesky posting configuration
bluesky.enabledbooleanNofalsePost to Bluesky when publishing documents (also enables comments)
bluesky.maxAgeDaysnumberNo30Only post documents published within this many days
uiobjectNo-UI components configuration
ui.componentsstringNo"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

FieldTypeRequiredDefault MappingDescription
titlestringYes"title"Post title
descriptionstringNo"description"Post description/summary
publishDatestringYes"publishDate", "pubDate", "date", "createdAt", "created_at"Publication date
coverImagestringNo"ogImage"Cover image filename
tagsstring[]No"tags"Post tags/categories
draftbooleanNo"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.