Skip to main content
Foil targets current evergreen browsers. It is designed for modern browser runtimes that support JavaScript, WebAssembly, and the transport APIs required by the client bundle.
Compatibility means Foil can load and produce a server-verifiable result. It does not mean every browser exposes the same signal surface or behavioral fidelity. Chromium-family browsers currently have the strongest coverage.

Supported versions

BrowserMinimum VersionEngine
Chrome100+Chromium 100
Microsoft Edge105+Chromium 105
Firefox115+Gecko (ESR baseline)
Desktop Safari15.0+WebKit
Mobile Safari / iPadOS15.0+WebKit
Android OS6.0+
Chrome on Android100+Chromium 100
Samsung Internet18.0+Chromium 105
Brave1.37+Chromium 100
Legacy browsers (IE, etc.)

What Foil requires

In practice, Foil expects a modern browser with:
  • JavaScript enabled
  • WebAssembly support
  • TextEncoder and TextDecoder
  • Modern fetch support for API transport
  • Event APIs used for interaction collection
Some probes and correlation features may work better when browsers also allow cookies, storage, and richer graphics or audio APIs, but those are not equally available on every engine.

Rollout guidance

If your traffic mix includes Safari, Firefox, or mobile-heavy traffic:
  1. Start in report mode.
  2. Observe result distribution by browser family, using latest_decision.verdict on list responses or decision.automation_status on session-detail responses.
  3. Validate real user flows on your highest-volume browsers and devices.
  4. Enforce gradually, beginning with the highest-confidence automated sessions and the most abuse-sensitive endpoints.

Embedded browsers and webviews

Foil can run in embedded contexts, but compatibility varies by host app and runtime. If you rely on:
  • iOS webviews
  • Android webviews
  • in-app browsers
  • Electron or other embedded shells
validate them explicitly before you depend on enforcement behavior.

What’s next