---
name: "lowdown_buf"
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_buf"
---

# lowdown\_buf(3)

parse a Markdown buffer into formatted output

## NAME

**lowdown\_buf** – parse a Markdown buffer into formatted output

## LIBRARY

library “liblowdown”

## SYNOPSIS

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

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

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

*int*\

**lowdown\_buf**(*const struct lowdown\_opts \*opts*, *const char \*buf*, *size\_t bufsz*, *char \*\*ret*, *size\_t \*retsz*, *struct lowdown\_metaq \*metaq*);

## DESCRIPTION

Parses a [lowdown(5)](/lowdown/5.md) buffer *buf* of size *bufsz* into an output buffer *ret* of size *retsz* according to a configuration *opts*. The output format is specified by *opts-\>type*. If LOWDOWN\_METADATA is set in *opts-\>feat* and *metaq* is not NULL, *metaq* is filled with metadata rendered in the given output format.

The caller is responsible for freeing *ret* and *metaq*.

## RETURN VALUES

Returns zero on failure, non-zero on success. On failure, the values pointed to by *res* and *rsz* are undefined.

## EXAMPLES

The following parses standard input into a standalone HTML5 document. It enables footnotes, autolinks, tables, superscript, strikethrough, fenced codeblocks, commonmark, definition lists, extended image attributes, and metadata processing. The output passes through raw HTML and has smart typography.

```
struct lowdown_opts opts;
char *buf = NULL, *obuf;
char rbuf[1024];
size_t sz, bufsz = 0, obufsz;
while (!(feof(stdin) || ferror(stdin))) {
	sz = fread(rbuf, 1, sizeof(rbuf), stdin);
	if (sz == 0)
		err(1, "fread");
	buf = realloc(buf, bufsz + sz);
	if (buf == NULL)
		err(1, NULL);
	memcpy(buf + bufsz, rbuf, sz);
	bufsz += sz;
}
if (ferror(stdin))
	err(1, "fread");
memset(&opts, 0, sizeof(struct lowdown_opts));
opts.type = LOWDOWN_HTML;
opts.feat = LOWDOWN_FOOTNOTES |
	LOWDOWN_AUTOLINK |
	LOWDOWN_TABLES |
	LOWDOWN_SUPER |
	LOWDOWN_STRIKE |
	LOWDOWN_FENCED |
	LOWDOWN_COMMONMARK |
	LOWDOWN_DEFLIST |
	LOWDOWN_IMG_EXT |
	LOWDOWN_METADATA;
opts.oflags = LOWDOWN_HTML_HEAD_IDS |
	LOWDOWN_HTML_NUM_ENT |
	LOWDOWN_HTML_OWASP |
	LOWDOWN_SMARTY |
	LOWDOWN_STANDALONE;
if (!lowdown_buf(&opts, buf, bufsz, &obuf, &obufsz, NULL))
	errx(1, "lowdown_buf");
fwrite(buf, 1, bufsz, stdout);
free(buf);
free(obuf);
```

## SEE ALSO

[lowdown(3)](/lowdown/3.md), [lowdown\_metaq\_free(3)](/lowdown_metaq_free/3.md)
