ChordPro authoring guide
The practical reference for writing or pasting a chart into BandBinder. For the full ChordPro language spec, see Tools and community; for how a directive drives an app feature, see the directive-to-feature map.
First chart in 60 seconds
-
Open New Chart.
-
Type a title and artist.
-
Paste or type the body. A minimal chart is just chords in
[brackets]sitting inline with the lyric text they land on:{title: Rehearsal Runthrough} {artist: The Band} {key: G} {tempo: 96} {start_of_verse} [G]Started the take with the [C]tape still rolling [D]Counted us in on a [G]breath {end_of_verse} {start_of_chorus} [C]Everybody hits the [G]downbeat together [D]Nobody's checking a [G]chart {end_of_chorus} -
Save. Key and tempo chips read straight from
{key}/{tempo}in the body above - there's nothing else to fill in.
Directives BandBinder reads
| Directive | Notes |
|---|---|
{title: ...} / {artist: ...} |
Song library metadata. |
{subtitle: ...} |
Line under the title. Stands in for the artist on import when there's no {artist} to read. |
{key: ...} |
Initial key; re-spelled automatically when you transpose. |
{tempo: ...} |
BPM, editable from the Tempo chip / tap trainer. |
{time: ...} |
Time signature, e.g. 4/4, 3/4. Defaults to 4/4 if absent. |
{capo: ...} |
Fret number for the chord-diagram shape. See Chord Help, transpose & capo for how it differs from transposing. |
{duration: ...} |
Song length, e.g. 3:45. Read-only fallback for the chart header pill when the song's stored duration is unset - it doesn't feed the setlist stage sheet, which totals from the song's stored duration only. |
{start_of_verse} / {end_of_verse} |
Verse section. |
{start_of_chorus} / {end_of_chorus} |
Chorus section. |
{start_of_bridge} / {end_of_bridge} |
Bridge section. |
{start_of_tab} / {end_of_tab} |
Verbatim tab block - nothing inside is parsed as a chord or directive. Takes a label: {start_of_tab: Intro riff}. |
{start_of_grid} / {end_of_grid} |
Chord-grid section. Content is parsed like any other section: [bracket] chords are recognized (and transpose), and {...} lines are read as directives. Use a tab block instead if you need text preserved exactly as typed. |
{comment: ...} / {comment_italic: ...} / {comment_box: ...} |
A rehearsal aside rendered as text, not a lyric line. |
{new_page} / {new_physical_page} |
Page break hints for other ChordPro tools. BandBinder doesn't paginate charts - both are kept as written, unchanged. |
{x_spotify: ...} |
Reference link - see Reference links below. |
{x_youtube: ...} |
Reference link - see below. |
{x_audio: ...} |
Reference link - see below. |
This table is the complete list of directives BandBinder's editor recognizes -
the same set the { autocomplete suggests as you type. Common short forms are
recognized too ({t: ...} for title, {st: ...} for subtitle, {soc}/{eoc}
for chorus, {sov}/{eov} for verse, {np}/{npp} for the page-break
directives, and so on) - see the
directive-to-feature map for how directives drive
specific app behavior. A section can carry a label, e.g.
{start_of_chorus: Chorus 2}, which becomes that section's heading. An
unrecognized directive is kept as-is, never dropped.
Reference links (BandBinder x_ extension)
Three directives carry a song's reference links in the chart text. They are a
BandBinder extension using x_, ChordPro's own namespace for custom
directives - any other ChordPro reader ignores them:
{x_spotify: https://open.spotify.com/track/1a2b3c}
{x_youtube: https://youtu.be/dQw4w9WgXcQ}
{x_audio: https://example.com/take-it-easy.mp3}
- They move onto the song's fields: on save or import, each value lands on the song's Spotify / YouTube / audio link and the directive line is removed from the chart body. The field is the source of truth from then on - the chart body isn't where you edit a link afterwards.
- Each is checked before it is stored: a Spotify or YouTube link must be a
real Spotify/YouTube URL, an audio link must be an
http/httpsURL. A value that doesn't pass is dropped rather than stored, and BandBinder names the directive it dropped. This is stricter than Song Edit's link chips, which warn about an unrecognized link but let you save it anyway - a chart arriving as text has nobody to ask. - They are written back on export, so a chart exported from BandBinder and re-imported keeps its links. This is what makes a batch export a complete backup of a song's references.
- Inside a
{start_of_tab}block they are left exactly as typed, like everything else in a verbatim block.
Chord syntax
Chords sit inline in [brackets], directly before the lyric syllable they're
played on:
[G]Line one lyric [D]text continues [Em]here
- Root plus an open-ended quality suffix:
[C],[Cm7],[Csus4],[Cadd9]all work - BandBinder doesn't restrict which qualities you write. - Slash-bass chords:
[D/F#],[C/G]. - Sharps and flats (
[F#],[Bb]) and their enharmonic spellings are both recognized. - A chord with no lyric after it (an intro hit or turnaround) is fine on its
own:
[G] [D] [Em] [C]. - Non-chord annotations like
N.C.or%are preserved exactly as written and pass through transposition untouched. - For the transpose-vs-capo distinction, see Chord Help, transpose & capo.
Tab in your charts
Guitar (or bass, banjo, whatever) tab pastes straight into a chart as a tab
environment - open it with {start_of_tab} and close it with {end_of_tab},
or use the shorthand {sot} / {eot}:
{start_of_tab: Intro riff}
e|-----0---2---3---|
B|-----1---3---0---|
G|-----0---0---0---|
D|--0h2------------|
A|-----3-----------|
E|-----------------|
{end_of_tab}
- Tab lines render in a fixed-width font, exactly as typed, alongside your lyrics.
- Everything between the two directives is verbatim: transposing the chart (Shift++ / Shift+-) moves the chords above the tab but leaves your fingerings alone.
- The staff is one block that never re-wraps, so the strings stay lined up. A riff wider than its column shrinks to fit, down to a floor; past that you drag it sideways, with a faded edge marking the rest.
- The lattice characters (
-,|,=) are drawn faint so the fret numbers, string names and technique markers (h,p,b,~) read first.
Name your tab blocks
A tab environment takes a label, like a verse or a chorus:
{start_of_tab: Solo - second half}
{sot: Solo - second half}
The label becomes the block's caption, so the riff keeps its name in Performance
Mode too, where {comment} lines are hidden by default - name a riff with the
label, not a {comment} above it. An unlabelled block is captioned TAB.
Pasting from another source
Paste text into the chart field (or the New Chart box) and BandBinder detects the format and converts it to ChordPro automatically:
| You paste | It converts to |
|---|---|
| ChordPro | Used as-is. |
OnSong export (Title: / Artist: / Key: header fields, Verse 1: style section labels) |
Header fields become {title}/{artist}/{key}/{tempo}/{time}/{capo} directives; labeled sections become {start_of_verse}/{start_of_chorus}/{start_of_bridge} environments. |
| Ultimate Guitar-style chord-over-lyrics (a chord line stacked above the lyric line it belongs to) | Each chord is merged inline into the lyric line beneath it, at the column it was typed above. |
Genius lyric-page paste ([Verse]/[Chorus] tags, annotation links) |
Section tags become the same {start_of_*} environments; Genius page furniture (view counts, "You might also like", embed artifacts) is stripped. |
| Plain text with no chords or markup | Kept as plain lyric lines - add chords afterward. |
See Import formats for the in-app picker walkthrough.