# DocShell v0.1.0 - Table of Contents

> Renderer-neutral documentation generation and serving for Elixir applications

## Pages

- [Overview](readme.md)

- Tutorials
  - [The Build Pipeline](build-pipeline.md)
  - [OpenAPI Adapters](openapi-adapters.md)
  - [Artifact Contract](artifact-contract.md)
  - [Serving Artifacts](serving-artifacts.md)

- Performance
  - [Markdown Parsing](ast.md)
  - [Presentation Projection](presentation.md)
  - [Term Coercion](json.md)
  - [Artifact Round Trip](artifact.md)

- Reference
  - [Contributing](contributing.md)
  - [License](license.md)
  - [Usage Rules (LLM)](usage-rules.md)

## Modules

- Core
  - [DocShell](DocShell.md): Turns the documentation an Elixir project already has into plain JSON.
  - [DocShell.Artifact](DocShell.Artifact.md): Reads and writes the versioned JSON envelope every artifact is wrapped in.
  - [DocShell.Build](DocShell.Build.md): Runs every extractor and writes the complete artifact tree to disk.
  - [DocShell.Config](DocShell.Config.md): Resolves build settings from per-call options, host config, and defaults.

- Extraction
  - [DocShell.Ast](DocShell.Ast.md): Parses Markdown into the recursive, JSON-safe node shape renderers consume.
  - [DocShell.Generate.Collector](DocShell.Generate.Collector.md): The two behaviours every extractor shares, in one place.
  - [DocShell.Generate.ExDoc](DocShell.Generate.ExDoc.md): Extracts documentation from compiled modules through the BEAM docs chunk.
  - [DocShell.Generate.Guides](DocShell.Generate.Guides.md): Extracts hand-written Markdown guides, with optional YAML frontmatter.
  - [DocShell.Generate.Livebooks](DocShell.Generate.Livebooks.md): Indexes Livebook notebooks so they appear in navigation and search.

- OpenAPI
  - [DocShell.Generate.OpenApi](DocShell.Generate.OpenApi.md): Loads an OpenAPI document through a pluggable adapter, and sanity-checks it.
  - [DocShell.Generate.OpenApi.Adapter](DocShell.Generate.OpenApi.Adapter.md): The one callback a source of OpenAPI documents has to implement.
  - [DocShell.Generate.OpenApi.Adapters.AshOaskit](DocShell.Generate.OpenApi.Adapters.AshOaskit.md): Derives the OpenAPI document from Ash domains, via AshOaskit.
  - [DocShell.Generate.OpenApi.Adapters.OpenApiSpex](DocShell.Generate.OpenApi.Adapters.OpenApiSpex.md): Reuses an existing [OpenApiSpex](https://hexdocs.pm/open_api_spex) spec module.
  - [DocShell.Generate.OpenApi.Adapters.RawJson](DocShell.Generate.OpenApi.Adapters.RawJson.md): Takes the OpenAPI document as it is — from a map or a JSON file on disk.

- Presentation
  - [DocShell.Presentation.Backlink](DocShell.Presentation.Backlink.md): A document that links to another, for rendering "referenced by" panels.
  - [DocShell.Presentation.GraphProjector](DocShell.Presentation.GraphProjector.md): Port implemented by graph-backed hosts to produce DocShell presentation data.
  - [DocShell.Presentation.NavigationItem](DocShell.Presentation.NavigationItem.md): One node in the documentation navigation tree.
  - [DocShell.Presentation.SearchEntry](DocShell.Presentation.SearchEntry.md): One searchable document, flattened to plain text.
  - [DocShell.Presentation.Source](DocShell.Presentation.Source.md): Producer contract for source-independent documentation presentation data.
  - [DocShell.Presentation.StaticGenerator](DocShell.Presentation.StaticGenerator.md): Builds navigation, search, and content indexes from extracted entries.

- Web Serving
  - [DocShell.Web.Cache](DocShell.Web.Cache.md): Holds validated artifacts in ETS so serving them never touches disk.
  - [DocShell.Web.Controller](DocShell.Web.Controller.md): Serves artifacts from a controller action you already own.
  - [DocShell.Web.Plug](DocShell.Web.Plug.md): Serves cached artifacts over HTTP, behind an authorization gate you supply.

- Support
  - [DocShell.Json](DocShell.Json.md): Coerces arbitrary Elixir terms into something JSON can represent.

## Mix Tasks

- [mix doc_shell.build](Mix.Tasks.DocShell.Build.md): Builds the documentation artifact tree for the current project.

