Skip to content

Najaf-Ali-Imran/Weasel

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

20 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

Weasel

Weasel Music Logo

Android Kotlin Jetpack Compose License Version

A modern, open-source music streaming application for Android

Built with Kotlin and Jetpack Compose, Weasel leverages the NewPipe Extractor to provide a seamless listening experience without subscriptions. Discover, stream, and download your favorite music with a clean, intuitive interface designed for performance and user experience.

Weasel Home Screen Weasel Player Screen
Weasel Home Screen Weasel Player Screen Weasel Player Screen

โœจ Features

  • ๐Ÿ” Instant Search: Lightning-fast search across tracks, artists, and playlists
  • ๐ŸŽต High-Quality Streaming: Automatically fetches the best available audio streams
  • ๐Ÿ”„ Background Playback: Seamless background audio with rich media notifications
  • ๐ŸŽš๏ธ Endless Queue: Smart auto-queuing of related tracks for continuous discovery
  • ๐Ÿ’พ Local Music Integration: Automatic scanning and integration of device audio files
  • ๐Ÿ“ Playlist Creation: Create and manage custom playlists effortlessly
  • โฌ‡๏ธ Download Functionality: Download any track for offline enjoyment
  • โœจ Material 3 Theme: Tailored for modern Android experiences**:

๐Ÿ—๏ธ Architecture

Weasel follows a scalable, maintainable architecture pattern with clear separation of concerns:

๐Ÿ“ฆ weasel/
โ”œโ”€โ”€ ๐Ÿ“ data/                    # Data layer
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ local/              # Room Database components
โ”‚   โ”‚   โ”œโ”€โ”€ AppDatabase.kt
โ”‚   โ”‚   โ”œโ”€โ”€ MusicDao.kt
โ”‚   โ”‚   โ””โ”€โ”€ entities/
โ”‚   |                          # Network data sources
โ”‚   โ”œโ”€โ”€ Track.kt               # Data models
โ”‚   โ”œโ”€โ”€ Playlist.kt
โ”‚   โ””โ”€โ”€ DownloadWorker.kt      # Background download logic
โ”œโ”€โ”€ ๐Ÿ“ di/                     # Dependency Injection
โ”‚   โ””โ”€โ”€ ViewModelFactory.kt
โ”œโ”€โ”€ ๐Ÿ“ player/                 # Media3 playback components
โ”‚   โ””โ”€โ”€ MusicPlayerService.kt
โ”œโ”€โ”€ ๐Ÿ“ repository/             # Data repositories
โ”‚   โ”œโ”€โ”€ LocalMusicRepository.kt
โ”‚   โ””โ”€โ”€ NewPipeMusicRepository.kt
โ”œโ”€โ”€ ๐Ÿ“ ui/                     # UI resources and themes
โ”‚   โ”œโ”€โ”€ ๐Ÿ“ theme/
โ”‚   โ””โ”€โ”€ ๐Ÿ“ resources/
โ”œโ”€โ”€ ๐Ÿ“ util/                   # Utility classes
โ”‚   โ””โ”€โ”€ AppConnectivityManager.kt
โ”œโ”€โ”€ ๐Ÿ“ ux/                     # Jetpack Compose screens
โ”‚   โ”œโ”€โ”€ HomeScreen.kt
โ”‚   โ”œโ”€โ”€ NowPlayingScreen.kt
โ”‚   โ”œโ”€โ”€ PlaylistScreen.kt
โ”‚   โ””โ”€โ”€ components/
โ””โ”€โ”€ ๐Ÿ“ viewmodel/              # ViewModels
    โ”œโ”€โ”€ HomeViewModel.kt
    โ”œโ”€โ”€ MusicPlayerViewModel.kt
    โ””โ”€โ”€ PlaylistViewModel.kt

๐Ÿš€ Getting Started

Prerequisites

  • Android Studio (latest stable version)
  • Android SDK 24+ (API level 24 and above)
  • Kotlin 2.0.0

Installation

  1. Clone the repository

    git clone https://github.com/Najaf-Ali-Imran/weasel.git
    cd weasel
  2. Open in Android Studio

    • Launch Android Studio
    • Select "Open an existing Android Studio project"
    • Navigate to the cloned directory and select it
  3. Sync and Build

    • Let Gradle sync and download dependencies
    • Build the project (Build > Make Project)
  4. Run the App

    • Connect an Android device or start an emulator
    • Click the "Run" button or press Shift + F10

๐Ÿ› ๏ธ Tech Stack

Category Technology
Language Kotlin
UI Framework Jetpack Compose
Architecture MVVM
Database Room
Media Playback ExoPlayer
Networking NewPipe
Background Tasks WorkManager
Concurrency Coroutines

๐Ÿ“‹ Releases

๐ŸŽฏ v0.1.2-beta -

Released: 7-21-2025 What's New:

  • โœ… Light/Dark Mode
  • โœ… Enhanced Performance
  • โœ… Improved Library

Download: v0.1.2


๐Ÿ“ฎ Issues

Found a bug or have a feature request?
๐Ÿ‘‰ Report it here

๐Ÿ‘ฉโ€๐Ÿ’ป Code Contributions

Step 1: Fork & Clone

git fork https://github.com/Najaf-Ali-Imran/weasel.git
git clone https://github.com/Najaf-Ali-Imran/weasel.git
cd weasel

Step 2: Create a Branch

git checkout -b feature/amazing-new-feature
# or
git checkout -b fix/critical-bug-fix

Step 3: Make Your Changes

  • Follow the existing code style and architecture
  • Write meaningful commit messages
  • Test your changes thoroughly
  • Add documentation if needed

Step 4: Submit a Pull Request

  • Push your branch to your fork
  • Open a Pull Request against the main branch
  • Provide a clear title and detailed description
  • Link any relevant issues

๐Ÿ“ Code Style Guidelines

  • Follow Android Kotlin Style Guide
  • Use meaningful variable and function names
  • Add comments for complex logic
  • Keep functions small and focused
  • Write unit tests for new features

๐Ÿ”ง Development Notes

Key Technical Decisions

Offline-First Architecture: The app prioritizes local downloaded files over streaming when available, ensuring optimal performance and data usage.

Endless Queue Implementation: Uses onMediaItemTransition events to dynamically fetch and append related tracks, creating a seamless listening experience.

Privacy-Focused: All user data (playlists, history) is stored locally. No personal information is transmitted to external servers.

Performance Optimizations

  • Lazy Loading: UI components load content on-demand
  • Efficient Caching: Smart caching strategies for images and metadata
  • Background Processing: Heavy operations run on background threads
  • Memory Management: Proper lifecycle handling to prevent memory leaks

๐Ÿ“„ License

This project is licensed under the License - see the LICENSE file for details.


๐Ÿ™ Acknowledgments


โญ If you like Weasel, please give it a star! โญ

GitHub stars GitHub forks GitHub issues

About

A modern, open-source music streaming application for Android

Topics

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

 
 
 

Contributors

Languages