An open standard for your music collection

Core 1.0 is a draft, open for review

Take your music and your lists from any app to any other, and lose nothing.

1Sourceswhere music livesPlateau by Andrea Belfi is in12 places. Four of them:Spotifystreaming, twiceBandcampboughtTidalstreamingFolderDownloadsAlso YouTube Music, iTunesand Rekordbox.2Homekeeps the collectionPlateauAndrea BelfiITEMStreamnoneBoughtdigitalStreamnoneFilefile+ 8 more copiesDanza ExternaContains MultitudesLISTorderedHipnoza4trk_…UZXUVQ5trk_…1RZTTg6trk_…FZHN04A list holds no music.It points at items.This one is on Spotifyand on Tidal.3Appsconnect through AccessMusic playersees everythingLabel watchercan only addDJ appsees one list4One filetake it anywherecollection.omc.ndjson{"type":"item","title":"Plateau","copies":[ 12 ]}What an app doesn't understand,it keeps and writes back.1Sources4 of the 9 that have PlateauSpotifyBandcampTidalFolderPlateauAndrea BelfiITEM+ 8 more copiesStreamnoneBoughtdigitalStreamnoneFilefileDanza ExternaContains MultitudesLISTHipnozaordered4 …UZXUVQ5 …1RZTTg6 …FZHN042Homekeeps the collectionMusic playersees everythingLabel watchercan only addDJ appsees one list3Appsconnect through Accesscollection.omc.ndjson{"type":"item","title":"Plateau","artists":["Andrea Belfi"],"copies":[ 12 ]}4One filetake it anywhereWhat an app doesn't understand,it keeps and writes back.
Modules add the rest on top of the core

How it all flows. From one real collection: Plateau by Andrea Belfi is in twelve places on nine sources. The home keeps it as one item with a copy for each, and the playlist Hipnoza points at it. Apps connect through Access, and the whole collection moves as one file.

Why

Moving between music apps loses things

Switch music apps and you lose things. Titles and artists come along. The order of your playlists, when you added each song, your ratings and your cue points stay behind.

It is also rare for one app to see your whole collection. Albums you bought on Bandcamp, records on your shelf, a folder of FLAC files and the songs you liked on a streaming service all live in different places, with no shared idea of what you have.

Open Music Collection (OMC) is one format for all of it. Take your collection anywhere. A new app starts with what you have, not with nothing.

How it works

Four kinds of record in one file

The core is small. An exporter that knows each track's title, artists and one link is already producing a valid file.

Item
A song or an album you keep: title, artists, identifiers such as ISRC, your rating and your notes.
Copy
That item on one source, with the source's own id, and whether you own it.
Source
Anywhere music lives: a streaming account, a store, a folder, a server at home.
List
Playlists, sets, tags, folders and smart lists. They hold items, so a playlist moves between platforms intact.
anna.omc.ndjsonNewline-delimited JSON, one record per line
header{"type":"omc","version":"1.0","generated_at":"2026-10-18T09:30:00Z"}
source{"type":"source","id":"s1","platform":"spotify","name":"Spotify","account":"31anna0example"}
source{"type":"source","id":"s2","platform":"bandcamp","name":"Bandcamp"}
item{"type":"item","id":"i1","kind":"recording","title":"Night Drive","artists":["Mira Holt"],"ids":{"isrc":"QZES72600001"},"copies":[{"source":"s1","ref":"0exampleTrackId000001"},{"source":"s2","ref":"2854920395","ownership":"digital"}]}
list{"type":"list","id":"l1","name":"Late sets","ordered":true,"entries":[{"item":"i1"}]}

Because each record sits on its own line, a collection of a hundred thousand songs can be written and read as a stream. What can be played right now is never stored: that depends on accounts and licensing, so the app asks the source when you press play.

Apps keep what they don't understand

When an app reads data it doesn't know, it keeps it and writes it back unchanged. That is how a DJ app's cue points survive a trip through a streaming app, and how a field added next year survives an app written today. The rule in the core

"ext": {
  "org.openmusiccollection.dj": {
    "cues": [{ "at_ms": 32000, "label": "Drop" }]
  },
  "com.example.moods": {
    "mood": "late night"
  }
}

New sources describe themselves

A label's store or a server someone runs at home publishes a small descriptor saying what it can do. An app that has never heard of it can still show its tracks and link to them, and play from it when both sides support streaming.

// /.well-known/omc-source.json
{
  "omc": "1.0",
  "platform": "music.anna.example",
  "name": "Anna's own server",
  "homepage": "https://music.anna.example",
  "capabilities": ["link", "media.stream"]
}

What it covers

Several apps, one collection

Your collection has one home: the app or service that keeps it. Other apps connect to it, each doing what it is good at, and you decide what each one can see and change. Each leaves the rest as it found it. Homes, apps and sources

Apps that only add

Some apps only bring music in: one that follows the labels and people you like, or one that finds music links in your email. You let them add music to your collection and nothing more. They never see what you already have.

Access: apps that only add

Feeds any reader can open

Artists, labels and people publish what's new as an ordinary JSON Feed or RSS feed, with each release inside. A feed reader shows it; a music app keeps a release in one step. Your home can publish one of your lists as a feed, so friends can follow you like a label.

Feeds

Sending music to someone

Attach a small .omc.ndjson file to an email, or send it to a friend's share address. Their home adds it to their collection, says who sent it, and skips what they already have. Music from strangers is held until they let it in.

Share

Records and albums

A collection can be all albums: a shelf of vinyl, saved albums, a wantlist. A copy can say its format, the side and position of a track (A1, B2), the condition of record and sleeve, and where it's kept. The Collector module adds what you paid, and records you sold or lent.

Recordings and releases · Collector

DJ preparation and mixes

Cue points, loops and beat grids go with the audio they were set on, a file or a stream, and play counts come from what you actually played. A mix or a radio show is a recording with a tracklist of the songs in it, including the ones nobody has identified yet.

DJ

Combining without duplicates

Import a collection from another app and you still have one collection. Ids only mean something inside their own collection, so the home matches records by what they contain: the same Spotify track, the same ISRC or UPC. A match by title alone is only a suggestion for you to confirm.

Combining collections

Who it's for

Start with an export file

People who love music

When an app you use offers an OMC export, you can keep a copy of your collection that doesn't depend on that app. With the Folder module, that copy can be a folder of notes on your own disk.

App developers

Import OMC files so new users arrive with their collection. Export it so people trust you with their data. There is a JSON Schema and a validator, and the validator also checks that your app keeps unknown data across a round trip.

Platforms

Data portability laws such as the GDPR already ask you to let people take their data with them. Making that export use the OMC file format is a small first step. The Access protocol for apps, and streaming through other apps, can come later.

Adoption levels for services
LevelThe serviceDefined in
0 · ExportLets people download their collection in the OMC file formatCore
1 · ReadPublishes a descriptor and lets apps read collections with the person's consentAccess
2 · WriteLets apps change lists and favouritesAccess
3 · MediaLets apps stream, preview or download through itDelivery

Status

A draft, and a good time to weigh in

Core 1.0 is a draft for review. The modules are earlier drafts still.

Read the specification, run the validator on an export of your own, and tell us where it doesn't fit your data. Feedback changes the most now, before anything is final. Changes are made as OMC proposals: pull requests to the specification repository.

Tangle started the project, is building the first implementation and looks after the specification for now. The standard itself belongs to nobody: the specification is CC BY 4.0, and the schemas and tools are Apache 2.0.

Why not CSV, XSPF or JSPF?
Those describe a playlist. OMC describes a whole collection: every source, what you own, your favourites, where metadata came from, and data from apps that don't exist yet.
Do I need ISRCs or MusicBrainz ids?
No. They make matching between services much more reliable, so include them when you have them, but none is required.
Does it move audio files around?
No. A collection holds references and links. Playback and downloads always go through the source, on its terms and through your account there.