SongPro is a text file format for making chord & lyric lead sheets for songs.


Here’s a partial example of a song in the SongPro format:

@title=Escape Capsule
@artist=Brian Kelly

# Verse 1

Climb a-[D]board [A]
I've been [Bm]waiting for you [F#m]
Climb a-[G]board [D]
You'll be [Asus4]safe in [A7]here

# Chorus 1

[G] I'm a [D]rocket [F#]made for your pro-[Bm]tection
You're [G]safe with me, un-[A]til you leave

# Solo

| [Em] | [D] | [Em] | [D] |
| [Em] | [D] | [Em] | [F#] |
| [B] | [B] | [Bm] | [Bm] |

When converted into HTML it looks like this:

Note: Chord diagrams are provided by the chord_diagrams gem

SongPro Format

A SongPro file can contain Attributes, Custom Attributes, Sections, Lyrics & Chords, Tablature and Measures.


Attributes are added with the format:


You can specify the following song attributes:

They can be placed anywhere in the song but it’s recommended to put them at the top of your file. The values are text that are displayed in the rendered output.

Custom Attributes

Custom attributes can be added the format:


A custom attribute can be anything. These are mainly used by other apps that want to store additional attributes beyond the core set or are that specific to the app.


Any line starting with # is considered the beginning of a new section:

# Section Name

Section names are usually things like:

But you can name them however you please.

Lyrics & Chords

Chords are anything contained inside of brackets, such as C#m7. Lyrics are words by themselves or around chords.

You'll be [Asus4]safe in [A7]here


Any line starting with |- is considered to be tablature. For example:



When you want to show where chord changes are for an instrumental section, start a line with | and use another | whenever a new measure starts.

| [G] | [D] | [F#] | [Bm] [D/A] |