MCPcopy Index your code
hub / github.com/FlyinPancake/yoink

github.com/FlyinPancake/yoink @v0.1.6

Chat with this repo
repository ↗ · DeepWiki ↗ · release v0.1.6 ↗ · + Follow
1,353 symbols 2,807 edges 209 files 149 documented · 11%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README

yoink logo yoink

yoink is a self-hosted music library manager that lets you search, download, tag, and organize your collection from multiple sources all from a single, clean web interface

[!WARNING] yoink is under active development and is not production ready. Expect breaking changes, incomplete features, and rough edges. Do not point yoink at your main music library — use a separate copy or a fresh directory until the project stabilizes.

This project is built using AI tools like OpenCode and Codex. All code is reviewed and tested by me, but if you encounter any weirdness and don't hesitate to report any issues you find.

yoink open for Pendulum

What Is Yoink?

I ran my Lidarr instance for years, but it was really, thightly coupled to its metadata source. (MusicBrainz if I remember correctly?) Some of the stuff I like to listen to is not well represented there, as well as new stuff that artists just drop without any announcement. I also had issues finding good quality downloads for some of the less mainstream music on larger indexers.

yoink was created to solve these issues by leveraging a multi-provider architecture, where you can pull in metadata from multiple sources (currently Tidal, Deezer and MB are supported) and download them via hifi-api and SoulSeek. This way (just like in IT security) you can use multiple metadata sources to cover each other's gaps.

Key Features

  • Unified multi-provider search: you search artists/albums/songs across all providers at once
  • Hi-res downloads: You can download the highest quality stuff directly from hifi instances. No need for indexers and external DL clients
  • Artist profiles: Unified artist pages combine a single artist from all of your providers (you still have to manually add them)
  • Lightweight & fast — Built with Rust for minimal resource usage; runs happily on a Raspberry Pi or a BEEFY COMPUTER

Other features and their status can be found in the roadmap.

Supported Providers

Provider Type Notes
Tidal Streaming / Download Uses a hifi-api proxy
Deezer Metadata Metadata only
MusicBrainz Metadata Open music database for enrichment
SoulSeek P2P / Download Via slskd

Usage

You can learn how to set up yoink for yourself in the documentation at https://yoink-docs.vercel.app.

Built With

yoink is built with Rust and React, Axum for the server and SQLite via SQLx for storage. The frontend is built with Tanstack Start and shadcn/ui for components.

Contributing

Contributions are welcome! Whether it's a filing an issue, bug fix, new feature, or documentation improvement:

  1. Fork the repository
  2. Create a feature branch
  3. Use Conventional Commits for your commit messages
  4. Keep CHANGELOG.md and crate versions untouched; releases are managed by release-please
  5. Submit a pull request

Extension points exported contracts — how you extend this code

MetadataProvider (Interface)
(no doc) [7 implementers]
crates/yoink-server/src/providers/mod.rs
Register (Interface)
(no doc)
frontend/src/router.tsx
FileRoutesByFullPath (Interface)
(no doc)
docs/src/routeTree.gen.ts
DownloadSource (Interface)
(no doc) [2 implementers]
crates/yoink-server/src/providers/mod.rs
FileRoutesByFullPath (Interface)
(no doc)
frontend/src/routeTree.gen.ts
FileRoutesByTo (Interface)
(no doc)
docs/src/routeTree.gen.ts
FileRoutesByTo (Interface)
(no doc)
frontend/src/routeTree.gen.ts
FileRoutesById (Interface)
(no doc)
docs/src/routeTree.gen.ts

Core symbols most depended-on inside this repo

cn
called by 111
frontend/src/lib/utils.ts
get
called by 67
crates/yoink-server/src/db/entities/auth_settings.rs
notify_sse
called by 40
crates/yoink-server/src/state.rs
from
called by 30
crates/yoink-server/src/error/api_error.rs
normalize
called by 29
crates/yoink-server/src/util.rs
into_response
called by 28
crates/yoink-server/src/routes/helpers.rs
app_error_response
called by 24
crates/yoink-server/src/routes/helpers.rs
seed_track
called by 17
crates/yoink-server/src/services/library/reconcile.rs

Shape

Function 935
Method 210
Class 151
Interface 38
Enum 19

Languages

Rust73%
TypeScript27%

Modules by API surface

crates/yoink-server/src/providers/deezer/mod.rs71 symbols
crates/yoink-server/src/services/downloads/metadata.rs41 symbols
frontend/src/lib/api/mutations.ts38 symbols
crates/yoink-server/src/providers/mod.rs38 symbols
crates/yoink-server/src/routes/album.rs32 symbols
crates/yoink-server/src/services/downloads/mod.rs31 symbols
crates/yoink-server/src/services/artist.rs31 symbols
crates/yoink-server/src/providers/soulseek/mod.rs31 symbols
crates/yoink-server/src/app_config.rs30 symbols
crates/yoink-server/src/services/helpers.rs27 symbols
crates/yoink-server/src/services/downloads/io.rs27 symbols
frontend/src/components/ui/sidebar.tsx25 symbols

Datastores touched

yoinkDatabase · 1 repos

For agents

$ claude mcp add yoink \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact