Fix RetroArch fast-forward stuck on Android without resetting every input
Tap the Fast-Forward Toggle once to cancel a latched toggle, then clear and test the Toggle and Hold bindings separately under Settings → Input → Hotkeys. Require Enable Hotkeys when a gameplay button collides with frontend commands. During diagnosis, set a finite Fast-Forward Rate instead of the unlimited zero value, save the intended configuration scope, and cold-relaunch. If the indicator clears but speed stays wrong, measure core performance and refresh behavior rather than remapping more buttons.
Do this in order
- 01
Record the package, core, controller, active configuration or override, on-screen indicator, Fast-Forward Rate, and whether the fault begins after a tap, a hold, reconnect, or menu return.
- 02
With content running, invoke Fast-Forward Toggle once; if normal speed returns, the toggle was latched and the Hold binding is not the first fault.
- 03
Open Settings → Input → Hotkeys, clear duplicate Fast-Forward Toggle and Hold assignments, then bind only Hold to a deliberate control for the first retest.
- 04
Configure Enable Hotkeys when the same physical button can also reach the game or another frontend command, and verify that releasing the hold clears the fast-forward indicator.
- 05
Set a finite Fast-Forward Rate for diagnosis because `fastforward_ratio = 0` means unlimited; test a repeatable scene without changing VSync, audio, threaded video, or core options.
- 06
Save the correct global or override scope, quit RetroArch through its menu, cold-relaunch, and only then investigate controller release events, core speed, refresh rate, or a stale override.
Decision and diagnostic table
| Observation | Likely cause | Next action |
|---|---|---|
| One toggle press restores speed | Latched toggle | Remove collision or prefer Hold |
| Indicator remains after release | Hold binding or release-event boundary | Test another input and inspect Android events |
| Indicator clears, game still too fast | Throttle, refresh, or core setting | Restore frame-throttle baseline |
| Rate varies wildly | Unlimited ratio or device ceiling | Use a finite cap and measure actual speed |
Toggle and hold are different commands
Libretro documents separate Fast Forward Toggle and Fast Forward Hold actions. A toggle stays active until invoked again; a hold should remain active only while its input is held. Binding both to overlapping controller paths makes the symptom ambiguous.
A zero ratio removes the cap
The current RetroArch template defines a Fast-Forward Rate of zero as unlimited and warns that finite caps are not perfectly exact. During diagnosis, a finite value makes a latched command easier to distinguish from the device merely reaching its performance ceiling.
Keep the configuration scope visible
A game, content-directory, or core override can outlive a global correction. Record which scope is active, change one binding or rate at a time, and verify after a full menu quit so Android and RetroArch both deliver a clean start.
Hotkey repair does not change rights in the loaded game. Use authorized content and do not attach ROMs, BIOS files, saves, screenshots, controller profiles of unknown license, account tokens, or private paths to a support report.