Skip to content

YouTube Fast Forward & Rewind 5.0.0

Latest

Choose a tag to compare

@Laskco Laskco released this 17 Jul 23:56

Version 5.0.0 is the largest update to the extension so far. Much of the extension has been rebuilt to improve reliability, responsiveness, accessibility, browser compatibility, and long-term maintainability while preserving the familiar YouTube-integrated controls.

Player controls and seeking

  • Rebuilt how the extension finds, tracks, and reconnects to YouTube's active video player.
  • Preserved the familiar native YouTube placement and spacing for both left-side and right-side skip controls.
  • Improved recovery when YouTube replaces the player, changes videos without reloading the page, or rebuilds its control bar.
  • Added safer detection for standard YouTube watch pages, fullscreen playback, preview-player exclusions, and alternate control-bar structures.
  • Prevented duplicate controls and made cleanup remove only elements owned by the extension.
  • Stopped unnecessary player observation while button skips are disabled, reducing background page work.
  • Improved retry behavior when YouTube's controls are not ready yet.
  • Added a manual Re-inject Buttons action in Advanced Settings, with accurate feedback when YouTube is unavailable, the extension is disabled, or the controls are not ready.
  • Hardened seek calculations so invalid settings, incomplete metadata, buffering, and unusual video durations cannot produce broken seek positions.
  • Improved press-and-hold seeking and cleanup when a pointer is released, cancelled, the window loses focus, or a context menu opens.
  • Improved progress-bar refresh behavior after a skip without constantly generating synthetic player activity.
  • Added safer handling when videos are replaced, removed, paused, buffering, seeking, or changing sources.
  • Restored exact pre-update YouTube control-bar positioning and native visual behavior.
  • Added correct fullscreen spacing and disabled pointer interaction while YouTube's controls are hidden.

Keyboard controls

  • Reworked keyboard shortcut handling for more predictable forward, rewind, and press-and-hold behavior.
  • Custom hotkeys are normalized and validated before use.
  • Duplicate or invalid stored hotkeys are repaired automatically.
  • Shortcuts now operate only on supported YouTube video pages and no longer interfere elsewhere on YouTube.
  • Shortcuts no longer take over input fields, text areas, selectors, editable content, buttons, links, or other interactive controls.
  • Protected browser and system shortcuts by rejecting unsafe modifier combinations and blocked keys.
  • Improved handling for supported media-key events.
  • Active held shortcuts are stopped safely when focus changes, the page becomes hidden, navigation occurs, or the matching key is released.

Settings and popup

  • Reworked the popup's settings model and DOM handling for more reliable updates and fewer stale references.
  • Added strict validation and safe limits for skip times, presets, delays, hold intervals, hotkeys, statistics, and boolean settings.
  • Corrupt or outdated stored values are repaired instead of being allowed to break the popup or player controls.
  • Preferences now update live across the popup, content script, and other open tabs.
  • Prevented older asynchronous storage reads from overwriting newer settings.
  • Improved preset editing, resetting, saving, and contextual labels for button and keyboard presets.
  • Improved custom spinner controls and added descriptive accessible labels.
  • Improved hotkey editing, conflict detection, cancellation, reset behavior, and displayed key names.
  • Improved toggle state labels and ensured disabled sections affect only their related controls.
  • Preserved the advanced-panel state locally without syncing interface-only state between devices.
  • Improved popup initialization and error recovery if the extension background context is temporarily unavailable.
  • Kept dark and light theme behavior while moving popup styling into its own isolated stylesheet.
  • The popup now displays the installed version directly from the manifest.

Statistics and multi-tab reliability

  • Rebuilt statistics updates to avoid lost totals when several YouTube tabs skip at the same time.
  • Statistics deltas are serialized in the background before being written.
  • Content scripts batch and flush pending statistics more safely to reduce storage writes.
  • A new statistics batch waits for an in-progress write instead of overwriting it.
  • Resetting statistics first asks open YouTube tabs to flush pending skips, preventing skipped time from reappearing after a reset.
  • A failed tab flush now stops the reset and reports the problem rather than silently losing data.
  • Statistics remain local to the current browser while playback preferences use synchronized extension storage.
  • Existing valid user preferences and progress-update delays are preserved during the upgrade.
  • Deprecated and incorrectly located storage values are migrated or removed automatically.

Diagnostics and error handling

  • Added a local diagnostic log containing up to the 10 most recent actionable extension errors.
  • Added the red diagnostics indicator in the Statistics header when errors are available.
  • Selecting the indicator copies the recent diagnostic entries for use in a bug report.
  • Diagnostic entries are sanitized and bounded before storage.
  • Generic browser video events such as [object Event] are no longer treated as useful diagnostic errors and are cleaned from existing logs.
  • Background, popup, messaging, storage, injection, and playback failures now produce clearer internal context.
  • Diagnostics remain on the device and are never transmitted automatically.

Accessibility and interface behavior

  • Player skip controls can now be activated with Enter or Space without accidental repeated activation.
  • Added descriptive accessible names, pressed states, expanded states, live status regions, and contextual control labels throughout the popup.
  • Added visible keyboard focus styles to the player buttons and popup controls.
  • Kept toggle inputs available to assistive technology instead of hiding them from the accessibility tree.
  • Improved contrast and reduced-motion behavior.
  • Tooltips, preset editors, theme controls, reset actions, donation links, position controls, and advanced settings now expose clearer labels.

Privacy, permissions, and browser compatibility

  • Removed the broad tabs permission from the extension manifest.
  • Restricted page access from all YouTube protocols to secure https://*.youtube.com/* pages only.
  • Removed an unnecessary web-accessible icon declaration.
  • Added an explicit extension-page Content Security Policy.
  • Added Mozilla's required declaration that the extension collects no data.
  • Added separate Chrome and Firefox Manifest V3 builds so each browser receives only the background declaration it supports.
  • Chrome uses a service worker; Firefox uses a background script.
  • Supported versions are Chrome 111+, Firefox Desktop 140+, and Firefox for Android 142+.

Performance and maintainability

  • Reduced unnecessary mutation observation, repeated initialization, stale timers, duplicate listeners, and redundant storage work.
  • Centralized settings defaults, coercion, normalization, and storage ownership.
  • Split player CSS from popup CSS so YouTube receives only the small stylesheet required for its controls.
  • Added deterministic npm builds for Chrome and Firefox.
  • Added JavaScript, HTML, CSS, dead-code, duplicate-code, security, and Firefox-extension validation.
  • Added 21 automated regression tests covering settings repair, concurrent statistics, storage migration, resets, diagnostics cleanup, safe seeking, keyboard scoping, player reinjection, live-setting races, accessibility, browser manifests, runtime assets, and exact YouTube control positioning.
  • Added GitHub Actions validation for every push to the main branch and every pull request.

Building and testing

The repository now includes reproducible npm tooling. With Node.js 22 or newer:

npm ci
npm run check
npm run build

The build command creates unpacked browser builds in dist/chrome and dist/firefox.

Updating from an earlier version

Existing valid settings are migrated automatically. If YouTube was already open when the extension updated, reload the YouTube tab once to activate version 5.0.0.

The extension does not collect or transmit personal data. Preferences use browser extension storage, while statistics and diagnostic errors remain local to your browser.