<?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-08-12T00:00:00Z</updated>
  <subtitle>Code-aware static site generator that resolves directive blocks in Markdown templates into live content extracted from source code.</subtitle>
  <entry>
    <title>Architecture</title>
    <link href="https://smmh.dev/selfdoc/architecture/"/>
    <id>https://smmh.dev/selfdoc/architecture/</id>
    <updated>2026-08-12T00: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-08-12T00:00:00Z</updated>
    <summary>selfdoc includes a blog system for publishing chronological content alongside your documentation. Blog posts are Markdown files with YAML frontmatter, 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-08-12T00: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 baseline</title>
    <link href="https://smmh.dev/selfdoc/cli-baseline/"/>
    <id>https://smmh.dev/selfdoc/cli-baseline/</id>
    <updated>2026-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00:00:00Z</updated>
    <summary>selfdoc takes a different angle from most documentation generators: it extracts content directly from source code via 21 built-in directive types, supports 3 languages in a single tool, and produces a complete static site with search, SEO, and theming -- all from pure Python with 2 direct runtime dependencies and nothing to compile.</summary>
  </entry>
  <entry>
    <title>Configuration</title>
    <link href="https://smmh.dev/selfdoc/configuration/"/>
    <id>https://smmh.dev/selfdoc/configuration/</id>
    <updated>2026-08-12T00: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-08-12T00:00:00Z</updated>
    <summary>selfdoc's 21 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 Python script that generates Markdown content at build time, driven by your own logic.</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-08-12T00: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>Atom Feeds</title>
    <link href="https://smmh.dev/selfdoc/feeds/"/>
    <id>https://smmh.dev/selfdoc/feeds/</id>
    <updated>2026-08-12T00: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>Data Generation</title>
    <link href="https://smmh.dev/selfdoc/gen-data-guide/"/>
    <id>https://smmh.dev/selfdoc/gen-data-guide/</id>
    <updated>2026-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00: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-08-12T00:00:00Z</updated>
    <summary>This page defines 23 key terms used throughout the selfdoc documentation.</summary>
  </entry>
  <entry>
    <title>Internals</title>
    <link href="https://smmh.dev/selfdoc/internals/"/>
    <id>https://smmh.dev/selfdoc/internals/</id>
    <updated>2026-08-12T00: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>llms.txt</title>
    <link href="https://smmh.dev/selfdoc/llms-txt/"/>
    <id>https://smmh.dev/selfdoc/llms-txt/</id>
    <updated>2026-08-12T00: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-08-12T00:00:00Z</updated>
    <summary>selfdoc supports 3 languages out of the box: **Python**, **Go**, and **TypeScript/JavaScript**. Each language has its own extractor that knows how to read source files and resolve directives. The same directive syntax works across all languages -- only the source file format changes.</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-08-12T00: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-08-12T00:00:00Z</updated>
    <summary>selfdoc can generate root-level project files (like `README.md` and `CLAUDE.md`) from templates that live in your `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-08-12T00: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.__main__</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-__main__/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-__main__/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc._version</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-_version/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-_version/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.deploy</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-deploy/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-deploy/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.docs</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-docs/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-docs/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.dart</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-dart/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-dart/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.go</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-go/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-go/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.kotlin</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-kotlin/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-kotlin/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.python</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-python/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-python/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.sql</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-sql/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-sql/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.svelte</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-svelte/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-svelte/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.swift</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-swift/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-swift/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.typescript</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-typescript/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-typescript/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors.zig</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors-zig/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors-zig/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.extractors</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-extractors/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-extractors/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.gen</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-gen/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-gen/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.gendata</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-gendata/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-gendata/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.icons</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-icons/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-icons/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.js.loader</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-js-loader/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-js-loader/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.js</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-js/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-js/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.manifest</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-manifest/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-manifest/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.ownership</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-ownership/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-ownership/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.quality</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-quality/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-quality/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.resolver</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-resolver/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-resolver/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.spell_corpus</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-spell_corpus/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-spell_corpus/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.strictcli_support</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-strictcli_support/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-strictcli_support/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.tables</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-tables/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-tables/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.tokenizer</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-tokenizer/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-tokenizer/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.urls</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-urls/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-urls/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc.utils</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-utils/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-utils/</id>
    <updated>2026-08-12T00:00:00Z</updated>
    <summary>&lt;!-- generated by selfdoc gen, do not edit --&gt;</summary>
  </entry>
  <entry>
    <title>selfdoc</title>
    <link href="https://smmh.dev/selfdoc/selfdoc/"/>
    <id>https://smmh.dev/selfdoc/selfdoc/</id>
    <updated>2026-08-12T00: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-08-12T00: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-08-12T00: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>Quality Guide</title>
    <link href="https://smmh.dev/selfdoc/quality-guide/"/>
    <id>https://smmh.dev/selfdoc/quality-guide/</id>
    <updated>2026-07-29T00: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>selfdoc.build</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-build/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-build/</id>
    <updated>2026-07-29T00:00:00Z</updated>
    <summary>The build module is the central pipeline that turns Markdown templates and source code into a complete documentation site. It loads `selfdoc.json`, scans the `docs/` directory for templates, resolves all directives against the project's source files, converts the resolved Markdown to HTML via `selfdoc.html`, and writes the output to disk. A single invocation handles multi-version builds (checking out tagged versions from git), multi-locale builds (iterating locale directories), and the generation of auxiliary files such as sitemaps, Atom feeds, OpenGraph images, `robots.txt`, `llms.txt`, and search indexes.</summary>
  </entry>
  <entry>
    <title>selfdoc.check</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-check/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-check/</id>
    <updated>2026-07-29T00:00:00Z</updated>
    <summary>The check module validates documentation quality across multiple dimensions. Its main entry point, `check_docs()`, scans every Markdown template in `docs/`, parses directives, and attempts to resolve each one against the project's source code -- reporting per-directive OK/FAILED status. It then computes coverage: what fraction of public symbols in the source are referenced by at least one directive. Beyond directives, the module runs a suite of SEO lint rules (heading structure, title length, missing descriptions, alt text quality, link targets, color contrast) and detects stale or drifted descriptions via content hashing against stored baselines.</summary>
  </entry>
  <entry>
    <title>selfdoc.cli</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-cli/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-cli/</id>
    <updated>2026-07-29T00:00:00Z</updated>
    <summary>The cli module defines selfdoc's command-line interface using strictcli. It registers the top-level `selfdoc` app and all subcommands: `init`, `build`, `serve`, `check`, `gen`, `gen-data`, `deploy`, and `quality`, plus command groups for `post`, `assembly`, and `baseline`. Each command function parses flags, loads config via `selfdoc.config`, and delegates to the corresponding implementation module. The `serve` command starts an HTTP server with live-reload for local development.</summary>
  </entry>
  <entry>
    <title>selfdoc.config</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-config/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-config/</id>
    <updated>2026-07-29T00:00:00Z</updated>
    <summary>The config module loads and validates `selfdoc.json`, the project-level configuration file that controls every aspect of the documentation build. It defines a declarative schema (`CONFIG_SCHEMA`) of `FieldSpec` entries covering required fields like `source` (list of source paths with languages) and `base_url`, plus dozens of optional settings for theming, search engine selection, code block behavior, SEO metadata, deploy provider, versioning, localization, and more. The `load_config()` function reads the JSON file, rejects unknown keys, validates each field against its spec (type, pattern, choices, min/max constraints), applies defaults, and runs post-validation checks.</summary>
  </entry>
  <entry>
    <title>selfdoc.directives</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-directives/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-directives/</id>
    <updated>2026-07-29T00:00:00Z</updated>
    <summary>The directives module parses selfdoc's structured marker syntax, which embeds source-code extraction commands inside Markdown templates. It recognizes six marker types: `:-:` (one-liner/self-closing), `:&lt;:` (block open), `:@:` (block attribute), `:=:` (body separator), `:::` (body content line), and `:&gt;:` (block close). The parser is a line-oriented state machine that tracks fenced code blocks to avoid interpreting markers inside code examples. Each parsed directive becomes a `Directive` dataclass carrying its name, key-value attributes, optional body lines, and source location.</summary>
  </entry>
  <entry>
    <title>selfdoc.html</title>
    <link href="https://smmh.dev/selfdoc/selfdoc-html/"/>
    <id>https://smmh.dev/selfdoc/selfdoc-html/</id>
    <updated>2026-07-29T00:00:00Z</updated>
    <summary>The html module is selfdoc's built-in Markdown-to-HTML converter with zero required runtime dependencies. It handles headings (with auto-generated slug anchors and table-of-contents extraction), fenced code blocks (with optional Pygments syntax highlighting, language icons, line numbers, annotations, and run buttons), tables, ordered and unordered lists, definition lists, blockquotes, GitHub-flavored admonitions, inline formatting (bold, italic, strikethrough, code, links, images), and cross-page glossary term linking. The converter also supports higher-level structural patterns like code tabs, step guides, API entry wrapping, and diff-highlighted code blocks.</summary>
  </entry>
  <entry>
    <title>Monorepo Conversion Plan</title>
    <link href="https://smmh.dev/selfdoc/monorepo-conversion/"/>
    <id>https://smmh.dev/selfdoc/monorepo-conversion/</id>
    <updated>2026-07-06T00:00:00Z</updated>
    <summary>This document describes the conversion of selfdoc from a standalone rlsbl-managed repo to a monorepo with three releasables: `selfdoc_core`, `selfdoc`, and `selfblog`.</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>
  <entry>
    <title>Deployment</title>
    <link href="https://smmh.dev/selfdoc/deployment/"/>
    <id>https://smmh.dev/selfdoc/deployment/</id>
    <updated>2026-06-29T00: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 Reference</title>
    <link href="https://smmh.dev/selfdoc/directives/"/>
    <id>https://smmh.dev/selfdoc/directives/</id>
    <updated>2026-06-29T00: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>Theming</title>
    <link href="https://smmh.dev/selfdoc/theming/"/>
    <id>https://smmh.dev/selfdoc/theming/</id>
    <updated>2026-06-29T00:00:00Z</updated>
    <summary>selfdoc ships with two 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>
</feed>
