Set up your config
MLabel cannot do anything without a config. It is the file that says what your data looks like and what you are being asked to record.
Getting one
Section titled “Getting one”If someone is running a labeling project for you, they will give you a .jsonc file.
Save it somewhere you will find it again — next to the data you are labeling is a good
default.
If you are setting up the project yourself, start from the annotated example in the
repository, examples/config.jsonc,
and read Anatomy of a config. Then check your work without launching the app:
pnpm validate path/to/your-config.jsoncLoading one
Section titled “Loading one”

There are four ways, in the order MLabel tries them:
- A config next to the executable. On startup MLabel looks beside its own executable
for a file named
config.jsonc,mlabel.config.jsonc, ormlabel.jsonc, in that order. If it finds one, it loads it and you never see the config screen. This is how you ship the app and the config together. - The most recent config, if there was no adjacent one. MLabel remembers the last config you opened and reloads it on the next launch.
- Drag and drop. Drop a
.jsoncanywhere on the window. - The picker. Click Choose config and select the file.
If the config is rejected
Section titled “If the config is rejected”

MLabel refuses to load a config it does not fully understand, and lists every problem at once rather than stopping at the first. Each one carries a line, a column and the path to the offending key.
The most common causes are a misspelled key (every object is strict — unknown keys are
errors, not silently ignored) and a missing or wrong version. See
Every error explained for the full catalogue.
Editor support
Section titled “Editor support”Point your config at the published JSON Schema and any editor that understands JSON Schema will autocomplete keys, offer only the values that are legal in context, and underline mistakes as you type:
{ "$schema": "https://mlabel.vlad.gg/mlabel.schema.json", "version": 2, // …}This is worth doing even for a config someone else wrote — it turns “why won’t this load” into a squiggle under the exact character.