# ChordPro: turning chord and lyric text files into printable lead sheets

> ChordPro is the reference implementation of the ChordPro standard, a Perl program that takes a text file of lyrics with chord information and renders professional-looking sheet music, including native PDF output. It implements version 6 of the language and adds ABC support, annotations and detailed control over layout and typefaces.

**ChordPro/chordpro** — Reference implementation of the ChordPro standard for musical lead sheets.

- Repository: https://github.com/ChordPro/chordpro
- Stars: 537 · Forks: 78
- Language: Perl
- License: NOASSERTION
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/chordpro-chordpro

## The gap between a chord text file and a lead sheet

ChordPro generates professional-looking sheet music from a text file containing the lyrics of one or many songs with chord information. That single sentence describes a workflow that a lot of songwriters and teachers already have half of.

A chord and lyric file is plain text with chords written over the syllables they fall on, and it is how songs circulate between musicians. What it is not is a lead sheet you would hand to a player or print for a rehearsal, because the text format cannot express page geometry, fonts, title blocks, chord diagrams, the distinction between a section heading and a lyric line, or anything about how the output should be paginated.

The ChordPro standard exists to close that gap with a text-based format that carries presentation information alongside the music, and this repository is its reference implementation. The primary language is Perl, the repository classifies the licence as a custom one GitHub cannot map, with the LICENSE file as the authoritative text, and the project page is chordpro.org.

The README points at chordpro.org/chordpro/chordpro-installation/ for installation instructions and tells you to run chordpro --help for an overview of the available options. That last point is worth taking seriously on its own: the documentation is not in the repository, so the tool's own help output and the web documentation are the reference, and the repository is the source rather than the manual.

## Language version 6 and what changed from Chord and Chordii

The development status section says this program implements ChordPro language version 6, and that it is the successor of Chord and Chordii with additional features such as native PDF generation, Unicode input and fully customizable layout, fonts and sizes.

The lineage matters because Chord and Chordii were the earlier Perl programs in this lineage, and their file formats are close enough that upgrading is familiar rather than a rewrite. The ChordPro site documents that history separately, which is where anyone migrating would start.

The prominent features of version 6 are listed as advanced text markup, annotations, integrated support for ABC, and a more powerful way of assigning typefaces to layout items.

Each of those four is a distinct capability. Advanced text markup is the mechanism for styling runs of text, so a chorus can be bold or a performance note can be set apart without restructuring the song. Annotations add information that is not lyric and not chord, which in a lead sheet is typically the practical detail a player needs: tempo, key, structure notes, cues. Integrated ABC support is the interesting one, because ABC is a text notation format in its own right, and being able to carry it inside a ChordPro document means a tune can be represented in standard notation without leaving the text format. The typeface assignment change is what makes the layout customisable at the level of individual elements rather than a document-wide choice.

The README points at chordpro.org/chordpro/chordpro-reference-implementation/ for up-to-date information on the implementation itself, which is where the language specification details live.

## How the repository is laid out

The directory structure tells you what the program is made of, and for a Perl project of this age it is a familiar shape.

The lib/ directory holds the modules, which is where the parsing, the internal model and the output back ends live. The script/ directory holds the command line entry point, the chordpro executable. The markup/ directory is the markup language implementation. pp/ is for the pretty printer, which in the Perl toolchain is the usual name for the module that turns an internal data structure back into text.

Then there are the directories that show this is more than a converter. Cases/ holds test cases. testing/ holds test inputs. The t/ directory is the standard Perl test directory, and xt/ is where author tests live, the convention for tests that are not run by default. The ABC/ directory relates to the ABC notation support. Design/ holds design notes. wiki/ holds documentation content. docs/ is the documentation tree.

The packaging tells you how it is distributed. Makefile.PL is the ExtUtils::MakeMaker build, MANIFEST is the file list, MANIFEST.PP is its preprocessed form, and MANIFEST.CPAN and MANIFEST.SVG are variants generated for CPAN and for the SVG support. GNUmakefile sits alongside for people who prefer GNU make, and there is a .travis.yml for continuous integration.

So this is a mature CPAN-shaped Perl distribution with a conventional module layout, not a script someone wrote in an afternoon, and the repository has been in use for a long time.

## Native PDF output and what it means for a lead sheet

The headline addition over the earlier programs is native PDF generation, and for a lead sheet that is more consequential than it sounds.

Producing a PDF is not the same as rendering to a device. A lead sheet has to be laid out as pages: the song starts on a new page, a long song breaks sensibly, the header with title and artist repeats or does not, and the page numbers are right. Getting that right means implementing a layout engine, and a layout engine that runs on a text-mode output device is a different and much less capable thing than one that produces paginated vector output.

Native PDF also means the tool is not shelling out to a typesetting system or a PDF printer, so the output is self-contained and reproducible. Combined with the fully customisable layout, fonts and sizes described in the README, the result is that a musician can produce a consistent set of lead sheets for a repertoire without formatting each one by hand.

The Typography side comes from the layout and typeface assignment features. Assigning typefaces to layout items is how a document says that one element uses one font at one size and another element uses another, which is what turns a text dump into a printed page. The Design/ directory in the repository holds design notes for this, and the docs tree documents the layout options.

The web documentation for the reference implementation is where the full set of directives is described, and the README's note that there is a user group for general discussion means the format's finer points are settled in conversation as much as in prose.

## ABC, LilyPond and the neighbouring notation worlds

Two of the repository's top-level files are README.ABC and README.LilyPond, and the ABC/ directory sits alongside them. That is the clearest signal of how the project relates to other notation formats.

ABC is a text notation format in its own right, and the README lists integrated support for ABC among the prominent features of version 6. LilyPond is a different kind of system: it is a program that engraves music, and it is the reference for high quality typeset notation rather than a lead sheet.

So there are two distinct relationships here, and conflating them would be a mistake. ABC is a format ChordPro understands well enough to carry inside its documents, which means a tune can be represented in standard notation without leaving the ChordPro file. LilyPond is a comparison point and a possible output path, in the sense that a project needing fully engraved notation is in a different category of software entirely.

This is also where the boundary of the tool becomes clear. A lead sheet is chord names above lyrics, plus the annotations and structural information a player needs. It is not engraved staff notation with voices, dynamics and instrumental parts. For a jazz chart or a songbook or a rehearsal sheet, ChordPro is the right shape of output. For a score, it is not, and the presence of a LilyPond readme is a boundary marker rather than a promise of integration.

## Licence, releases and where the support happens

Two licence statements appear and they do not agree in form. The README says the program is free software, that you can redistribute it and modify it under the terms of the Artistic License 2.0, and that the copyright is held by The ChordPro Team across 2010, 2018 and 2023. The repository metadata, by contrast, classifies the licence as a custom licence GitHub cannot map to a known identifier, with the LICENSE file as the authoritative text.

The Artistic License 2.0 is a well known and permissive licence, and it is the one named in the README, so the practical position for a user is the Artistic License 2.0 with the LICENSE file as the thing to read. The metadata classification is likely a consequence of the file being a copy of the Artistic License rather than a file named and shaped the way GitHub's detector expects.

The release tags follow a different convention from most projects. They are versioned R6.101.0 for ChordPro 6.101.0 from 2026-04-21, preceded by R6.099.0 for ChordPro 6.099.0 BETA on 2026-04-13 and R6.090.1 for ChordPro 6.090.1 on 2025-10-31. The R prefix and the three-part version number map back to the language version, which is convenient given that the language itself is versioned. and the last push to the repository was on 2026-10-11.

Support is split between two channels, and the split is deliberate. General discussion goes to the user group on groups.io, and bugs and feature requests go to the GitHub issue tracker. For a standard, the conversation and the specification have to stay together, and a mailing list that archives for years is a better home for that than an issue tracker.

## Where ChordPro is the wrong tool

Three limits are worth stating. The first is the boundary already mentioned: this produces lead sheets, not scores. If you need engraved notation with instrumental parts, voices, dynamics and proper staff layout, you need an engraver and a different workflow, and ChordPro will not get you there. Its own feature list does not claim otherwise, which is a point in its favour.

The second is the dependency on the Perl toolchain. The build is Makefile.PL with ExtUtils::MakeMaker, and the distribution is shaped for CPAN with MANIFEST.CPAN and a CPAN-compatible MANIFEST. That is entirely normal for a program of this vintage and it means installation is a Perl module installation, but it is a constraint for an organisation that has standardised on a different language and no Perl in its images. The README's answer is to point at the installation instructions page rather than to claim the tool is trivial to install, and the presence of a GNUmakefile alongside Makefile.PL suggests some friction with default tooling was anticipated.

The third is that the reference implementation is not the only implementation, which cuts both ways. There is a specification and a standard, and other programs implement it, so a user is not locked to this tool if it stops fitting. But it also means that the language's quirks are the specification's quirks, and if you hit a limitation in the language rather than in this program, there is no workaround other than changing tools. The distinction is worth establishing early: is the obstacle ChordPro's implementation, or the ChordPro format itself?

The alternative worth naming is writing the lead sheet directly in a general-purpose tool, a word processor or a typesetting system, with the chords typed by hand or pasted. The difference in approach is that ChordPro makes the chord placement part of the document structure, so it survives transposition and stays aligned when the lyric changes, whereas a manual document has no model and every edit is manual.

## Conclusion

ChordPro suits a musician, arranger or teacher who already has songs as chord and lyric text and needs a printable or screen-ready lead sheet with consistent layout, since the reference implementation is the one that defines how the standard behaves and it handles the typesetting work the text format cannot express. It is the wrong tool if you want full notation, since a lead sheet is chord names over lyrics and not engraved music, and it is the wrong tool if you need a music notation engraver. Verify first which ChordPro language version your existing files are written in, since this implementation targets version 6, and note that the newest tagged release is R6.101.0 from 2026-04-21 with the last push on 2026-10-11.

## FAQ

### What does ChordPro do?

It generates professional-looking sheet music from a text file containing the lyrics of one or many songs with chord information. It is the reference implementation of the ChordPro standard for musical lead sheets.

### Which version of the ChordPro language does this implement?

Version 6. The prominent features of ChordPro 6 are advanced text markup, annotations, integrated support for ABC, and a more powerful way of assigning typefaces to layout items.

### How do I install ChordPro and see its options?

The README points to chordpro.org/chordpro/chordpro-installation/ for installation instructions, and says to execute chordpro --help for an overview about the available options. The distribution is a Perl package built with Makefile.PL.

### What licence is ChordPro released under?

The README states that the program is free software that can be redistributed and modified under the terms of the Artistic License 2.0, with copyright held by The ChordPro Team. The repository metadata classifies the licence as a custom licence, with the LICENSE file as the authoritative text.

### Can ChordPro produce full engraved notation?

No. It produces lead sheets, with chord names over lyrics plus annotations and layout control. Integrated support for ABC is a version 6 feature, and the repository carries README.ABC and README.LilyPond alongside an ABC directory, but a fully engraved score is a different category of software.

### Where should I report bugs and ask questions about ChordPro?

The README splits the two: general discussion goes to the user group at groups.io/g/ChordPro, while bugs and feature requests go to the GitHub issue tracker at github.com/ChordPro/chordpro/issues.

## Sources

- [ChordPro/chordpro on GitHub](https://github.com/ChordPro/chordpro)
- [Issues](https://github.com/ChordPro/chordpro/issues)
- [README](https://github.com/ChordPro/chordpro/blob/master/README.md)
- [Releases](https://github.com/ChordPro/chordpro/releases)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/chordpro-chordpro
