fsdocs-tool
23.0.0-alpha.9
dotnet tool install --global fsdocs-tool --version 23.0.0-alpha.9
dotnet new tool-manifest
dotnet tool install --local fsdocs-tool --version 23.0.0-alpha.9
#tool dotnet:?package=fsdocs-tool&version=23.0.0-alpha.9&prerelease
nuke :add-package fsdocs-tool --version 23.0.0-alpha.9
fsdocs and FSharp.Formatting

FSharp.Formatting is a set of libraries and tools for processing F# script files and markdown, and for
generating API documentation from XML doc comments. The primary tool is fsdocs.
Full documentation: https://fsprojects.github.io/FSharp.Formatting/
The fsdocs tool
fsdocs builds a static documentation site from the markdown files and F# scripts in your docs
folder, plus API reference pages for the projects in your solution.
dotnet tool install fsdocs-tool
dotnet fsdocs build
dotnet fsdocs watch
initcreates adocsfolder with a defaultindex.md.buildprocesses thedocsfolder and writes the site tooutput.watchbuilds the site, serves it locally and rebuilds on every change.convertconverts individual markdown and script files.
Run dotnet fsdocs <command> --help to see the options of a command, or read the
command line guide.
The libraries
The same functionality is available as NuGet packages for use from your own code:
- FSharp.Formatting bundles the markdown parser, F# code formatter, literate programming support and API doc generator.
- FSharp.Formatting.Literate only contains the literate programming support and its dependencies.
See Markdown parser, F# code formatting and literate programming for examples.
Contributing
See CONTRIBUTING.md for how to build the repository and run the tool locally.
Maintainer(s)
| 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.
| Version | Downloads | Last Updated |
|---|---|---|
| 23.0.0-alpha.9 | 77 | 11/6/2026 |
| 23.0.0-alpha.8 | 2,832 | 9/18/2026 |
| 23.0.0-alpha.7 | 601 | 9/15/2026 |
| 23.0.0-alpha.6 | 116 | 9/15/2026 |
| 23.0.0-alpha.5 | 88 | 9/15/2026 |
| 23.0.0-alpha.4 | 400 | 9/13/2026 |
| 23.0.0-alpha.3 | 83 | 9/13/2026 |
| 23.0.0-alpha.2 | 178 | 9/10/2026 |
| 23.0.0-alpha.1 | 435 | 9/8/2026 |
| 22.2.0 | 17,165 | 8/31/2026 |
| 22.1.0 | 32,046 | 5/27/2026 |
| 22.0.1 | 1,198 | 5/9/2026 |
| 22.0.0 | 4,137 | 4/4/2026 |
| 22.0.0-alpha.3 | 1,307 | 4/2/2026 |
| 22.0.0-alpha.2 | 1,100 | 3/13/2026 |
| 22.0.0-alpha.1 | 113 | 3/5/2026 |
| 21.0.0 | 22,436 | 11/12/2025 |
| 21.0.0-beta-005 | 3,207 | 4/23/2025 |
| 21.0.0-beta-004 | 1,875 | 11/20/2024 |
| 21.0.0-beta-003 | 675 | 8/16/2024 |
### Changed
- Avoid recomputing `List.length` on the shrinking remainder for every scanned character when splitting a Markdown pipe-table row into cells (`pipeTableFindSplits` in `MarkdownTableParser.fs`). The scan now tracks the number of consumed characters incrementally, turning an O(n²) split into an O(n) one for rows with many delimiters, with no behavior change.
- Avoided a per-character `Seq.windowed`/`String()` allocation in `StartsWithNTimesTrimIgnoreStartWhitespace`, the active pattern used to count repeated fence characters (`` ` `` / `~`) when parsing code fences and headers. The count is now computed with `String.CompareOrdinal` over string offsets, with no intermediate substring allocations. Behavior is unchanged.
### Fixed
- A `<see langword="..."/>` in a doc comment rendered as nothing, so `Returns <see langword="true"/> when …` read "Returns when …". The API docs show the keyword as inline code, the same as `<c>true</c>`, and a tool tip on a code snippet keeps the word. [#1371](https://github.com/fsprojects/FSharp.Formatting/pull/1371)