---
name: "lowdown_doc_new"
section: "3"
platform: "linux"
package: "lowdown"
version: "3.2.1-1"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/lowdown_doc_new"
---

# lowdown\_doc\_new(3)

allocate a Markdown parser

## NAME

**lowdown\_doc\_new** – allocate a Markdown parser

## LIBRARY

library “liblowdown”

## SYNOPSIS

**#include \<sys/queue.h\>**

**#include \<stdio.h\>**

**#include \<lowdown.h\>**

*struct* *lowdown\_doc* *\**\

**lowdown\_doc\_new**(*const struct lowdown\_opts \*opts*);

## DESCRIPTION

Allocates a Markdown parser instance with configuration *opts*. If *opts* is NULL, all values are assumed to be zero except for the maximum parse depth, which is fixed at 128.

The returned instance may be used with multiple invocations of [lowdown\_doc\_parse(3)](/lowdown_doc_parse/3.md).

## RETURN VALUES

Returns a pointer to the parser or NULL on memory allocation failure. The returned pointer must be freed with a call to [lowdown\_doc\_free(3)](/lowdown_doc_free/3.md).

Any pointer values in *opts*, such as those in *meta* and *metaovr*, are copied over, so they need not persist after being passed to **lowdown\_doc\_new**().

## EXAMPLES

The following parses *b* if length *bsz* and throws away the result.

```
struct lowdown_doc *doc;
struct lowdown_node *n;
if ((doc = lowdown_doc_new(NULL)) == NULL)
	err(1, NULL);
if ((n = lowdown_doc_parse(doc, NULL, b, bsz, NULL)) == NULL)
	err(1, NULL);
lowdown_node_free(n);
lowdown_doc_free(doc);
```

## SEE ALSO

[lowdown(3)](/lowdown/3.md), [lowdown\_doc\_free(3)](/lowdown_doc_free/3.md), [lowdown\_doc\_parse(3)](/lowdown_doc_parse/3.md)
