Streamify is a modern, open-source music streaming platform that lets you search, play, like, and download music for free — ad-free. Built using React + Vite for the frontend and Django REST for the backend, it features a sleek dark UI, Google login, per-user liked songs, and playlist management. All music data is fetched via the unofficial JioSaavn API by @sumitkolhe, and YouTube Music via ytmusicapi and yt-dlp.
This project is for educational purposes only and does not store or redistribute music files.
- 🔐 Google login (via Firebase)
- 🔍 Search for songs, albums, artists (JioSaavn API & YouTube Music)
▶️ Stream music with a modern, mobile-friendly player (NowPlaying & MiniPlayer overlays)- ❤️ Like/unlike songs (per user, synced with backend)
- 📂 Create & manage custom playlists
- ⬇️ Download tracks with 1-click
- 🌓 Dark themed, Figma-inspired UI
- 📱 Fully responsive frontend (mobile-first)
- 🏷️ Library page with liked songs and playlists (Playlist logic not implemented to implement in future)
- 🔄 Real-time like/unlike sync across UI
- 🌎 International music support via YouTube Music (ytmusic api and yt-dlp dont work on hosted use locally)
| Layer | Stack |
|---|---|
| Frontend | React, Vite, Plain CSS |
| Backend | Django, Django REST Framework |
| Auth | Firebase Authentication (Google login) |
| Music API | Unofficial JioSaavn API, ytmusicapi, yt-dlp |
Streamify/
├── backend/ # Django backend
│ ├── music/ # Django app (API views, models, urls)
│ ├── streamify_api/ # Django project settings
│ ├── manage.py
│ └── requirements.txt # Python dependencies
├── frontend/ # React + Vite frontend
│ ├── public/
│ ├── src/
│ │ ├── components/ # UI components (Miniplayer, Nowplaying, Navbar, etc.)
│ │ ├── hooks/ # React hooks (Player, Auth)
│ │ ├── pages/ # App pages (Home, Login, Library)
│ │ ├── utils/ # API, firebaseConfig
│ │ └── App.jsx
│ ├── package.json
│ └── vite.config.js
├── README.md
└── LICENSE
Create a
.envfile insidefrontend/with your Firebase config:
VITE_FIREBASE_API_KEY=your_api_key_here
VITE_FIREBASE_AUTH_DOMAIN=your_project_id.firebaseapp.com
VITE_FIREBASE_PROJECT_ID=your_project_id
VITE_FIREBASE_STORAGE_BUCKET=your_project_id.appspot.com
VITE_FIREBASE_MESSAGING_SENDER_ID=your_sender_id
VITE_FIREBASE_APP_ID=your_app_id
VITE_BACKEND_API_URL=http://localhost:8000cd frontend
npm install
npm run devcd backend
python -m venv venv
source venv/bin/activate # or venv\Scripts\activate on Windows
pip install -r requirements.txt
python manage.py makemigrations
python manage.py migrate
python manage.py runserverCreate a
.envinbackend/to store environment variables like:
DEBUG=True
SECRET_KEY=your-secretYou are using the hosted API, so no need to self-host. Endpoints used:
GET https://saavn.sumit.co/api/search/songs?query=kesariya
GET https://saavn.sumit.co/api/songs?ids=SONG_ID
| Endpoint | Method | Description |
|---|---|---|
/api/search/ |
GET | Search for songs |
/api/song/ |
GET | Get stream URL + details |
/api/download/ |
GET | Download link to song |
/api/like/ |
POST | Like or unlike a song |
/api/unlike/ |
POST | Remove song from liked |
/api/liked/ |
GET | Get user's liked songs |
/api/playlists/ |
GET/POST | Get or create playlists |
/api/playlists/<id>/ |
PATCH | Update playlist name |
- Go to Firebase Console
- Create a project and enable Google login
- Store credentials in
.envfiles in frontend as shown above
This project is intended only for learning and demonstration. No music is stored or redistributed by Streamify. API used is unofficial.
- 🎧 API: Sumit Kolhe's JioSaavn API
- 🎵 YouTube Music integration: ytmusicapi by sigma67
- ⬇️ Audio extraction: yt-dlp by the yt-dlp contributors
MIT License
Built with ❤️ by Shirshendu for fun, learning & passion for music.