ChordPro Implementation: Chords

In ChordPro files, lyrics are interspersed with chords between brackets [ and ]. Strictly speaking it doesn’t matter what you put between the [], it is put on top of the syllable whatever it is. But there are situations where it does matter: for chord diagrams and transpositions.

In general, ChordPro will try to interpret what is between the brackets as a valid chord name, unless the first character is an asterisk, *. In that case ChordPro will remove the asterisk and treat everything else as a text that will be printed just like the chord names. This can be used to add small annotations, e.g. [*Coda] and [*Rit.].

Parsing chords — the chord properties

ChordPro can parse chord names in two modes: strict and relaxed.

In strict mode, enabled by default, chord names are only recognized if they consist of

  • a root note, e.g. C, F# or Bb.
  • an optional qualifier, e.g. m (minor), aug (augmented).
  • an optional extension, which must be one of the extension names built-in.
  • an optional bass, a slash / followed by another root note.

When a chord name is successfully parsed, each of the above constituents is registered with the chord as properties root, qual, ext and bass. It’s name is registered as property name. These properties are referred to as the chord properties of the chord.

Some examples:

name root qual ext bass
C C
F# F#
Besm Bes m
Am7 A m 7
C/B C B

Note: What is recognized as a root note and what is stored in the root property is controlled by the notes section of the config files. For example, in the common notation B♭, Bb and Bes all designate a B-flat note.

In relaxed mode, the same rules apply for root note and qualifier, but the extension is not required to be known. You are free to make up your own. In relaxed mode, [Coda] would be a valid chord name: root C plus extension oda.

name root qual ext bass
Coda C oda
Gm* G m *

Chord properties can be used as metadata for substitutions.

Chord diagrams — the diagram properties

Many ChordPro implementations (formatters) provide chord diagrams at the end of a song, using a built-in list of known chords and fingerings. Clearly, this can only work when the chords in the ChordPro file can be recognized, either in strict mode, or in relaxed mode. If a chord is known there may be some additional properties that are used internally to produce chord diagrams. This set of properties is referred to as the diagram properties of the chord.

Some examples:

name base frets fingers keys
Am7 1 x 0 2 0 1 3 x x 2 3 1 x 0 3 7 10
B 2 1 1 3 3 3 1 1 1 2 3 4 1 0 4 7

The list of known chords is read from the config files and can be extended by defining chords using the define directive.

Transposition and transcoding

For transposition and transcoding the chord must have at least a root property. This controls what and how can be transposed or transcoded. For example, when you’re transposing from A to C, you can replace everything chord-like that starts with A by C and whatever follows the A. Am7 becomes Cm7 and Alpha would become Clpha, who cares?

Valid chord names

Although the ChordPro File Format Specification deliberately doesn’t say anything about valid chords, it is advised to stick to commonly accepted chord names. The ChordPro Reference Implementation supports at least:

  • A, B, C, …, G (European/Dutch), H (German)
  • I, II, III, …, VII (Roman)
  • 1, 2, 3, …, 7 (Nashville)
  • b for flat, and # for sharp
  • Common qualifiers like m, dim, etc.
  • Common extensions like 7, alt, etc.

ChordPro Implementation: Notes

If enabled in the config, ChordPro will understand lowercase root-only chords to mean note names. Note names will be treated (shown, transposed) exactly as chords, but will not account for diagrams.

This can be used for example for intro’s that start with some single notes before the chords:

{comment: Intro [f] [g] [a] [E] }

Appendix: List of known chord extensions

Note that extensions here include the qualifier.

The following chord extensions are currently built-in.

Extensions for major chords

Note that ^ is an alternative for maj.

   2
   3
   4
   5
   6
   69
   7
   7-5
   7#5 7#9 7#9#5 7#9b5 7#9#11
   7b5 7b9 7b9#5 7b9#9 7b9#11 7b9b13 7b9b5 7b9sus 7b13 7b13sus
   7-9 7-9#11 7-9#5 7-9#9 7-9-13 7-9-5 7-9sus
   711
   7#11
   7-13 7-13sus
   7sus 7susadd3
   7+
   7alt
   9
   9+
   9#5
   9b5
   9-5
   9sus
   9add6
   maj7 maj711 maj7#11 maj13 maj7#5 maj7sus2 maj7sus4
   ^7 ^711 ^7#11 ^7#5 ^7sus2 ^7sus4
   maj9 maj911
   ^9 ^911
   ^13
   ^9#11
   11
   911
   9#11
   13
   13#11
   13#9
   13b9
   alt
   add2 add4 add9
   sus2 sus4 sus9
   6sus2 6sus4
   7sus2 7sus4
   13sus2 13sus4

Extensions for minor chords

A minus sign - may be used instead of the m to denote a minor chord.

   m#5
   -#5
   m11
   -11
   m6
   -6
   m69
   -69
   m7b5
   -7b5
   m7-5
   -7-5
   mmaj7
   -maj7
   mmaj9
   -maj9
   m9maj7
   -9maj7
   m9^7
   -9^7
   madd9
   -add9
   mb6
   -b6
   m#7
   -#7
   msus4 msus9
   -sus4 -sus9
   m7sus4
   -7sus4

Other extensions

   aug +
   dim 0
   dim7
   h h7
   h9