ff-rdp

ff-rdp 0.4.1

Use Firefox's Remote Debugging Protocol via a CLI

  • By ractive
  • Open Source
  • Portable
  • Updated Oct 5, 2026
Download for Windows

About ff-rdp

CLI for Firefox Remote Debugging Protocol — inspect, test, and automate Firefox from the terminal. Supports navigation, DOM queries, screenshots, accessibility audits, performance analysis, network monitoring, and more. Designed for both human users and AI agents.

What's new in 0.4.1

A small release from one user session's feedback: perf can bypass the HTTP cache with --cold, perf compare no longer hangs after the first URL and names the URL and step when it does time out, and navigate gained --wait-idle. No flags were removed or renamed.
Added
- perf summary|vitals|audit|compare --cold: bypasses the HTTP cache for that command's loads (Firefox's cacheDisabled, scoped to the command's connection), so total_transfer_size and the vitals reflect a network load instead of zeros. The envelope carries meta.cache: "bypassed". It does not touch service worker caches or warm TCP/TLS/DNS state. The non-compare subcommands reload the current page first.
- navigate --wait-idle [--idle-ms N] (default 500 ms, floor 200 ms): after the document commits, waits until no network event has arrived for the quiet window, then until in-viewport and non-lazy images are complete, all within --timeout-ms. Adds results.idle = {idle_at_ms, requests_observed, images_complete, lazy_images_deferred}. Runs before --wait-for/--wait-text/--wait-selector; conflicts with --no-wait and --with-network. Off-screen loading="lazy" images are never fetched by Firefox and are counted, not waited for. reload --wait-idle shares the same drain loop.
Changed
- perf compare: --help now says --timeout bounds each step (connect, navigate, readystate, collect), not the whole run. A readyState timeout is now a Timeout error (exit 124) instead of a User error.
- a11y --help describes a11y summary output as the object it actually returns (landmarks, headings, interactive), matching a11y summary --help.
Fixed
- perf compare hung on the second URL even at the default timeout: after navigateTo it read document.readyState on the old page (already complete) and sent the collect eval to that page's dead console actor. Each URL now uses the same commit wait as navigate, and timeouts name the URL and the step instead of a bare phase: recv.
Internal
- Mock-server fixtures can now be cached (Cache-Control: no-store is only the default); new live tests live_295_perf_cold and live_295_navigate_wait_idle; new recorded cacheDisabled fixture. Plan: kb/iterations/iteration-295-feedback-quick-fixes.md.

Full release notes »

Technical details

Publisherractive
AuthorJames Bergamin
Version0.4.1
Release date2026-10-05
LicenseMIT
Installer typezip
Architecturex64, arm64
Package IDractive.ff-rdp

Install ff-rdp from the command line

Install with Windows Package Manager
winget install --id=ractive.ff-rdp -e
Update to the latest version
winget upgrade --id=ractive.ff-rdp -e
Uninstall
winget uninstall --id=ractive.ff-rdp -e

Install ff-rdp together with other apps in one command »

agentic-skillsagentic-workflowclifirefoxfirefox-rdp

ff-rdp version history

0.4.0 Oct 4, 2026

The connection daemon is gone: every command opens its own Firefox connection, nothing to start or stop. New since 0.3.0: --with-page on every action, --query on every read command, a bare ff-rdp home view with a SessionStart hook, and fixes for Firefox 152 through 157.
Background on the reset: kb/research/step-back-2026-10-02.md.
Breaking / Removed
───────────────────────────────────────────────────────────────┬──────────────────────────────────────────────────────────────────────────────────
Removed │Use instead
───────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────
daemon status, daemon stop, --no-daemon, --daemon-timeout │nothing; run commands directly
───────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────
cross-command event capture via the daemon │navigate URL --with-network, or network --follow > net.ndjson & started first
───────────────────────────────────────────────────────────────┼──────────────────────────────────────────────────────────────────────────────────
throttle command │navigate/reload --throttle slow-3g|fast-3g --block PATTERN (that load only) …

0.3.0 Jul 11, 2026

What's Changed
Other Changes
- iter-54: protocol correctness & robustness by @ractive in #57
- iter-55: daemon hardening, module borders & agent-friendly docs by @ractive in #58
- iter-56: dogfooding session 41 fixes (exit codes, defaults, schema docs) by @ractive in #59
- iter-57: dogfooding session 42 fixes by @ractive in #60
- iter-58: ff-rdp-debug skill (v0) + install-skill subcommand by @ractive in #61
- iter-59: auto-wait, pointer events, settle/wait-for, retry classification by @ractive in #62
- iter-60: compact responses, ARIA-tree dom, and ref-id selectors by @ractive in #63
- iter-61: script runner + recorder (JSON-first, YAML accepted) by @ractive in #64
- iter-61b: recorder CLI wiring + iter-61 review-feedback fixes by @ractive in #65
- kb: dogfood session 45 + iter-61c plan by @ractive in #66
- iter-61c: NDJSON contract + secret-leak fixes + recorder fidelity by @ractive in #67
- kb: dogfood session 46 + iter-61d plan by @ractive in #68
- iter-61d: recorder wait --timeout + version-info fallback + recorder formatting by @ractive in #69
- chore(iter-61b): mark status=done by @ractive in #70
- kb(iter-61g): add plan for navigate blocking + network buffer + sources fallback by @ractive in #71
- iter-61g: navigate blocking + nav-scoped network buffer + sources walker fallback by @ractive in #72
- iter-61h: fix headless screenshot on Firefox 149+ via chrome-scope fallback by @ractive in #73 …

0.2.0 May 6, 2026

What's Changed
Other Changes
- iter-51: connection diagnostics & onboarding (doctor, port collision, meta.connection) by @ractive in #54
- iter-52: input & eval ergonomics by @ractive in #55
- iter-53: stability fixes (navigate wait, daemon noise, screenshot fallback) by @ractive in #56
Full Changelog: v0.1.0...v0.2.0

Frequently asked questions

Is ff-rdp free?

Yes. ff-rdp is free and open-source software released under the MIT license.

What is the latest version of ff-rdp?

The latest version is 0.4.1, released on Oct 5, 2026.

Is it safe to download ff-rdp?

The download button links to the official installer published on github.com, the same file Windows Package Manager installs. You can verify the downloaded file by comparing its SHA-256 checksum with ac6b0da446bda1602c2f4d056746833675d6a077cb3be003a6616b747142554c.

Which Windows versions does ff-rdp support?

ff-rdp runs on Windows and is available for 64-bit (x64), ARM64 systems.

How do I uninstall ff-rdp?

Open Settings › Apps › Installed apps, find ff-rdp and select Uninstall. From the command line, run winget uninstall --id=ractive.ff-rdp -e.

Is there a portable version of ff-rdp?

Yes. ff-rdp is available as a portable ZIP archive (ff-rdp-v0.4.1-x86_64-pc-windows-msvc.zip, 64-bit (x64)) that runs without installation. Copy it to any folder or USB drive and run it from there.