Open Format

SongForm Format

A plain-text, human-readable format for documenting songs: chords, structure and lyrics in a single file.

Version 1.0 Extension: .sff.md Encoding: UTF-8

Convert any music link into an SFF setlist

Import a Spotify, Apple Music or YouTube Music link and convert it into a canonical song list. Albums and playlists expand automatically into individual tracks, you can add songs manually, and download them as an SFF setlist ready to import into SongForm and add your own way of playing them.

Open the Streaming Music Converter

Why SongForm Format?

Musicians need a way to document songs that bridges two worlds:

Guitar Pro is powerful but proprietary, closed-source, and overkill for most songwriting.
Ultimate Guitar's chord + lyrics is accessible but loses structure, with no clear timing, no notation standard, no round-trip fidelity with music software.

SFF exists because you shouldn't have to choose. It's a plain-text format designed for musicians, by musicians. It's human-readable (edit it in any text editor), machine-parseable (import and export reliably), and structured enough to preserve the information that matters: what you play, when you play it, and what you sing.

Think of it as "chord charts with metadata". The format guitarists have been scribbling on paper for decades, finally formalized.

Format Overview

SFF combines YAML frontmatter (for metadata) with structured Markdown (for musical content). Every song is a single plain-text file. No proprietary binaries. No lock-in.

[song metadata]
[sections with chords and lyrics]

That's it. Simple structure, powerful enough.

Specification

Frontmatter (YAML)

The file begins with a YAML block delimited by ---. This section holds all metadata and optional chord voicings.

Standard Fields

Field Type Example Description
sff_versionstring"1.0.0"SFF format version. Ensures compatibility as the format evolves
titlestring"Bohemian Rhapsody"Name of the song
artiststring"Queen"Artist or band performing the song
keystring"Bb" / "G#m"Key of the song
bpminteger120Tempo in beats per minute
time_signaturestring"4/4" / "7/8"Meter of the song
tuningstring"guitar_standard"Instrument tuning. Needed to interpret fret positions correctly
key_preferenceenum"sharps" / "flats"Whether chords are shown with sharps or flats
tagsarray["pop", "rock", "70s"]Labels for filtering and searching
notesstringFreeform textFree-form notes about the arrangement or song
draftbooleantrue / falseMarks the song as a work in progress. May be hidden from the main library
song_releasedbooleantrue / falseMarks whether the song is released and ready for playback/export workflows
chordsmapSee belowFret positions per chord. Only needed when specific voicing matters

Chord Voicings (Optional)

If you want to preserve specific chord fingerings or shapes, include a chords dictionary:

chords:
  Am7: 0 0 2 0 1 0
  Gmaj7: 3 2 4 4 3 2
  Dsus4: x x 0 2 3 3

Format: ChordName: fret1 fret2 fret3 ... where x means "don't play" and numbers are fret positions (left-to-right, typically top to bottom on a standard guitar).

Body: Sections and Loops

After the closing ---, the song body contains a sequence of sections. Each section starts with a Markdown level-2 header (## SectionName).

An optional Markdown title (# Song Title) can appear at the top of the file. When present, it should match the title field in the frontmatter.

Section Types

Standard section names:

  • Intro, Verse, Pre-Chorus, Chorus, Post-Chorus
  • Bridge, Middle 8, Solo, Breakdown, Outro
  • Offset: timing metadata in milliseconds (special section)

The same section type can appear multiple times; order defines the play sequence.

Loops: The Basic Unit

Inside each section, the atomic unit is a loop, a single chord progression. A loop has:

  1. A duration line: N: Chord1 Chord2 Chord3 ...
  2. An optional blank line
  3. Optional lyrics on the following line(s)

Where N is the number of bars (measures) the loop occupies. The blank line between the chord line and lyrics is required so that raw markdown renders each as a distinct block. Loops within a section are separated by blank lines; parsers distinguish lyrics from new loops because chord lines always start with N:.

## Verse
4: Am7  G

First progression, four bars

4: Am7  G  F  C

Second progression, also four bars

Chord Notation

Chords are written in standard notation:

  • Root: A through G, optionally with # or b
  • Quality: m, dim, aug, sus2, sus4, add9, etc.
  • Extension: 7, 9, 11, maj7, m7b5, etc.
  • Bass note: /Note to indicate inversion

Examples: C, Dm, G#m7, Fsus4, Cmaj7/E

Complete Example

Below is a real song encoded in SFF. Wade in the Water of public domain. It illustrates all the key features: frontmatter with chord voicings, an Offset for audio sync, sections with varying loop lengths, lyrics, and a solo section.

wade-in-the-water.sff.md
---
sff_version: 1.0.0
title: Wade In the Water
artist: Public Domain
key: A minor
bpm: 113
time_signature: 4/4
tuning: guitar_standard
tags: [Singer/Songwriter]
draft: true
chords:
  Am: x 0 2 2 1 0
  G: 3 5 5 4 3 3
  F: 1 3 3 2 1 1
  E: 0 2 2 1 0 0
---

## Offset
440

## Intro
2: Am  G  F  E

2: Am  G  F  E

2: Am  G  F  E

2: Am  G  F  E

## Chorus
2: Am  G  F  E

Wade in the water

2: Am  G  F  E

wade in the water children

2: Am  G  F  E

wade in the water oh

2: Am  E  Am

God's gonna trouble the water

## Verse
2: Am  F  E

Who's that young girl dressed in red?

2: Am  G  F  E

wade in the water

2: Am  F  E

Must be the children that Moses led

2: Am  E  Am

God's gonna trouble the water

## Chorus
2: Am  G  F  E

Wade in the water

2: Am  G  F  E

wade in the water children

2: Am  G  F  E

wade in the water oh

2: Am  E  Am

God's gonna trouble the water

## Verse
2: Am  F  E

Who's that young girl dressed in white?

2: Am  G  F  E

wade in the water

2: Am  F  E

Must be the children of the Israelite

2: Am  E  Am

Oh God's gonna trouble the water

## Chorus
2: Am  G  F  E

Wade in the water

2: Am  G  F  E

wade in the water children

2: Am  G  F  E

wade in the water oh

3: Am  E  Am

God's gonna trouble the water

## Solo
15: Am  G  F  E

## Verse
3: Am  F  E

Who's that young girl dressed in blue?

1: Am  G  F  E

wade in the water

2: Am  F  E

must be the children that are coming through

2: Am  E  Am

God's gonna trouble the water

## Chorus
2: Am  G  F  E

Wade in the water

2: Am  G  F  E

wade in the water children

2: Am  G  F  E

wade in the water oh

2: Am  E  Am

God's gonna trouble the water

## Verse
2: Am  F  E

You don't believe I've been redeemed

2: Am  G  F  E

Wade in the water

2: Am  G  F  E

Just seen the holy ghost looking for me

2: Am  E  Am

God's gonna trouble the water

## Chorus
2: Am  G  F  E

Wade in the water

2: Am  G  F  E

wade in the water children

2: Am  G  F  E

wade in the water oh

3: Am  E  Am

God's gonna trouble the water

## Outro
2: Am  G  F  E

2: Am  G  F  E

2: Am  G  F  E

2: Am  G  F  E

2: Am  G  F  E

2: Am  G  F  E

Design Principles

Plain text first

Open any file in Notepad, Vim, or your favorite editor. No proprietary software needed.

Round-trip fidelity

Export your SongForm song to SFF, edit it anywhere, import it back, with nothing lost.

Human-readable

If you've ever written out a chord chart on paper, SFF will feel familiar.

No ambiguity

Bar counts are explicit. Section order is the play order. No guessing.

Extensible

Add custom fields to the frontmatter; compliant parsers ignore what they don't recognize.

Comparison: Where SFF Fits

Format Human-readable Editable anywhere Structured & synced Portable Transposable Metadata & fingering
Guitar Pro ✗ (proprietary) Limited
Ultimate Guitar
Paper
SongForm Format ✓✓

SFF gives you all the data required to play precisely along with your audio, with the accessibility of a plain text file.

Getting Started with SFF

In SongForm, you can:

Import Ultimate Guitar tabs and convert them to SFF automatically
Export any song as .sff.md
Edit the file in any text editor and re-import it
Share a single file that contains everything, with no external dependencies

Try it in SongForm

SFF is the native format of SongForm for iOS. Import, export, and edit your songs, all in a single, open file.

Discover SongForm