Petrichor for macOS: offline playback with broad audio support
An offline macOS music player
At a glance
- What is it?
- Petrichor is an MIT-licensed Swift music player for macOS that focuses on local libraries, internet radio, playlists, lyrics, and broad file-format compatibility. It is a reasonable fit for users who want local playback without relying on a streaming service, while DRM files, tracker modules, and some other formats remain outside its scope.
- Who is it for?
- Petrichor is a good fit for a macOS user who wants a local-first music player with broad format support, internet radio, and playlist automation. It is less suitable for DRM-protected media, audiobook libraries, MIDI or tracker music, and users who need documented rollback procedures.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 7 days ago.
- What is it written in?
- Mainly Swift, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 20, 2026, and from our analysis. They are not legal advice.
Editorial analysis
Petrichor as a local-first macOS library player
Petrichor addresses a specific gap between basic system audio players and applications centered on online music catalogs. It is designed for people who already have music stored on a Mac and want to map folders, browse those files, organize them into playlists, and control playback from a native macOS interface. The README describes folder mapping, organized library views, folder browsing, right-click navigation by album, artist, or year, and a sidebar that can hold nearly any item. Those features make the application more of a personal library manager than a single-purpose audio window.
The project is also explicit that metadata quality affects results. Petrichor relies on track metadata for much of its behavior, so a folder containing poorly tagged files may produce a less useful library view than a collection with consistent album, artist, year, and track information. The application is for local audio ownership and desktop listening. It is not presented as a download service, a DRM remover, or a general-purpose media conversion suite. Internet Radio, lyrics, and Last.fm scrobbling are connected features, but the central product remains offline playback.
What Petrichor's playback engine accepts
The most concrete technical differentiator is the breadth of the import and playback list. The README lists 46 file extensions, including MP3, AAC, ALAC, FLAC, Ogg Vorbis, Opus, WAV, AIFF, APE, WavPack, DSD, WMA, AC-3, DTS, CAF, Matroska Audio, and several less common lossless formats. The in-app list is generated from the playback engine itself, so the documented list is intended to follow the engine used by the current build. Petrichor reads the actual encoding rather than inferring it solely from an extension, which is why the README says the Lossless badge reflects the file's encoding.
There are firm boundaries. DRM-protected files such as `.m4p`, `.aa`, and `.aax` are not supported. Audiobook containers, RealAudio, MIDI, and tracker modules are also excluded. Starting with version 1.7, the project no longer imports MOD, IT, S3M, and XM files. This matters during migration because a user upgrading from 1.6.x may need to remove or handle those files separately. The format list should be checked against a real collection before moving the library exclusively to Petrichor.
Folders, metadata, playlists, and the listening flow
Based on the repository layout and README, Petrichor separates application code into `Application/`, `Core/`, `Managers/`, `Models/`, `Views/`, and supporting directories. That structure is consistent with a desktop application that coordinates library management, playback state, metadata models, and user interface components. The README does not publish a detailed internal data-flow diagram, so the exact class-level sequence is not documented here.
The user-facing flow is clearer. A user maps music folders, reviews the resulting library, selects tracks or an organized view, and manages the queue through drag and drop. Playlists can be created, imported, and exported. Smart playlists can use ordinary conditions, negative conditions, and regular expressions. This gives Petrichor more library logic than a simple file-list player. The trade-off is that the quality of this layer depends on accurate file metadata. Internet Radio can also be streamed, and saved stations can be organized into collections, but that part extends beyond strictly offline use.
Downloading Petrichor and starting a first listening session
The README does not provide Homebrew, package-manager, source-build, or command-line installation instructions. It directs users to the GitHub releases page through the macOS download link. Therefore, the only documented installation path is to obtain the release application from the project's releases and install or open the resulting macOS app according to the system prompts. No undocumented flags, package names, or environment variables should be added to this process.
After opening Petrichor, the first useful sequence is to map the folder that contains the music, wait for the library to appear, and inspect the album, artist, year, and track metadata. Select a track to begin playback, then use the queue if more than one item is needed. The README also documents a miniplayer, immersive mode, menubar and dock controls, dark mode, and native macOS integration. A first-use check should confirm that the intended output route is correct and that the library has not been misclassified because of missing tags. The repository does not document a first-run wizard, a command-line player, or a headless mode.
Playback controls that go beyond queueing
Petrichor documents several playback features that affect the listening experience rather than just file selection. Gapless playback and Crossfade are available, along with ReplayGain volume normalization, an Equalizer, Spatial Audio, and AirPlay 2 output. These options are relevant to local libraries where files may have different loudness levels or where the user wants continuous playback between tracks. The README does not state which controls are global, which are per-track, or how persistence behaves, so those details need verification in the current release.
The application also documents synced lyrics for a playing track and the ability to download missing lyrics. That download action requires an external source and therefore is not fully offline even though the player itself is described that way. Last.fm scrobbling is another connected feature. Shortcuts, an Automation API, and Siri support are listed, but the README excerpt does not publish the API schema or individual automation actions. For adoption, the useful distinction is between audio playback, which is local, and lyrics or scrobbling, which can require network access and external service configuration.
Petrichor against Apple Music and a file-based alternative
Petrichor is centered on folders and files that the user already owns or stores locally. Petrichor does not document subscription plans, a streaming catalog, or proprietary DRM playback, so it is not a direct replacement for a catalog service.
Petrichor adds mapped folders, playlists, smart playlist rules, metadata navigation, queue editing, radio, and macOS integration. The tradeoff is operational complexity. Petrichor exposes more ways to organize a collection, but its behavior depends on tags and its documented feature set includes exclusions that users of a simple player may not encounter.
Maintenance, upgrades, and MIT licensing
The repository is not archived, and its last push was on 2026-10-16. The repository also records releases v1.7.2 on 2026-10-02, v1.7.1 on 2026-09-21, and v1.7.0 on 2026-09-03. Those facts indicate recent release activity around the current project state. They do not, by themselves, establish compatibility with every future macOS release or prove that every bug is fixed.
The README links automatic in-app updates as completed in v1.0.0. It does not document rollback steps, release-channel policy, migration prompts, or compatibility guarantees. Upgrading is therefore a release-management decision, not a documented automated workflow that can be assumed. The project uses the MIT License. That identifies the license associated with the repository, but it does not by itself answer questions about bundled audio, artwork, user media, third-party services, or distribution obligations. The repository's `LICENSE` and `ACKNOWLEDGEMENTS.md` files are the appropriate project-specific references for those questions.
Editorial conclusion
Petrichor is a good fit for a macOS user who wants a local-first music player with broad format support, internet radio, and playlist automation. It is less suitable for DRM-protected media, audiobook libraries, MIDI or tracker music, and users who need documented rollback procedures. Verify the exact file formats in your collection, metadata quality, and the behavior of internet-connected features such as lyrics and Last.fm scrobbling before adopting it.
Frequently asked questions
Does Petrichor play music offline on macOS?
Yes. Petrichor is described as an offline music player for macOS, with local folder mapping, library browsing, playlists, and playback controls. Internet Radio, lyric downloads, and Last.fm scrobbling can involve network access even though local playback is the main focus.
What audio formats does Petrichor support?
The README lists 46 extensions, including MP3, FLAC, ALAC, Opus, Ogg Vorbis, WAV, DSD, WMA, CAF, and Matroska Audio. It excludes DRM-protected files, audiobook containers, tracker modules, RealAudio, and MIDI.
How do I install Petrichor on a Mac?
The README points users to the project's GitHub releases page and provides a macOS download link. It does not document Homebrew installation, a command-line build, or source-compilation steps.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/kushalpandya-petrichor)Was this useful?