Releases: BrainAV/Radio-Stream-Player
v1.5.0-Legacy
🎉 Release v1.5.0-Legacy
This is the final planned release for the v1.x series of the Radio Stream Player. This version formally transitions the project from active development to Legacy/Maintenance Mode as the project evolves into a full-stack PHP-based application.
🏛️ Maintenance & Transition
- Legacy Status: Formally marked the repository as Legacy. Active feature development for user accounts, databases, and server-side management has migrated to the Radio-Stream-Player-PHP repository.
- Minimalist Archive: This version (v1.x) will remain available as a minimalist, zero-backend, standalone HTML/JS experiment. It is perfect for users who want a simple, portable player without the need for a server or database.
🌐 Demo URL Architecture
- v1 Legacy Demo: The standalone demo has been moved to its own dedicated subdomain: radio1.djay.ca.
- Main Project Site: The primary radio.djay.ca URL now hosts the feature-rich PHP version of the player.
📝 Documentation Updates
- README & Roadmap: Updated with prominent legacy notices and clear navigation to the new repository.
- Developer Guide: Refreshed to reflect the finalized architecture, including the completed
StateManagerrefactor and state-of-the-art Pub/Sub system. - AI Context: Updated the Gemini assistant personas (CONTEXT, PERSONA, GEMINI, SCRATCHPAD) to specialize in legacy maintenance and minimalism.
Thank you for being part of the v1.x journey! The future of the Radio Stream Player continues in the PHP version.
Full Changelog: v1.4.0...v1.5.0-Legacy
v1.4.0
🎉 Release v1.4.0
This release introduces the Agent Skills framework to supercharge future AI-assisted development and completely overhauls the internal engine with Advanced State Management v2!
🤖 Added (Development & Tooling)
- Agent Skills framework: Introduced a
.agent/skills/directory to establish explicit, file-based instructions for AI coding assistants. TheseSKILL.mdfiles act as "personas" to maintain consistency across the codebase.station-curator: Guides strict validation and formatting of new stream URLs.ui-consistency: Enforces the project's signature "Glassmorphism" aesthetic.state-architect: Enforces the Pub/Sub state management pattern.a11y-auditor: Guarantees accessibility standards.audio-engineer: Provides Web Audio API best practices.release-manager: Automates the Changelog and version-bumping workflows.
🏗️ Changed (v2.0 Architecture Refactor)
- Advanced State Management (The "Modern Restaurant" Refactor):
- Replaced the chaotic global
window.radioStreamStateobject with a centralizedStateManager(Pub/Sub pattern) class instate.js. - Decoupled DOM updating logic from click event listeners. UI components (like the Play button, Volume Slider, and Visualizer) now automatically re-render by subscribing to state mutations rather than polling or triggering each other manually.
- Fixed visualizer behavior where changing styles while paused caused the UI to completely disappear.
- Replaced the chaotic global
🐛 Fixed
- Fixed a bug where assigning a non-integer value to the visualizer style in
localStoragecaused the Settings dropdown to go completely blank.
Full Changelog: v1.3.0...v1.4.0
v1.3.0
Release v1.3.0
We are excited to announce the release of Radio Stream Player v1.3.0!
This update brings a massive expansion to your listening library with the integration of the Radio Browser API, highly requested organization features for your custom stations, and under-the-hood stability improvements for a seamless listening experience.
✨ Highlights
📻 The World's Radio at Your Fingertips
We have integrated the public Radio Browser API directly into the player. You can now native search and add tens of thousands of community-driven radio stations from around the globe without ever leaving the app. Access the new "Directory" tab in the Settings to start exploring!
🗂️ Organize Your Stations
Managing your favorite streams is now easier than ever. The Settings modal has been upgraded with a tabbed interface. The new "My Stations" tab provides a dedicated space where you can view, edit, and delete your saved "Favorite" stations and custom stream URLs all in one place.
🛡️ Uninterruptible Playback
We've significantly upgraded the core playback engine. If you've ever experienced streams silently dropping out after long listening sessions or temporary Wi-Fi hiccups, those days are over! The player now features robust auto-reconnect logic that detects unexpected disconnects and seamlessly restarts the audio stream in the background—no clicking required.
📝 Full Changelog
For a complete list of all technical changes, bug fixes, and under-the-hood improvements, please refer to the CHANGELOG.md.
Full Changelog: v1.2.1...v1.3.0
v1.2.1
Release v1.2.1
Released on 2026-03-02
This patch release brings fantastic polish to the v1.2 feature set, focusing on UI/UX fixes, powerful enhancements to the Popout Player, and crucial optimizations for those self-hosting the Cloudflare Proxy.
🚀 Key Improvements
- Popout Player Parity: The tiny popout player has learned a few new tricks! It now fully supports the "Now Playing" scrolling marquee, merges your Custom Stations, and automatically routes through the proxy.
- Custom Station Editing: You can now directly edit the Name, URL, or Genre of any Custom Station in the settings menu without having to delete and recreate it.
- Universal CORS Proxying: We discovered some
https://streams weren't sending the proper CORS headers, breaking the visualizers. Now, every stream is confidently routed through the Cloudflare proxy to guarantee visualizer compatibility.
🛠️ Optimizations & Fixes
- Smarter Metadata Polling: The frontend player is now significantly more intelligent and will instantly stop polling for metadata when you pause or stop the audio, saving you massive amounts of API requests.
- Marquee Constraints: Squashed a CSS bug where exceptionally long track titles from continuous DJ mixes would stretch the beautiful glassmorphism player right off your screen!
- New Tunes: Welcome Hirsch Radio Psytrance and Hirsch Radio Progressive to the default curated station list!
📚 Documentation Updates
- Capacity Planning Guide: Added an extensive guide outlining exactly how Cloudflare requests are calculated. It details how the 100k free tier limit equates to concurrent users and specifically instructs developers on how to adjust the
12000mspolling interval in the code to multiply their capacity limits by up to 5x.
Full Changelog: v1.2.0...v1.2.1
v1.2.0 - The Metadata & Proxy Update 🎶
Release v1.2.0 - The Metadata & Proxy Update 🎶
This major release officially marks the completion of the Mid-Term (v1.2) goals outlined in our roadmap. It introduces a robust backend solution to securely play all types of online radio stations and finally brings live track information straight to the UI!
🌟 Key Features
- Universal Streaming (The Cloudflare Worker Proxy): We've implemented a custom Cloudflare Worker (
api.djay.ca). This acts as a secure tunnel, permanently solving the dreaded "Mixed Content" warnings. You can now securely play older HTTP-only internet radio stations on our secure HTTPS GitHub Pages site without any browser security errors! - Live "Now Playing" Track Info: Wondering what song is currently playing? The player now features a sleek "Now Playing" display in the header. If the track name is long, it even features a smooth scrolling marquee effect to ensure you can read it all.
- OS Lock Screen Integration: We didn't stop at the UI. The track and artist information is now dynamically piped into the Media Session API. This means the currently playing track name will show up on your smartphone's lock screen, your smartwatch, or your Windows/macOS media control overlays!
🔧 Under the Hood
- Smart Auto-Routing: The frontend
player.jsis now smart enough to detecthttp://URLs and automatically route them through our secureapi.djay.caproxy on the fly. Nativehttps://streams play directly to save bandwidth. - Secure Metadata Polling: Getting metadata the old-fashioned way caused horrible audio glitching in the browser. Now, the player silently polls a dedicated
/metadataendpoint on our proxy every 12 seconds. The proxy extracts the ICY metadata directly from the source server and hands our frontend clean, glitch-free track information! - Proxy Security: The backend proxy has strict CORS policies and
Origin/Refererchecks built-in to prevent unauthorized domains from draining our bandwidth.
v1.1.2: Personalization & Polish
This release introduces major new personalization features, brings the community closer with feedback channels, and polishes the user experience with new features and important bug fixes.
✨ Personalization is Here!
You can now make the player truly your own.
- Custom Backgrounds: Have a favorite wallpaper? In the Settings modal, you can now paste any image URL to use it as the player's background.
- Curated Presets: Don't want to hunt for an image? We've added a grid of four high-quality, curated background presets (Default, Cyberpunk, Deep Space, Abstract) that look great with the player's design.
🤝 Community & Feedback
- Suggest & Report: We've made it easier to contribute! The Settings modal now includes direct links to suggest a new station or report a broken stream via GitHub.
🚀 Other Enhancements
- New "Neon" Visualizer: A new glowing bar visualizer style has been added to the rotation.
- OS Media Controls: The player now integrates with your operating system's media controls (and lock screen) thanks to the Media Session API. You can see the station info and use hardware keys to play, pause, and switch stations.
- UX Tweak: The "Favorite" button is now disabled when the "Show Favorites Only" filter is active to prevent you from accidentally removing the station you're listening to from the list.
🐞 Bug Fixes
- Fixed a visual glitch with the "Circular" VU meter.
- Corrected an animation bug on mobile for the "Classic" and "Neon" visualizers.
- Ensured the Settings modal is fully scrollable on smaller screens.
What's Changed
- Add Custom Backgrounds and Community Feedback Links by @jasonbra1n in #1
New Contributors
- @jasonbra1n made their first contribution in #1
Full Changelog: v1.1.1...v1.1.2
v1.1.1: The Visual Overhaul
Release v1.1.1: The Visual Overhaul
This release is all about modernizing the look and feel of the player. We've completely redesigned the user interface to be sleeker, more professional, and more engaging, using modern design trends like "Glassmorphism".
✨ UI/UX Redesign Highlights
- Glassmorphism Effect: The main player and pop-out window now feature a beautiful semi-transparent, blurred background, giving them a modern "frosted glass" appearance.
- Icon-Based Controls: Replaced all text-based buttons (Play/Pause, Pop-out) with clean, universally understood SVG icons.
- Modernized Volume Slider: The volume slider has been redesigned with a dynamic "fill" track that visually represents the current volume, providing better user feedback.
- Compact Horizontal Layout: All player controls have been reorganized into a single, sleek horizontal bar, making the player more compact and professional.
- Consistent Pop-out Player: The pop-out player now shares the exact same modern design as the main player, ensuring a seamless and consistent user experience.
- Streamlined Header: The main application header has been made more compact to save vertical screen space, especially on smaller devices.
v1.1 Refactoring & Accessibility
Release v1.1: Refactoring & Accessibility
This is a significant foundational release focused on improving the long-term health of the codebase and making the player more accessible and robust for all users. We've refactored the core application logic, enhanced accessibility, and polished key user experience features.
🧹 Code Quality & Refactoring
- The monolithic
script.jshas been completely refactored into focused ES modules (player.js,visualizer.js,stations.js). This makes the codebase cleaner and much easier to maintain and extend in the future. - The pop-out player now reuses the core
player.jsmodule, eliminating duplicated code and ensuring consistent behavior between the main and pop-out views.
♿ Accessibility (A11y) Enhancements
- Screen Reader Support: All interactive controls now have
aria-labelattributes, providing clear descriptions for users of assistive technologies. - Keyboard Navigation: Implemented
:focus-visiblestates across all buttons, sliders, and selectors to provide a clear visual outline for keyboard-only users without cluttering the UI for mouse users.
✨ UI/UX Improvements
- Robust Pop-out Player: The pop-out window's closing mechanism is now more reliable, using a polling fallback to ensure the main player UI is always restored correctly.
- Dynamic Tooltip: The VU meter style-cycle button now features a dynamic tooltip that displays the name of the current style (e.g., "Style: Classic"), improving usability.
🎶 Content
- Added several new high-quality Trance and Psytrance radio streams to the default station list.
🛠️ Technologies Used
- HTML5: For the structure of the player.
- CSS3: For styling, including custom properties for theming and responsive design.
- Vanilla JavaScript (ES6+): For all player logic, interactivity, and state management.
- Web Audio API: For audio processing and creating the dynamic visualizations.
Full Changelog: https://github.com/jasonbra1n/Radio-Stream-Player/commits/v.1.1