Spotube is a Flutter based lightweight spotify client. It utilizes the power of Spotify & Youtube's public API & creates a hazardless, performant & resource friendly User Experience
Following are the features that currently spotube offers:
- Open Source
- Anonymous/Guest Login
- Cross platform
- No telemetry, diagnostics or user data collection
- Lightweight & resource friendly
- Native performance (Thanks to Flutter+Skia)
- Playback control is on user's machine instead of server based
- Small size & less data hungry
- No spotify or youtube ads since it uses all public & free APIs (But it's recommended to support the creators by watching/liking/subscribing to the artists youtube channel or add as favourite track in spotify. Mostly buying spotify premium is the best way to support their valuable creations)
- Lyrics
- Downloadable track
I'm always releasing newer versions of binary of the software each 2-3 month with minor changes & each 6-8 month with major changes. Grab the binaries
All the binaries are located in the releases, just download
Download the Android app & then install it on your Android smartphone/tablet
Download the setup file & follow along the installer
Run the following command to install Spotube with windows chocolatey package manager
choco install spotube
Run the following command to install Spotube with new Windows Package Manager:
winget install --id KRTirtho.Spotube
Run in terminal:
$ flatpak install flathub com.github.KRTirtho.Spotube
Download the Spotube-linux-x86_64.deb then double click it or run
$ sudo apt install Spotube-linux-x86_64.deb
# or
$ sudo dpkg -i Spotube-linux-x86_64.deb
in the directory where it was downloaded
Run following terminal
# for `yay` users
$ yay -S spotube-bin
# for `pamac` users
$ pamac install spotube-bin
Download the Spotube-linux-x86_64.AppImage file & double click to run it. AppImages require appimage-launcher to be installed
Download the Mac OS Disk Image (.dmg) file from the release & follow along the setup wizard
I'll/try to upload the package binaries to linux debian/arch/ubuntu/snap/flatpack/redhat/chocolatey/homebrew stores or software centers or repositories
Login with Spotify
You need a spotify account & a developer app for
- clientId
- clientSecret
Grab credentials:
-
Go to https://developer.spotify.com/dashboard/login & login with your spotify account (Skip if you're logged in)
-
Give the app a name & description. Then Edit settings & add http://localhost:4304/auth/spotify/callback as Redirect URI for the app. Its important for authenticating
-
Click on SHOW CLIENT SECRET to reveal the clientSecret. Then copy the clientID, clientSecret & paste in the Spotube's respective fields
Setup Genius Lyrics
- Signup/Login into genius for lyrics
- Go To Genius Developer Portal for creating an API client
- Generate & copy access token
- Paste the copied access token in Spotube's Settings
Note!: No personal data or any kind of sensitive information won't be collected from spotify. Don't believe? See the code for yourself
- Compile, Debug & Build for MacOS
- Add support for show Lyric of currently playing track
- Track download
- Support for playing/streaming podcasts/shows
- Artist, User & Album pages
- Android Support
- Download the latest Flutter SDK (>=2.15.1) & enable desktop support
- Install Development dependencies in linux
libwebkit2gtk-4.0-dev
,libkeybinder-3.0-0
&libkeybinder-3.0-0-dev
(for Debian/Ubuntu)webkit2gtk
&libkeybinder3
(for Arch/Manjaro)
- Clone the Repo & run
$ flutter pub get
- Create a
.env
file containing 2 secretsLYRICS_SECRET
&SPOTIFY_SECRET
. These secrets should be a base64 encoded JSON string- Structure of
LYRICS_SECRET
json string:[ "<secret genius access tokens>", // and so on... ]
- Structure of
SPOTIFY_SECRET
json string:[ {"clientId": "<Spotify Client Id>", "clientSecret": "<Spotify Client Secret>"}, // and so on .... ]
You can base64 encode the JSON here
- Structure of
- Run following in the terminal to generate secrets for your fork
$ dart bin/create-secrets.dart --loadEnv
Finally, to start the app run:
$ flutter run -d <window|macos|linux|(android-device-id)>
- Shows & Podcasts aren't supported as it'd require premium anyway
- OS Media Controls
Bu why? You can learn about it here
- Flutter - Flutter transforms the app development process. Build, test, and deploy beautiful mobile, web, desktop, and embedded apps from a single codebase
- Linux - Linux is a family of open-source Unix-like operating systems based on the Linux kernel, an operating system kernel first released on September 17, 1991, by Linus Torvalds. Linux is typically packaged in a Linux distribution
- AUR - AUR stands for Arch User Repository. It is a community-driven repository for Arch-based Linux distributions users
- Flatpak - Flatpak is a utility for software deployment and package management for Linux
- spotify (dart) - A dart library for interfacing with the Spotify API
- just_audio - A feature-rich cross-platform audio player for Flutter that supports network audio streams too
- libwinmedia - A cross-platform media playback library for C/C++ with good number of features (only Windows & Linux)
- youtube_explode_dart - YoutubeExplode is a library that provides an interface to query metadata of YouTube videos, playlists and channels, as well as to resolve and download video streams and closed caption tracks
- infinite_scroll_pagination - Flutter package to help you lazily load and display pages of items as the user scrolls down your screen
- bitsdojo_window - A Flutter package that makes it easy to customize and work with your Flutter desktop app window on Windows, macOS and Linux
- hotkey_manager - A flutter plugin that allow Flutter desktop apps to defines system/inapp wide hotkey
- Inno Setup - Inno Setup is a free installer for Windows programs by Jordan Russell and Martijn Laan
- collection - The collection package for Dart contains a number of separate libraries with utility functions and classes that makes working with collections easier
- flutter_riverpod - A Reactive Caching and Data-binding Framework
- flutter_hooks - React hooks for Flutter. Hooks are a new kind of object that manages a Widget life-cycles. They are used to increase code sharing between widgets and as a complete replacement for StatefulWidget
- hooks_riverpod - Riverpod with hooks
- go_router - A declarative router for Flutter based on Navigation 2 supporting deep linking, data-driven routes and more
- palette_generator - Flutter package for generating palette colors from a source image.
- audio_session - Sets the iOS audio session category and Android audio attributes for your app, and manages your app's audio focus, mixing and ducking behaviour.
- logger - Small, easy to use and extensible logger which prints beautiful logs
- flutter_launcher_icons - A package which simplifies the task of updating your Flutter app's launcher icon.
- permission_handler - Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
Follow me on Twitter for newer updates about this application
ยฉ 2022 Spotube