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.
| Directive | Support | What 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
| Directive | Support | What 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.
| Directive | Support | What 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
| Directive | Support | What 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
| Directive | Support | What GigCharts does |
|---|---|---|
{define: …} | Ignored | Dropped. GigCharts doesn't draw fretboard diagrams. |
{chord: …} | Ignored | Dropped, same reason. |
Transposition
| Directive | Support | What 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.
| Directive | Support | What 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
| Directive | Support | What 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
| Directive | Support | What 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.