# samo A self-hosted listening client for music, audiobooks, podcasts and radio — one library, one queue, one history, on Android and on the desktop. samo is the client half of a pair. The server half is [samo-server](https://github.com/bouliehaan/samo-server), a native media server where the four media kinds are first-class domains that share playback state, recents and browsing — not stapled together in the client. | Home | Playlist | Now playing | Radio | |:-------------------------------------------------------------------------------------------------------------------:|:------------------------------------------------------------------------------------------------------------------:|:-------------------------------------------------------------------------------------------------------:|:----------------------------------------------------------------------------------------------------------------:| | Home: music, podcasts and audiobooks in one library | Playlist detail with cover, title and track list | Now playing with source quality shown | Radio: samo-radio devices and internet stations | ## Install Grab a build from [**Releases**](https://github.com/bouliehaan/samo/releases/latest). You need a [samo-server](https://github.com/bouliehaan/samo-server) on your network — the app finds it by itself on first run. Unlike the rest of samo, this one is not a container — it is an app you install on a device. **Android** — `samo--android.apk`. Sideload it; your phone will ask you to allow installs from whatever you downloaded it with. **macOS** — `samo--mac-arm64.dmg` (Apple silicon) or `-mac-x64.dmg` (Intel). The build is ad-hoc signed and not notarised, so Gatekeeper will call it damaged. Clear the quarantine flag after dragging it to Applications: ```bash xattr -dr com.apple.quarantine /Applications/samo.app ``` **Windows and Linux** — no published build yet. Building one is in [docs/DEVELOPING.md](docs/DEVELOPING.md). ## Status Honest state of things, so nobody installs this expecting a finished product: | Part | State | |------------------------|------------------------------------------------------------------------------------------------------------------------| | **Android app** | The most actively developed surface. Native ExoPlayer engine, offline downloads, Chromecast, on-device catalog mirror. | | **Desktop (Electron)** | samo-only, single API controller. Works, gets less attention. | | **`@samo/core`** | Shared server client, playback and media-detail mapping, covered by tests. | A personal project developed in the open. No stability promise and no migration guarantee between versions. ## Contributing Building it from source, the gates, and how the two clients share one core: [docs/DEVELOPING.md](docs/DEVELOPING.md). ## Design notes Entrances are staged rather than uniform — the heavy element leads and the lighter ones attached to it lag, then catch up.

Opening a playlist: the cover lands first, the subtitle and buttons catch up a beat later

- [`docs/MOTION_PRINCIPLES.md`](docs/MOTION_PRINCIPLES.md) — Disney's twelve principles, how each maps to a screen, and where each lives in the code. - [`docs/ANDROID_ARCHITECTURE_STATUS.md`](docs/ANDROID_ARCHITECTURE_STATUS.md) — module stores, module-function handlers, self-subscribing hosts. - [`docs/PERFORMANCE_AND_NETWORK.md`](docs/PERFORMANCE_AND_NETWORK.md) — where the app spends time and what it does about it. - [`docs/NAMING.md`](docs/NAMING.md) — the name is `samo`, lowercase, everywhere a person reads it. ## Credits samo began as a fork of [**Feishin**](https://github.com/jeffvli/feishin) by [Jeff Vialpando (jeffvli)](https://github.com/jeffvli), and would not exist without it. The desktop app still carries a great deal of Feishin's architecture and code. Bundled typefaces: **Bricolage Grotesque** (SIL OFL 1.1, [licence](assets/fonts/BricolageGrotesque-OFL.txt)), **Archivo**, **Office Code Pro**. ## Licence [GPL-3.0-only](LICENSE), inherited from Feishin.