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

  1. Open New Chart.

  2. Type a title and artist.

  3. 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}
    
  4. 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.

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}

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

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}

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.