crucible.cli
1.1.76
dotnet tool install --global crucible.cli --version 1.1.76
dotnet new tool-manifest
dotnet tool install --local crucible.cli --version 1.1.76
#tool dotnet:?package=crucible.cli&version=1.1.76
nuke :add-package crucible.cli --version 1.1.76
Crucible
Static documentation generator that transforms Markdown into HTML through an XML intermediate representation and XSLT 4.0 transformation.
Packages
| Package | Description | Install |
|---|---|---|
| Crucible.Cli | Command-line tool | dotnet tool install -g Crucible.Cli |
| Crucible.Extensions | Extension library (Mermaid diagrams, plugin API) | Library — reference in your project |
Quick start
# Install the CLI
dotnet tool install -g Crucible.Cli
# Create a new docs project
crucible init
# Build the site
crucible build
Features
- Markdown in, HTML out — write docs in Markdown with YAML frontmatter
- XSLT-powered — transforms via the PhoenixmlDb XSLT 4.0 engine
- Client-side search — Lunr.js with pre-built index
- Dark mode — automatic with manual toggle
- SEO — Open Graph, canonical links, sitemap.xml
- Extensible — plugin model for custom Markdown processing
- LLMs.txt — auto-generated site overview for AI consumption
Documentation
Full documentation at phoenixml.dev
License
Apache 2.0
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
Takes `PhoenixmlDb.Xslt` from **1.5.0** to **1.6.13**. No Crucible source changed;
the engine did.
The heading names a range because the version is the commit count: the commit that
writes these notes changes the version the notes have to name, so the range covers
the pin bump, the notes, and the correction.
The pin was eight minor releases behind. Crucible transforms every page of
phoenixml.dev through this engine, so it is one of the two real-world consumers
that exercise it outside its own test suite — and it was doing that against an
engine from several release trains ago.
1.6.13 carries eleven fixes found by running XSpec's 284-suite corpus against the
engine. Two of them are ones a documentation pipeline is directly exposed to:
- **`xsl:attribute` with a sequence-constructor body escaped its content twice.**
An attribute built that way containing `&`, `<` or `>` came out wrong while
staying well-formed, so nothing errored and the damage was only visible when
something read the value back.
- **A forward-declared global with a namespaced name was evaluated before its
dependencies.** Node kinds then collapsed: `comment()` and `element()` read as
documents, `attribute()` as an empty string. Module-structured stylesheets with
namespaced globals — which describes Crucible's — are exactly the shape that
hits this.
Also in the engine: unbounded `xs:integer`, correct `namespace-node()` matching,
and named `processing-instruction(target)` types binding the right node kind.
Crucible.Core.Tests 126 passed, Crucible.Extensions.Tests 8 passed, 0 failed