Introduction
An FLP file is a project saved by FL Studio, the music production software from Image-Line, first released as FruityLoops in 1997. It holds everything needed to rebuild the session: the channel rack and its instruments, patterns and their notes, the playlist, the mixer and its effects, plugin settings and the project details such as tempo, title and author.
The file holds no rendered audio. Samples are stored as paths to files on disk, and plugins as their saved state, so a project opens fully only where the same samples and plugins are installed.
The basic layout has not changed since the late 1990s, but what goes inside it has. Text encoding, the size of some records, the events in use and the number of tracks and mixer inserts all depend on the version of FL Studio that saved the file, so each version is described here as a format of its own, with its own reference. Image-Line described the format once, for FruityLoops 1.7 in 1999, and has not published it since. The details on these pages come from that document and from community reverse engineering, and some fields are still unknown.
Variations
| Format | Variation | About | Open |
|---|---|---|---|
.FLP | FruityLoops 1 to FL Studio 5 project | Early FLP projects: single-byte text, old tempo events, the 1999 layout. | Open |
.FLP | FL Studio 6 to 11.4 project | FLP projects with single-byte text and volume and pan on the newer scale. | Open |
.FLP | FL Studio 11.5 to 12 project | FLP projects whose text events switch to UTF-16LE, except the version. | Open |
.FLP | FL Studio 20 project | FLP projects with multiple arrangements, 500 playlist tracks and 125 inserts. | Open |
.FLP | FL Studio 21 and later project | Current FLP projects: 60-byte and longer playlist records, newer events. | Open |
Every version stores the version that saved the file as a text event (ID 199), such
as 20.8.4.2576, near the start of the event stream. The eras below are
told apart by that string. The boundaries are those used by open-source readers;
Image-Line has not documented them.
FruityLoops 1 to FL Studio 5
The format described in Image-Line’s 1999 document. Text is single-byte and ends in a zero byte, the tempo is stored in older events, patterns start out as step data, and many of today’s events do not exist yet.
The version string starts with 1 to 5.
FL Studio 6 to 11.4
The same structure, with more events. Open-source importers read channel volume and pan on a different scale from version 6.0. Text is still single-byte.
The version string starts with 6 to 11, and is below 11.5.
FL Studio 11.5 to 12
Every text event except the version itself switches to UTF-16LE, two bytes per character. A reader that ignores this shows names and comments as garbage.
The version is 11.5 or later and below 12.9.1.
FL Studio 20
Projects can hold several arrangements, each with its own playlist of up to 500 tracks, and the mixer has 125 inserts. Playlist items are 32-byte records.
The version is 12.9.1 or later, up to the 20.x releases.
FL Studio 21 and later
Playlist item records grow from 32 bytes to 60, and in later releases grow again. Some newer events no longer follow the old rule that the ID gives the size.
The version string starts with 21 or later, including the 2024 and later releases.
Structure
In every version an FLP file is two chunks, each a four-letter ID and a little-endian
length. The header chunk FLhd gives the file type, the channel count and
the timing resolution. The data chunk FLdt holds the rest of the project
as one long stream of events.
Each event is an ID byte followed by its value. The ID sets the size of the value: one, two or four bytes, or a length-prefixed block of text or data. There is no nesting. A New event starts a channel or a pattern, and in later versions an arrangement, and the events after it describe that item until the next one starts. Which events exist, and how their values are laid out, is set out in each version’s own reference.
0FLhd header chunk: type, channel count, PPQ14 bytes14FLdt data chunk: ID and length of the event stream8 bytes22Project events: version, tempo, title, authorvariesChannel events, each channel opened by a New eventvariesPattern events with their notesvariesPlaylist events with the items placed in itvariesMixer events, insert by insertvaries
The order shown inside the stream is a rough guide. Events of different kinds can appear in other orders, and a reader should handle each event by its ID wherever it appears.
Links
Software
- FL Studio – Image-Line’s music production software, which saves and opens FLP projects (Windows, macOS)
Developers
- PyFLP – library that reads and writes FLP files (Python)
- PyFLP documentation – how PyFLP reads the format, with notes on the events
- libflp – library that reads FLP files (C++)
Reference
- The FruityLoops FLP file format explained – Image-Line’s 1999 description for FruityLoops 1.7, mirrored in libflp