* doc: compilation with fvm
* Update bootstrap command in CONTRIBUTION.md
Removed the 'enable-experiment=records,patterns' option from the build_runner command.
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* add: Add the translation file for Chinese Traditional
* i18n: fix wrong translation in Chinese Simpfied
* i18n: Finish the translation in Chinese Traditional file
* i18n: Add Traditional Chinese locale support
* i18n: Add Traditional Chinese language code
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
- Implemented ErrorBox for displaying error messages with retry functionality and log viewing.
- Created NoDefaultMetadataPlugin to inform users about missing default metadata providers and provide navigation to manage them.
- Updated database schema to include `repository` and `pluginApiVersion` columns in the `MetadataPluginsTable`.
- Modified `PluginConfiguration` model to include new fields for `repository` and `pluginApiVersion`.
- Enhanced JSON serialization and deserialization for the new fields in `PluginConfiguration`.
- Refactored `SettingsMetadataProviderPage` to display installed plugins with their repository information.
- Created new components `MetadataInstalledPluginItem` and `MetadataPluginRepositoryItem` for better UI representation of plugins.
- Updated plugin installation logic to handle new fields and display relevant information.
- Bumped `youtube_explode_dart` dependency version to `2.5.1`.
* feat: add new improved logo
* feat: add new improved logo
* feat: add new improved logo
* feat: add new improved logo
* chore: update the logos in app
* Merge branch 'alexio-dev-refactor/new-icons' into refactor/new-icons #2676
* chore: generate icons for every flavor
* chore: add readme banner
* chore: add back deleted images
* chore: update native splash screen
* chore: fix dart analyzer warnings
* feat: add youtube engine abstraction and yt-dlp integration
* chore: add yt-dlp as optional dependency
* feat: implement custom path support for youtube engines
* chore: check for custom path in setting engine select dropdown
* chore: update yt_dlp_dart
* chore: setting video url instead of video id in fetchSiblings
* feat: implement NewPipe engine
* chore: update local path to git url for flutter_new_pipe_extractor package
* chore: fix android build isn't working
* chore: fix routes not working when initially signing in
* refactor: drop fallback support to different sources
* Update AppDelegate.swift
store the Documents directory path which the app can then use for downloads instead of trying to create a Downloads directory
* Update Info.plist
should resolve the permission issues because using Documents directory instead of trying to create a Downloads directory.
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* feat: add android home widget support
* feat: style widget player and add intent and callbacks on action
* feat: responsive and working android home widget
* fix(android): models stripping causing it to not work for release apks
* chore: ios lockfile update
* feat: config for iOS widget
* cd: upgrade xcode
* cd: reduce xcode version
* feat: add a christmas background
* feat: add caching support with track metadata
* feat(settings): add cache music toggle
* fix(mobile): cache dir not open-able
* feat(local folder): add cache export/clear actions and size of the folder
* chore: ios deps upgrades
* chore: upgrade lint flutter version
* chore: lint secrets causing error
* cd: invalid value for env var
* feat: add invidious audio source with automatic track switch even on server playback endpoint
* fix: switching to different source on playback endpoint error not working
* chore: update invidious version
* feat: invidious instances customizability
commit e160d4f561ff2e945fd67bf12b223c012da58b1e
Author: Kingkor Roy Tirtho <krtirtho@gmail.com>
Date: Sat Sep 14 10:48:08 2024 +0600
fix: pagination issues in playlist and album pages
* feat: add discord rpc support for macos, windows arm64 and linux arm64
* chore: discord rpc not clearing activity after close/setting rpc to false
* chore: add migration script to move from files from macos sandbox to non-sandbox directories
* chore: fix analyzer issues
* fix(updater): dead link (#1408)
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* Update use_update_checker.dart
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* fix(linux): tray icon not showing #541
upgrade old packages
* fix(search): load more button not working #1417
* fix: spotify friends and user profile icon (mobile) showing when not authenticated #1410
* chore: add docker and m1 based linux arm build
* cd: fix sed failing us
* cd: use docker cask
* fix: windows SSL Certificate error breaking login #905 (#1474)
* fix: certificate error by using custom ssl certificate
* Cd/docker linux ar (#1468)
* cd: use docker buildx
* cd: use linux host for linux arm instead of macos m1
m1 doesn't support nested virtualization. (Apple truly sucks)
* cd: don't specify arch in Dockerfile
* cd: use custom Dockerfile from ubuntu instead of flutter image
* cd: add setup java for android
* cd: add flutter distributor pre-built docker image for arm
* cd: save me from this cursed arm build
* cd: ??
* cd: ??
* cd: use docker build
* fix: windows SSL Exception for Signing in
* refactor: extract update checker as a basic function instead of a hook
* cd: fix windows build error due to nightly version format
* cd: fix github versioning scheme
* chore: remove assets/ca entry in pubspec.yaml
* fix(macos): Logs directory not created by default #1353
* refactor: Dart based Github Workflow CLI (#1490)
* feat: add build dart script for windows
* feat: add android build support
* feat: add linux build support
* feat: add macos build support
* feat: add ios build support
* feat: add deps install command and workflow file
* cd: what?
* cd: what?
* cd: what?
* cd: update workflow inputs
* cd: replace release binary
* cd: run flutter pub get
* cd: use dpkg zstd instead of xz, windows disable innoInstall, fix channel enum.name and reset pubspec after changing build no for nightly
* cd: fix tar copy path
* cd: fix copy linux command
* cd: fix windows inno depend and fix android aab path
* cd: idk
* cd: linux why???
* cd: windows choco copy failed
* cd: use dart tar archive for creating tar file
* cd: fix linux file copy error
* cd: use tar command directly
* feat: add linux_arm platform
* cd: add linux_arm platform
* cd: don't know what?
* feat: notification about nightly channel update
* chore: fix some errors parsing nightly version info
* refactor: move dart scripts as commands under CLI
* chore: add translated message command to command list
* feat(translations): add Basque translation (#1493)
* added Basque translation
* chore: fix country codes and language native name
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* feat(translations): add georgian language (#1450)
* feat: add georgian language
* feat: translate more georgian words
* feat(translations): add Finnish translations (#1449)
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* added finnish translation
* chore: fix arb syntax errors and language in l10n entries
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
Co-authored-by: Onni Nevala <nevalaonni@gmail.com>
* feat(translations): add Indonesian translation (#1426)
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* Add Indonesia translation
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* feat(translations): Improve tr locales (#1419)
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* Improve tr locales
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* feat(player): add volume slider floating label showing percentage (#1445)
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* add volume level tooltip in volume_slider
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* fix: fallback to LRCLIB when lyrics line less than 6 lines #1461
* feat: Local music library (#1479)
* feat: add one additional library folder
This folder just doesn't get downloaded to.
I think I'm going to rework it so that it can be multiple folders,
but I'm going to commit my progress so far anyway.
Signed-off-by: Blake Leonard <me@blakes.dev>
* chore: update dependencies so that it builds
I'm not sure if this breaks CI or something, but I couldn't build
it locally to test my changes, so I made these changes and it
builds again.
Signed-off-by: Blake Leonard <me@blakes.dev>
* feat: index multiple folders of local music
If you used a previous commit from this branch, this is a breaking
change, because it changes the type of a configuration field. but
since this is still in development, it should be fine.
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: manage local library in local tracks tab
This also refactors the list to use slivers instead. That's the
easiest way to have multiple scrolling lists here...
The console keeps getting spammed with some intermediate layout
error but I can't hold it long enough to figure out what's causing
it.
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: use folder add/remove icons in library
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: remove redundant settings page
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: rename "Local Tracks" to just "Local"
Not sure if this would be the recommended way to do it...
Signed-off-by: Blake Leonard <me@blakes.dev>
* fix: console spam about useless Expanded
Signed-off-by: Blake Leonard <me@blakes.dev>
* chore: remove completed TODO
Signed-off-by: Blake Leonard <me@blakes.dev>
* chore: use new Platform constants; regenerate plugins
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: put local libraries on separate pages
Signed-off-by: Blake Leonard <me@blakes.dev>
---------
Signed-off-by: Blake Leonard <me@blakes.dev>
* fix: local track not showing up in queue
* feat: local library folder cards
* feat: personalized stats based on local music history (#1522)
* feat: add playback history provider
* feat: implement recently played section
* refactor: use route names
* feat: add stats summary and top tracks/artists/albums
* feat: add top date based filtering
* feat: add stream money calculation
* refactor: place search in mobile navbar and settings in home appbar
* feat: add individual minutes and streams page
* feat(stats): add individual minutes and streams page
* chore: default period to 1 month
* feat: add text to explain user how hypothetical fees are calculated
* chore: ensure usage of route names instead of direct paths
* cd: add cache key
* cd: remove media_kit_event_loop from git
* fix: some text are garbled in different parts of the app #1463#1505
* refactor: use replace http with dio and use it as the default
* cd: use dio in cli as well
* chore: fix home feed not showing up
* chore: downloaded tracks folder not opening
* feat: play initially available tracks of playlist/album immediately and fetch rest in background #670
* feat: upgrade to Flutter 3.22.0
* refactor: migrate deprecated warnings
* fix(playback): skipping tracks with unplayable sources instead of falling back #1492
* chore: migrate android gradle to declarative config syntax
* chore: disable impeller for now
* fix(windows): installer tries to install in current directory
* chore: upgrade deps and appbar bg fix
* chore: podspec update
* chore: bump version and generate changelogs
---------
Signed-off-by: Blake Leonard <me@blakes.dev>
Co-authored-by: Kshamendra <github@ghoulcloud.slmail.me>
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Josu Igoa <josuigoa@ni.eus>
Co-authored-by: Omari Sopromadze <omari.sopromadze@gmail.com>
Co-authored-by: ctih <78687256+ctih1@users.noreply.github.com>
Co-authored-by: Onni Nevala <nevalaonni@gmail.com>
Co-authored-by: Yusril Rapsanjani <yusriltakeuchi@gmail.com>
Co-authored-by: W͏ I͏ N͏ Z͏ O͏ R͏ T͏ <75412448+mikropsoft@users.noreply.github.com>
Co-authored-by: Akash Pattnaik <akashjio66666@gmail.com>
Co-authored-by: Blake Leonard <blake@1024256.xyz>
* feat: add playback history provider
* feat: implement recently played section
* refactor: use route names
* feat: add stats summary and top tracks/artists/albums
* feat: add top date based filtering
* feat: add stream money calculation
* refactor: place search in mobile navbar and settings in home appbar
* feat: add individual minutes and streams page
* feat(stats): add individual minutes and streams page
* chore: default period to 1 month
* feat: add text to explain user how hypothetical fees are calculated
* chore: ensure usage of route names instead of direct paths
* cd: add cache key
* cd: remove media_kit_event_loop from git
* feat: add one additional library folder
This folder just doesn't get downloaded to.
I think I'm going to rework it so that it can be multiple folders,
but I'm going to commit my progress so far anyway.
Signed-off-by: Blake Leonard <me@blakes.dev>
* chore: update dependencies so that it builds
I'm not sure if this breaks CI or something, but I couldn't build
it locally to test my changes, so I made these changes and it
builds again.
Signed-off-by: Blake Leonard <me@blakes.dev>
* feat: index multiple folders of local music
If you used a previous commit from this branch, this is a breaking
change, because it changes the type of a configuration field. but
since this is still in development, it should be fine.
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: manage local library in local tracks tab
This also refactors the list to use slivers instead. That's the
easiest way to have multiple scrolling lists here...
The console keeps getting spammed with some intermediate layout
error but I can't hold it long enough to figure out what's causing
it.
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: use folder add/remove icons in library
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: remove redundant settings page
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: rename "Local Tracks" to just "Local"
Not sure if this would be the recommended way to do it...
Signed-off-by: Blake Leonard <me@blakes.dev>
* fix: console spam about useless Expanded
Signed-off-by: Blake Leonard <me@blakes.dev>
* chore: remove completed TODO
Signed-off-by: Blake Leonard <me@blakes.dev>
* chore: use new Platform constants; regenerate plugins
Signed-off-by: Blake Leonard <me@blakes.dev>
* refactor: put local libraries on separate pages
Signed-off-by: Blake Leonard <me@blakes.dev>
---------
Signed-off-by: Blake Leonard <me@blakes.dev>
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* add volume level tooltip in volume_slider
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* Improve tr locales
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* Add Indonesia translation
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* added finnish translation
* chore: fix arb syntax errors and language in l10n entries
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
Co-authored-by: Onni Nevala <nevalaonni@gmail.com>
* fix: certificate error by using custom ssl certificate
* Cd/docker linux ar (#1468)
* cd: use docker buildx
* cd: use linux host for linux arm instead of macos m1
m1 doesn't support nested virtualization. (Apple truly sucks)
* cd: don't specify arch in Dockerfile
* cd: use custom Dockerfile from ubuntu instead of flutter image
* cd: add setup java for android
* cd: add flutter distributor pre-built docker image for arm
* cd: save me from this cursed arm build
* cd: ??
* cd: ??
* cd: use docker build
* fix: windows SSL Exception for Signing in
* refactor: extract update checker as a basic function instead of a hook
* docs: broken link in README.md (fixes#1310) (#1311)
* docs: remove appimage link in readme #1082 (#1171)
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* Update use_update_checker.dart
---------
Co-authored-by: MerkomassDev <70111455+MerkomassDev@users.noreply.github.com>
Co-authored-by: Karim <37943746+ksaadDE@users.noreply.github.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* refactor: remove SourcedTrack based audio player and utilize mediakit playback system
* feat: implement local (loopback) server to resolve stream source and leverage the media_kit playback API
* feat: add source change support and re-add prefetching tracks
* fix: assign lastId when track fetch completes regardless of error
* chore: remove print statements
* fix: remote queue not working
* fix: increase mpv network timeout to reduce auto-skipping
* fix: do not pre-fetch local tracks
* fix(proxy-playlist): reset collections on load
* chore: fix lint warnings
* fix(mobile): player overlay should not be visible when the player is not playing
* chore: fix typo in turkish translation
* cd: checkout PR branch
* cd: upgrade flutter version
* chore: fix lint errors
* Updating Readme according to #1082
Updating Readme according to #1082
* Added explanation
The explanation is now given and the expression is more formal and explanatory, instead of just linking the issue.
* feat: add connect server support
* feat: add ability discover and connect to same network Spotube(s) and sync queue
* feat(connect): add player controls, shuffle, loop, progress bar and queue support
* feat: make control page adaptive
* feat: add volume control support
* cd: upgrade macos runner version
* chore: upgrade inappwebview version to 6
* feat: customized devices button
* feat: add user icon next to devices button
* feat: add play in remote device support
* feat: show alert when new client connects
* fix: ignore the device itself from broadcast list
* fix: volume control not working
* feat: add ability to select current device's output speaker
* feat: add riverpod based favorite album provider
* feat: add album is saved, new releases and tracks providers
* feat: add artist related providers
* feat: add all categories providers
* feat: add lyrics provider
* feat: add playlist related providers
* feat: add search provider
* feat: add view and spotify friends provider
* feat: add playlist create and update and favorite handlers
* feat: use providers in home screen
* chore: fix dart lint issues
* feat: use new providers for playlist and albums screen
* feat: use providers in artist page
* feat: use providers on library page
* feat: use provider for playlist and album card and heart button
* feat: use provider in search page
* feat: use providers in generate playlist
* feat: use provider in lyrics screen
* feat: use provider for create playlist
* feat: use provider in add track dialog
* feat: use providers in remaining pages and remove fl_query
* fix: remove direct access to provider.value
* fix: glitching when loading
* fix: user album loading next page indicator
* feat: make many provider autoDispose after 5 minutes of no usage
* fix: ignore episodes in tracks
* this change fixes the garbled audio on my Pixel 6a while the screen is off. Not familiar with libmpv, but seems to favor audiotrack audio output over opensles. KRTirtho/spotube#571
* get audio session id, send it to AudioTrack in libmpv, broadcast it to other apps. FixesKRTirtho/spotube#1221
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* actions: Add Up for grab checkbox to issue templates. (#1074)
* docs: update copyright year in README.md (#1100)
year changed from 2023 to 2024
* feat(translations): add Nepali (नेपाली) translations
---------
Co-authored-by: Taha Ghadirian <taha@smilecode.ir>
Co-authored-by: Muhammad Jawad <70428284+m-Jawa-d@users.noreply.github.com>
* feat: add spotify friend endpoint
* feat: add friend activity in home screen
* fix: when no friends, dummy UI still shows giving the user a false hope of friendship :'(
* Rephrased README.md
* Update README.md
Put extra emphasis on the fact that Shows and Podcasts can ONLY be accessed with spotify premium
* One line fix in README.md
last change was unnecessary :)
* Fix song not playing when m4a or weba is not available (one is available but not the other) for that song
* Update lib/services/sourced_track/sources/youtube.dart
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* Update language_codes.dart
Added Dutch
* Added Dutch language
* Added Dutch
my contribution credentials included
* Added Dutch Language
* fixed a mistake
"Vlaams" is a very specific term to describe the Belgian Dutch dialect. "Nederland" is the correct way.
* fixed a mistake
"Nederlands" actually, got mixed up a bit
* Italian language added
Created and added the Italian language
* Corrections and new textes
Corrected the wrong TAB in i10n.dart and added translations of new text items
* Fix
it const name was lowercase
* Merged suggestions from PR #676, added credits
Added suggestions as in comments of PR #676 and added credits to @ncvescera and @OpenCode
* feat: implement new SourcedTrack for youtube and piped
* refactor: replace old spotube track with sourced track
* feat: add jiosaavn as audio source
* fix: download not working other than jiosaavn
* Merge branch 'dev' into feat-jiosaavn
* feat: add codec configuration in settings
* fix: show no value for codec configuration in smaller screen
* feat: implement configurable codec for download & streaming music
These images meet the desired quality and dimensions for Steam Grid DB's assets, allowing users to to add them to their steam library when launching Spotube from within the Steam interface (such as when using a Steamdeck).
I've already submitted to steam grid DB, but these assets may also come in handy in other places so thought it would make sense to offer them to the project :)
* chore: refactor CLI stuff to separate service folder
* chore: trying to fix memory leak
* chore: fix fl_Query_devtools in wrong place
* chore: upgrade deps
* fix: user liked tracks memory leak due to isStale & updateQueryFn
* Readability changes in README.md (#625)
* Made README.md introduction more readable
* Underlined important reminder in README.md
even though the reminder is bold, it's not visible enough
* small typo fix README.md
removed an unnecesary comma
* Russian translation added
---------
Co-authored-by: MerkomassDev <merkomass@gmail.com>
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* Made README.md introduction more readable
* Underlined important reminder in README.md
even though the reminder is bold, it's not visible enough
* small typo fix README.md
removed an unnecesary comma
* chore: update library credits
* chore: increase score when title matchs
* chore: adjust score for both official flag & track name in title
* chore: use scoring for non-english tracks only
* added Portuguese (Brazil) translation
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* feat: Enhance mobile responsiveness
Adjusted the code to improve the display and functionality on mobile devices. This includes responsive design updates and layout adjustments to ensure a better user experience on smaller screens.
* Delete package-lock.json
* cd: add potential duplicate issue detect workflow
* Polish trasnlation
May be not 100% accurate
* translate addicional records from dev branch
* reviewed changes and my review also ;)
thanks for fast review :)
* changes after first build
* fix after second build
* Update lib/l10n/app_pl.arb
Thanks for review
Co-authored-by: Piotr Rogowski <piotr.rogowski0@gmail.com>
* Update lib/l10n/app_pl.arb
Thanks for review
Co-authored-by: Piotr Rogowski <piotr.rogowski0@gmail.com>
* Update lib/l10n/app_pl.arb
Thanks for review
Co-authored-by: Piotr Rogowski <piotr.rogowski0@gmail.com>
* Update lib/l10n/app_pl.arb
Thanks for review
Co-authored-by: Piotr Rogowski <piotr.rogowski0@gmail.com>
* Update lib/l10n/app_pl.arb
Thanks for review
Co-authored-by: Piotr Rogowski <piotr.rogowski0@gmail.com>
* Update lib/l10n/app_pl.arb
Thanks for review
Co-authored-by: Piotr Rogowski <piotr.rogowski0@gmail.com>
* Update lib/l10n/app_pl.arb
Thanks for review
Co-authored-by: Piotr Rogowski <piotr.rogowski0@gmail.com>
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
Co-authored-by: Piotr Rogowski <piotr.rogowski0@gmail.com>
* feat: concurrent download service & download prorvider
* feat: implement chunked downloader
* fix: no audio-tags in Linux and duration not showing up for local tracks
* feat: show matching tracks in queue as well
* feat: always uses piped api for download to avoid IP block
* fix: invalid downloadCount
* Force High Refresh Rate on some Android devices
* fix: check android platform for high refresh-rate
---------
Co-authored-by: Kingkor Roy Tirtho <krtirtho@gmail.com>
* chore: add playstore appbundle build step without update checker
* chore: only include playstore upload binary for now
* chore: update build number to patch 1
* chore: rollback
* chore: rollback upload artifact
* Initial README changes
More to come
* Woah, fancy!
* Emojios and stuff
* Test height
* Another one
* I think it's good now
* More cool stuff
* MORE EMOJIS!!
* Rewrite table in HTML
My brain hurts
* Minor touches
* Rewording
* Some small tweaks
* Discard extra install instructions
Hi there.
Your app is great but I noticed some issues in the README and decided to fix them. I didn’t change the overall layout, but made some minor improvements here and there: fixed some grammar issues, clarified the wordings of some sentences, moved some elements to make better sense, fixed weird capitalizations, tweaked the size of some icons, and replaced an Android icon with a better one.
BRIEF DESCRIPTION:
- Nested Routes like React-Router/Spotify Web/desktop
- Except Login routes everything is nested and wrapped by a Shell
- PlayerOverlay is no more a overlay
A really simple Sidebar now
build: bump version to 2.4.0 for next release
fix: playlist view, album view, local track view play another track of already playing album/playlist behavior
track Share popup menu not showing when not logged in fix
page tranistions changed to default material 3 design's
Wrong link in Login page fix
Changing UserPreferences provider resets the Playback provider
using using hookified_infinite_scroll_pagination officially
I had this line `GStreamer element autoaudiosink not found. Please install it` and couldn't start playing a song, after installing `gst-plugins-good` it worked.
I now have `WebKit wasn't able to find a WebVTT encoder. Subtitles handling will be degraded unless gst-plugins-bad is installed.` but installing it only get rid of the message without having any noticeable improvement so I didn't put it in the PKGBUILD since the plugin have a lot of dependencies.
Save/Remove album support
Add/Remove track from favorite support
Easier way to create secrets locally
Updated contribution details according newest changes
Download track feature complete support in Android
Android sudden solid color screen
inno-script updated for permission_handler
gensums updated for support for android apk
updated description of Spotube in every file
changes added to CHANGELOG
PlayerControls slider & duration are now vertical
hotkey init moved to Home
Player & YoutubeExplode are provided through riverpod
Playback handles all things Player used to do
GoRoutes are seperated from main to individual model file
usePaletteColor bugfix occuring for before initilizing mount
imageToUrlString uses uuid instead of DateTime.now()
seperated parts of Player for reuse accross different sizes of screen's specific widgets
integrating go_router to follow declarative route approach
label:Is there an existing issue for this? (Please read the description)
description:|
🚨 PLEASE! Make sure to check if this issue is a duplicate. 🚨
Don't waste our time, we are working hard to make Spotube better for you.
Try with multiple similar keywords, and check the closed issues too.
options:
- label:I have searched the existing issues
required:true
- type:textarea
attributes:
label:Current Behavior
description:Write what you are experiencing currently.
placeholder:|
The app isn't working as expected. It crashes when I do this...
validations:
required:true
- type:textarea
attributes:
label:Expected Behavior
description:Write what you expected to happen.
placeholder:|
The app should do this when I do that...
validations:
required:true
- type:textarea
attributes:
label:Steps to reproduce
description:Steps to reproduce the issue. A not well written description might lead to the delay in fixing the issue.
placeholder:|
1. I opened the app
2. I did this
3. And that
4. Then this happened
- type:textarea
attributes:
label:Logs
description:|
If you have any logs, paste them here. Make sure to remove any sensitive information.
You can find the logs in the app's Settings > Developers > Logs page.
value:|
<details>
<summary>Logs</summary>
```
<Replace this line by pasting your logs here>
```
</details>
validations:
required:true
- type:input
attributes:
label:Operating System
description:The OS in which you used Spotube to face the issue. Use comma to separate multiple OS.
placeholder:Android, Linux, macOS or Windows? Make sure to include the version too.
validations:
required:true
- type:input
attributes:
label:Spotube version
description:In which version of Spotube did you encounter this bug?
placeholder:(e.g.) v3.0.0
- type:dropdown
attributes:
label:Installation source
description:Where did you install Spotube from?
multiple:true
options:
- "Website (spotube.krtirtho.dev)"
- "GitHub Releases (Binary)"
- "GitHub Actions (Nightly Binary)"
- "Play Store (Android)"
- "F-Droid (Android)"
- "Arch User Repository (AUR)"
- "Flathub (Flatpak)"
- "chocolatey (Windows)"
- "WinGet (Windows)"
- "Scoop (Windows)"
validations:
required:true
- type:textarea
attributes:
label:Additional information
description:Anything else you'd like to include?
validations:
required:false
- type:checkboxes
attributes:
label:Self grab
description:|
If you are a developer and want to work on this issue yourself, you can check this box and wait for maintainer response. Any contributions are welcome!
This project is maintained by one person. So PRs are always welcome. This is the best way to get your issue fixed faster.
description:Make sure to check if this issue is a duplicate.
options:
- label:I have searched the existing issues
required:true
- type:textarea
attributes:
label:Pain
description:Explain the pain you're experiencing.
placeholder:I don't like that I've to do this / I'd like to have that
validations:
required:true
- type:textarea
attributes:
label:Suggested solution
description:Tell us about a solution you can think of
placeholder:You could add that / change this / use that
validations:
required:true
- type:textarea
attributes:
label:Useful resources
description:Provide us with some useful resource which could help us implement your suggestion.
- type:textarea
attributes:
label:Additional information
description:Anything else you'd like to include?
validations:
required:false
- type:checkboxes
attributes:
label:Self grab
description:If you are a developer and want to work on this issue yourself, you can check this box and wait for maintainer response. We welcome contributions!
First off, thanks for taking the time to contribute! ❤️
All types of contributions are encouraged and valued. See the [Table of Contents](#table-of-contents) for different ways to help and details about how this project handles them. Please make sure to read the relevant section before making your contribution. It will make it a lot easier for us maintainers and smooth out the experience for all involved. The community looks forward to your contributions. 🎉
> And if you like the project, but just don't have time to contribute, that's fine. There are other easy ways to support the project and show your appreciation, which we would also be very happy about:
>
> - Star the project
> - Tweet about it
> - Refer this project in your project's readme
> - Mention the project at local meetups and tell your friends/colleagues
## Table of Contents
- [Contributing to Spotube](#contributing-to-spotube)
- [Table of Contents](#table-of-contents)
- [Code of Conduct](#code-of-conduct)
- [I Have a Question](#i-have-a-question)
- [I Want To Contribute](#i-want-to-contribute)
- [Reporting Bugs](#reporting-bugs)
- [Before Submitting a Bug Report](#before-submitting-a-bug-report)
- [How Do I Submit a Good Bug Report?](#how-do-i-submit-a-good-bug-report)
- [Before Submitting an Enhancement](#before-submitting-an-enhancement)
- [How Do I Submit a Good Enhancement Suggestion?](#how-do-i-submit-a-good-enhancement-suggestion)
- [Your First Code Contribution](#your-first-code-contribution)
- [Submit Translations](#submit-translations)
## Code of Conduct
This project and everyone participating in it is governed by the
[Spotube Code of Conduct](https://github.com/KRTirtho/spotube/blob/master/CODE_OF_CONDUCT.md).
By participating, you are expected to uphold this code. Please report unacceptable behavior
to krtirtho@gmail.com.
## I Have a Question
> If you want to ask a question, we assume that you have read the available [Documentation](https://github.com/KRTirtho/spotube#readme).
Before you ask a question, it is best to search for existing [Issues](https://github.com/KRTirtho/spotube/issues) that might help you. In case you have found a suitable issue and still need clarification, you can write your question in this issue. It is also advisable to search the internet for answers first.
If you then still feel the need to ask a question and need clarification, we recommend the following:
- Open an [Discussion](https://github.com/KRTirtho/spotube/discussions/new) with the question label.
- Provide as much context as you can about what you're running into.
- Provide project and platform versions (flutter, dart, pub, linux etc..), depending on what seems relevant.
We will then take care of the issue as soon as possible.
## I Want To Contribute
> ### Legal Notice
>
> When contributing to this project, you must agree that you have authored 100% of the content, that you have the necessary rights to the content and that the content you contribute may be provided under the project license.
### Reporting Bugs
#### Before Submitting a Bug Report
A good bug report shouldn't leave others needing to chase you up for more information. Therefore, we ask you to investigate carefully, collect information and describe the issue in detail in your report. Please complete the following steps in advance to help us fix any potential bug as fast as possible.
- Make sure that you are using the latest version.
- Determine if your bug is really a bug and not an error on your side e.g. using incompatible environment components/versions (Make sure that you have read the [documentation](https://github.com/KRTirtho/spotube#readme). If you are looking for support, you might want to check [this section](#i-have-a-question)).
- To see if other users have experienced (and potentially already solved) the same issue you are having, check if there is not already a bug report existing for your bug or error in the [bug tracker](https://github.com/KRTirtho/spotubeissues?q=label%3Abug).
- Also make sure to search the internet (including Stack Overflow) to see if users outside of the GitHub community have discussed the issue.
- Collect information about the bug:
- Stack trace (Traceback)
- OS, Platform and Version (Windows, Linux, macOS, x86, ARM)
- Version of the interpreter, compiler, SDK, runtime environment, package manager, depending on what seems relevant.
- Possibly your input and the output
- Can you reliably reproduce the issue? And can you also reproduce it with older versions?
#### How Do I Submit a Good Bug Report?
> You must never report security related issues, vulnerabilities or bugs including sensitive information to the issue tracker, or elsewhere in public. Instead sensitive bugs must be sent by email to
We use GitHub issues to track bugs and errors. If you run into an issue with the project:
- Open an [Issue](https://github.com/KRTirtho/spotube/issues/new). (Since we can't be sure at this point whether it is a bug or not, we ask you not to talk about a bug yet and not to label the issue.)
- Explain the behavior you would expect and the actual behavior.
- Please provide as much context as possible and describe the _reproduction steps_ that someone else can follow to recreate the issue on their own. This usually includes your code. For good bug reports you should isolate the problem and create a reduced test case.
- Provide the information you collected in the previous section.
Once it's filed:
- The project team will label the issue accordingly.
- A team member will try to reproduce the issue with your provided steps. If there are no reproduction steps or no obvious way to reproduce the issue, the team will ask you for those steps and mark the issue as `needs-repro`. Bugs with the `needs-repro` tag will not be addressed until they are reproduced.
- If the team is able to reproduce the issue, it will be marked `needs-fix`, as well as possibly other tags (such as `critical`), and the issue will be left to be [implemented by someone](#your-first-code-contribution).
### Suggesting Enhancements
This section guides you through submitting an enhancement suggestion for Spotube, **including completely new features and minor improvements to existing functionality**. Following these guidelines will help maintainers and the community to understand your suggestion and find related suggestions.
<!-- omit in toc -->
#### Before Submitting an Enhancement
- Make sure that you are using the latest version.
- Read the [documentation](https://github.com/KRTirtho/spotube#readme) carefully and find out if the functionality is already covered, maybe by an individual configuration.
- Perform a [search](https://github.com/KRTirtho/spotube/issues) to see if the enhancement has already been suggested. If it has, add a comment to the existing issue instead of opening a new one.
- Find out whether your idea fits with the scope and aims of the project. It's up to you to make a strong case to convince the project's developers of the merits of this feature. Keep in mind that we want features that will be useful to the majority of our users and not just a small subset
<!-- omit in toc -->
#### How Do I Submit a Good Enhancement Suggestion?
Enhancement suggestions are tracked as [GitHub issues](https://github.com/KRTirtho/spotube/issues).
- Use a **clear and descriptive title** for the issue to identify the suggestion.
- Provide a **step-by-step description of the suggested enhancement** in as many details as possible.
- **Describe the current behavior** and **explain which behavior you expected to see instead** and why. At this point you can also tell which alternatives do not work for you.
- You may want to **include screenshots and animated GIFs** which help you demonstrate the steps or point out the part which the suggestion is related to. You can use [this tool](https://www.cockos.com/licecap/) to record GIFs on macOS and Windows, and [this tool](https://github.com/colinkeenan/silentcast) or [this tool](https://github.com/GNOME/byzanz) on Linux. <!-- this should only be included if the project has a GUI -->
- **Explain why this enhancement would be useful** to most Spotube users. You may also want to point out the other projects that solved it better and which could serve as inspiration.
### Your First Code Contribution
<!-- Download -->
Do the following:
- Install [Dart](https://dart.dev/get-dart) and [fvm](https://fvm.app/documentation/getting-started/installation)
- Create a `.env` in root of the project following the `.env.example` template
- Now run the following to bootstrap the project
```bash
fvm flutter pub get && fvm dart run build_runner build --delete-conflicting-outputs
```
- Finally run these following commands in the root of the project to start the Spotube Locally
```bash
fvm flutter run -d <window|macos|linux|(<android-device-id>)>
```
Do debugging/testing/build etc then submit to us with PR against the development branch (dev) & we'll review your code
### Submit Translations
Make sure you're familiar with [Flutter localization](https://docs.flutter.dev/ui/accessibility-and-localization/internationalization). Then, you can start translating the app by following these steps:
- Do all the steps in [Your First Code Contribution](#your-first-code-contribution)
- Make sure application starts in debug mode
- Now, in `lib/l10n/app_<2-letter code of your language>.arb` (create if not exists) add necessary translations
> (You can follow the `lib/l10n/app_en.arb` for reference)
- If you're adding missing translations, you can check the `/untranslated_messages.json` file to see which messages are missing in your native locale
- If you added entirely new translations:
- Add `const Locale('<2-letter language code>', '<2-letter ISO country code>')` in `lib/l10n/l10n.dart`'s `static final all = [...]` variable
- Uncomment the Map entry of your locale from `lib/collections/language_codes.dart`'s `static final Map isoLangs = {` variable
- Now restart (hot restart if running already) the app in debug mode & go to "Settings" > "Language" & see if your locale shows up
- If it does, select it & see if the app is translated properly
- Now git commit the changes & push
- Finally, submit a PR against the development branch (dev) & we'll review your code
Copyright (c) 2025 Kingkor Roy Tirtho. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
3. All advertising materials mentioning features or use of this software must display the following acknowledgement:
This product includes software developed by Kingkor Roy Tirtho.
4. Neither the name of the Software nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.
THIS SOFTWARE IS PROVIDED BY KINGKOR ROY TIRTHO AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL KINGKOR ROY TIRTHO AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
Kingkor Roy Tirtho built the Spotube app as an Open Source app. This SERVICE is provided by Kingkor Roy Tirtho at no cost and is intended for use as is.
This page is used to inform visitors regarding my policies with the collection, use, and disclosure of Personal Information if anyone decided to use my Service.
If you choose to use my Service, then you agree to the collection and use of information in relation to this policy. The Personal Information that I collect is used for providing and improving the Service. I will not use or share your information with anyone except as described in this Privacy Policy.
The terms used in this Privacy Policy have the same meanings as in our Terms and Conditions, which are accessible at Spotube unless otherwise defined in this Privacy Policy.
**Information Collection and Use**
For a better experience, while using our Service, I may require you to provide us with certain personally identifiable information. The information that I request will be retained on your device and is not collected by me in any way.
The app does use third-party services that may collect information used to identify you.
Link to the privacy policy of third-party service providers used by the app
* [Google Play Services](https://www.google.com/policies/privacy/)
**Log Data**
Log Data may include information such as your device Internet Protocol (“IP”) address, device name, operating system version, the configuration of the app when utilizing my Service, the time and date of your use of the Service, and other statistics. But none of this info leaves your device. It's stored in a log-file on your device only accessible to you.
**Cookies**
Cookies are files with a small amount of data that are commonly used as anonymous unique identifiers. These are sent to your browser from the websites that you visit and are stored on your device's internal memory.
This Service does not use these “cookies” explicitly. How ever the some services may use cookies for their cause (e.g. improvement) but you can deny them once asked
**Service Providers**
I may employ third-party companies and individuals due to the following reasons:
* To facilitate our Service;
* To provide the Service on our behalf;
* To perform Service-related services; or
* To assist us in analyzing how our Service is used.
I want to inform users of this Service that these third parties have access to their Personal Information. The reason is to perform the tasks assigned to them on our behalf. However, they are obligated not to disclose or use the information for any other purpose.
**Security**
I value your trust in providing us your Personal Information, thus we are striving to use commercially acceptable means of protecting it. But remember that no method of transmission over the internet, or method of electronic storage is 100% secure and reliable, and I cannot guarantee its absolute security.
**Links to Other Sites**
This Service may contain links to other sites. If you click on a third-party link, you will be directed to that site. Note that these external sites are not operated by me. Therefore, I strongly advise you to review the Privacy Policy of these websites. I have no control over and assume no responsibility for the content, privacy policies, or practices of any third-party sites or services.
**Children’s Privacy**
These Services do not address anyone under the age of 13. I do not knowingly collect personally identifiable information from children under 13 years of age. In the case I discover that a child under 13 has provided me with personal information, I immediately delete this from our servers. If you are a parent or guardian and you are aware that your child has provided us with personal information, please contact me so that I will be able to do the necessary actions.
**Changes to This Privacy Policy**
I may update our Privacy Policy from time to time. Thus, you are advised to review this page periodically for any changes. I will notify you of any changes by posting the new Privacy Policy on this page.
This policy is effective as of 2022-04-01
**Contact Us**
If you have any questions or suggestions about my Privacy Policy, do not hesitate to contact me at krtirtho@gmail.com.
Spotube is a [qt](https://qt.io) based lightweight spotify client which uses [nodegui/react-nodegui](https://github.com/nodegui/react-nodegui) as frontend & nodejs as backend. It utilizes the power of Spotify & Youtube's public API & creates a hazardless, performant & resource friendly User Experience
A cross-platform extensible open-source music streaming platform.<br>
Bring your own music metadata/playlist with plugins created by community or by yourself. A small step towards the decentralized music streaming era!
## Features
Btw it's not just another Electron app 😉
Following are the features that currently spotube offers:
<ahref="https://spotube.krtirtho.dev"><imgalt="Visit the website"height="56"src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/documentation/website_vector.svg"></a>
- No telementry, diagnostics or user data collection
- Lightweight & resource friendly
- Near native performance & seemless with default desktop themes (Win10, Win7, OSX, QT-default)
- 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
<ahref="https://patreon.com/krtirtho"><imgalt="Support me on Patron"height="56"src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/donate/patreon-singular_vector.svg"></a>
<ahref="https://www.buymeacoffee.com/krtirtho"><imgalt="Buy me a Coffee"height="56"src="https://cdn.jsdelivr.net/npm/@intergrav/devins-badges@3/assets/cozy/donate/buymeacoffee-singular_vector.svg"></a>
Don't worry **spotify premium isn't required**😱. But some extra packages are required.
<ahref="https://opencollective.com/spotube"><imgsrc="https://opencollective.com/spotube/donate/button.png?color=blue"alt="Donate to our Open Collective"height="45"></a>
- [MPV](https://mpv.io/installation/) player for playing the actual audio
- [youtube-dl](https://github.com/ytdl-org/youtube-dl) for streaming the audio from youtube. It already comes pre bundled with mpv
---
> **Important for [Ubuntu/Debian]():** If you're using any **ubuntu/debian** based linux distro then **youtube-dl** installed from the typical **apt-get** repositories will most likely not work as that version is older than current release. So remove it & install from the repository manually
- 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
1. [Flutter](https://flutter.dev) - Flutter transforms the app development process. Build, test, and deploy beautiful mobile, web, desktop, and embedded apps from a single codebase
1. [MPV](https://mpv.io) - mpv is a free (as in freedom) media player for the command line. It supports a wide variety of media file formats, audio and video codecs, and subtitle types.
1. [Musicbrainz](https://musicbrainz.org) - MusicBrainz is a MetaBrainz project that aims to create a collaborative music database that is similar to the freedb project.
1. [Listenbrainz](https://listenbrainz.org) - ListenBrainz is a open-source project by the MetaBrainz Foundation that allows users to crowdsource and publicly store their digital music listening data.
1. [Piped](https://piped-docs.kavin.rocks/) - Piped is a privacy friendly alternative YouTube frontend, which is efficient and scalable by design.
1. [Invidious](https://invidious.io/) - Invidious is an open source alternative front-end to YouTube.
1. [yt-dlp](https://github.com/yt-dlp/yt-dlp) - A feature-rich command-line audio/video downloader.
1. [NewPipeExtractor](https://github.com/TeamNewPipe/NewPipeExtractor) - NewPipe's core library for extracting data from streaming sites.
1. [SongLink](https://song.link) - SongLink is a free smart link service that helps you share music with your audience. It's a one-stop-shop for creating smart links for music, podcasts, and other audio content
1. [LRCLib](https://lrclib.net/) - A public synced lyric API.
1. [Linux](https://www.linux.org) - 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
1. [AUR](https://aur.archlinux.org) - AUR stands for Arch User Repository. It is a community-driven repository for Arch-based Linux distributions users
1. [Flatpak](https://flatpak.org) - Flatpak is a utility for software deployment and package management for Linux
1. [SponsorBlock](https://sponsor.ajay.app) - SponsorBlock is an open-source crowdsourced browser extension and open API for skipping sponsor segments in YouTube videos.
1. [Inno Setup](https://jrsoftware.org/isinfo.php) - Inno Setup is a free installer for Windows programs by Jordan Russell and Martijn Laan
1. [F-Droid](https://f-droid.org) - F-Droid is an installable catalogue of FOSS (Free and Open Source Software) applications for the Android platform. The client makes it easy to browse, install, and keep track of updates on your device
1. [LastFM](https://last.fm) - Last.fm is a music streaming and discovery platform that helps users discover and share new music. It tracks users' music listening habits across many devices and platforms.
- Click on **SHOW CLIENT SECRET** to reveal the **clientSecret**. Then copy the **clientID**, **clientSecret**& paste in the **Spotube's** respective fields
> **Note!**: No personal data or any kind of sensitive information won't be collected from spotify. Don't believe? See the code for yourself
1. [app_links](https://github.com/llfbandit/app_links) - Android App Links, Deep Links, iOs Universal Links and Custom URL schemes handler for Flutter (desktop included).
1. [args](https://pub.dev/packages/args) - Library for defining parsers for parsing raw command-line arguments into a set of options and values using GNU and POSIX style options.
1. [async](https://pub.dev/packages/async) - Utility functions and classes related to the 'dart:async' library.
1. [audio_service](https://pub.dev/packages/audio_service) - Flutter plugin to play audio in the background while the screen is off.
1. [audio_service_mpris](https://github.com/bdrazhzhov/audio-service-mpris) - audio_service platform interface supporting Media Player Remote Interfacing Specification.
1. [audio_session](https://github.com/ryanheise/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.
1. [auto_route](https://github.com/Milad-Akarie/auto_route_library) - AutoRoute is a declarative routing solution, where everything needed for navigation is automatically generated for you.
1. [auto_size_text](https://github.com/leisim/auto_size_text) - Flutter widget that automatically resizes text to fit perfectly within its bounds.
1. [bonsoir](https://bonsoir.skyost.eu) - A Zeroconf library that allows you to discover network services and to broadcast your own. Based on Apple Bonjour and Android NSD.
1. [cached_network_image](https://github.com/Baseflow/flutter_cached_network_image) - Flutter library to load and cache network images. Can also be used with placeholder and error widgets.
1. [connectivity_plus](https://github.com/fluttercommunity/plus_plugins) - Flutter plugin for discovering the state of the network (WiFi & mobile/cellular) connectivity on Android and iOS.
1. [device_info_plus](https://github.com/fluttercommunity/plus_plugins) - Flutter plugin providing detailed information about the device (make, model, etc.), and Android or iOS version the app is running on.
1. [dio](https://github.com/cfug/dio) - A powerful HTTP networking package,supports Interceptors,Aborting and canceling a request,Custom adapters, Transformers, etc.
1. [drift](https://drift.simonbinder.eu/) - Drift is a reactive library to store relational data in Dart and Flutter applications.
1. [duration](https://github.com/desktop-dart/duration) - Utilities to make working with 'Duration's easier. Formats duration in human readable form and also parses duration in human readable form to Dart's Duration.
1. [encrypt](https://pub.dev/packages/encrypt) - A set of high-level APIs over PointyCastle for two-way cryptography.
1. [envied](https://github.com/petercinibulk/envied) - Explicitly reads environment variables into a dart file from a .env file for more security and faster start up times.
1. [file_picker](https://github.com/miguelpruivo/plugins_flutter_file_picker) - A package that allows you to use a native file explorer to pick single or multiple absolute file paths, with extension filtering support.
1. [file_selector](https://pub.dev/packages/file_selector) - Flutter plugin for opening and saving files, or selecting directories, using native file selection UI.
1. [fluentui_system_icons](https://github.com/microsoft/fluentui-system-icons/tree/main) - Fluent UI System Icons are a collection of familiar, friendly and modern icons from Microsoft.
1. [flutter_cache_manager](https://github.com/Baseflow/flutter_cache_manager/tree/develop/flutter_cache_manager) - Generic cache manager for flutter. Saves web files on the storages of the device and saves the cache info using sqflite.
1. [flutter_discord_rpc](https://pub.dev/packages/flutter_discord_rpc) - Discord RPC support for Flutter desktop platforms
1. [flutter_displaymode](https://github.com/ajinasokan/flutter_displaymode) - A Flutter plugin to set display mode (resolution, refresh rate) on Android platform. Allows to enable high refresh rate on supported devices.
1. [flutter_feather_icons](https://github.com/muj-programmer/flutter_feather_icons) - Feather is a collection of simply beautiful open source icons. Each icon is designed on a 24x24 grid with an emphasis on simplicity, consistency and usability.
1. [flutter_form_builder](https://github.com/flutter-form-builder-ecosystem) - This package helps in creation of forms in Flutter by removing the boilerplate code, reusing validation, react to changes, and collect final user input.
1. [flutter_hooks](https://github.com/rrousselGit/flutter_hooks) - A flutter implementation of React hooks. It adds a new kind of widget with enhanced code reuse.
1. [flutter_inappwebview](https://inappwebview.dev/) - A Flutter plugin that allows you to add an inline webview, to use an headless webview, and to open an in-app browser window.
1. [flutter_native_splash](https://pub.dev/packages/flutter_native_splash) - Customize Flutter's default white native splash screen with background color and splash image. Supports dark mode, full screen, and more.
1. [flutter_riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
1. [flutter_secure_storage](https://pub.dev/packages/flutter_secure_storage) - Flutter Secure Storage provides API to store data in secure storage. Keychain is used in iOS, KeyStore based solution is used in Android.
1. [flutter_sharing_intent](https://github.com/bhagat-techind/flutter_sharing_intent.git) - A flutter plugin that allow flutter apps to receive photos, videos, text, urls or any other file types from another app.
1. [flutter_undraw](https://github.com/KRTirtho/flutter_undraw) - Undraw.co Illustrations for Flutter with customization options
1. [form_builder_validators](https://github.com/flutter-form-builder-ecosystem) - Form Builder Validators set of validators for FlutterFormBuilder. Provides common validators and a way to make your own.
1. [form_validator](https://github.com/TheMisir/form-validator) - Simplest form validation library for flutter's form field widgets
1. [freezed_annotation](https://pub.dev/packages/freezed_annotation) - Annotations for the freezed code-generator. This package does nothing without freezed too.
1. [fuzzywuzzy](https://github.com/sphericalkat/dart-fuzzywuzzy) - An implementation of the popular fuzzywuzzy package in Dart, to suit all your fuzzy string matching/searching needs!
1. [gap](https://github.com/letsar/gap) - Flutter widgets for easily adding gaps inside Flex widgets such as Columns and Rows or scrolling views.
1. [google_fonts](https://pub.dev/packages/google_fonts) - A Flutter package to use fonts from fonts.google.com. Supports HTTP fetching, caching, and asset bundling.
1. [home_widget](https://pub.dev/packages/home_widget) - A plugin to provide a common interface for creating HomeScreen Widgets for Android and iOS.
1. [hooks_riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
1. [html](https://pub.dev/packages/html) - APIs for parsing and manipulating HTML content outside the browser.
1. [html_unescape](https://github.com/filiph/html_unescape) - A small library for un-escaping HTML. Supports all Named Character References, Decimal Character References and Hexadecimal Character References.
1. [http](https://pub.dev/packages/http) - A composable, multi-platform, Future-based API for HTTP requests.
1. [image_picker](https://pub.dev/packages/image_picker) - Flutter plugin for selecting images from the Android and iOS image library, and taking new pictures with the camera.
1. [intl](https://pub.dev/packages/intl) - Contains code to deal with internationalized/localized messages, date and number formatting and parsing, bi-directional text, and other internationalization issues.
1. [invidious](https://pub.dev/packages/invidious) - Invidious API client for Dart and Flutter.
1. [jiosaavn](https://github.com/KRTirtho/jiosaavn) - Unofficial API client for jiosaavn.com
1. [json_annotation](https://pub.dev/packages/json_annotation) - Classes and helper functions that support JSON code generation via the `json_serializable` package.
1. [local_notifier](https://github.com/leanflutter/local_notifier) - This plugin allows Flutter desktop apps to displaying local notifications.
1. [logger](https://pub.dev/packages/logger) - Small, easy to use and extensible logger which prints beautiful logs.
1. [logging](https://pub.dev/packages/logging) - Provides APIs for debugging and error logging, similar to loggers in other languages, such as the Closure JS Logger and java.util.logging.Logger.
1. [lrc](https://pub.dev/packages/lrc) - A Dart-only package that creates, parses, and handles LRC, which is a format that stores song lyrics.
1. [media_kit](https://github.com/media-kit/media-kit) - A cross-platform video player & audio player for Flutter & Dart. Performant, stable, feature-proof & modular.
1. [media_kit_libs_audio](https://github.com/media-kit/media-kit.git) - package:media_kit audio (only) playback native libraries for all platforms.
1. [metadata_god](https://pub.dev/packages/metadata_god) - Plugin for retrieving and writing audio tags/metadata from audio files
1. [mime](https://pub.dev/packages/mime) - Utilities for handling media (MIME) types, including determining a type from a file extension and file contents.
1. [open_file](https://pub.dev/packages/open_file) - A plug-in that can call native APP to open files with string result in flutter, support iOS(UTI) / android(intent) / PC(ffi) / web(dart:html)
1. [package_info_plus](https://github.com/fluttercommunity/plus_plugins) - Flutter plugin for querying information about the application package, such as CFBundleVersion on iOS or versionCode on Android.
1. [palette_generator](https://pub.dev/packages/palette_generator) - Flutter package for generating palette colors from a source image.
1. [path](https://pub.dev/packages/path) - A string-based path manipulation library. All of the path operations you know and love, with solid support for Windows, POSIX (Linux and Mac OS X), and the web.
1. [path_provider](https://pub.dev/packages/path_provider) - Flutter plugin for getting commonly used locations on host platform file systems, such as the temp and app data directories.
1. [permission_handler](https://pub.dev/packages/permission_handler) - Permission plugin for Flutter. This plugin provides a cross-platform (iOS, Android) API to request and check permissions.
1. [piped_client](https://github.com/KRTirtho/piped_client) - API Client for piped.video
1. [riverpod](https://riverpod.dev) - A reactive caching and data-binding framework. Riverpod makes working with asynchronous code a breeze.
1. [scroll_to_index](https://github.com/quire-io/scroll-to-index) - Scroll to a specific child of any scrollable widget in Flutter
1. [shadcn_flutter](https://github.com/sunarya-thito/shadcn_flutter) - Beautifully designed components from Shadcn/UI is now available for Flutter
1. [shared_preferences](https://pub.dev/packages/shared_preferences) - Flutter plugin for reading and writing simple key-value pairs. Wraps NSUserDefaults on iOS and SharedPreferences on Android.
1. [shelf](https://pub.dev/packages/shelf) - A model for web server middleware that encourages composition and easy reuse.
1. [shelf_router](https://pub.dev/packages/shelf_router) - A convenient request router for the shelf web-framework, with support for URL-parameters, nested routers and routers generated from source annotations.
1. [shelf_web_socket](https://pub.dev/packages/shelf_web_socket) - A shelf handler that wires up a listener for every connection.
1. [simple_icons](https://teavelopment.com/) - The Simple Icon pack available as Flutter Icons. Provides over 1500 Free SVG icons for popular brands.
1. [skeletonizer](https://github.com/Milad-Akarie/skeletonizer) - Converts already built widgets into skeleton loaders with no extra effort.
1. [sliding_up_panel](https://github.com/akshathjain/sliding_up_panel) - A draggable Flutter widget that makes implementing a SlidingUpPanel much easier!
1. [sliver_tools](https://github.com/Kavantix) - A set of useful sliver tools that are missing from the flutter framework
1. [smtc_windows](https://pub.dev/packages/smtc_windows) - Windows `SystemMediaTransportControls` implementation for Flutter giving access to Windows OS Media Control applet.
1. [sqlite3](https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3) - Provides lightweight yet convenient bindings to SQLite by using dart:ffi
1. [sqlite3_flutter_libs](https://github.com/simolus3/sqlite3.dart/tree/main/sqlite3_flutter_libs) - Flutter plugin to include native sqlite3 libraries with your app
1. [stroke_text](https://github.com/MohamedAbd0/stroke_text) - A Simple Flutter plugin for applying stroke (border) style to a text widget
1. [system_theme](https://github.com/bdlukaa/system_theme/tree/master/system_theme) - A plugin to get the current system theme info. Supports Android, Web, Windows, Linux and macOS
1. [test](https://pub.dev/packages/test) - A full featured library for writing and running Dart tests across platforms.
1. [timezone](https://pub.dev/packages/timezone) - Time zone database and time zone aware DateTime.
1. [titlebar_buttons](https://github.com/gtk-flutter/titlebar_buttons) - A package which provides most of the titlebar buttons from windows, linux and macos.
1. [tray_manager](https://github.com/leanflutter/tray_manager) - This plugin allows Flutter desktop apps to defines system tray.
1. [url_launcher](https://pub.dev/packages/url_launcher) - Flutter plugin for launching a URL. Supports web, phone, SMS, and email schemes.
1. [uuid](https://pub.dev/packages/uuid) - RFC4122 (v1, v4, v5, v6, v7, v8) UUID Generator and Parser for Dart
1. [version](https://github.com/dartninja/version) - Provides a simple class for parsing and comparing semantic versions as defined by http://semver.org/
1. [very_good_infinite_list](https://github.com/VeryGoodOpenSource/very_good_infinite_list) - A library for easily displaying paginated data, created by Very Good Ventures. Great for activity feeds, news feeds, and more.
1. [visibility_detector](https://pub.dev/packages/visibility_detector) - A widget that detects the visibility of its child and notifies a callback.
1. [web_socket_channel](https://pub.dev/packages/web_socket_channel) - StreamChannel wrappers for WebSockets. Provides a cross-platform WebSocketChannel API, a cross-platform implementation of that API that communicates over an underlying StreamChannel.
1. [wikipedia_api](https://github.com/KRTirtho/wikipedia_api) - Wikipedia API for dart and flutter
1. [win32_registry](https://pub.dev/packages/win32_registry) - A package that provides a friendly Dart API for accessing the Windows Registry.
1. [window_manager](https://github.com/leanflutter/window_manager) - This plugin allows Flutter desktop apps to resizing and repositioning the window.
1. [youtube_explode_dart](https://github.com/Hexer10/youtube_explode_dart) - A port in dart of the youtube explode library. Supports several API functions without the need of Youtube API Key.
1. [http_parser](https://pub.dev/packages/http_parser) - A platform-independent package for parsing and serializing HTTP formats.
1. [collection](https://pub.dev/packages/collection) - Collections and utilities functions and classes related to collections.
1. [otp_util](https://github.com/dushiling) - otp_util is a dart package to generate and verify one-time passwords,it It provides two methods TOPT and HOTP.They are Time-based OTPs and Counter-based OTPs.
1. [dio_http2_adapter](https://github.com/cfug/dio) - An adapter that combines HTTP/2 and dio. Supports reusing connections, header compression, etc.
1. [build_runner](https://pub.dev/packages/build_runner) - A build system for Dart code generation and modular compilation.
1. [envied_generator](https://github.com/petercinibulk/envied) - Generator for the Envied package. See https://pub.dev/packages/envied.
1. [flutter_gen_runner](https://github.com/FlutterGen/flutter_gen) - The Flutter code generator for your assets, fonts, colors, … — Get rid of all String-based APIs.
1. [flutter_launcher_icons](https://github.com/fluttercommunity/flutter_launcher_icons) - A package which simplifies the task of updating your Flutter app's launcher icon.
1. [flutter_lints](https://pub.dev/packages/flutter_lints) - Recommended lints for Flutter apps, packages, and plugins to encourage good coding practices.
1. [json_serializable](https://pub.dev/packages/json_serializable) - Automatically generate code for converting to and from JSON by annotating Dart classes.
1. [freezed](https://pub.dev/packages/freezed) - Code generation for immutable classes that has a simple syntax/API without compromising on the features.
1. [process_run](https://github.com/tekartik/process_run.dart/blob/master/packages/process_run) - Process run helpers for Linux/Win/Mac and which like feature for finding executables.
1. [pubspec_parse](https://pub.dev/packages/pubspec_parse) - Simple package for parsing pubspec.yaml files with a type-safe API and rich error reporting.
1. [pub_api_client](https://github.com/leoafarias/pub_api_client) - An API Client for Pub to interact with public package information.
1. [xml](https://github.com/renggli/dart-xml) - A lightweight library for parsing, traversing, querying, transforming and building XML documents.
1. [io](https://pub.dev/packages/io) - Utilities for the Dart VM Runtime including support for ANSI colors, file copying, and standard exit code values.
1. [drift_dev](https://drift.simonbinder.eu/) - Dev-dependency for users of drift. Contains the generator and development tools.
1. [auto_route_generator](https://github.com/Milad-Akarie/auto_route_library) - AutoRoute is a declarative routing solution, where everything needed for navigation is automatically generated for you.
1. [desktop_webview_window](https://github.com/MixinNetwork/flutter-plugins/tree/main/packages/desktop_webview_window) - Show a webview window on your flutter desktop application.
1. [disable_battery_optimization](https://github.com/pvsvamsi/Disable-Battery-Optimizations) - Flutter plugin to check and disable battery optimizations. Also shows custom steps to disable the optimizations in devices like mi, xiaomi, samsung, oppo, huawei, oneplus etc
1. [draggable_scrollbar](https://github.com/fluttercommunity/flutter-draggable-scrollbar) - A scrollbar that can be dragged for quickly navigation through a vertical list. Additional option is showing label next to scrollthumb with information about current item.
1. [flutter_broadcasts](https://github.com/KRTirtho/flutter_broadcasts.git) - A plugin for sending and receiving broadcasts with Android intents and iOS notifications.
1. [scrobblenaut](https://github.com/Nebulino/Scrobblenaut) - A deadly simple LastFM API Wrapper for Dart. So deadly simple that it's gonna hit the mark.
1. [yt_dlp_dart](https://github.com/KRTirtho/yt_dlp_dart.git) - yt-dlp binding in Dart
1. [flutter_new_pipe_extractor](https://github.com/KRTirtho/flutter_new_pipe_extractor) - NewPipeExtractor binding for Flutter (Android only)
</details>
### Building from source
**nodegui/react-nodegui** requires following packages to run
- [CMake](https://cmake.org/install/) 3.1 & up
- GCC v7
- Nodejs 12.x & up
**Windows Specific:**
- Visual Studio 2019
**MacOS & Linux specific:**
- Make
**Ubuntu/Debian based linux specific:**
Having `pkg-config build-essential mesa-common-dev libglu1-mesa-dev` is important
Go to built package directory replace `os-name` with `linux`|`win32`|`darwin`:
```bash
$ cd deploy/<os-name>/build/spotube
```
If everything went smoothly then double clicking on the
- `AppRun` or Spotube-x86_64.AppImage for **linux**
- qode.exe for **Windows**
- Spotube-x86_64.dmg for **MacOS**
should work just fine without any problem
### Development
Follow the **Build from Source** guideline till `npm install`
Now, to start the dev server run the command in one terminal:
```bash
$ npm run dev
```
To start the application in development environment run following command in another terminal keeping the dev server running:
```bash
$ npm start
```
## Known Issues
There will be some glitches, lags & stuck motions because of the library Spotube is currently using under the hood. It has some issues with layouts thus sometimes some contents aren't shown or overflows out of the window. But resizing the window would fix this issue. Soon there will be some updates fixing this sort of layout related problems
## TODO:
- [ ] Compile, Debug & Build for **MacOS**
- [x] Add support for show Lyric of currently playing track
- [x] Track download
- [x] Cached playback
- [ ] Support for playing/streaming podcasts/shows
- [x] Easy installation procedure/mechanism for simplicity in Windows
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.