Command line
To use F# Formatting tools via the command line, you can use the fsdocs dotnet tool.
|
The build command
This command processes a docs directory and generates API docs for projects in the solution according to the
rules of API doc generation. The input accepted is described in content.
|
The command line options accepted are:
Command Line Option |
Description |
|---|---|
|
Input directory of content (default: |
|
Project files to build API docs for outputs, defaults to all packable projects |
|
Output Directory (default 'output' for 'build' and 'tmp/watch' for 'watch') |
|
Disable generation of the 'Other' category in the navigation bar for uncategorized docs |
|
Disable generation of API docs |
|
Disable project cracking |
|
Evaluate F# fragments in scripts |
|
Save images referenced in docs ( |
|
Don't add line numbers, the default is to add line numbers. |
|
Additional substitution parameters for templates |
|
The tool will also generate documentation for non-public members |
|
Do not copy default content styles, javascript or use default templates |
|
Clean the output directory |
|
Display this help screen |
|
Display version information |
|
Provide properties to dotnet msbuild, e.g. --properties Configuration=Release Version=3.4 |
|
Additional arguments passed down as |
|
Fail if docs are missing or can't be generated |
The following command line options are also accepted but it is instead recommended you use settings in your .fsproj project files:
Command Line Option |
Description |
|---|---|
|
Source folder at time of component build ( |
|
Source repository for github links ( |
|
Assume comments in F# code are markdown ( |
Project file settings
Many fsdocs behaviours can be controlled via MSBuild properties in your .fsproj (or Directory.Build.props) file.
Property |
Default |
Description |
|---|---|---|
|
|
Required — enables XML doc generation so fsdocs can produce API docs for this project. |
|
|
Include this project even though its |
|
|
Treat |
|
|
Emit warnings for public members that have no documentation comments. |
|
(auto) |
Root source folder used when constructing source-link URLs. Equivalent to |
|
(auto from repo) |
Repository URL prefix for source links. Equivalent to |
|
(none) |
URL for the collection-name link in the navigation header. |
|
(none) |
Path to the logo image shown in the header. |
|
|
Alt text for the header logo (accessibility). |
|
(none) |
URL the logo links to. |
|
(none) |
Path to the favicon. |
|
|
Theme to use for generated HTML. |
|
(none) |
URL to the project licence, shown in the footer. |
|
(none) |
URL to the release notes, shown in the footer. |
|
|
Suppress the "Inherited from X" sections on type pages. |
|
|
Controls how generic type constraints are displayed in member tooltips. |
|
|
Generate |
The command will report on any .fsproj files that it finds, telling you if it decides to skip a particular file and why.
For example, a project will be skipped if:
- The project name contains ".Tests" or "test" (because it looks like a test project)
-
The project does not contain
<GenerateDocumentationFile>true</GenerateDocumentationFile> -
The project
OutputTypeis notLibrary. To include an executable project, add this to the project file:<FsDocsAllowExecutableProject>true</FsDocsAllowExecutableProject>
The watch command
This command does the same as fsdocs build but in "watch" mode, waiting for changes. Only the files in the input
directory (e.g. docs) are watched. A browser will be launched automatically (unless --nolaunch is specified).
You will need to ensure that the input directory exists, and contains at least index.md, otherwise the browser will
report an error (e.g. "Problem loading...", "Connection was reset").
|
Restarting may be necesssary on changes to project files. The same parameters are accepted, plus these:
Command Line Option |
Description |
|---|---|
|
Do not serve content when watching. |
|
Do not launch a browser window. |
|
URL extension to launch http://localhost: |
|
Port to serve content for http://localhost serving. |
Searchable docs
When using the command-line tool a Fuse search index is automatically generated in index.json.
A search box is included in the default template via an HTML Dialog element.
To add search to your own _template.html:
- include an HTML element with id
search-btn - include a
dialogelement - include
fsdocs-search.jsscript
|
Embedding Images
Downloading Remote Images (--saveimages)
The --saveimages flag controls whether images referenced in your docs are downloaded and saved locally alongside the generated output. This is primarily useful for non-HTML output formats such as LaTeX (PDF) and Jupyter Notebook (.ipynb), which cannot reference remote URLs at display time.
Value |
Behaviour |
|---|---|
|
Images are referenced by their original URL; nothing is downloaded. |
|
Images are downloaded and saved for LaTeX and notebook outputs only. |
|
Images are downloaded and saved for all output formats including HTML and Markdown. |
Example:
|
Embedding Images Generated by Scripts
When using --eval to evaluate literate F# scripts, you can embed images produced by code (e.g. charts, plots) directly into the HTML output.
Option 1: Inline Base64 image using include-it-raw
Write a helper that reads an image file and returns an HTML <img> tag with the image data embedded as a Base64 string. Then use (*** include-it-raw ***) to inject the raw HTML into the output:
let inlinePng (fileName: string) =
let bytes = System.IO.File.ReadAllBytes(fileName)
let b64 = System.Convert.ToBase64String(bytes)
sprintf """<img src="data:image/png;base64,%s" />""" b64
// Generate the image in your script, then embed it:
// myChart.SavePng("chart.png")
// (*** hide ***)
// inlinePng "chart.png"
// (*** include-it-raw ***)
The (*** hide ***) command suppresses the source code of the expression, so only the rendered image appears in the output.
Option 2: Custom HTML printer via fsi.AddHtmlPrinter
If your charting library produces values of a known type, you can register a custom HTML printer so that values of that type are automatically rendered as images whenever they appear via (*** include-it ***). See Embedding Script Output for details.
val string: value: 'T -> string
--------------------
type string = System.String
<summary>Provides static methods for the creation, copying, deletion, moving, and opening of a single file, and aids in the creation of <see cref="T:System.IO.FileStream" /> objects.</summary>
<summary>Converts a base data type to another base data type.</summary>
System.Convert.ToBase64String(bytes: System.ReadOnlySpan<byte>, ?options: System.Base64FormattingOptions) : string
System.Convert.ToBase64String(inArray: byte array, options: System.Base64FormattingOptions) : string
System.Convert.ToBase64String(inArray: byte array, offset: int, length: int) : string
System.Convert.ToBase64String(inArray: byte array, offset: int, length: int, options: System.Base64FormattingOptions) : string
FSharp.Formatting