Reclaim your music

Spiral is the modern library for people who want to own their stuff in the post-covid era.

Available for Mac, Windows & Linux

Spiral music library showing a track list with album art, ratings, and a now-playing barSpiral music library showing a track list with album art, ratings, and a now-playing bar

The platforms got loud: ads, price hikes, limited licenses, a feed that never stops.

Convenience was cool at first

Until the clown show came...

Jacob Marlowe, profile 1 of 2

Subscribe today

Keep the platform healthy

Your monthly subscription is increasing from $14.99 to $16.99. This is so we can continuously deliver TONS of value to you.

Entitles you to a limited time license. Digital licenses are limited. They are timed

Terms of purchasePurchasing digital goods at full price absolutely does not entitle you whatsoever to any idea of ownership, and if you thought it did you're being unreasonable, and quite frankly a spoiled brat. (opens in a new tab)
In addition, you agree to be enrolled in a companion subscription that can only be canceled by mailing a hand written note in cursive. You must write it on a printed out version of our template, on bond paper, notorized, and mailed between the hours of 1 and 2pm on a Tuesday. Once received, we will reach out to you by phone, and consider if we can continue with the cancellation.

Spiral is the other way. Download the free, open-source app, keep your files, and nobody watches what you play.

Take control

with software that supports your relationship to music, not the other way around.What I mean is your relationship to music isn't exploited by software. Not sure if this subheading comes off that way, but it sounds provocative, so I'm keeping it.

For casuals & collectors

Most of the features you need, and then some

  • Playlists
  • Bulk tag editing
  • Gapless playback
  • Crossfade playback
  • CD ripping & playback
  • Format conversion
  • Lyric fetch & display
  • Metadata fetching
  • Automatic file organization
  • Equalizer
  • Artist-centric browsing

Local-first

Privately manage and listen to your own files.

No remote behavior tracking, no invisible data collection, no ads, not even automated error reporting. Have confidence in your own home.

Support a broader ecosystem

Buying music you'll love forever supports artists, local retail, and adds meaning to your media.

Sound & Color. Music transcends audio. Bring personality to your listening experience with customizations. Skin mode, including classic Windows Media Player ports; Canvas2D and Three.js visualizers; themes; and a studio kit coming soon, with tooling and APIs for themes, visualizers, skins, and future customizations.

Sound & Color (opens in a new tab)

Music transcends audio. Bring personality to your listening experience with customizations.

Player Skins

Switch to a player focused experience with skin mode. We're even porting a selection of iconic Windows Media Player skins!

Visualizers

Composable scenes that move to the music, powered by canvas, WebGL, or video content.

Themes

Dress Spiral in a color palette that suits you.

Spiral in the Obsidian theme, a dark library with a cool blue accent

Coming soon

Studio Kit

We're finalizing the tooling and APIs to create themes, visualizers, skins, and future customizations.

Paused

[  { "onClick": [{ "action": "player.stop" }] },  {    "onClick": [{ "action": "player.play" }],    "visibleWhen": "player.notPlaying"  },  {    "onClick": [{ "action": "player.pause" }],    "visibleWhen": "player.isPlaying"  },  { "onClick": [{ "action": "player.previousTrack" }] },  { "onClick": [{ "action": "player.nextTrack" }] }]
19-2000Gorillaz
export function create() {  return {    render(ctx, { size, audio, trackMetadata }) {      const [from, to = from] = trackMetadata.artColors;      ctx.clearRect(0, 0, size.width, size.height);      if (!audio.isPlaying) return;      ctx.strokeStyle = from;      ctx.lineWidth = 2;      ctx.shadowColor = to;      ctx.shadowBlur = 24 * audio.overallEnergy;      ctx.beginPath();      audio.waveform.forEach((v, i, all) => {        const x = (i / all.length) * size.width;        ctx.lineTo(x, size.height * (0.5 + v * 0.4));      });      ctx.stroke();    },  };}

Abyss

Moonlit indigo depths and luminous aqua.

Listen
{  "id": "abyss",  "name": "Abyss",  "author": "Spiral",  "description": "Moonlit indigo depths and luminous aqua.",  "tokens": {    "color-bg": "#0a1220",    "color-text-primary": "#eef1f8",    "color-accent": "#5ecfd4",    "color-danger": "#e8945a",    "font-ui": "'Outfit', system-ui, -apple-system, sans-serif"  }}
Design the look and behavior of skins through JSON.

Keep the files & the player

The only noise is your own.

Available for Mac, Windows & Linux