#music #markdown

bin+lib bard

Creates PDF and HTML songbooks out of easy-to-write Markdown sources

10 releases (stable)

2.0.0-alpha1 Aug 13, 2022
1.3.0 Jul 24, 2021
1.1.0 May 27, 2021
1.0.3 Apr 19, 2021
0.1.0 Apr 9, 2020

#219 in Text processing


5.5K SLoC


crates.io CI

Markdown → songbooks.

bard is a songbook compiler that reads Markdown files and produces songbooks in PDF, HTML, and Hovorka.

bard reads files like this:

# Wild Mountain Thyme
## Irish & Scottish traditional

1. Oh the `G`summer `C`time `G`has come
And the `C`trees are sweetly `G`bloomin'
And the `C`wild `G`mountain `Em`thyme
Grows `C`around the `Am`bloomin' `C`heather
Will ye `G`go `C`lassie `G`go?

> And we'll `C`all go `G`together to pull `C`wild `G`mountain `Em`thyme
All `C`around the `Am`bloomin' `C`heather, will ye `G`go `C`lassie `G`go?

... and creates output like this:


Check out the Example PDF from the Example project.



  • On Arch Linux: via AUR.
  • On other Linux distros: A prebuilt binary for x86-64 is available from the Releases page (may not be binary-compatible with older distros).
  • On Windows: Download prebuilt binary from the Releases page.
  • On any OS with a Rust toolchain: Use cargo install -f bard .
    • Minimum supported Rust verion is 1.46 (released 2020-08-27)

Packages for more OSes are hopefully Coming Soon™.

Additionally, to generate PDFs a TeX engine is needed. Recommended options are:

  • The xelatex compiler from TeX Live, available on most Linux OSes.
  • Tectonic, available on several UNIX OSes.
  • MiKTeX for Windows.

A word of warning: bard's Windows support is not tested very frequently.


To start a new songbook project, create a new directory, navigate in it with a command line and type:

bard init

This will create a skeleton project with a bard.toml file and a songs subdirectory with one example Markdown song file.

To compile the project and generate output files type:

bard make

While editing the bard.toml file or song source files, it would become annoying to have to type bard make every time there's a change. For this reason there's another command:

bard watch

... which will make bard run continuously, watching for changes in sources files. It will then re-compile the songbook every time there's a change. Use Ctrl + C to stop it.


Why is the default TeX template done the way it is?

The default layout is optimized for songbooks that are fairly portable (A5 format) and yet offer hopefully fairly good legibility at that size. They are meant to handle travel and outdoor situations as well as possible. This is why the font is fairly large, the chords in bold and color, and generally the page real estate tends to be used as much as possible.

Was this software developed with <3 ?

As a matter of fact, yes, this tool was made by less than three developers. Check out the Contributors page for details.


~319K SLoC