A Dart library for interfacing with the Spotify API.
Installation | Features | Quick Start | Authorization | Features & Bugs | Contributing
Add spotify to your pubspec.yaml:
dependencies:
spotify: ^0.15.0Alternatively, run
dart pub add spotifyand the latest version will be added automatically.
Finally, run dart pub get to install the package.
This library provides comprehensive access to Spotify's Web API:
- Artists - Get artist info, top tracks, related artists, and albums
- Tracks - Retrieve track details and metadata
- Albums - Access album information and track listings
- Playlists - Browse, get, create, and modify playlists
- Shows & Episodes - Full podcast support
- Search - Search across all content types (artists, tracks, albums, playlists, shows, episodes)
- Browse - Discover new releases, featured playlists, and categories
- Categories - Browse categories with market and locale support
- User Profile - Access current user information via
meendpoint - Playback Control - Control playback, manage queue, get available devices
- Library Management - Manage saved tracks, albums, shows, and episodes
- User History - Access top items and recently played tracks
- Following - Follow/unfollow artists and users
- Pagination - Efficient handling of large result sets with
Pages<T>andCursorPages<T> - Market Support - Country-specific content filtering
- Multiple Auth Flows - Client credentials and authorization code grant (with PKCE support)
- OAuth Scopes - Comprehensive authorization scope management
Note: Related Artists, Audio Features, Audio Analysis, Featured Playlists, Category Playlists and Recommendation endpoints are deprecated by Spotify but still available in this library.
import 'package:spotify/spotify.dart';
void main() async {
final credentials = SpotifyApiCredentials(clientId, clientSecret);
final spotify = SpotifyApi(credentials);
// Get artist info
final artist = await spotify.artists.get('0OdUWJ0sBjDrqHygGUXeCF');
print(artist.name); // 'Band of Horses'
// Search for tracks
var search = await spotify.search.get('metallica').first(2);
print(search.first.items); // List of albums, artists, tracks, etc.
}Many endpoints return paginated results:
// Get all tracks from an album
var tracks = await spotify.albums.getTracks(albumId).all();
// Get first N items
var featured = await spotify.playlists.featured.first(5);
// Stream through pages
await for (var page in spotify.playlists.getUsersPlaylists(userId).stream()) {
print(page.items);
}This library supports multiple authorization flows:
- Client Credentials Flow - For accessing public data (artists, albums, tracks, etc.)
- Authorization Code Grant - For accessing user data and controlling playback
- PKCE Support - Enhanced security for public clients
For detailed information on authorization flows, OAuth scopes, and advanced usage, see the wiki.
For mobile apps and single-page applications that cannot securely store client secrets, use PKCE:
// Generate a secure code verifier
final verifier = SpotifyApi.generateCodeVerifier();
// Create PKCE credentials (no client secret needed!)
final credentials = SpotifyApiCredentials.pkce(
'your-client-id',
codeVerifier: verifier,
);
// Complete OAuth flow
final grant = SpotifyApi.authorizationCodeGrant(credentials);
final authUri = grant.getAuthorizationUrl(redirectUri, scopes: scopes);
// ... redirect user, get authorization code
final client = await grant.handleAuthorizationResponse(params);
final spotify = SpotifyApi.fromClient(client);
// Save credentials for later (including codeVerifier!)
final creds = await spotify.getCredentials();
// Store creds.codeVerifier along with other credential fields
// Restore later
final spotify = await SpotifyApi.asyncFromCredentials(restoredCreds);See example/example_pkce.dart for a complete working example.
Please file feature requests and bugs at the issue tracker.
Contributions are welcome! Here's how to work on this project:
- Clone the repository
- Run
dart pub getto install dependencies
This project uses json_serializable for model serialization:
- Run
dart run build_runner buildto generate serializers - Run
dart run build_runner watchto continuously rebuild when files change
Before committing, ensure your code passes:
- Formatting:
dart format . - Analysis:
dart analyze
Run the test suite:
dart testTo run the basic example:
dart run example/example.dartYou'll need to modify the file to include your Spotify client ID and secret.
For the authenticated example (accessing user data, playback control) run:
dart run example/example_auth.dartThis example will prompt you for a redirect URL and guide you through the OAuth flow to access features like currently playing tracks and available devices.