16 releases

0.7.1 Nov 10, 2021
0.7.0 Jan 6, 2021
0.6.3 Dec 29, 2020
0.6.1 Oct 19, 2020
0.1.1 Dec 31, 2019

#28 in #spotify

Download history 32/week @ 2021-10-02 92/week @ 2021-10-09 57/week @ 2021-10-16 57/week @ 2021-10-23 14/week @ 2021-10-30 55/week @ 2021-11-06 16/week @ 2021-11-13 21/week @ 2021-11-20 60/week @ 2021-11-27 55/week @ 2021-12-04 35/week @ 2021-12-11 21/week @ 2021-12-18 11/week @ 2021-12-25 30/week @ 2022-01-01 31/week @ 2022-01-08 55/week @ 2022-01-15

131 downloads per month




This crate is deprecated in favour of rspotify. Originally, this crate was created when rspotify didn't support async and had a much worse API than it does now. But since then it has much improved, and I don't have the time or energy to maintain this crate anymore.

Original README

Asynchronous Rust Spotify client.


Aspotify is a Rust wrapper for the Spotify API. It provides Rust structures around all of Spotify's Object Model and functions around all their endpoints.


All Spotify endpoints require authorization. There are two forms of authorization provided by this library; Client Credentials and Authorization Code. To use either, you first need a Spotify Developer account, which is free. Then you can use endpoints with your Client ID and Client Secret with Client Credentials, or perform actions on behalf of a user with oauth2 and Authorization Code.


use aspotify::{Client, ClientCredentials};

// This from_env function tries to read the CLIENT_ID and CLIENT_SECRET environment variables.
// You can use the dotenv crate to read it from a file.
let credentials = ClientCredentials::from_env()
    .expect("CLIENT_ID and CLIENT_SECRET not found.");

// Create a Spotify client.
let client = Client::new(credentials);

// Gets the album "Favourite Worst Nightmare" from Spotify, with no specified market.
let album = client.albums().get_album("1XkGORuUX2QGOEIL4EbJKm", None).await.unwrap();


At the time of the latest release, aspotify supports all the features of the Spotify API. It uses reqwest internally, and so must run with Tokio's runtime.


In order to test, you first need to add http://non.existant/ in your Spotify whitelisted URLs. Get your Client ID and Client Secret and put them in a .env file in the crate root like this:

CLIENT_ID=some value
CLIENT_SECRET=some value

Then, run cargo run --example refresh_file. Follow the instructions shown. If everything went successfully, you should see a file called .refresh_token in your crate root. This file contains a refresh token that will be used to run all the tests. For more infomation about this process, see examples/refresh_file.rs.

These tests will make temporary changes to your account, however they will all be reverted. You will also need an unrestricted non-private Spotify client open to get all the tests to run successfully, and you must not have any songs in your queue.


  • Add a blocking API.
  • Support other HTTP clients.
  • Automatically send multiple requests when the limit is above Spotify's limit for functions that return Page/CursorPage.


~231K SLoC