JSON project format
Open
Nobody has claimed this yet.
enhancement
- Dominant language
- C++
- Stars
- 10.4k
- Forks
- 1.3k
- Avg merge
- 2d 13h
- Merged PRs (30d)
- 7
Description
Proposal to add a new JSON-backed, ZIP-encapsulated project format.
The Problem
- The
.mmpzformat is confusing because it's a standard compression with a byte offset that makes it unreadable by common archive tools like 7zip.- This can be even more difficult for bug reporters/testers because the recommended technique for a bug report is to provide an uncompressed project file, but this can prove difficult if LMMS can't open it, yet is required for decompressing it.
- The
.xmlproject format is very resilient but XML can be tricky for power-users to hand-edit and is less popular format for newcomers (as opposed to.yml,.json, etc) - Although the
.mmpzformat is compressed, no current standard exists for storing and extracting project resources (samples, patches, soundfonts, plugins, etc).- A new project format can help blueprint portable project files, also making it easier to debug loading issues, since it's easy for the power-user to hand-edit a
.zipfile and folders/files within.
- A new project format can help blueprint portable project files, also making it easier to debug loading issues, since it's easy for the power-user to hand-edit a
Possible Solutions
- Change the
.mmpzsave code to fix the byte offset. This would cause compatibility issues, but could address the 7zip problems.
-- OR -- - Create a new format based on the popular
.zipformat, designed using standards that our power users already know and are familiar with.
Mockup


Benefits
- JSON based, easier to read
- Standard ZIP format
- Provides quick access for developers to open/debug projects
- Provides a scalable method for eventually bundling portable project files (#1257)
Before
<?xml version="1.0"?>
<!DOCTYPE lmms-project>
<lmms-project version="1.0" creator="LMMS" creatorversion="1.1.3" type="song">
<head timesig_numerator="4" mastervol="100" timesig_denominator="4" bpm="140" masterpitch="0"/>
<song>
<trackcontainer width="600" x="5" y="5" maximized="0" height="300" visible="1" type="song" minimized="0">
<track muted="0" type="0" name="TripleOscillator" solo="0">
After (mockup)
{
lmms-project: {
version: 1.0,
creator: "LMMS",
creatorversion: "1.1.3",
type: "song",
head: {
timesig_numerator: 4,
mastervol: 100,
timesig_denominator: 4,
bpm: 140,
masterpitch: 0
},
song: {
trackcontainer: {
width: 600,
x: 5,
y: 5,
maximized: 0,
height: 300,
visible: 1,
type: "song",
minimized: 0,
track: [
{
muted: 0,
type: 0,
name: "TripleOscillator",
solo: 0,
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Review the current .mmpz and XML project save/load paths, then determine how a JSON-backed ZIP format would fit the existing project-file handling. Done would require an agreed format, compatibility decisions, resource packaging behavior, and corresponding load/save validation.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- cpp, json
- Domain
- desktop
- Issue type
- Feature
- Difficulty
- 5/5
- Estimated time
- Over a week
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100