---
name: "mdoc-assemble"
section: "1"
platform: "linux"
package: "mono"
version: "6.12.0.206-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/mdoc-assemble"
---

# mdoc-assemble(1)

Compile documentation for use in monodoc(1)

## NAME

mdoc assemble - Compile documentation for use in [**monodoc**(1)](/monodoc/1.md)

## SYNOPSIS

**mdoc assemble** \[OPTIONS\]+ PATHS+

## DESCRIPTION

**mdoc assemble** creates *.tree* and *.zip* files from *PATHS* for use in the [**monodoc**(1)](/monodoc/1.md) documentation browser.

The input files must have a supported *format*, specified with the *--format* option.

The *.tree* and *.zip* files are copied into **monodoc**'s  *sources* directory, alongside a *.source* file which is used by  [**monodoc**(1)](/monodoc/1.md) to specify where the documentation should be displayed.

The *.source* file has the following format:

```
  <?xml version="1.0"?>
  <monodoc>
    <node label="LABEL" name="PATH" parent="PARENT">
      <node label="LABEL2" name="PATH2" />
      <!-- ... -->
    </node>
    <source provider="PROVIDER" basefile="BASEFILE" path="PATH" />
    <!-- other <source/> elements -->
  </monodoc>
```

The */monodoc/node* node is an optional node that specifies where in the monodoc tree the documentation should be displayed, and *//node* elements may be nested to any depth to create trees.  *//node/@label* is the label that will be displayed within the monodoc tree.

*//node/@name* is the name of the monodoc tree node, and may be used as  the value of the */monodoc/source/@path* value.

*//node/@parent* is the node name to use as the parent node.   *$MONO\_INSTALL\_PREFIX/lib/monodoc/monodoc.xml* contains a list of such  names, and this can be any *//node/@name* value.  If the  *//node/@parent* value isn't found, then it's inserted under the "Various" tree node.

The */monodoc/source/@provider* attribute specifies which format provider should be used when reading the *.tree* and *.zip* files; this *must* correspond to one of the *--format* values.

The */monodoc/source/@basefile* attribute specifies the filename prefix  for the documentation files.  This must be the same prefix as used with the  *--out* parameter.  There should be *no* filename extension on this  value.

The */monodoc/source/@path* attribute specifies the parent node in  [**monodoc**(1)](/monodoc/1.md)'s tree view where the documentation will be inserted. See the *$MONO\_INSTALL\_PREFIX/lib/monodoc/monodoc.xml* file for a list of *PATH* values (the *//node/@name* values), or it may be a *//node/@name* value in the same *.source* file.

Once the *BASEFILE.source* has been written, the documentation can be installed so that [**monodoc**(1)](/monodoc/1.md) will display the documentation with the command:

```
  cp BASEFILE.source BASEFILE.tree BASEFILE.zip \
    `pkg-config monodoc --variable=sourcesdir`
```

## OPTIONS

- **-f**, **--format**=*FORMAT*

  Specifies the documentation format used within *PATHS*.  Valid *FORMAT* values include: *ecma*, *ecmaspec*, *error*, *hb*, *man*, *simple*, and *xhtml*.

  See the *FORMATS* section below for more information about these formats.

  The default format (if none is specifed) is *ecma*.

  The *--format* option may be interleaved with *PATHS* to change the format used for the remaining parameters (until the next *--format* option is seen), e.g.:

  ```
    mdoc assemble -o PREFIX A B --format=man C D --format=xhtml E
  ```

  will assemble directories *A* and *B* with the *ecma* format, files *C* and *D* with the *man* formt, and directory *E* with the *xhtml* format.

- **-o**, **--out**=*PREFIX*

  Specify the output file prefix.  **mdoc assemble** creates the files *PREFIX.zip* and *PREFIX.tree*.

- **-h**, **-?**, **--help**

  Display a help message and exit.

## FORMATS

The following documentation formats are supported:

### ecma

The *Mono ECMA Documentation Format*, an XML documentation format with one  file per type.

See the [**mdoc**(5)](/mdoc/5.md) man page for more information.

### ecmaspec

The *Mono ECMA Specification Documentation Format*. This is not the format you're looking for; it is the format used to represent  the ECMA-334 (C#) standard within [**monodoc**(1)](/monodoc/1.md).  It is not used to display  class library documentation; for class library documentation, use the **ecma** format.

### error

The *Error Documentation Format* is used to present detailed error  messages, and is used in [**monodoc**(1)](/monodoc/1.md)'s "C# Compiler Error Reference" tree.

In this format, *PATHS* is a configuration file, containing the XML:

```
    <ErrorProviderConfig>
        <FilesPath>../../mcs/errors</FilesPath>
        <Match>cs????*.cs</Match>
        <ErrorNumSubstringStart>2</ErrorNumSubstringStart>
        <ErrorNumSubstringLength>4</ErrorNumSubstringLength>
        <FriendlyFormatString>CS{0:0###}</FriendlyFormatString>
    </ErrorProviderConfig>
```

The elements mean:

- */ErrorProviderConfig/FilesPath*

  Specifies where to look for files.

- */ErrorProviderConfig/Match*

  Specifies the filename pattern to look for within the */ErrorProviderConfig/FilesPath* directory.

- */ErrorProviderConfig/ErrorNumSubstringStart*

  Specifies where within the filename the error number starts.

- */ErrorProviderConfig/ErrorNumSubstringLength*

  Specifies how many characters after */ErrorProviderConfig/ErrorNumSubstringStart* to use for the error number.

- */ErrorProviderConfig/FriendlyFormatString*

  Specifies the formatting/display of the node in the [**monodoc**(1)](/monodoc/1.md) tree.

For each file found, it is converted to HTML with C# syntax coloring applied.

### simple

The *Simple Documentation Format* file format recursively adds all files and directories underneath *PATHS*.  When displayed, HTML files are displayed as-is.  Text files are converted into HTML by translating each  newline into an HTML *\<br\>* element.  No other file type is supported.

### man

The *Man Page Documentation Format* displays groff man pages.  (This is *not* a full groff parser, and only handles the man page constructs used within the mono man pages.)

*PATHS* is a set of XML files containing:

```
  <?xml version="1.0"?>
  <manpages>
    <manpage name="NAME" page="FILE" />
  </manpages>
```

There may be multiple *//manpage* elements within the root */manpage* element.

The */manpages/manpage/@name* attribute contains the display name for the tree view node, which is also the URL of the man page when using [**monodoc**(1)](/monodoc/1.md)'s *Lookup URL* command (before prefixing with a *man:* prefix).  Thus, if */manpages/manpage/@name* contains *[mono(1)](/mono/1.md)*, then *man:[mono(1)](/mono/1.md)* can be used in the *Lookup URL* command to view the *[mono(1)](/mono/1.md)* man page.

The */manpages/manpage/@page* attribute is the filename that contains the man page.  If this file does not exist, then */manpages/manpage/@name* will not be displayed within the tree view.

### xhtml

The XHTML provider interprets *PATHS* as a Windows Help file XHTML TOC file and looks for referenced documents to create the help source.

## SEE ALSO

[**mdoc**(1)](/mdoc/1.md),  [**mdoc**(5)](/mdoc/5.md),  [**monodoc**(1)](/monodoc/1.md)

## MAILING LISTS

- Visit http://lists.ximian.com/mailman/listinfo/mono-docs-list for details.

  ## WEB SITE

See also: http://www.mono-project.com/docs/tools+libraries/tools/mdoc/
