LMMS / LMMS/lmms

Non-XML configuration file format

Open
#8,289 10 comments 1 reaction 0 assignees View on GitHub

Nobody has claimed this yet.

enhancement
Dominant language
C++
Stars
10.4k
Forks
1.3k
Avg merge
2d 13h
Merged PRs (30d)
7

Description

LMMS currently stores its configuration in an XML file. This is technically human-readable, but it's not fun to do so. An alternative configuration file format could be beneficial.

There are several options to choose from:

INI-like

The most common config format (many .conf files are just this). Dead simple. Maybe too simple for configurations with nested options or arrays (not sure how to handle recentfiles or favoriteitems!) Requires no dependencies as writing this from scratch is trivial.

# Example INI config
version = 1.3.0-alpha.1.956+f5688e9
configversion = 3
language = en
sololegacybehavior = false
openlastproject = false
loopmarkermode = dual
configured = true
disablebackup = false
nanhandler = true
nommpz = false

# No clear way to handle recentfiles or favoriteitems...?

[audioengine]
samplerate = 44100
framesperaudiobuffer = 256
audiodev = SDL (Simple DirectMedia Layer)
mididev = ALSA-Sequencer (Advanced Linux Sound Architecture)
# ...

TOML

This format has become pretty popular lately and has a lot in common with INI, but with support for nested options and arrays. I've used it a few times and it's pretty nice. However, there are several ways to represent nested options, which is unfortunate (probably won't be a problem for us though).

# Example TOML config
version = "1.3.0-alpha.1.956+f5688e9"
configversion = 3
language = "en"
sololegacybehavior = false
openlastproject = false
loopmarkermode = "dual"
configured = true
disablebackup = false
nanhandler = true
nommpz = false
recentfiles = [
	"data:/projects/templates/default.mpt",
	"data:/projects/second_file.mmpz"
]

[audioengine]
samplerate = 44100
framesperaudiobuffer = 256
audiodev = "SDL (Simple DirectMedia Layer)"
mididev = "ALSA-Sequencer (Advanced Linux Sound Architecture)"
# ...

YAML

This format is widely used and I am including it here because I know in my heart it is relevant to this discussion, but I can't stand it. It's better than XML, I guess.

# Example YAML config
version: 1.3.0-alpha.1.956+f5688e9
configversion: 3
language: en
sololegacybehavior: false
openlastproject: false
loopmarkermode: dual
configured: true
disablebackup: false
nanhandler: true
nommpz: false
recentfiles:
  - data:/projects/templates/default.mpt
  - data:/projects/second_file.mmpz
audioengine:
  samplerate: 44100
  framesperaudiobuffer: 256
  audiodev: SDL (Simple DirectMedia Layer)
  mididev: ALSA-Sequencer (Advanced Linux Sound Architecture)
# ...

KDL

This format isn't as widely used as the others, but I personally think it's neat.

// Example KDL config
version "1.3.0-alpha.1.956+f5688e9"
configversion 3
language en
sololegacybehavior #false
openlastproject #false
loopmarkermode dual
configured #true
disablebackup #false
nanhandler #true
nommpz #false
recentfiles "data:/projects/templates/default.mpt" "data:/projects/second_file.mmpz"

audioengine {
	samplerate 44100
	framesperaudiobuffer 256
	audiodev "SDL (Simple DirectMedia Layer)"
	mididev "ALSA-Sequencer (Advanced Linux Sound Architecture)"
}
// ...

Thoughts?

Contributor guide

No contributing guide indexed for this repository

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

No implementation files, tests, or entry points are identified. Start by reviewing how LMMS currently stores configuration in XML and the proposed format options; done would require a decided replacement format and an agreed migration scope.

Written by the indexing model from the issue text.

Assessment

Tech stack
xml, yaml
Domain
desktop
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.