<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
    <channel>
        <title>Armpit on Pierre</title>
        <link>https://ulm0.com/en/tags/armpit/</link>
        <description>Recent content in Armpit on Pierre</description>
        <generator>Hugo -- gohugo.io</generator>
        <language>en</language>
        <lastBuildDate>Sun, 09 Aug 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://ulm0.com/en/tags/armpit/index.xml" rel="self" type="application/rss+xml" /><item>
            <title>Armpit: a native Navidrome client for iPhone, Mac, Apple TV and Watch</title>
            <link>https://ulm0.com/en/p/armpit-a-native-navidrome-client-for-iphone-mac-apple-tv-and-watch/</link>
            <pubDate>Sun, 09 Aug 2026 00:00:00 +0000</pubDate>
            <guid>https://ulm0.com/en/p/armpit-a-native-navidrome-client-for-iphone-mac-apple-tv-and-watch/</guid>
            <description>&lt;img src=&#34;https://ulm0.com/p/armpit-un-cliente-de-navidrome-nativo-para-iphone-mac-apple-tv-y-watch/cover.png&#34; alt=&#34;Featured image of post Armpit: a native Navidrome client for iPhone, Mac, Apple TV and Watch&#34; /&gt;&lt;p&gt;Armpit is a native music player for your Subsonic, OpenSubsonic or Navidrome server. It runs on iPhone, iPad, Mac, Apple TV and Apple Watch, on a single purchase. No accounts, no ads, no tracking.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-it-is&#34;&gt;&lt;a href=&#34;#what-it-is&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;What it is&#xA;&lt;/h2&gt;&lt;p&gt;A native SwiftUI app, written in Swift 6 with strict concurrency, with exactly one third-party dependency: the &lt;a class=&#34;link&#34; href=&#34;https://github.com/dimitris-c/AudioStreaming&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;AudioStreaming&lt;/a&gt; audio engine. Everything else is Apple frameworks.&lt;/p&gt;&#xA;&lt;p&gt;The look is deliberate: mono type, hard controls, a lot of orange. If you like Teenage Engineering boxes, you&amp;rsquo;ll get the idea.&lt;/p&gt;&#xA;&lt;p&gt;You connect to your server, browse your library, and it plays. The music is yours and lives on your server; the app only talks to it.&lt;/p&gt;&#xA;&lt;h2 id=&#34;why-it-exists&#34;&gt;&lt;a href=&#34;#why-it-exists&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Why it exists&#xA;&lt;/h2&gt;&lt;p&gt;If you already run Navidrome, the weak link is usually the client. The ones out there are either web wrapped in an app, or native but halfway: no real EQ, gaps between tracks of the same album, downloads that aren&amp;rsquo;t really usable, no watch app, no Apple TV.&lt;/p&gt;&#xA;&lt;p&gt;Armpit is the attempt at a client that matches the server: in-process audio engine, real gapless, ReplayGain, offline that works, and the same app on every screen in the house.&lt;/p&gt;&#xA;&lt;p&gt;It&amp;rsquo;s also a native rewrite: it used to be a React Native app. The current version shares nothing with that one.&lt;/p&gt;&#xA;&lt;h2 id=&#34;platforms&#34;&gt;&lt;a href=&#34;#platforms&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Platforms&#xA;&lt;/h2&gt;&lt;p&gt;One purchase covers everything — it&amp;rsquo;s a universal purchase under a single App Store record:&lt;/p&gt;&#xA;&lt;table&gt;&#xA;&#x9;&lt;thead&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;Platform&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;th&gt;What runs there&lt;/th&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/thead&gt;&#xA;&#x9;&lt;tbody&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;iOS · iPadOS 26+&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;The full app, plus CarPlay&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;macOS 26+&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Desktop app: full-window layout, real menu bar, keyboard shortcuts&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;tvOS 26+&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;The full player on the big screen, with Top Shelf&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&#x9;&#x9;&lt;tr&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;watchOS 26+&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&#x9;&#x9;&lt;td&gt;Standalone watch app: streams and plays offline without the phone&lt;/td&gt;&#xA;&#x9;&#x9;&#x9;&lt;/tr&gt;&#xA;&#x9;&lt;/tbody&gt;&#xA;&lt;/table&gt;&#xA;&lt;p&gt;The interface is localized in English, Spanish, German and French.&lt;/p&gt;&#xA;&lt;h2 id=&#34;what-you-need&#34;&gt;&lt;a href=&#34;#what-you-need&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;What you need&#xA;&lt;/h2&gt;&lt;ul&gt;&#xA;&lt;li&gt;A reachable &lt;strong&gt;Subsonic, OpenSubsonic or Navidrome&lt;/strong&gt; server.&lt;/li&gt;&#xA;&lt;li&gt;A device on iOS/iPadOS 26, macOS 26, tvOS 26 or watchOS 26.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;That&amp;rsquo;s it. There&amp;rsquo;s no Armpit account to create, because no such thing exists.&lt;/p&gt;&#xA;&lt;h2 id=&#34;first-run&#34;&gt;&lt;a href=&#34;#first-run&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;First run&#xA;&lt;/h2&gt;&lt;p&gt;On first launch you enter the server URL, username and password, plus a display name if you want one. The connection is validated before letting you in, so if you fat-fingered something you find out right there instead of three screens later.&lt;/p&gt;&#xA;&lt;p&gt;Credentials go into the Keychain. The cleartext password is never stored or transmitted: auth uses Subsonic&amp;rsquo;s salted-token scheme.&lt;/p&gt;&#xA;&lt;h2 id=&#34;whats-inside&#34;&gt;&lt;a href=&#34;#whats-inside&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;What&amp;rsquo;s inside&#xA;&lt;/h2&gt;&lt;details&gt;&#xA;&lt;summary&gt;Library and browsing&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Library tabs: Favorites, Albums, Artists, Songs, Genres, Radio, Podcasts and Downloads. Each remembers its own sort option, and the ones you don&amp;rsquo;t use can be hidden from Settings.&lt;/li&gt;&#xA;&lt;li&gt;Detail screens for album, artist (biography, top songs, similar artists, discography), genre, podcast and playlist.&lt;/li&gt;&#xA;&lt;li&gt;Search across artists and songs, with recent-search history.&lt;/li&gt;&#xA;&lt;li&gt;Star and rate items; both reflect back into the Favorites tab.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Playback&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;In-process audio engine: progressive playback of local files and HTTP streams, without the &amp;ldquo;download first, play later&amp;rdquo; stall.&lt;/li&gt;&#xA;&lt;li&gt;Real &lt;strong&gt;gapless&lt;/strong&gt;: the next track is prefetched and queued in the engine before the current one ends.&lt;/li&gt;&#xA;&lt;li&gt;Radio and podcasts run through the same engine.&lt;/li&gt;&#xA;&lt;li&gt;Queue with shuffle, repeat (off / all / one), next, previous, jump-to and scrub.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Sleep timer&lt;/strong&gt; by minutes or until the end of the track.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Autoplay&lt;/strong&gt;: when the queue runs dry it extends with similar songs, falling back to random.&lt;/li&gt;&#xA;&lt;li&gt;Scrobbles now-playing and finished-track events.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;EQ and volume&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A 10-band parametric equalizer inside the audio graph, not a filter bolted on top. Changes are audible instantly.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;ReplayGain&lt;/strong&gt; per track and per album, attenuate-only, with clipping prevention. Albums play the way they were mastered, without volume jumps between songs.&lt;/li&gt;&#xA;&lt;li&gt;Loudness is the system volume: the hardware buttons and Control Center own it, like any decent audio app.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Lock screen, AirPlay and lyrics&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Metadata and artwork on the lock screen and in Control Center.&lt;/li&gt;&#xA;&lt;li&gt;Remote commands: play, pause, next, previous and scrub.&lt;/li&gt;&#xA;&lt;li&gt;Recovers cleanly from audio-session interruptions and route changes — say, AirPods connecting mid-song.&lt;/li&gt;&#xA;&lt;li&gt;Native AirPlay / output route picker.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Synced lyrics&lt;/strong&gt; that scroll with playback when the server provides them, falling back to plain lyrics or nothing.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Downloads and offline&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Download tracks with their cover art; if the file is on disk, that&amp;rsquo;s what plays.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Offline Mode&lt;/strong&gt; shows only downloads and suppresses live queries.&lt;/li&gt;&#xA;&lt;li&gt;Removing a download reclaims its file and any orphaned cover art.&lt;/li&gt;&#xA;&lt;li&gt;Streamed tracks are cached to disk too, with size-capped FIFO eviction.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Playlists and smart lists&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A lists view with your server playlists and local &lt;strong&gt;smart lists&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Create, rename and delete playlists, and add or remove tracks.&lt;/li&gt;&#xA;&lt;li&gt;Smart lists are built from rules over data the server can answer: artist, genre, starred, random, recent and frequent. They materialize back to your server.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Apple Watch&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A standalone app, not a remote: download music to the watch and play it with no phone nearby.&lt;/li&gt;&#xA;&lt;li&gt;Direct streaming from the watch when there&amp;rsquo;s a network.&lt;/li&gt;&#xA;&lt;li&gt;Its own downloads screen to manage what you&amp;rsquo;re carrying.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Apple TV and CarPlay&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;On Apple TV it&amp;rsquo;s the full player, with its own library browsing, search, queue and settings.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Top Shelf&lt;/strong&gt;: recently played and newly added albums surface on the Apple TV home screen shelf.&lt;/li&gt;&#xA;&lt;li&gt;In the car, CarPlay with the library and playback controls.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Personalization&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Light and dark theme, plus a curated set of accent colors applied app-wide, live.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Dynamic app icon&lt;/strong&gt; that follows the accent and light/dark selection, without the system alert every time it changes.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;Per-network streaming profiles&lt;/strong&gt;: one for Wi-Fi, one for cellular and one for downloads, each with its own format and bitrate. On metered connections the cellular profile is used automatically.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;iCloud and sharing&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;iCloud sync (key-value store) of preferences, EQ presets and the saved server, across iPhone, iPad and Mac.&lt;/li&gt;&#xA;&lt;li&gt;Explicit actions to restore from iCloud, delete the iCloud data, or push this device&amp;rsquo;s settings over the synced ones.&lt;/li&gt;&#xA;&lt;li&gt;Sharing through the server&amp;rsquo;s share API, which copies a link. If the server reports sharing as unsupported, the option doesn&amp;rsquo;t show up.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;details&gt;&#xA;&lt;summary&gt;Privacy and security&lt;/summary&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Subsonic salted-token auth (&lt;code&gt;token = md5(password + salt)&lt;/code&gt;). The cleartext password is never persisted or transmitted.&lt;/li&gt;&#xA;&lt;li&gt;Credentials in the &lt;strong&gt;Keychain&lt;/strong&gt;, synchronizable, so restoring from iCloud on a new device leaves you with a working connection. Neither &lt;code&gt;UserDefaults&lt;/code&gt; nor the iCloud record carries the credential.&lt;/li&gt;&#xA;&lt;li&gt;An opt-in toggle for &lt;strong&gt;self-signed certificates&lt;/strong&gt;, with the trust override scoped to your server&amp;rsquo;s host. HTTPS is still the better idea: over plain HTTP the salted token travels unencrypted, and the app reminds you of that when connecting.&lt;/li&gt;&#xA;&lt;li&gt;&lt;strong&gt;No analytics, no telemetry, no third-party calls.&lt;/strong&gt; Your data stays on your device and in your own iCloud.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/details&gt;&#xA;&lt;h2 id=&#34;what-it-looks-like&#34;&gt;&lt;a href=&#34;#what-it-looks-like&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;What it looks like&#xA;&lt;/h2&gt;&lt;p&gt;&lt;img alt=&#34;Armpit on macOS&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;384px&#34; data-flex-grow=&#34;160&#34; height=&#34;1000&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://ulm0.com/p/armpit-un-cliente-de-navidrome-nativo-para-iphone-mac-apple-tv-y-watch/mac-home.png&#34; srcset=&#34;https://ulm0.com/p/armpit-un-cliente-de-navidrome-nativo-para-iphone-mac-apple-tv-y-watch/mac-home_hu_6ffdb57f80dc0e2d.png 800w, https://ulm0.com/p/armpit-un-cliente-de-navidrome-nativo-para-iphone-mac-apple-tv-y-watch/mac-home.png 1600w&#34; width=&#34;1600&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Armpit on Apple TV&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;426px&#34; data-flex-grow=&#34;177&#34; height=&#34;900&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://ulm0.com/p/armpit-un-cliente-de-navidrome-nativo-para-iphone-mac-apple-tv-y-watch/tv-now-playing.png&#34; srcset=&#34;https://ulm0.com/p/armpit-un-cliente-de-navidrome-nativo-para-iphone-mac-apple-tv-y-watch/tv-now-playing_hu_5f7485469674fecd.png 800w, https://ulm0.com/p/armpit-un-cliente-de-navidrome-nativo-para-iphone-mac-apple-tv-y-watch/tv-now-playing.png 1600w&#34; width=&#34;1600&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;&lt;img alt=&#34;Armpit on Apple Watch&#34; class=&#34;gallery-image&#34; data-flex-basis=&#34;197px&#34; data-flex-grow=&#34;82&#34; height=&#34;514&#34; loading=&#34;lazy&#34; sizes=&#34;(max-width: 767px) calc(100vw - 30px), (max-width: 1023px) 700px, (max-width: 1279px) 950px, 1232px&#34; src=&#34;https://ulm0.com/p/armpit-un-cliente-de-navidrome-nativo-para-iphone-mac-apple-tv-y-watch/watch-now-playing.png&#34; width=&#34;422&#34;&gt;&lt;/p&gt;&#xA;&lt;h2 id=&#34;where-to-get-it&#34;&gt;&lt;a href=&#34;#where-to-get-it&#34; class=&#34;header-anchor&#34;&gt;&lt;/a&gt;Where to get it&#xA;&lt;/h2&gt;&lt;p&gt;It&amp;rsquo;s on the App Store: &lt;a class=&#34;link&#34; href=&#34;https://apps.apple.com/app/armpit/id6783437224&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;apps.apple.com/app/armpit&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;The project page — more screenshots, privacy policy, support and per-release notes — is at &lt;a class=&#34;link&#34; href=&#34;https://armpit.ulm0.com&#34;  target=&#34;_blank&#34; rel=&#34;noopener&#34;&#xA;    &gt;armpit.ulm0.com&lt;/a&gt;.&lt;/p&gt;</description>
        </item></channel>
</rss>
