{"id":17305250,"url":"https://github.com/splittydev/spotify-rs","last_synced_at":"2025-08-19T23:09:17.268Z","repository":{"id":43478835,"uuid":"74446580","full_name":"SplittyDev/spotify-rs","owner":"SplittyDev","description":"Rustified Spotify API.","archived":false,"fork":false,"pushed_at":"2023-10-10T21:40:05.000Z","size":9890,"stargazers_count":9,"open_issues_count":0,"forks_count":4,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-19T04:54:13.989Z","etag":null,"topics":["cli","hacktoberfest","spotify","spotify-api"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/SplittyDev.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2016-11-22T07:34:16.000Z","updated_at":"2024-01-02T14:43:48.000Z","dependencies_parsed_at":"2025-04-14T13:25:23.908Z","dependency_job_id":"e4b9796c-2e8d-4bbc-ae2f-f133b8ff189a","html_url":"https://github.com/SplittyDev/spotify-rs","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/SplittyDev/spotify-rs","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SplittyDev%2Fspotify-rs","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SplittyDev%2Fspotify-rs/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SplittyDev%2Fspotify-rs/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SplittyDev%2Fspotify-rs/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/SplittyDev","download_url":"https://codeload.github.com/SplittyDev/spotify-rs/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/SplittyDev%2Fspotify-rs/sbom","scorecard":{"id":133109,"data":{"date":"2025-08-04","repo":{"name":"github.com/SplittyDev/spotify-rs","commit":"8604335a39b7203d5e13cb66c7aa314191b5ceb3"},"scorecard":{"version":"v5.2.1-28-gc1d103a9","commit":"c1d103a9bb9f635ec7260bf9aa0699466fa4be0e"},"score":1.7,"checks":[{"name":"Pinned-Dependencies","score":-1,"reason":"no dependencies found","details":null,"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#pinned-dependencies"}},{"name":"Maintained","score":0,"reason":"0 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#maintained"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#packaging"}},{"name":"Dangerous-Workflow","score":-1,"reason":"no workflows found","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 2/24 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#code-review"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#binary-artifacts"}},{"name":"Token-Permissions","score":-1,"reason":"No tokens found","details":null,"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#token-permissions"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#security-policy"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#fuzzing"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE.md:0","Info: FSF or OSI recognized license: MIT License: LICENSE.md:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#license"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#branch-protection"}},{"name":"SAST","score":0,"reason":"SAST tool is not run on all commits -- score normalized to 0","details":["Warn: 0 commits out of 9 are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#sast"}},{"name":"Vulnerabilities","score":0,"reason":"22 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: RUSTSEC-2022-0041 / GHSA-qc84-gqf4-9926","Warn: Project is vulnerable to: RUSTSEC-2019-0036 / RUSTSEC-2020-0036 / GHSA-jq66-xh47-j9f3 / GHSA-r98r-j25q-rmpr","Warn: Project is vulnerable to: RUSTSEC-2023-0034 / GHSA-f8vr-r385-rh5r","Warn: Project is vulnerable to: RUSTSEC-2024-0003 / GHSA-8r5v-vm4m-4g25","Warn: Project is vulnerable to: RUSTSEC-2024-0332 / GHSA-q6cp-qfwq-4gcv","Warn: Project is vulnerable to: RUSTSEC-2021-0079 / GHSA-5h46-h7hh-c6x9","Warn: Project is vulnerable to: RUSTSEC-2021-0078 / GHSA-f3pg-qwvg-p99c","Warn: Project is vulnerable to: RUSTSEC-2022-0022 / GHSA-f67m-9j94-qv9j","Warn: Project is vulnerable to: RUSTSEC-2024-0421 / GHSA-h97m-ww89-6jmq","Warn: Project is vulnerable to: RUSTSEC-2022-0081","Warn: Project is vulnerable to: RUSTSEC-2020-0070 / GHSA-5wg8-7c9q-794v / GHSA-gmv4-vmx3-x9f3 / GHSA-hj9h-wrgg-hgmx / GHSA-ppj3-7jw3-8vc4 / GHSA-vh4p-6j7g-f4j9","Warn: Project is vulnerable to: RUSTSEC-2023-0045 / GHSA-wfg4-322g-9vqv","Warn: Project is vulnerable to: RUSTSEC-2020-0016","Warn: Project is vulnerable to: RUSTSEC-2023-0072 / GHSA-xphf-cx8h-7q9g","Warn: Project is vulnerable to: GHSA-q445-7m23-qrmw","Warn: Project is vulnerable to: RUSTSEC-2024-0357","Warn: Project is vulnerable to: RUSTSEC-2025-0004 / GHSA-rpmj-rpgj-qmpm","Warn: Project is vulnerable to: GHSA-4fcv-w3qc-ppgg","Warn: Project is vulnerable to: RUSTSEC-2025-0022","Warn: Project is vulnerable to: GHSA-c827-hfw6-qwvm","Warn: Project is vulnerable to: RUSTSEC-2020-0071 / GHSA-wcg3-cvx6-7396","Warn: Project is vulnerable to: RUSTSEC-2021-0124 / GHSA-fg7r-2g4j-5cgr"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/c1d103a9bb9f635ec7260bf9aa0699466fa4be0e/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-16T05:41:57.919Z","repository_id":43478835,"created_at":"2025-08-16T05:41:57.919Z","updated_at":"2025-08-16T05:41:57.919Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271236280,"owners_count":24723978,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-19T02:00:09.176Z","response_time":63,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cli","hacktoberfest","spotify","spotify-api"],"created_at":"2024-10-15T11:55:08.540Z","updated_at":"2025-08-19T23:09:17.245Z","avatar_url":"https://github.com/SplittyDev.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spotify-rs\n[![Crates.io](https://img.shields.io/crates/l/spotify.svg?style=flat-square)][crates-url]\n[![Crates.io](https://img.shields.io/crates/v/spotify.svg?style=flat-square)][crates-url]\n\n[Documentation][docs-url]\n\nSpotify-rs provides an easy-to-use abstraction over the Spotify Local API.\n\n## ⚠️ DEPRECATION WARNING\n\nThis library is deprecated and no longer maintained. Spotify has removed the Local API and SpotifyWebHelper from their desktop clients, so this library is no longer useful. I'm keeping it around for historical purposes, but there's no point in using it anymore.\n\n## What can I do with it\n\nFeatures:\n- Play a track using track ID or URI\n- Pause/resume the currently played track\n- Get currently played track (including album, artist, etc.)\n- Get current volume\n- Get Spotify client version and online status\n- React to changes by long polling in a separate thread\n\nAnd a few goodies:\n- Automatically fixes broken (but recoverable) track IDs and URIs\n- Check whether SpotifyWebHelper is running (Windows only)\n\n## Is the project still alive?\n\nI haven't really worked on this library for a long time, but that's mostly because it's pretty much done. There aren't any significant bugs that I know of and the cli should work just fine. I've made an effort to port everything over from 2015 to 2021 edition and the code compiles (tested using Rust 1.64).\n\n## Examples\nThe following is a minimal example to show you what's possible with spotify-rs.   \nPlease note that this example lacks proper error handling for the sake of brevity.\n\n```rust,no_run\nextern crate spotify;\nuse spotify::Spotify;\n\nfn main() {\n    // Grab an instance of the Spotify API\n    let spotify = Spotify::connect().unwrap();\n\n    // Fetch the current status from Spotify\n    let status = spotify.status().unwrap();\n\n    // Display the Spotify Client version\n    println!(\"Spotify Client (Version {})\", status.version());\n             \n    // Display the currently playing track\n    println!(\"Playing: {:#}\", status.track());\n}\n```\n\nExample output:\n\n```\nSpotify Client (Version 1.0.42.151.g19de0aa6)\nPlaying: Rick Astley - Never Gonna Give You Up\n```\n\nHere's a complete example with long polling and better error handling:\n\n```rust,no_run\nextern crate spotify;\nuse spotify::{Spotify, SpotifyError};\n\nfn main() {\n    // Grab an instance of the Spotify API.\n    let spotify = match Spotify::connect() {\n        Ok(result) =\u003e result,\n        Err(error) =\u003e {\n            // Display a nice end-user-friendly error message\n            match error {\n                SpotifyError::ClientNotRunning =\u003e {\n                    println!(\"The Spotify Client is not running!\");\n                    std::process::exit(1);\n                }\n                SpotifyError::WebHelperNotRunning =\u003e {\n                    println!(\"The SpotifyWebHelper process is not running!\");\n                    std::process::exit(2);\n                }\n                SpotifyError::InternalError(err) =\u003e {\n                    println!(\"Internal Error: {:?}\", err);\n                    std::process::exit(3);\n                }\n            }\n        }\n    };\n\n    // Start polling.\n    // Updates the state every 250ms.\n    // \n    // The 'status' variable holds the `SpotifyStatus`,\n    // the 'change' variable contains booleans to indicate which fields\n    // had changed since the last update.\n    let reactor = spotify.poll(|_, status, change| {\n        // Print the Spotify Client version on change.\n        if change.client_version {\n            println!(\"Spotify Client (Version {})\", status.version());\n        }\n        // Print the currently playing track on change.\n        if change.track {\n            println!(\"Now playing: {:#}\", status.track());\n        }\n        // Print the current volume on change.\n        if change.volume {\n            println!(\"Volume: {}%\", status.volume_percentage());\n        }\n\n        // Returning true will continue polling, whereas returning\n        // false will stop polling and return from the thread.\n        true\n    });\n\n    // Join the reactor thread so the application\n    // doesn't close before receiving any data.\n    if reactor.join().ok().is_none() {\n        println!(\"Unable to join into the live-update.\");\n        std::process::exit(4);\n    }\n}\n```\n\nExample output:\n\n```\nSpotify Client (Version 1.0.42.151.g19de0aa6)\nNow playing: Tim Minchin - White Wine In The Sun\nVolume: 100%\nNow playing: Tim Minchin - Encore\nVolume: 50%\nVolume: 76%\nNow playing: Tim Minchin - Ready For This ?\nVolume: 100%\n```\n\n## F.A.Q.\n**It doesn't connect, what's wrong?**    \nMake sure that Spotify is running and the SpotifyWebHelper process is active.\n\nIf you can't find SpotifyWebHelper.exe in your process list, you might have disabled it by accident. Here's how you enable it:\n\n- Open Spotify\n- Press `Ctrl` + `P` to open the preferences\n- Scroll down and click 'Show advanced settings'\n- In the `Startup and Window Behaviour` section,   \n  enable `Allow Spotify to be opened from the web`.\n\nYou might wanna restart Spotify after doing that.   \n\n\u003e **Update**: I'm not sure if this option is still exposed nowadays. Spotify 1.1.95 (2022) on macOS doesn't seem to have this anymore, and I'm not sure if Spotify still exposes the local API at all. If it doesn't, this library is pretty much useless. If you know whether this still works, please open an issue and let me know!\n\n[crates-url]: https://crates.io/crates/spotify\n[docs-url]: https://docs.rs/spotify\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplittydev%2Fspotify-rs","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsplittydev%2Fspotify-rs","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsplittydev%2Fspotify-rs/lists"}