---
name: "lowdown_tree_rndr"
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_tree_rndr"
---

# lowdown\_tree\_rndr(3)

render Markdown into debugging output

## NAME

**lowdown\_tree\_rndr** – render Markdown into debugging output

## LIBRARY

library “liblowdown”

## SYNOPSIS

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

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

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

*int*\

**lowdown\_tree\_rndr**(*struct lowdown\_buf \*out*, *const struct lowdown\_node \*n*, *const struct lowdown\_opts \*opts*);

## DESCRIPTION

Renders a node tree *n* created by [lowdown\_doc\_parse(3)](/lowdown_doc_parse/3.md) or [lowdown\_diff(3)](/lowdown_diff/3.md). The output is written into *out*, which must be initialised and freed by the caller.

The output consists of an UTF-8 tree. The format is not standardised and subject to change.

Unlike other renderers, **lowdown\_tree\_rndr**() accepts no options and thus has no context.

## RETURN VALUES

Returns zero on failure to allocate memory, non-zero on success.

## EXAMPLES

The following parses *b* of length *bsz* and outputs the parse tree.

```
struct lowdown_buf *out;
struct lowdown_doc *doc;
struct lowdown_node *n;
void *rndr;
if ((doc = lowdown_doc_new(NULL)) == NULL)
	err(1, NULL);
if ((n = lowdown_doc_parse(doc, NULL, b, bsz, NULL)) == NULL)
	err(1, NULL);
if ((out = lowdown_buf_new(256)) == NULL)
	err(1, NULL);
if (!lowdown_tree_rndr(out, n))
	err(1, NULL);
fwrite(out->data, 1, out->size, stdout);
lowdown_buf_free(out);
lowdown_node_free(n);
lowdown_doc_free(doc);
```

## SEE ALSO

[lowdown(3)](/lowdown/3.md)
