THEME ENGINE // THEME.JSON SPEC & GARDEN TAXONOMY

Themes & Digital Garden

Indie in a Box separates presentation logic from runtime engine code. Themes are simple, portable directory bundles stored in data/themes/ governed by a declarative theme.json manifest.

01 // The theme.json Manifest

Every theme must contain a theme.json file at its root. This defines theme metadata, authors, required capabilities, custom template overrides, and color options:

DATA/THEMES/CYBER-DARK/THEME.JSON
{
  "name": "Cyber Dark",
  "version": "1.0.0",
  "description": "A 90s anime cyberpunk dark theme with neon cyan and pink accents.",
  "author": {
    "name": "Lumen Pink",
    "url": "https://lumen.pink"
  },
  "license": "MIT",
  "min_engine_version": "1.0.0",
  "supports": [
    "microformats2",
    "digital_garden",
    "webmentions",
    "camo_proxy",
    "multilingual"
  ],
  "options": {
    "accent_color": "#ff2a85",
    "secondary_color": "#00f0ff",
    "monospace_code": true
  }
}

02 // Template File Hierarchy

Theme templates use clean, standard HTML5 with embedded token replacements or minimal PHP view components. The engine falls back to default built-in views if a template file is omitted:

Template File Purpose Available Context Variables
layout.html Master site wrapper (HTML shell, head tags, header, navigation, footer). {{site_name}}, {{fqdn}}, {{content}}, {{hcard}}
index.html Homepage layout rendering recent posts, pinned garden items, and author bio. {{posts}}, {{author_bio}}, {{recent_replies}}
post.html Single post permalink layout with microformats2 h-entry markup. {{post_title}}, {{post_content}}, {{webmentions}}, {{interactions}}
garden.html Digital Garden index grouping notes by flowerbeds, maturity, and confidence. {{flowerbeds}}, {{maturity_tree}}, {{seedlings}}
gemini.gmi Optional theme override for Gemini protocol capsule rendering. Gemtext formatting tokens

03 // Installing & Managing Themes

You can install themes through the Admin panel or by dropping them directly into data/themes/:

Via Admin Dashboard

Navigate to Admin → Configuration → General. Paste a ZIP download URL or select an official repository. The engine extracts the files and validates the theme.json manifest automatically.

Via Git / File System

Clone or extract any theme repository into data/themes/<theme-name>/. Run php indieinabox.php config set --key active_theme --value <theme-name> and rebuild with php indieinabox.php build.

04 // Digital Garden Taxonomies

Unlike traditional reverse-chronological blogs, Indie in a Box includes first-class support for non-linear knowledge graphs:

Taxonomy Metric Allowed Values Visual Representation & Meaning
Flowerbed (Category) Any string slug (e.g. tech, philosophy, cyberpunk) The thematic "plot of soil" where ideas are cultivated together.
Maturity Stage sprout, seedling, tree, wilted, stone Visual plant lifecycle icon indicating whether an essay is an unfinished seed or evergreen resource.
Confidence Level certain, likely, possible, unlikely, impossible Epistemic indicator signaling the author's certainty in the hypothesis presented.
Importance Weight trivial, minor, moderate, major, critical Sort weight determining prominent placement in search results and capsule roots.