Releases: countgitmick/FreeTubePlusTabs
v0.24.6
Security + dependency roll-up
Patch release bundling 10 Dependabot updates that landed on development since v0.24.5, plus two infra fixes.
Security fixes
- dompurify 3.3.3 → 3.4.0 (#46) — sanitizer behind the
v-safer-htmldirective used throughout the renderer. Closes the open Dependabot alert. - electron 41.2.0 → 41.2.1 (#58) — picks up upstream Chromium security patches for non-Nix builds. Nix builds track nixpkgs' electron.
Runtime deps
- shaka-player 5.0.10 → 5.1.0 (#57) — perf improvements and bug fixes. Verified no API changes affect the custom SABR manifest parser, MP4/WebM segment-index parsers, or EBML metadata parser.
- marked 18.0.0 → 18.0.2 (#54)
- @fortawesome/vue-fontawesome 3.1.3 → 3.2.0 (#52)
Dev tooling
- eslint 10.2.0 → 10.2.1 (#50)
- stylelint group, 3 packages (#51)
- webpack group, 2 packages (#53)
- lefthook 2.1.5 → 2.1.6 (#56)
- globals 17.4.0 → 17.5.0 (#55)
CI
- github/codeql-action 4.35.1 → 4.35.2 (#49)
- actions/cache 5.0.4 → 5.0.5 (#48)
- calibreapp/image-actions (#47)
- fix(ci): correct AppImage filename in
build.yml— fork had inherited upstreamFreeTube-naming; now matches productNameFreeTube + Tabsin line withrelease.yml.
Infra
- fix: add
--ozone-platform=waylandto the Electron wrapper — correct native rendering on Wayland sessions.
Notes
- Everything in v0.24.5 is included.
flake.nixnpmDepsHashupdated for the new lockfile.- Nix/NixOS users pulling
freetubeplustabsfrom the Gitea flake get these changes vianix flake update; no binary download required.
v0.24.5
Security patch release
Fixes
- Bumps
follow-redirects1.15.6 → 1.16.0 (#45)- Closes the open Dependabot alert "follow-redirects leaks Custom Authentication Headers to Cross-Domain Redirect Targets" (medium severity)
- Upstream fix adds a
sensitiveHeadersoption and input sanitization follow-redirectsis a dev-only transitive dependency; no runtime behavior changes
Notes
- Everything in v0.24.4 is included.
flake.nixnpmDepsHashupdated for the new lockfile.
This release exists because v0.24.4 was tagged before the security fix landed on development.
v0.24.4
What changed
Linux startup flags
- Adds VA-API command-line switches (
AcceleratedVideoDecodeLinuxGL,AcceleratedVideoEncoder,VaapiIgnoreDriverChecks) andenable-gpu-rasterizationat startup on Linux. Previously these were only set by the Nix flake's wrapper, so portable and Flatpak builds ran without them. Whether hardware decode actually engages depends on the host having a working libva + driver stack — verify viachrome://gpu. - Adds
--ozone-platform-hint=autoon Linux when no explicitozone-platformswitch was passed, so Chromium can pick Wayland or X11 fromWAYLAND_DISPLAYinstead of relying on the launcher. - Logs a warning if
powerSaveBlocker.isStarted()returns false afterstart(). Some Wayland compositors no-op the request silently.
MediaSession / MPRIS
- Installs
play,pause,seekbackward,seekforward,seekto, andstopaction handlers on the video element in the Shaka player wrapper. - Calls
navigator.mediaSession.setPositionStateon everytimeupdate(skipped for live streams where duration isInfinity). - Cleans these handlers up in
onBeforeUnmount. - Pre-existing metadata,
playbackState, andprevioustrack/nexttrackintegration is unchanged.
Tab system
- Idle suspension now unmounts the inner component (
v-if) instead of togglingdisplay: none(v-show). The previous behavior left Shaka, watchers, and timers running indefinitely. The route is preserved in Vuex, so reactivating an idle tab triggers a fresh remount and reload. - Normal tab switching (between non-idle tabs) still uses
v-showto preserve component state. resolvedComponentCacheinTabContent.vueis now an LRU bounded at 50 entries; previously it grew without eviction.persistTabsretry logic replaced:persistRetriedboolean →persistAttemptCount+ exponential backoff schedule (200ms,500ms,1000ms, give up after 3). On giveup, surfaces a toast viahelpers/utils.showToast.persistTabsImmediateis nowasyncandawaits the upsert sobeforeunloadcallers can wait on it.
Tab bar
- Wheel handler in
FtTabBar.vuenow coalescesdeltaYinto a singlerequestAnimationFramecallback per frame instead of mutatingscrollLeftonce per wheel tick.
Security / IPC
dbTabsIPC: preload now checks the action against anALLOWED_TAB_DB_ACTIONSset before invoking. Defense in depth — the main handler already had a switch-default reject. Payload shape normalized to{action, data}to match the other db handlers.setPermissionCheckHandlernow rejects whendetails.embeddingOriginis set and is not a FreeTube URL.setPermissionRequestHandlernow rejects whendetails.requestingUrlis set and is not a FreeTube URL.
Flatpak manifest
- Adds explicit
--talk-name=org.freedesktop.portal.{Desktop,OpenURI,FileChooser,Settings}tofinish-args. - Inline comment block describing the steps needed to migrate from "unpack release zip" to "build from source" using
flatpak-node-generator.flake.nixis the working build reference.
FreeTube + Tabs v0.24.3
What's New
Fix: Channel sort dropdown restored
YouTube renamed their internal renderer types for channel page filter chips (feedFilterChipBarRenderer → chipBarViewRenderer), breaking the sort dropdown (Latest / Popular / Oldest) on channel Videos, Shorts, and Live tabs. This release patches youtubei.js at build time to support both old and new renderer types with a unified fallback chain.
- Upstream tracking: LuanRT/YouTube.js#1142, FreeTubeApp/FreeTube#8639
Other changes
- fix: Update transitive deps for security vulnerabilities
- fix: Revert
--no-zygoteflag that broke Electron on NixOS - fix: Fullscreen improvements — delegate Escape to browser native behavior, proper cleanup on unmount, tab bar hidden during fullscreen
- chore: Move
yaml-eslint-parserto devDependencies
NixOS
Update your flake input to this release's commit and rebuild.
FreeTube + Tabs v0.24.2
FreeTube + Tabs v0.24.2
Architecture
- Unified tab operations — consolidated scattered tab transition handlers into a single composable with serialized execution, preventing race conditions
- IPC hardening — renderer→main IPC calls now strip Vue reactive Proxies at the boundary, validate all incoming data, and support timeout and abort signals. Added Content Security Policy with correct
connect-srcfor production - Deduplicated view logic — extracted shared route guard, backend fetch fallback, and watcher patterns; net reduction of ~230 lines across Channel, Watch, and player components
Bug Fixes
- Fix back/forward navigation within same tab — pressing back/forward after navigating between videos did nothing; the tab executor was silently suppressing route change reactions during intra-tab history navigation
- Fix tab drag crash — dragging tabs could throw; now shows media playing state in tab icon
- Fix Vue lifecycle errors during tab close — deferred tab removal until navigation settles, preventing null-instance errors
- Fix Shaka player DOM and listener leaks — player elements and event listeners were accumulating over time
- Fix progress bar lingering on abort — subscription feeds now clean up the progress bar when fetch is aborted
- Fix IPC serialization errors — Vue reactive objects sent over IPC caused DataCloneError in multiple code paths; fixed at the IPC boundary layer
- Fix will-navigate handler timing — deferred handler until after initial page load to prevent interference with Electron's loadURL()
- Fix refresh button disappearance — resolved layout regression; matched nav button sizing consistently
- Fix arrow button state — back/forward arrows now reactively derive enabled/disabled from the tab's history index
- Fix refresh widget timestamp — "Last updated" timestamps now update continuously
- Fix tab bar layout gaps — removed hover gap at start of tab bar and closed visual gap between sidebar and tab bar
- Fix subscription cache timestamps — date comparison now handles JSON-serialized values correctly
- Fix PO token generation — relaxed validation to accept channel IDs and removed overly strict context type check
CI/CD
- Nix build workflow — added GitHub Actions workflow to verify the NixOS flake builds on every push and PR
Docs
- Rewritten CONTRIBUTING.md — updated for fork identity and workflow
Install
NixOS (flake):
nix run github:countgitmick/FreeTubePlusTabs
Other platforms: Download the appropriate asset below for your OS and architecture.
FreeTube + Tabs v0.24.1
FreeTube + Tabs v0.24.1
New Features
- ESC exits fullscreen — pressing Escape now exits native fullscreen in the video player
- Faster player controls fade — controls and cursor hide in 0.5s after mouse stops (down from Shaka's default 3s idle timer), with 0.3s fade animation
- Sticky tab bar — tab bar stays pinned at the top when scrolling page content
- Refresh Tab in context menu — right-click a tab to refresh it (soft refresh for active tabs)
- Refresh widget moved to TopNav — cleaner layout via Teleport
Bug Fixes
- Fix Vue lifecycle errors during tab refresh — removed key-based component destruction that caused
emitsOptions/parentNodenull errors - Fix tab scroll position save/restore — routerView is now the scroll container when tabs are enabled, fixing previously broken scroll persistence
- Fix search errors on route transitions — guard against empty/undefined query params
- Fix SABR 401 errors — auto-reload instead of format fallback
- Fix multi-tab SABR conflicts — per-stream scheme registry prevents cross-tab interference
- Fix Shaka player and SponsorBlock console errors
- Fix RSS feed 404 console spam — route requests through main process
- Fix active tab highlight color — use
color-mixinstead of brokenprimary-color-rgb - Revert custom Wayland fullscreen — removed IPC-based fullscreen override and opacity workaround; uses upstream browser Fullscreen API (Wayland surface unmap glitch is a Chromium upstream issue)
Install
NixOS (flake):
nix run github:countgitmick/FreeTubePlusTabs
Other platforms: Download the appropriate asset below for your OS and architecture.
FreeTube + Tabs v0.24.0
FreeTube + Tabs v0.24.0
New Features
- Tab context menu — right-click tabs for Close, Close Others, Close to Right, Duplicate; new tabs insert next to the active tab
- Updated About page — Monero donation address, removed upstream contact info
Bug Fixes
- Fix tab corruption ("borging") on rapid switching — added
tabSwitchInProgresslock across all 13 tab-switching entry points to prevent concurrent switches from overwriting tab state - Fix shaka.log monkey-patch crash — removed patch that crashed the renderer process
- Fix console warnings & RSS 403 fallback — cleaner console output, RSS feeds falling back to scraper on 403
- Fix missing chapterStreams in SABR manifest — chapters now load correctly
- Fix tab-aware sentry mode — pauseReason enum and console error cleanup
- Migrate shaka-player API v4 → v5 — compatibility with shaka-player 5.x
- Fix video pause on tab switch — only pauses when switching to another video tab, not any tab
Dependencies
- shaka-player 4.16.20 → 5.0.7
- electron 41.0.2 → 41.0.3
- vue-router 5.0.3 → 5.0.4
- eslint 10.0.3 → 10.1.0
- stylelint 17.4.0 → 17.5.0
- marked 17.0.4 → 17.0.5
- electron-context-menu 4.1.1 → 4.1.2
- webpack-cli 7.0.1 → 7.0.2
- @babel/preset-env 7.29.0 → 7.29.2
Install
NixOS (flake):
nix run github:countgitmick/FreeTubePlusTabs
Other platforms: Download the appropriate asset below for your OS and architecture.
Notes
Based on FreeTube 0.23.15. All upstream features are preserved — tabs are additive.
v0.23.15 — FreeTube + Tabs
FreeTube + Tabs v0.23.15
First release of FreeTube + Tabs — a fork of FreeTube with browser-style tabbed browsing.
What's new (vs upstream FreeTube 0.23.15)
- Browser-style tabs: open videos, channels, searches in new tabs
- Middle-click or Ctrl+click to open in new tab
- Keyboard shortcuts: Ctrl+T, Ctrl+W, Ctrl+Tab, Ctrl+1-9
- Tabs preserve scroll position, video timestamp, and full page state
- Only the active tab plays audio
- Right-click tab menu: Close, Close Others, Close to Right, Duplicate
- Tabs restore on app restart
- Configurable max tab limit (default 20)
Install
NixOS:
nix run github:countgitmick/FreeTubePlusTabsOther Linux / Windows / Mac: Download from the assets below.
Notes
- Your existing FreeTube data (subscriptions, playlists, history) works as-is
- Based on FreeTube v0.23.15