Skip to content

ChordPro

ChordPro in GigCharts

GigCharts opens ChordPro files and saves them back out. This page says exactly what survives the trip — directive by directive.

What ChordPro is

ChordPro is a plain-text way of writing a song: the chords sit inline, in square brackets, right where you change chord — [Am]There is a [C]house — and anything in curly braces is a directive, an instruction about the song rather than a part of it. {title: …} names it, {capo: 2} puts a capo on, {start_of_chorus} marks where the chorus begins.

It's been the common tongue of chord charts for decades, which is the point: a .cho file written twenty years ago still opens today, in a dozen different programs. GigCharts is one of them.

You never have to type any of it. Every directive GigCharts understands also has a control in the app — a field, a chip, a drag handle. ChordPro matters when a song is already written, or when something else wrote it for you (see authoring with AI). If you're starting from scratch, just paste chords over lyrics and start dragging.

{title: House of the Rising Sun}
{artist: Traditional}
{key: Am}
{capo: 2}

{start_of_verse}
[Am]There is a [C]house in [D]New Or[F]leans
{end_of_verse}

{comment: softer, let it breathe}

{start_of_chorus}
[Am]…
{end_of_chorus}

{chorus}

Open that in GigCharts and you get the title and capo filled in, a verse spine and a chorus spine down the margin, a cue chip where the comment was, and a repeat-chorus marker at the end — not a wall of curly braces.


Opening and saving

In. Drop a file on the app's Open screen or pick it — .cho, .chordpro, .chopro, .crd and .pro are all accepted, up to 256 KB. Or just paste the text straight into the editor; the same reader handles both, and it also copes with plain chords-above-lyrics and the bracket [Verse] headers you get from tab sites.

Out. Export → ChordPro writes a .chordpro file with inline chords, your metadata as directives, and your section spines, cues and repeat-chorus marks turned back into {start_of_…}, {comment} and {chorus}. Free on every tier.

Between the two there's .gigchart, the app's own format. That one is lossless — it holds everything on the page, down to the color of a single cue. ChordPro is for interchange; .gigchart is for keeping.


Directive coverage

Every directive in the ChordPro specification, grouped the way the spec groups them, with what GigCharts does with each. 22 are handled in full, 6 are simplified, and the rest are ignored — swallowed quietly on import so they never print as junk on your chart, with one exception that's called out below.

  • Recognized Read and acted on.
  • Partial Read, but something is simplified or dropped.
  • Ignored Not acted on.

Meta-data directives

Read once, on import, and lifted into the song's fields — where you can edit them afterwards. A few of them (arranger, duration, album, year, copyright) are kept but not printed until you put them in the title or subtitle template.

DirectiveSupportWhat GigCharts does
{title: …} / {t: …} Recognized Title field.
{subtitle: …} / {st: …} Recognized Subtitle field — its own part of the subtitle line, not the artist.
{artist: …} Recognized Artist field.
{composer: …} Recognized Music / composer field. {music} works too.
{lyricist: …} Recognized Lyrics / lyricist field. {lyrics} works too.
{arranger: …} Recognized Arranger field — a credit alongside music and lyrics.
{key: …} Recognized Original key.
{capo: …} Recognized Capo fret — drives the capo chip and concert-pitch chords.
{tempo: …} Recognized Tempo in BPM. {bpm} works too.
{time: …} Recognized Time signature.
{duration: …} Recognized Duration field.
{album: …} Recognized Album field.
{year: …} Recognized Year field.
{copyright: …} Recognized Copyright field.
{sorttitle: …}, {sortartist: …} Ignored Dropped. Your library sorts by the song's own name.
{tag: …} Ignored Dropped — there's no tagging model yet.
{meta: name value} Ignored Dropped, and not re-emitted on export, so custom metadata doesn't survive a round trip.

Formatting directives

DirectiveSupportWhat GigCharts does
{comment: …} / {c: …} Recognized Becomes a cue chip anchored where the comment sat.
{comment} / {c} (no text) Recognized Treated as a blank line — a stanza break, which is how it's used in the wild.
{comment_italic: …} / {ci: …} Partial The text becomes a plain cue; the italic styling is dropped. Cue styling is set in the app.
{comment_box: …} / {cb: …} Partial Text becomes a plain cue; the box is dropped.
{highlight: …} Partial Text becomes a plain cue; the emphasis is dropped.
{image: …} Ignored Dropped. Charts don't embed images.

Environment directives

Section blocks are where a ChordPro file carries the most structure — and they come through intact.

DirectiveSupportWhat GigCharts does
{start_of_chorus} … {end_of_chorus}
{soc: Label} … {eoc}
Recognized A chorus section spine over those stanzas. An optional label is kept.
{start_of_verse} … {end_of_verse}
{sov} … {eov}
Recognized A verse section spine.
{start_of_bridge} … {end_of_bridge}
{sob} … {eob}
Recognized A bridge section spine.
{start_of_part: Label} … {end_of_part} Recognized A GigCharts extra: a section spine with any label you like.
{chorus} Recognized A repeat-chorus marker in the gap — the chorus is referred to, not copied in.
{start_of_tab} … {end_of_tab}
{sot} … {eot}
Partial The markers go; the tab lines stay in the body verbatim. There's no protected monospace tab block yet, so alignment follows the song's font.
{start_of_grid} … {end_of_grid}
{sog} … {eog}
Partial Markers go, the grid's lines stay as ordinary body text. Chord grids aren't rendered as grids.

Delegated environments

DirectiveSupportWhat GigCharts does
{start_of_abc} … {end_of_abc}
{start_of_ly} … {end_of_ly}
{start_of_svg} … {end_of_svg}
Ignored Dropped whole — markers and contents. Embedded notation is out of scope, and ABC, LilyPond and SVG source isn't anything you'd want printed on a chart. (An unclosed block is left alone apart from its marker, so a typo can't swallow the rest of the song.)
{start_of_textblock} … {end_of_textblock} Partial Markers go, the text inside stays as ordinary body lines — unlike the notation blocks above, this one holds words. Alignment and the block's own formatting are dropped.

Chord diagrams

DirectiveSupportWhat GigCharts does
{define: …} Ignored Dropped. GigCharts doesn't draw fretboard diagrams.
{chord: …} Ignored Dropped, same reason.

Transposition

DirectiveSupportWhat GigCharts does
{transpose: n} Recognized Transposes the song by n semitones, exactly like the app's transpose control.

Fonts, sizes and colors

All dropped, on purpose: type and color belong to the chart's own settings, which are saved with the song and applied to preview and PDF alike.

DirectiveSupportWhat GigCharts does
{textfont} / {tf}, {textsize} / {ts}, {textcolor} Ignored Dropped — set lyric font, size and color in the app.
{chordfont} / {cf}, {chordsize} / {cs}, {chordcolor} Ignored Dropped — chord type and color are chart settings.
{titlefont}, {titlesize}, {titlecolor} Ignored Dropped — the header has its own controls.
{chorusfont}, {tabfont}, {gridfont}, {labelfont}, {tocfont}, {footerfont} (+ their sizes and colors) Ignored Dropped.

Output and layout directives

DirectiveSupportWhat GigCharts does
{new_page} / {np}
{new_physical_page} / {npp}
Ignored Dropped. Add a page break where you want one — it's a draggable marker in the app.
{columns: n} / {col}, {column_break} / {colb} Ignored Dropped. Charts are single-column; use a page break or a smaller font to fit.
{grid} / {g}, {no_grid} / {ng}, {diagrams: …} Ignored Dropped — nothing to switch on or off.
{titles: …} Ignored Dropped. Title alignment is a chart setting.
{pagetype: …} Ignored Dropped. Page size is a chart setting (Letter, A4, and the rest).
{new_song} / {ns} Ignored Dropped. One song per chart — anything after it is appended to the same body, so split multi-song files first.

Custom and conditional directives

DirectiveSupportWhat GigCharts does
{x_…: …} Ignored Dropped, and not re-emitted on export.
{comment-guitar: …}, {title-ukulele: …}, … (instrument selectors) Ignored The whole line is dropped, including the variant that would match. Remove the selector to have the directive read.
any other {unknown: value} Ignored Consumed silently, so an unfamiliar directive never prints as junk on your chart.
any other {start_of_…} … {end_of_…} Ignored The markers are consumed, whatever the environment is called; the lines between them stay in the body.

GigCharts also reads a handful of directives that aren't in the standard — {genre}, {instrument}, {video}, {style} and friends. Those, plus every alias and short form, are listed in the import reference.


What ChordPro can't carry

The gaps run both ways. A lot of what GigCharts puts on a chart has no ChordPro directive to write it into, so it lives in the .gigchart file and in the PDF, but not in an exported .chordpro:

  • Voice coloring — who sings which words.
  • Performer panels, road maps and arrangement bars.
  • Repeat brackets, per-stanza capo changes and page-turn marks.
  • Anything you positioned by hand, and every color, font and layout choice.

This isn't a limitation being apologized for — it's the division of labour. ChordPro says what the song is. GigCharts decides how it looks on the stand. Keep the .gigchart as your master copy and export ChordPro when you need to hand the song to something else.


The round trip

Export a song to ChordPro and open it again and you get the same chart back: the same chords in the same places, the same section spines with their labels, the cues where you left them, the repeat-chorus marks, and the blank lines you used to breathe between stanzas. A test suite holds that line — export, re-import, compare.

Two honest caveats:

  • A gap that carries a cue chip gives up its exact blank-line count. Plain text can't say “two blank rows, then a cue, then four”, and the chip is worth more than the spacing.
  • A section with a custom label exports as a labeled chorus. The label comes back; the fact that it was a bridge doesn't.

Ready to try it on your own songs? Open the app and drop a .cho on it. Nothing to install, nothing to sign up for.