Releases: pitill0/fluxtuner
Release list
FluxTuner 1.0.7
FluxTuner 1.0.7
FluxTuner 1.0.7 is a consolidation release that closes the post-1.0 architecture refactor and establishes a clean foundation for future features and bug fixes.
Highlights
- Completed the repository-wide architecture and documentation consolidation.
- Aligned README, usage, development, deployment, security, licensing and release guidance with the current platform.
- Clarified the boundary between the MIT-licensed local interfaces and the non-commercial Web/server edition.
- Standardized release preparation around the canonical
make gateworkflow. - Added clean package builds and installed-wheel smoke testing.
- Added release tag-to-package-version validation.
- Updated GitHub Actions used by CI, release and Flatpak workflows.
- Removed obsolete Flatpak workflow configuration and outdated release instructions.
Packaging and validation
The release workflow now verifies that the Git tag matches the package version, builds both the wheel and source distribution, installs the generated wheel and runs CLI smoke tests against the installed artifact.
Interfaces
FluxTuner continues to provide:
- Textual terminal interface
- GTK4 desktop interface
- CLI mode
- Self-hosted Web/server mode
- Modular playback through mpv, ffplay, mpg123 and ogg123
This release is intended as the new stable baseline for the next development cycle.
Fluxtuner 1.0.6
Highlights
FluxTuner 1.0.6 completes the post-1.0 architecture and Web player hardening cycle.
This release focuses on clearer ownership boundaries, deterministic browser playback behavior and stronger executable contracts before future Web metadata work begins.
Changed
- Completed the post-1.0 Web architecture refactor while keeping
fluxtuner/web/app.pyandfluxtuner/web/static/app.jsas focused composition roots. - Split shared SQLite persistence into focused domain modules for users, profiles, stations, favorites, history, playlists, password changes and public statistics.
- Retained compatibility wrappers and centralized schema/bootstrap ownership in
db.py. - Split the Web stylesheet into focused shell, public, authentication, forms, dialogs, dashboard, stations, player and admin stylesheets.
- Added an explicit Web player model with validated
idle,loading,playing,pausedanderrortransitions. - Made playback replacement, pause, stop and lifecycle recovery deterministic.
- Added conservative offline/online recovery that preserves the selected station and requires explicit resume.
- Clarified FluxTuner's terminal, desktop and self-hosted Web positioning.
- Clarified private non-commercial self-hosting, commercial licensing and external catalog/stream dependencies.
Fixed
- Prevented stale asynchronous playback attempts from updating the current player state.
- Prevented late
playing,pauseandwaitingevents from overwriting newer state. - Fixed lifecycle reconciliation across connectivity, visibility,
pagehideandpageshowevents. - Fixed responsive Web layout ownership and regressions discovered while extracting feature-local CSS.
Documentation
- Added and completed the architecture refactor roadmap for the Web JavaScript and player state-model phases.
- Added a transparent engineering-process document describing AI-assisted development under human direction.
- Expanded README guidance for Docker Compose, self-hosting, licensing and privacy boundaries.
Internal
- Added executable Node-based contracts for browser modules, bootstrap ordering, player runtime delegation, playback replacement and lifecycle reconciliation.
- Added focused persistence tests for the extracted storage domains.
- Added source-boundary and CSS ownership tests to protect the completed architecture.
Scope
Web Now Playing metadata is not included in this release.
Backend metadata caching, workers, polling and SSRF-safe stream inspection remain planned for a future update.
Validation
- Full release gate passed.
- Python wheel and source archive built successfully.
- AppStream metadata validated.
- Installed package reported version
1.0.6. - Release tag points to the current
mainrelease commit.
FluxTuner 1.0.5
FluxTuner 1.0.5
This release focuses on the FluxTuner Web experience, with a large JavaScript refactor, stronger browser playback handling, improved mobile media controls, cleaner account/admin layouts and updated documentation.
Highlights
- Refactored FluxTuner Web JavaScript from one large entrypoint into focused ES modules.
- Improved Web player state handling for slow, failed, retried and interrupted streams.
- Improved Android and iOS Media Session handoff with stronger metadata, artwork and lifecycle handling.
- Added richer Web player diagnostics for audio state, Media Session metadata and recent playback events.
- Improved first-run setup, request access, password recovery and Admin account form layouts.
- Improved the Player debug panel by clearly separating the current snapshot, recent events and exported logs.
- Added a new FluxTuner TUI theme inspired by the project landing page.
Added
- Focused Web JavaScript modules under
fluxtuner/web/static/js/. - ES module entrypoint for the Web UI.
- Richer Media Session diagnostics for mobile browser behavior.
- Stronger Player debug snapshot/event separation.
- New FluxTuner TUI theme.
- Additional tests for Web modules, dashboard behavior, setup, admin flows, player debug and Media Session handling.
Changed
- Split the former monolithic Web
app.jsinto smaller browser modules. - Hardened Web player state handling for:
- slow streams
- failed streams
- interrupted streams
- retries
- pause/resume transitions
- page visibility changes
- mobile background/lock-screen handoff
- Improved Android lock-screen media metadata and artwork handling.
- Improved iOS media handoff behavior after playback starts.
- Improved first-run setup layout.
- Improved request access layout.
- Improved password recovery layout.
- Improved Admin create/reset user layouts.
- Kept the Admin view stable after user and password-request actions while refreshing dashboard data silently.
- Updated architecture, Web, development, smoke-test and release documentation to reflect the new module structure.
Fixed
- Fixed invalid Web manifest JSON.
- Fixed static JS module packaging in source and wheel distributions.
- Fixed stale JS/module caching behavior for Web assets.
- Fixed login and account recovery feedback visibility.
- Fixed Admin action layout issues on mobile.
- Fixed Player debug UI looking like a split/duplicated log.
- Removed noisy production console output from best-effort playback history recording.
Documentation
- Updated architecture documentation and Mermaid diagrams to reflect:
index.html- ES module
static/app.js - focused modules under
static/js/ - FastAPI routers
- Web helper/action modules
- Media Session and Player debug flow
- Updated the refactor roadmap to mark the Web helper/router and JavaScript module work as completed.
- Updated Web documentation with the no-build ES module structure.
- Updated release and smoke-test docs to validate all Web JavaScript modules.
Validation
Validated with:
python -m compileall -q fluxtuner testsnode --check fluxtuner/web/static/app.jsnode --check fluxtuner/web/static/js/*.jsuv run --extra dev pytest -quv build --sdist --wheel
Manual smoke tested:
- login/logout
- first-run setup
- request access
- password recovery
- dashboard
- search
- favorites
- playlists
- player play/pause/resume/stop/retry
- failed/slow stream handling
- Android lock-screen metadata/artwork
- iOS media handoff after playback starts
- Admin users and password change requests
- Player debug panel
- mobile Admin layout
Fluxtuner 1.0.4
FluxTuner 1.0.4
This release focuses on Web admin management, public stats polish and browser/player diagnostics.
Highlights
- Added an admin-only user deletion flow for FluxTuner Web.
- Added a compact Admin danger zone with strong confirmation before destructive actions.
- Added anonymous approved-user counts to the public Web stats.
- Added an admin-only opt-in Player debug panel for browser and mobile playback diagnostics.
- Deduplicated Web player and Media Session logic so browser, mobile and external media controls use a single playback flow.
- Improved the Admin player debug layout on mobile.
Added
- Admin-only user deletion API.
- Cleanup of related Web sessions, favorites, playlists, playback history and password change requests when deleting a user.
- Admin user danger zone in the Web UI.
- Anonymous aggregate approved-user count in public stats.
- Admin-only Web player debug panel with:
- playback snapshots
- event log
- copy/export controls
- downloadable diagnostic logs
Changed
- Unified Web player and Media Session control paths.
- Made external Media Session stop actions conservative by pausing and preserving the current station instead of clearing playback state.
- Improved mobile layout for the Admin player debug panel so it no longer widens the page.
Fixed
- Fixed Admin user management lacking a real destructive-delete path.
- Fixed overlapping Web player Media Session handlers that could cause inconsistent playback behavior after search, pause, resume or external media controls.
- Fixed public stats copy and rendering so platform usage can include user count without exposing usernames, sessions, IP addresses or timestamps.
Security / Privacy
- User deletion remains admin-only, CSRF-protected and blocks self-delete.
- Public user stats expose only anonymous aggregate counts.
- Player debug logging is local, opt-in and admin-facing.
FluxTuner 1.0.3
FluxTuner 1.0.3
This release improves FluxTuner Web with anonymous public server stats, a more polished public login experience, better password guidance, and more resilient mobile live-stream controls.
Added
- Public anonymous server activity stats on the Web login page.
- Public
/api/public/statsendpoint with aggregate play, favorite and playlist counts. - Visible password requirements in Web account and password-change forms.
- Static UI coverage for the public stats and password-help views.
Changed
- Refined the FluxTuner Web public entry screen with a clearer intro, cleaner login panel and compact public activity cards.
- Improved mobile live-stream handling when using lock-screen, notification-bar or headset media controls.
- Resume now restarts live streams instead of relying on stale browser audio state.
- External media stop/pause actions no longer intentionally clear the selected station.
Security / Privacy
- Public stats expose only aggregate anonymous counts and top station names.
- No usernames, stream URLs, homepages, IPs, profiles or timestamps are exposed by the public stats endpoint.
FluxTuner 1.0.2
FluxTuner 1.0.2
FluxTuner 1.0.2 adds a safer password change request flow for private Web/server deployments.
Added
- Added Web password change requests for private server deployments.
- Added a public “Forgot password?” flow where non-admin users choose a new password that only becomes active after administrator approval.
- Added admin UI actions to approve or reject pending password change requests.
Changed
- Non-admin users with a pending password change request are prevented from logging in with the old password until the request is resolved.
- Active sessions for non-admin users are revoked when a password change request is created.
- Standardized visible Web timestamps as
YYYY-MM-DD HH:mmin the user's local browser time.
Security
- Password change requests store only password hashes, never plaintext passwords.
- Public password change requests use a generic response to avoid revealing whether an account exists.
- Administrator accounts are not blocked through the public password change request flow; admin recovery remains a CLI/manual operation.
Release quality
- Added a local
make gaterelease check covering formatting, linting, tests, mypy, JavaScript syntax, Bandit andpip-audit --local.
Notes
This release includes a database schema update for Web password change requests. Existing users, profiles, favorites, playlists and history are preserved.
FluxTuner 1.0.1
FluxTuner 1.0.1
Small Web UX polish release based on early real-world usage of the private FluxTuner Web app.
Improved
- Improved the visibility and contrast of the persistent Web player bar.
- Styled the external stream action consistently with the rest of the Web UI.
- Show display names in the authenticated header instead of internal usernames.
- Made register and playlist dialogs scrollable on mobile screens.
Fixed
- Fixed hidden Web dialogs and authenticated header controls being displayed incorrectly on mobile.
Notes
This release does not change the authentication model or storage format. It is a safe UX-focused update for existing FluxTuner Web 1.0.0 deployments.
FluxTuner 1.0.0
FluxTuner 1.0.0
FluxTuner 1.0.0 marks the first stable release of the project.
This release introduces a private Web dashboard, pending account registration with admin approval, stronger Web security boundaries, full-package mypy coverage, updated documentation, and final packaging polish.
Highlights
- Private Web dashboard for authenticated users
- Admin dashboard metrics and server/user overview
- Pending account registration with approve/reject workflow
- First-run admin setup for private deployments
- Server-side sessions, CSRF protection, login rate limiting, and stronger Web input validation
- Private Web search endpoint
- Safer station URL handling
- Light/dark Web UI polish and improved mobile behavior
- Full-package mypy coverage
- Reviewed documentation for Web, multi-user mode, security, architecture, and release process
- Clean Python packaging for wheel/sdist builds
Validation
This release was validated with:
pytest -qruff check .ruff format --check .python -m mypy --follow-imports=skip fluxtuner/bandit -q -r fluxtunerpip-auditnode --check fluxtuner/web/static/app.jspython -m build- Manual desktop/mobile Web smoke tests
- Fresh container smoke test
Notes
FluxTuner remains a local-first internet radio project. The Web/server mode is designed for private deployments and small trusted groups, not as a public SaaS platform.
FluxTuner 0.9.0 — Private Web mode, multi-user auth and polished app shell
FluxTuner 0.9.0 is a major Web/server mode release.
This version turns FluxTuner Web into a private, authenticated local web app with multi-user support, first-run administrator setup, protected library data and a much more polished browser UI.
Highlights
Private Web/server mode
- Added local Web user accounts.
- Added first-run setup wizard for creating the first administrator.
- Added optional setup token protection for exposed deployments.
- Added Argon2id password hashing.
- Added server-side sessions.
- Added CSRF protection for private Web API mutations.
- Added authenticated Web access for favorites, history and manual playlists.
- Added browser-based Admin UI for managing Web users.
- Added emergency Web user CLI commands.
Web UI polish
- Added responsive app shell with compact navigation.
- Added isolated Admin view.
- Added compact server-health summary inside Admin.
- Added browser playlist picker.
- Added light/dark theme toggle.
- Added real packaged Web app icon.
- Improved theme contrast and form/dialog readability.
- Improved playlist dialog theming in both light and dark modes.
- Improved player visibility across login/logout.
- Improved hamburger menu dismissal with outside click and Escape.
- Fixed logout so browser playback stops immediately.
Fixes
- Fixed deleting Web favorites by raw stream URL.
- Fixed default technical Web user permissions.
- Fixed setup-before-auth initialization.
- Fixed Web app icon packaging in wheels and containers.
- Fixed stale Admin view state when switching from admin to non-admin users.
- Fixed Web resource loading on Python 3.11.
Documentation and packaging
-
Updated README for 0.9.0.
-
Updated changelog.
-
Added and updated secure Web deployment docs.
-
Updated container deployment documentation.
-
Updated architecture and multi-user model docs.
-
Updated Flatpak metadata.
-
Clarified licensing:
- core/local FluxTuner remains MIT licensed
- Web/server and multi-user components use the FluxTuner Web Non-Commercial License
Validation
Validated with:
node --check fluxtuner/web/static/app.js
python -m ruff check .
python -m ruff format --check .
python -m pytest
bandit -r fluxtuner
pip-audit --local
python -m buildAlso smoke-tested with a clean container and persistent data volume.
Upgrade notes
Web/server deployments should use a persistent FLUXTUNER_DATA_DIR, usually mounted as /data in containers.
For local HTTP testing, set:
FLUXTUNER_WEB_SECURE_COOKIES=falseFor LAN or internet-accessible deployments, keep secure cookies enabled and serve FluxTuner Web behind HTTPS:
FLUXTUNER_WEB_SECURE_COOKIES=trueFor first-run exposed deployments, set:
FLUXTUNER_WEB_SETUP_TOKEN=<strong-random-token>See docs/web.md, docs/container.md and docs/secure-web-deployment.md for deployment details.
FluxTuner 0.8.0 — Multi-profile foundation
FluxTuner 0.8.0 introduces multi-profile support across the main app interfaces.
Profiles now scope favorites, playback history and manual playlists, making it possible to keep separate contexts such as default, work, home, terrace or testing profiles within the same FluxTuner installation.
This release adds persistent active profile support, profile-aware CLI import/export, profile-aware legacy CLI favorites, and profile-aware behavior in the Textual TUI, GTK GUI and Web mode.
Web API endpoints also support a per-request profile override with ?profile=NAME.
This is intentionally multi-profile support, not full multi-user account support yet. Profiles are context-level separation inside one installation; they do not provide authentication, permissions or per-user isolation.
The important part: FluxTuner now has the storage and interface foundation needed for future true multi-user support.
Highlights:
- Multi-profile support for favorites, playback history and manual playlists.
- Persistent active profile commands.
--profile NAMEsupport for profile-aware CLI commands.- Profile-aware favorites and playlists import/export.
- Profile-aware legacy numbered CLI favorites flow.
- Textual TUI, GTK GUI and Web mode now use the persisted active profile.
- Web API
?profile=NAMEoverride support. - Updated documentation, architecture diagrams and Flatpak metadata.