<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
  <title>selfdoc Documentation</title>
  <link href="https://smmh.dev/selfdoc/feed.xml" rel="self"/>
  <link href="https://smmh.dev/selfdoc/"/>
  <id>https://smmh.dev/selfdoc/</id>
  <updated>2026-09-15T00:00:00Z</updated>
  <subtitle>Static Site Generator that builds a project's documentation site directly from its source code, so the docs can never drift from the code they describe, with SEO/AEO, first-class blog, search, and cross-project linking built in</subtitle>
  <entry>
    <title>Architecture</title>
    <link href="https://smmh.dev/selfdoc/architecture/"/>
    <id>https://smmh.dev/selfdoc/architecture/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>This page explains how selfdoc works at a high level -- what happens when you run `selfdoc build`, how directives get resolved, and how themes control the output. For internal implementation details (tokenizer internals, extractor protocol, resolver dispatch chain), see [Internals](../internals/).</summary>
  </entry>
  <entry>
    <title>Blog Posts</title>
    <link href="https://smmh.dev/selfdoc/blog-guide/"/>
    <id>https://smmh.dev/selfdoc/blog-guide/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc includes a blog system for publishing chronological content alongside your documentation. Blog posts are Markdown files with a TOML frontmatter block, stored in a dedicated directory within your project. Posts are unversioned -- they exist outside the multi-version docs system -- and are published to the unified documentation assembly alongside your API reference and guides.</summary>
  </entry>
  <entry>
    <title>Check Guide</title>
    <link href="https://smmh.dev/selfdoc/check-guide/"/>
    <id>https://smmh.dev/selfdoc/check-guide/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>`selfdoc check` is your documentation linter. It validates every directive in your templates, measures how much of your public API is documented, runs SEO best-practice checks, and detects stale descriptions. Run it locally before pushing, or wire it into CI for automated enforcement.</summary>
  </entry>
  <entry>
    <title>selfdoc assembly</title>
    <link href="https://smmh.dev/selfdoc/cli-assembly/"/>
    <id>https://smmh.dev/selfdoc/cli-assembly/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc baseline</title>
    <link href="https://smmh.dev/selfdoc/cli-baseline/"/>
    <id>https://smmh.dev/selfdoc/cli-baseline/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc blog</title>
    <link href="https://smmh.dev/selfdoc/cli-blog/"/>
    <id>https://smmh.dev/selfdoc/cli-blog/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc build</title>
    <link href="https://smmh.dev/selfdoc/cli-build/"/>
    <id>https://smmh.dev/selfdoc/cli-build/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc check</title>
    <link href="https://smmh.dev/selfdoc/cli-check/"/>
    <id>https://smmh.dev/selfdoc/cli-check/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc deploy</title>
    <link href="https://smmh.dev/selfdoc/cli-deploy/"/>
    <id>https://smmh.dev/selfdoc/cli-deploy/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc gen-data</title>
    <link href="https://smmh.dev/selfdoc/cli-gen-data/"/>
    <id>https://smmh.dev/selfdoc/cli-gen-data/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc gen</title>
    <link href="https://smmh.dev/selfdoc/cli-gen/"/>
    <id>https://smmh.dev/selfdoc/cli-gen/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc CLI Reference</title>
    <link href="https://smmh.dev/selfdoc/cli-index/"/>
    <id>https://smmh.dev/selfdoc/cli-index/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc init</title>
    <link href="https://smmh.dev/selfdoc/cli-init/"/>
    <id>https://smmh.dev/selfdoc/cli-init/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc layout</title>
    <link href="https://smmh.dev/selfdoc/cli-layout/"/>
    <id>https://smmh.dev/selfdoc/cli-layout/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc quality</title>
    <link href="https://smmh.dev/selfdoc/cli-quality/"/>
    <id>https://smmh.dev/selfdoc/cli-quality/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc serve</title>
    <link href="https://smmh.dev/selfdoc/cli-serve/"/>
    <id>https://smmh.dev/selfdoc/cli-serve/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc spell-corpus</title>
    <link href="https://smmh.dev/selfdoc/cli-spell-corpus/"/>
    <id>https://smmh.dev/selfdoc/cli-spell-corpus/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen (strictcli), do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>Code Blocks</title>
    <link href="https://smmh.dev/selfdoc/code-blocks/"/>
    <id>https://smmh.dev/selfdoc/code-blocks/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>Fenced code blocks in selfdoc get automatic syntax highlighting, language labels, and a copy button. Beyond the basics, you can enable line numbers, interactive run buttons, inline annotations, diff highlighting, and automatic language tabs.</summary>
  </entry>
  <entry>
    <title>Comparisons</title>
    <link href="https://smmh.dev/selfdoc/comparisons/"/>
    <id>https://smmh.dev/selfdoc/comparisons/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc takes a different angle from most documentation generators: it extracts content directly from source code through a catalogue of built-in directives, reads nine languages in a single tool, and produces a complete static site with search, SEO, and theming -- out of one Go binary with no runtime to install beside it.</summary>
  </entry>
  <entry>
    <title>Configuration</title>
    <link href="https://smmh.dev/selfdoc/configuration/"/>
    <id>https://smmh.dev/selfdoc/configuration/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc is configured via a `selfdoc.json` file in your project root. Run `selfdoc init` to generate a starter config interactively, or create one manually.</summary>
  </entry>
  <entry>
    <title>Custom Directives</title>
    <link href="https://smmh.dev/selfdoc/custom-directives/"/>
    <id>https://smmh.dev/selfdoc/custom-directives/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc's built-in directives cover common patterns like module references and schema tables, but sometimes you need something project-specific. Custom directives let you write a script that generates Markdown content at build time, driven by your own logic.</summary>
  </entry>
  <entry>
    <title>Deployment</title>
    <link href="https://smmh.dev/selfdoc/deployment/"/>
    <id>https://smmh.dev/selfdoc/deployment/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc generates a fully static site that can be deployed anywhere. Two providers have built-in support with `selfdoc deploy`: **Cloudflare Pages** and **GitHub Pages**.</summary>
  </entry>
  <entry>
    <title>Directives Guide</title>
    <link href="https://smmh.dev/selfdoc/directives-guide/"/>
    <id>https://smmh.dev/selfdoc/directives-guide/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>Directives are selfdoc's mechanism for embedding live, code-extracted content in Markdown templates. Instead of manually copying API signatures, config schemas, or CLI help text into your documentation, you place a directive marker in your template. At build time, selfdoc resolves each directive by reading your source code, config files, or project metadata, and replaces the marker with generated Markdown content. The result: documentation that stays in sync with the implementation automatically.</summary>
  </entry>
  <entry>
    <title>Directives Reference</title>
    <link href="https://smmh.dev/selfdoc/directives/"/>
    <id>https://smmh.dev/selfdoc/directives/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc directives are inline blocks in Markdown templates that get resolved into content at build time. They pull live information from your source code, so documentation stays in sync with the implementation.</summary>
  </entry>
  <entry>
    <title>Editor Guide</title>
    <link href="https://smmh.dev/selfdoc/editor-guide/"/>
    <id>https://smmh.dev/selfdoc/editor-guide/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>`selfdoc blog editor serve` runs a local authoring app for blog posts. It opens in a browser, lists the repositories a hand-written registry declares, shows each one's posts, and puts the post source in an editor beside a live preview.</summary>
  </entry>
  <entry>
    <title>Atom Feeds</title>
    <link href="https://smmh.dev/selfdoc/feeds/"/>
    <id>https://smmh.dev/selfdoc/feeds/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>Every selfdoc site gets a `feed.xml` in the build output. It is a standard Atom 1.0 feed that RSS readers, news aggregators, and automation tools can subscribe to. No setup required -- it happens automatically during `selfdoc build`.</summary>
  </entry>
  <entry>
    <title>Frontmatter</title>
    <link href="https://smmh.dev/selfdoc/frontmatter/"/>
    <id>https://smmh.dev/selfdoc/frontmatter/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>Every page under `.stricttools/docs/` and every post under the posts directory opens with a frontmatter block: TOML between `+++` fences.</summary>
  </entry>
  <entry>
    <title>Data Generation</title>
    <link href="https://smmh.dev/selfdoc/gen-data-guide/"/>
    <id>https://smmh.dev/selfdoc/gen-data-guide/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc can run scripts at build time to generate data files that your documentation pages reference. Scripts run inside a bubblewrap (bwrap) sandbox for isolation -- they get read-only access to specific directories and can only write to the output directory.</summary>
  </entry>
  <entry>
    <title>API Reference</title>
    <link href="https://smmh.dev/selfdoc/gen-index/"/>
    <id>https://smmh.dev/selfdoc/gen-index/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>Getting Started</title>
    <link href="https://smmh.dev/selfdoc/getting-started/"/>
    <id>https://smmh.dev/selfdoc/getting-started/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>This guide walks you through installing selfdoc, setting up a project, writing your first directive, and previewing your documentation site locally.</summary>
  </entry>
  <entry>
    <title>Glossary Guide</title>
    <link href="https://smmh.dev/selfdoc/glossary-guide/"/>
    <id>https://smmh.dev/selfdoc/glossary-guide/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc can build a glossary from terms defined across your documentation. Define a term once, and selfdoc auto-links the first mention on every other page back to its definition. You also get a generated glossary page that aggregates all terms alphabetically.</summary>
  </entry>
  <entry>
    <title>Glossary</title>
    <link href="https://smmh.dev/selfdoc/glossary-terms/"/>
    <id>https://smmh.dev/selfdoc/glossary-terms/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>This page defines the key terms used throughout the selfdoc documentation.</summary>
  </entry>
  <entry>
    <title>internal/address</title>
    <link href="https://smmh.dev/selfdoc/internal-address/"/>
    <id>https://smmh.dev/selfdoc/internal-address/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/assembly</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-assembly/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-assembly/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/chrome</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-chrome/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-chrome/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/editor/assets</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-editor-assets/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-editor-assets/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/editor/registry</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-editor-registry/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-editor-registry/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/editor</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-editor/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-editor/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/listing</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-listing/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-listing/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/posts</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-posts/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-posts/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/preview</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-preview/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-preview/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/serving</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-serving/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-serving/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/shared</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-shared/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-shared/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/site</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-site/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-site/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/sitedirectives</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-sitedirectives/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-sitedirectives/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/unified</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-unified/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-unified/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/unifiedcheck</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-unifiedcheck/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-unifiedcheck/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/blog/verify</title>
    <link href="https://smmh.dev/selfdoc/internal-blog-verify/"/>
    <id>https://smmh.dev/selfdoc/internal-blog-verify/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/catalog</title>
    <link href="https://smmh.dev/selfdoc/internal-catalog/"/>
    <id>https://smmh.dev/selfdoc/internal-catalog/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/check</title>
    <link href="https://smmh.dev/selfdoc/internal-check/"/>
    <id>https://smmh.dev/selfdoc/internal-check/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/cli</title>
    <link href="https://smmh.dev/selfdoc/internal-cli/"/>
    <id>https://smmh.dev/selfdoc/internal-cli/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/config</title>
    <link href="https://smmh.dev/selfdoc/internal-config/"/>
    <id>https://smmh.dev/selfdoc/internal-config/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/content</title>
    <link href="https://smmh.dev/selfdoc/internal-content/"/>
    <id>https://smmh.dev/selfdoc/internal-content/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/cv</title>
    <link href="https://smmh.dev/selfdoc/internal-cv/"/>
    <id>https://smmh.dev/selfdoc/internal-cv/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/deploy</title>
    <link href="https://smmh.dev/selfdoc/internal-deploy/"/>
    <id>https://smmh.dev/selfdoc/internal-deploy/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/directives</title>
    <link href="https://smmh.dev/selfdoc/internal-directives/"/>
    <id>https://smmh.dev/selfdoc/internal-directives/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/docs</title>
    <link href="https://smmh.dev/selfdoc/internal-docs/"/>
    <id>https://smmh.dev/selfdoc/internal-docs/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/effects</title>
    <link href="https://smmh.dev/selfdoc/internal-effects/"/>
    <id>https://smmh.dev/selfdoc/internal-effects/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/excludes</title>
    <link href="https://smmh.dev/selfdoc/internal-excludes/"/>
    <id>https://smmh.dev/selfdoc/internal-excludes/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/dart</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-dart/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-dart/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/golang</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-golang/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-golang/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/kotlin</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-kotlin/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-kotlin/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/python</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-python/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-python/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/sql</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-sql/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-sql/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/svelte</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-svelte/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-svelte/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/swift</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-swift/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-swift/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/typescript</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-typescript/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-typescript/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors/zig</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors-zig/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors-zig/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/extractors</title>
    <link href="https://smmh.dev/selfdoc/internal-extractors/"/>
    <id>https://smmh.dev/selfdoc/internal-extractors/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/fleet</title>
    <link href="https://smmh.dev/selfdoc/internal-fleet/"/>
    <id>https://smmh.dev/selfdoc/internal-fleet/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/gen</title>
    <link href="https://smmh.dev/selfdoc/internal-gen/"/>
    <id>https://smmh.dev/selfdoc/internal-gen/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/gendata</title>
    <link href="https://smmh.dev/selfdoc/internal-gendata/"/>
    <id>https://smmh.dev/selfdoc/internal-gendata/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/gitcommit</title>
    <link href="https://smmh.dev/selfdoc/internal-gitcommit/"/>
    <id>https://smmh.dev/selfdoc/internal-gitcommit/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/html</title>
    <link href="https://smmh.dev/selfdoc/internal-html/"/>
    <id>https://smmh.dev/selfdoc/internal-html/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/icons</title>
    <link href="https://smmh.dev/selfdoc/internal-icons/"/>
    <id>https://smmh.dev/selfdoc/internal-icons/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/identity</title>
    <link href="https://smmh.dev/selfdoc/internal-identity/"/>
    <id>https://smmh.dev/selfdoc/internal-identity/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/js</title>
    <link href="https://smmh.dev/selfdoc/internal-js/"/>
    <id>https://smmh.dev/selfdoc/internal-js/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/layout</title>
    <link href="https://smmh.dev/selfdoc/internal-layout/"/>
    <id>https://smmh.dev/selfdoc/internal-layout/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/lints</title>
    <link href="https://smmh.dev/selfdoc/internal-lints/"/>
    <id>https://smmh.dev/selfdoc/internal-lints/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/manifest</title>
    <link href="https://smmh.dev/selfdoc/internal-manifest/"/>
    <id>https://smmh.dev/selfdoc/internal-manifest/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/ownership</title>
    <link href="https://smmh.dev/selfdoc/internal-ownership/"/>
    <id>https://smmh.dev/selfdoc/internal-ownership/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/page</title>
    <link href="https://smmh.dev/selfdoc/internal-page/"/>
    <id>https://smmh.dev/selfdoc/internal-page/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/payloadschemas</title>
    <link href="https://smmh.dev/selfdoc/internal-payloadschemas/"/>
    <id>https://smmh.dev/selfdoc/internal-payloadschemas/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/prose</title>
    <link href="https://smmh.dev/selfdoc/internal-prose/"/>
    <id>https://smmh.dev/selfdoc/internal-prose/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/quality</title>
    <link href="https://smmh.dev/selfdoc/internal-quality/"/>
    <id>https://smmh.dev/selfdoc/internal-quality/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/render</title>
    <link href="https://smmh.dev/selfdoc/internal-render/"/>
    <id>https://smmh.dev/selfdoc/internal-render/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/resolution</title>
    <link href="https://smmh.dev/selfdoc/internal-resolution/"/>
    <id>https://smmh.dev/selfdoc/internal-resolution/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/resolver</title>
    <link href="https://smmh.dev/selfdoc/internal-resolver/"/>
    <id>https://smmh.dev/selfdoc/internal-resolver/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/revisions</title>
    <link href="https://smmh.dev/selfdoc/internal-revisions/"/>
    <id>https://smmh.dev/selfdoc/internal-revisions/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/robots</title>
    <link href="https://smmh.dev/selfdoc/internal-robots/"/>
    <id>https://smmh.dev/selfdoc/internal-robots/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/spellcorpus</title>
    <link href="https://smmh.dev/selfdoc/internal-spellcorpus/"/>
    <id>https://smmh.dev/selfdoc/internal-spellcorpus/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/spelling</title>
    <link href="https://smmh.dev/selfdoc/internal-spelling/"/>
    <id>https://smmh.dev/selfdoc/internal-spelling/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/staleness</title>
    <link href="https://smmh.dev/selfdoc/internal-staleness/"/>
    <id>https://smmh.dev/selfdoc/internal-staleness/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/strictclisupport</title>
    <link href="https://smmh.dev/selfdoc/internal-strictclisupport/"/>
    <id>https://smmh.dev/selfdoc/internal-strictclisupport/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/tables</title>
    <link href="https://smmh.dev/selfdoc/internal-tables/"/>
    <id>https://smmh.dev/selfdoc/internal-tables/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/themes</title>
    <link href="https://smmh.dev/selfdoc/internal-themes/"/>
    <id>https://smmh.dev/selfdoc/internal-themes/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/tokenizer</title>
    <link href="https://smmh.dev/selfdoc/internal-tokenizer/"/>
    <id>https://smmh.dev/selfdoc/internal-tokenizer/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/urls</title>
    <link href="https://smmh.dev/selfdoc/internal-urls/"/>
    <id>https://smmh.dev/selfdoc/internal-urls/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>internal/util</title>
    <link href="https://smmh.dev/selfdoc/internal-util/"/>
    <id>https://smmh.dev/selfdoc/internal-util/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>Internals</title>
    <link href="https://smmh.dev/selfdoc/internals/"/>
    <id>https://smmh.dev/selfdoc/internals/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>This page documents selfdoc's internal design for contributors and anyone extending or debugging the system. For the user-facing overview, see [Architecture](../architecture/).</summary>
  </entry>
  <entry>
    <title>The .stricttools/ layout</title>
    <link href="https://smmh.dev/selfdoc/layout/"/>
    <id>https://smmh.dev/selfdoc/layout/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>Every directory selfdoc owns in a repository lives under one hidden directory at the repository root, `.stricttools/`, and every directory under it is named for its FUNCTION rather than for the tool that writes it. Another tool's state sits beside selfdoc's, under its own function name, in the same directory.</summary>
  </entry>
  <entry>
    <title>llms.txt</title>
    <link href="https://smmh.dev/selfdoc/llms-txt/"/>
    <id>https://smmh.dev/selfdoc/llms-txt/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc automatically generates 2 files that make your documentation accessible to AI assistants and large language models. No configuration needed -- they appear in your build output alongside `sitemap.xml` and `robots.txt`.</summary>
  </entry>
  <entry>
    <title>Multi-Language Support</title>
    <link href="https://smmh.dev/selfdoc/multi-language/"/>
    <id>https://smmh.dev/selfdoc/multi-language/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc ships an extractor for each of the languages in the table below. Each one knows how to read its source files and resolve directives against them. The same directive syntax works across all of them -- only the source file format changes.</summary>
  </entry>
  <entry>
    <title>Quality Guide</title>
    <link href="https://smmh.dev/selfdoc/quality-guide/"/>
    <id>https://smmh.dev/selfdoc/quality-guide/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>`selfdoc quality` measures how mature your project's documentation setup is. It produces two independent scores: a **tier** (0--5) that tracks which selfdoc features you have adopted, and a **content grade** (A--F) that measures how much documentation you have relative to your source code.</summary>
  </entry>
  <entry>
    <title>rlsbl Integration</title>
    <link href="https://smmh.dev/selfdoc/rlsbl-integration/"/>
    <id>https://smmh.dev/selfdoc/rlsbl-integration/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc and rlsbl have a bidirectional relationship. selfdoc is aware of rlsbl's commit tooling and changelog conventions, while rlsbl can run selfdoc checks during release and trigger builds and deploys post-release. If both tools are present in a project, they cooperate automatically.</summary>
  </entry>
  <entry>
    <title>Root Files</title>
    <link href="https://smmh.dev/selfdoc/root-files/"/>
    <id>https://smmh.dev/selfdoc/root-files/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc can generate root-level project files (like `README.md` and `CLAUDE.md`) from templates that live in your `.stricttools/docs/` directory. The templates use the same directive syntax as your documentation pages, so the generated files always reflect the current state of your source code.</summary>
  </entry>
  <entry>
    <title>Search</title>
    <link href="https://smmh.dev/selfdoc/search/"/>
    <id>https://smmh.dev/selfdoc/search/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>Every selfdoc site ships with full-text search out of the box. No external services, no API keys, no CDN: the build runs [Pagefind](https://pagefind.app/) over the pages it just wrote, and Pagefind emits both the index and the search UI into `pagefind/` at the output root. Users search from any page via the keyboard shortcut or the UI widget.</summary>
  </entry>
  <entry>
    <title>selfdoc</title>
    <link href="https://smmh.dev/selfdoc/selfdoc/"/>
    <id>https://smmh.dev/selfdoc/selfdoc/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>SEO</title>
    <link href="https://smmh.dev/selfdoc/seo/"/>
    <id>https://smmh.dev/selfdoc/seo/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc generates a full suite of SEO artifacts automatically during every build. You get meta tags, structured data, sitemaps, social cards, and AI discoverability files without writing any HTML or config beyond what you already have.</summary>
  </entry>
  <entry>
    <title>Staleness Detection</title>
    <link href="https://smmh.dev/selfdoc/staleness/"/>
    <id>https://smmh.dev/selfdoc/staleness/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>You update a page's content but forget to update the frontmatter `description`. Now your meta tags, OG cards, and search snippets show outdated text. selfdoc catches this automatically by tracking content hashes.</summary>
  </entry>
  <entry>
    <title>Theming</title>
    <link href="https://smmh.dev/selfdoc/theming/"/>
    <id>https://smmh.dev/selfdoc/theming/</id>
    <updated>2026-09-15T00:00:00Z</updated>
    <summary>selfdoc ships with three built-in themes and a comprehensive set of CSS custom properties that you can override without touching theme internals. Dark mode, high contrast, and print stylesheets work out of the box.</summary>
  </entry>
  <entry>
    <title>selfdoc vs the Competition: Documentation Generators Compared</title>
    <link href="https://smmh.dev/blog/selfdoc-vs-the-competition-documentation-generators-compared/"/>
    <id>https://smmh.dev/blog/selfdoc-vs-the-competition-documentation-generators-compared/</id>
    <updated>2026-06-29T00:00:00Z</updated>
    <summary>The documentation generator landscape shifted in 2026. Material for MkDocs entered maintenance mode after years of dominance, and its successor Zensical launched with a Rust-powered build engine. Meanwhile, the JavaScript ecosystem continues to fragment across React, Vue, and Astro-based options. This post compares selfdoc against six major tools across the features that matter most for technical documentation.</summary>
  </entry>
</feed>
