seeleseek is a native macOS client for the soulseek protocol.
seeleseek is a modern, native macOS client for the soulseek protocol. It provides a clean and intuitive interface for searching, downloading, and sharing files on the soulseek network.
- macOS 15+
- Download the latest release from the Releases page. Unsigned builds are available in from the
.zipassets. It's recommended to use the.pkgsigned installer for ease of use. - Open the app. You may need to approve it in System Preferences > Security & Privacy > General.
- Quit the app.
- Delete the app from the Applications folder.
Contributions are welcome, Please open an issue or submit a pull request.
If you encounter any bugs or have feature requests, please open an issue on the GitHub Issues page.
- Xcode 16+ (Swift 6)
The core networking and protocol implementation lives in a local Swift Package at Packages/SeeleseekCore/. The app target imports this package and adds UI-specific extensions.
- SeeleseekCore — Protocol encoding/decoding, server/peer connections, download/upload management, models
- seeleseek — SwiftUI app, feature states, design system, database layer
A SvelteKit based marketing + documentation site lives in this repo under /site
- Clone the repository.
- Open
seeleseek.xcodeproj(the local package resolves automatically). - (Optional) Set up GeoIP for peer country flags.
Run xcodebuild or use Xcode.
Peer country flags (in browse views, the monitor, etc.) are resolved locally
against a MaxMind GeoLite2-Country database. The .mmdb file can't be
committed to this repo — MaxMind's EULA prohibits redistribution.
Without the database, lookups return nil and flags are omitted; the app
runs fine, you just don't get geolocation.
To enable it:
- Create a free account at https://www.maxmind.com/en/geolite2/signup
- Generate a license key and download
GeoLite2-Country.mmdb. - Drag the file into the
seeleseekapp target in Xcode ("Copy items if needed", "Add to targets: seeleseek"). It should appear under Copy Bundle Resources in the build phases. - Rebuild. The log "GeoIP database loaded: GeoLite2-Country (...)" confirms it's working.
MaxMind refreshes the database biweekly; plan for periodic updates if accuracy matters to you. Attribution: "IP geolocation by MaxMind — maxmind.com".
CI/Release builds fetch the database automatically via a reusable composite
action at .github/actions/fetch-geolite2, invoked from release.yml. This
requires a repo secret named MAXMIND_LICENSE_KEY. If the secret isn't set,
tagged releases will fail at the "Fetch GeoLite2 Country database" step. The
build.yml CI (PRs, main branch) does NOT need the secret — unit tests use
a committed Apache-licensed fixture instead.
GitHub Actions is configured to build and release the app on push to main.
- SoulSeek
- Nicotine+ (protocol reference)
- MusicBrainz (metadata services)
- GRDB







