Est. 1996 Beginner

Yodl

A lightweight macro-based document language from 1996 that compiles one plain-text source into HTML, LaTeX, man pages, and plain text — still the format behind the Z shell's documentation.

Created by Karel Kubat

Paradigm Declarative: macro-based document markup and preprocessing
Typing Untyped: all content is text transformed by macro expansion
First Appeared 1996
Latest Version Yodl 4.05.02 (February 2026)

Yodl — originally “Yet oneOther Document Language”, later re-explained as “Your Own Document Language” — is a lightweight document preprocessing language created in 1996 by Dutch programmer Karel Kubat. A Yodl document is a plain-text file sprinkled with simple macro commands like sect(Introduction) and em(emphasized); the yodl processor expands those macros against a chosen macro package to produce HTML, LaTeX, troff man pages, or plain text — one source, many outputs. That idea is unremarkable today, in a world of Markdown, Sphinx, and Pandoc, but Yodl arrived years before any of them, and it is still quietly doing the job it was built for: every time a distribution builds the Z shell’s manual, Yodl is the tool that turns the master sources into man pages and Texinfo.

History & Origins

In the mid-1990s Karel Kubat, then working at the ICCE institute of the University of Groningen in the Netherlands, faced a problem familiar to anyone who wrote documentation in that era: every document had to be marked up once in LaTeX for printing and again in HTML for the department’s web site. The obvious standard answer — SGML with its heavyweight toolchains — did not satisfy him. So in late 1995 and early 1996 he wrote his own general-purpose document language for personal use, initially calling it DOM, for “document maintainer.”

Colleagues at ICCE adopted the tool almost immediately, which pushed Kubat into rewriting it properly, adding converters and documentation, and releasing it as Yodl. The self-deprecating name — Yet oneOther Document Language — acknowledged how crowded the field already was. A September 1996 review in Linux Gazette and Kubat’s own November 1997 article in Linux Journal brought the tool to the wider free-software community, and it was distributed from the ICCE FTP server at the University of Groningen. Debian packaged it in 1998, and in 1999 the Samba project shipped version 2.0 with its man pages maintained in Yodl.

The language’s second life began in 2004, when Frank B. Brokken — Kubat’s University of Groningen colleague and co-author of the original C++ Annotations — released Yodl 2.00, a complete rewrite, and took over as primary developer. Yodl has been Brokken’s project ever since, and under his maintenance the acronym was recast as the friendlier Your Own Document Language.

Design Philosophy

Yodl occupies a deliberate middle ground between two extremes of 1990s documentation tooling:

  • Lighter than SGML. Where SGML demanded DTDs, validating parsers, and verbose angle-bracket markup, Yodl documents are ordinary readable text with occasional command(argument) calls. Kubat’s stated goal was a document language that was easy to use — something you could teach a colleague in an afternoon.
  • More structured than raw formats. Unlike writing LaTeX or troff directly, a Yodl source encodes intent (sect(), em(), footnote()) rather than formatting, so the same file can be rendered faithfully by very different back ends.
  • Format-agnostic by construction. The yodl binary itself knows nothing about HTML or LaTeX. It is a pure macro processor; all output-format knowledge lives in replaceable macro packages. The standard distribution targets HTML, LaTeX, man, and plain text, and adding a new format means writing a new macro set, not modifying the program.
  • Your own document language, literally. Because users can define macros (DEFINEMACRO), include files, set counters, and perform substitutions, each project can grow a small domain-specific vocabulary on top of the core — which is exactly what zsh did with its own macro layer for shell documentation.

What Yodl Looks Like

A minimal Yodl article looks like this:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
article(A Short Yodl Example)
       (Jane Author)
       (July 2026)

sect(Introduction)

This is plain running text. Words can be em(emphasized),
set in bf(boldface), or shown as tt(teletype code).

sect(A List)

itemization(
    it() the first item
    it() the second item, with a footnote(like this one)
)

verb(
    // verbatim text: nothing in here is expanded
    int main()
)

Commands take their arguments in parentheses, uppercase names (DEFINEMACRO, INCLUDEFILE, SUBST) are built into the processor itself, and everything else comes from macro packages. Running the source through the wrapper scripts produces the different outputs:

1
2
3
4
yodl2html example.yo    # -> example.html
yodl2latex example.yo   # -> example.latex
yodl2man example.yo     # -> troff man page
yodl2txt example.yo     # -> plain text

Key Features

AreaCapabilities
Core modelA format-neutral macro processor (written in C); all output knowledge lives in macro packages
Document typesStandard macro packages provide article, report, book, manpage, and letter classes
Output formatsHTML, LaTeX, troff man pages, and plain text out of the box; new formats via new macro sets
ExtensibilityUser-defined macros, file inclusion, counters, symbol tables, and conditional processing
String handlingSubstitution machinery including SUBST, and (since 4.x) PUSHSUBST/POPSUBST, SUBSTR, and STRLEN builtins
Verbatim & commentsverb() blocks escape expansion entirely; COMMENT() and (since 4.02) end-of-line comments
Post-processingA companion yodlpost stage resolves labels, references, and indexes after macro expansion
LicensingFree software under the GNU General Public License

Evolution

Yodl’s history divides cleanly into two eras. The Kubat era (1996–early 2000s) produced the 1.x series: the original C implementation, the standard converters, and the language’s moment of greatest visibility, when Samba adopted it for man pages and zsh made it the master format for its documentation. During these years Yodl passed through the hands of several Debian maintainers and settled into its niche as a documentation build tool.

The Brokken era (2004–present) began with the ground-up rewrite released as 2.00 in August 2004 — old sources “usually require minor modifications,” the changelog noted. Major versions 3.00 (November 2010) and 4.00 (June 2017) followed, the latter pruning macros that had been deprecated since 2.0 and adding new substitution builtins. Development has never stopped: 2025 alone saw three releases, and 4.05.02 arrived in February 2026. Few tools from 1996 can show a thirty-year unbroken maintenance record under essentially two developers.

What changed around Yodl matters as much as what changed in it. The problem Yodl solved — single-source documentation rendered to multiple formats — was later attacked by DocBook, then reStructuredText and Sphinx, then Markdown and Pandoc. Samba itself migrated from Yodl to DocBook with version 2.2. Yodl never tried to compete for that mainstream; it stayed small and dependency-light, which is precisely why the projects that adopted it early have had little reason to leave.

Current Relevance

Yodl today is a healthy niche tool with one very large invisible footprint. Its flagship user is zsh: the master source of the Z shell’s manual is written in Yodl, and building zsh’s documentation — the man pages and Texinfo files consulted by millions of users of the shell that macOS ships as its default — requires the yodl package. That single dependency keeps Yodl in the repositories of Debian, Ubuntu, Arch Linux, and other distributions.

Its second constituency is Frank Brokken’s own ecosystem: the C++ Annotations (a free, book-length C++ text maintained since 1994 and used in university courses), the Bobcat library, and the bisonc++ and flexc++ generators all keep their documentation in Yodl. The project lives on GitLab with current documentation and steady releases. Nobody would call Yodl a growth technology — new projects overwhelmingly reach for Markdown-based toolchains — but as actively maintained, purpose-built infrastructure, it is in better shape than most of its 1990s contemporaries.

Why It Matters

Yodl is an early, working answer to a question the industry spent the next two decades re-answering: how do you write documentation once and publish it everywhere? Its design — readable plain-text source, semantic rather than presentational markup, pluggable output back ends — anticipated the architecture of Sphinx, AsciiDoc, and Pandoc by years. It also demonstrates the quiet longevity of well-scoped tools: by refusing to become a platform, Yodl has outlived far grander documentation systems, and it still sits in the build path of one of the most widely used programs on Earth. Every freshly built zsh man page is, in 2026, still a Yodl document that got compiled — a thirty-year-old Dutch solution to the two-markups problem, doing its job.

Timeline

1996
Karel Kubat, working at the ICCE institute of the University of Groningen in the Netherlands, releases Yodl — "Yet oneOther Document Language" — after writing the first version in late 1995 and early 1996 under the working name DOM ("document maintainer"), frustrated by having to mark up the same documents twice for LaTeX and HTML
1996
Larry Ayers reviews Yodl in Linux Gazette issue #9 (September 1996), introducing it to the wider free-software community; Kubat's own Linux Journal article follows in November 1997, and the tool spreads from his department to early adopters looking for a lighter alternative to SGML
1998
Yodl is packaged for Debian (initial packaging in July 1998), putting the tool a single install command away for Debian and, later, Ubuntu users
1999
Samba 2.0 ships with its man pages maintained in Yodl format, converted from the original troff sources by Jeremy Allison — one of the highest-profile projects to adopt the language
2004
Yodl 2.00 is released on August 31, 2004 — a complete rewrite by Frank B. Brokken of the University of Groningen, who becomes the language's primary developer and maintainer; under his stewardship the acronym is re-explained as "Your Own Document Language"
2010
Yodl 3.00 is released on November 7, 2010, continuing the steady modernization of the rewritten codebase
2017
Yodl 4.00.00 is released on June 3, 2017, adding PUSHSUBST/POPSUBST builtins and removing macros that had been obsolete since version 2.0; version 4.02.00 in December 2017 adds end-of-line comments and new SUBSTR and STRLEN builtins
2025
Releases 4.04.00 (February), 4.05.00 (May), and 4.05.01 (September) mark a burst of maintenance activity nearly three decades after the language first appeared
2026
Yodl 4.05.02 is released on February 8, 2026; the project remains actively maintained by Frank B. Brokken on GitLab and is still the source format for the Z shell's documentation

Notable Uses & Legacy

Z shell (zsh)

The master source of zsh's extensive documentation is written in Yodl, which converts it to troff man pages and Texinfo — making Yodl a build dependency of one of the world's most popular shells, the default on macOS since 2019.

Samba

The SMB/CIFS file-server suite maintained its man pages in Yodl format during the Samba 2.0 era (converted by Jeremy Allison), before Gerald Carter moved the documentation to DocBook for Samba 2.2.

C++ Annotations

Frank Brokken's well-known, book-length C++ guide — used in university programming courses and continuously updated since 1994 — has been typeset in Yodl since its fourth major version, producing HTML, LaTeX/PDF, and plain-text editions from one source.

Frank Brokken's software ecosystem

The documentation and man pages of Brokken's C++ tools — the Bobcat library, the bisonc++ parser generator, and the flexc++ scanner generator — are maintained in Yodl and generated at build time.

Linux distributions

Debian, Ubuntu, and Arch Linux all package Yodl, chiefly because building zsh's documentation from source requires it — quiet infrastructure work the tool has performed since its Debian packaging in 1998.

Language Influence

Influenced By

LaTeX HTML SGML

Running Today

Run examples using the official Docker image:

docker pull
Last updated: