What is config.json?

config.json is the file-based configuration for your Flowershow site. It lets you version-control your settings alongside your content.

Important

config.json values always win over dashboard settings.

File location

Place config.json in the root of your published content folder. For most users that means the root of the repository. If you publish only a subfolder of your vault or repo, place the file inside that subfolder.

Options

title

Type: string
Default:

Site name appended as a suffix to every page title in browser tabs, search results, and social shares. Learn more →

"title": "My Digital Garden"

description

Type: string
Default:

Fallback description used in search results and social previews when a page has no description set in its frontmatter. Per-page descriptions override this entirely — they are not combined. Learn more →

"description": "Notes and essays on software and ideas"

image (⭐️ Premium feature)

Type: string
Default:

Path (relative to your content root) or external URL for the default social share image (Open Graph / Twitter Card). Learn more →

"image": "/assets/social-card.jpg"

Type: string
Default:

Path to a logo image shown in the navbar. Relative to your content root.

"logo": "logo.png"

favicon (⭐️ Premium feature)

Type: string
Default:

Path to a favicon image, or a single emoji character. Learn more →

"favicon": "/assets/favicon.png"

Type: object
Default:

Navbar configuration. Learn more →

FieldTypeDescription
titlestringSite name shown next to the logo
linksArray<NavLink | NavDropdown>Navigation links or dropdowns
cta{ name: string, href: string }Call-to-action button

Where NavLink is { name: string, href: string } and NavDropdown is { name: string, links: NavLink[] }.

"nav": {
  "title": "My Site",
  "links": [
    { "name": "Blog", "href": "/blog" },
    {
      "name": "Docs",
      "links": [
        { "name": "Getting started", "href": "/docs/getting-started" },
        { "name": "Reference", "href": "/docs/reference" }
      ]
    }
  ],
  "cta": { "name": "Sign up", "href": "/signup" }
}

social

Type: Array<{ label: string, href: string }>
Default:

Social media links shown in the navbar and footer. Learn more →

Supported label values: bsky, bluesky, discord, mail, facebook, github, instagram, linkedin, mastodon, pinterest, reddit, spotify, substack, telegram, threads, tiktok, twitter, whatsapp, x, youtube.

"social": [
  { "label": "github", "href": "https://github.com/yourusername" },
  { "label": "twitter", "href": "https://twitter.com/yourusername" }
]

Type: object
Default:

Footer configuration. Learn more →

FieldTypeDescription
navigationFooterNavigationGroup[]Link groups shown in the footer

Where FooterNavigationGroup is { title: string, links: Array<{ name: string, href: string }> }.

"footer": {
  "navigation": [
    {
      "title": "Resources",
      "links": [
        { "name": "Docs", "href": "/docs" },
        { "name": "Blog", "href": "/blog" }
      ]
    }
  ]
}

showSidebar

Type: boolean
Default: true

Show or hide the sidebar navigation. Learn more →

"showSidebar": false

Type: object
Default:

Fine-grained sidebar options. Learn more →

FieldTypeDescription
orderBy"title" | "path"Sort order for sidebar items
pathsstring[]Limit the sidebar to specific content paths
"sidebar": {
  "orderBy": "title",
  "paths": ["/docs"]
}

showToc

Type: boolean
Default: true

Show or hide the in-page table of contents. Learn more →

"showToc": false

Type: boolean
Default: true

Show or hide the backlinks panel at the bottom of each page. Learn more →

"showBacklinks": false

contentInclude

Type: string[]
Default:

List of paths to include in your published site. If omitted, all files are included by default. Learn more →

"contentInclude": ["/blog", "README.md"]

contentExclude

Type: string[]
Default:

List of paths to exclude from your published site entirely — not published, not accessible by URL. Exclude rules take precedence over include rules. Learn more →

"contentExclude": ["/blog/_archive"]

contentHide

Type: string[]
Default:

List of paths to hide from the sidebar and search, but still published and accessible by URL. Learn more →

"contentHide": ["/people"]

syntaxMode

Type: "auto" | "md" | "mdx"
Default: "auto"

Controls whether content is parsed as Markdown or MDX. Learn more →

"syntaxMode": "md"

analytics

Type: string
Default:

Google Analytics 4 measurement ID. Learn more →

"analytics": "G-XXXXXXXXXX"

umami

Type: { websiteId: string, src?: string }
Default:

Umami analytics configuration. Learn more →

FieldTypeDescription
websiteIdstringYour Umami website ID
srcstringURL of your Umami script (required for self-hosted Umami)
"umami": {
  "websiteId": "your-website-id",
  "src": "https://your-umami.example.com/script.js"
}

showComments

Type: boolean
Default: false

Enable or disable the comments section on pages. To fully set up comments, you must also configure repoId and categoryId in the giscus object — comments won't work without them. Learn more →

"showComments": true

giscus

Type: object
Default:

Advanced Giscus options. Required when your site has no GitHub integration (e.g. publishing from Obsidian or CLI) — without it, Giscus has no repository to point to. Learn more →

FieldTypeDescription
repostringGitHub repo in owner/repo format
repoIdstringGitHub repo ID (required)
categorystringDiscussion category name
categoryIdstringDiscussion category ID (required)
themestringGiscus theme name
langstringLanguage code (e.g. "en")
mappingstringHow discussions are mapped to pages (e.g. "title")
strict"0" | "1"Strict title matching
reactionsEnabled"0" | "1"Enable emoji reactions
inputPosition"top" | "bottom"Comment box position
"giscus": {
  "repo": "username/repo",
  "repoId": "R_xxx",
  "category": "Discussions",
  "categoryId": "DIC_xxx"
}

Type: boolean
Default: false

Show an "Edit this page" link at the bottom of each page. Learn more →

"showEditLink": true

enableSearch (⭐️ Premium feature)

Type: boolean
Default: false

Enable site-wide full-text search.

"enableSearch": true

enableRss

Type: boolean
Default: false

Enable an RSS feed for your site. Learn more →

"enableRss": true

showBuiltWithButton (⭐️ Premium feature)

Type: boolean
Default: true

Hide the "Built with Flowershow" button in the footer.

"showBuiltWithButton": false

Type: boolean
Default: false

Show a link to the raw Markdown source of each page.

"showRawLink": true

redirects

Type: Array<{ from: string, to: string }>
Default:

URL redirects for moved or renamed pages. Matches exact paths only — no regex or glob patterns. Learn more →

FieldTypeDescription
fromstringThe old URL path
tostringThe new URL path
"redirects": [
  { "from": "/blog/old-post", "to": "/blog/new-post" },
  { "from": "/old-section", "to": "/new-section" }
]

theme

Type: string | object
Default:

Set the site theme. Pass a theme name as a string, or an object for additional options. Themes · Dark mode

FieldTypeDescription
themestringTheme name
defaultMode"light" | "dark" | "system"Default color mode
showModeSwitchbooleanShow light/dark mode toggle
"theme": "superstack"
"theme": {
  "theme": "superstack",
  "defaultMode": "dark",
  "showModeSwitch": true
}

showHero

Type: boolean
Default:

Enable hero sections site-wide. When set, the root-level title, description, image, and cta fields provide default hero content for all pages. Individual pages can override these with frontmatter. Learn more →

"showHero": true

cta

Type: Array<{ href: string, label: string }>
Default:

Site-wide default call-to-action buttons used in hero sections. Learn more →

"cta": [
  { "label": "Get started", "href": "/docs" },
  { "label": "View on GitHub", "href": "https://github.com/yourusername/yourrepo" }
]
Built with LogoFlowershow