Home Entertainment Show HN: Sol, my macOS music player and jukebox app, is...
Entertainment

Show HN: Sol, my macOS music player and jukebox app, is now free and open source

Key Points

A native Mac music player for people who love their music library. Point it at your folders and it plays your files right where they live. Nothing moved, nothing converted, nothing locked in.

A native Mac music player for people who love their music library. Point it at your folders and it plays your files right where they live. Nothing moved, nothing converted, nothing locked in. There is no paid tier, no subscription, no trial, no in-app purchase and no account. Every feature is in every copy. Download it from Releases, a signed and notarized build, or build it yourself from this repository. Sol tells you when a new version is out and never nags about anything else. There is a Homebrew cask too: brew install --cask fulltimefeline/tap/sol The classic pane browser filing by library, genre, artist and album. A grid view that lays your artwork out as a wall, grouped by artist, letter or year with an A to Z rail to skim. An album carousel for flipping through a collection like a record crate. A multi-pane view, and a resident mini player. Built for real collections: browsing stays instant at hundreds of thousands of tracks. One search bar covers songs, albums, playlists and podcast episodes across every library and server at once, and it reaches every tag you have, down to catalog number and filename. FLAC, ALAC, WAV, AIFF, MP3, AAC, Ogg Vorbis and Opus, plus the deep cuts: DSD, Monkey's Audio, Musepack and Wave64. Cue sheets work both as a sidecar .cue and embedded inside the file itself. Gapless playback, crossfade, a full equalizer with presets, and ReplayGain levelling with clipping protection. Match sample rate and bit depth switches your DAC to each file's own rate and depth. Bit-perfect output sends the file's own bits to your DAC untouched when the device supports it, and falls back honestly when it does not. Watch as many folders as you like across internal disks, external drives, network shares and iCloud Drive. Offline libraries are detected instantly, greyed gracefully, and rescanned by themselves when they come back. Stream from your own Navidrome, Subsonic or OpenSubsonic server right beside your local files, with two way sync of playlists, favourites and ratings, and downloads for offline listening. Podcasts with subscriptions, transcripts, chapters, Voice Boost for quiet talkers and one click import from Apple Podcasts. Internet radio with station artwork and live song titles. Lyrics that follow along line by line, a full screen visualizer, and karaoke. Sol DJ builds an endless, radio-style mix that favours loved tracks, surfaces overlooked discoveries and avoids repeats. A real metadata editor: thirty fields written into the files themselves, on every format Sol can tag, artwork included. Edit many files at once, find and replace with regular expressions, and look tags up on MusicBrainz. Ratings and loves go into your files' actual tags, so they are readable by other players and portable forever. Smart playlists with nested rule groups across more than thirty fields, a duplicates finder, play statistics, and an import organizer that renames and files new music by your own template. Real AppleScript support and sixteen Shortcuts actions. Media keys, Dock transport controls and system Now Playing integration. Last.fm scrobbling with loved track sync. Discord Rich Presence through the free Sol Activity companion. An optional local control API for companion apps, stream decks and your own automations. Translated into 34 languages. No telemetry, no analytics, no account. - macOS 14 or later - Xcode 26 or later, for the macOS 26 SDK. Swift 6 language mode with full strict concurrency checking - XcodeGen, brew install xcodegen project.yml is the source of truth and the Xcode project is not in version control, so xcodegen generate is a required first step rather than an optional one. Do not edit the generated project directly. Change project.yml and regenerate. This step is optional. A fresh checkout builds and runs as it is. Config.xcconfig defaults the Last.fm credentials to empty, LastFM.configured returns false, and the scrobbling UI reports itself unavailable. Nothing else in the app is affected. To enable scrobbling, register an application at last.fm/api/account/create, then: cp Secrets.example.xcconfig Secrets.xcconfig Paste the two values in. Config.xcconfig pulls it in with an optional include, so the values override the empty defaults when the file is there and are ignored when it is not. Secrets.xcconfig is gitignored, so the keys never reach the repository. xcodegen generate open Sol.xcodeproj Or from a terminal: xcodebuild -project Sol.xcodeproj -scheme Sol -configuration Debug build One Swift package, resolved automatically: SFBAudioEngine, a trimmed fork of sbooth/SFBAudioEngine with the LGPL decoders removed, pinned to a revision. That fork's own history records what differs from upstream. Everything else is vendored as static libraries in Sol/Vendor/lib with headers in Sol/Vendor/include : TagLib, Monkey's Audio, Musepack, Ogg, Vorbis and opencore-amr. They are checked in, so there is nothing to fetch or build. project.yml the real project definition Sol/App/ model, playback, library, tagging, integrations Sol/Views/ SwiftUI and AppKit views Sol/Vendor/ vendored static libraries and headers Sol/Resources/ the string catalog, 34 languages docs/ screenshots used by this README Sol/App holds no references to Sol/Views outside the composition root in SolApp.swift , and services take their dependencies as injected closures rather than reaching back into the model. Please keep it that way. - Debug builds define SOLDEBUG , which enables the/debug/probe and/debug/snapshot endpoints on the local control server. Release never defines it. - Strict concurrency is fully on. Each @unchecked Sendable andnonisolated(unsafe) carries a written justification of the invariant that makes it safe. If you add one, explain it. - There is no test target yet. LibraryStore.slots ,TagWriter ,CueParser ,FeedParser ,ReplayGain andTagReader are pure and deterministic, and are the obvious place to start. Discord Rich Presence needs a small companion app, because Discord's IPC socket cannot be reached from inside the App Sandbox. It is free, GPL-3.0, and lives in its own repository. Download it here, or brew install --cask fulltimefeline/tap/sol-activity . Website · Sol Activity · Sol API · Acknowledgements · Privacy Sol is free software under the GNU General Public License v3.0 or later. You may use, study, modify and redistribute it, and any fork you distribute has to come with its source under the same terms. Bundled third party components keep their own licences, all of them GPL-3.0 compatible. See THIRD-PARTY.md for the list and for why the version is 3.0 rather than 2.0.
Sol (PERSON) Mac (ORG) Homebrew (ORG) ALAC (ORG) WAV (ORG) AIFF (ORG) AAC (ORG) Ogg Vorbis (ORG) Opus (ORG) DSD (ORG) Monkey's Audio (ORG) Musepack (PERSON) iCloud Drive (ORG) Navidrome (ORG) OpenSubsonic (ORG)
Originally published by Hacker News Read original →