Skip to main content

What are browser profiles?

Browser profiles define the TLS and HTTP/2 fingerprints that wreq-js uses to impersonate real browsers. Each profile replicates:
  • TLS fingerprint (JA3/JA4): cipher suites, extensions, and handshake parameters
  • HTTP/2 settings: SETTINGS frames, PRIORITY behavior, and flow control
  • Header ordering: the order browsers send HTTP headers
  • Default headers: User-Agent, Accept, Accept-Language, and more

Available browsers

wreq-js supports fingerprints for:
  • Chrome: recent versions with regular updates
  • Firefox: desktop and mobile variants (when available)
  • Safari: macOS and iOS variants
  • Edge: Chromium-based versions
  • Opera: desktop versions
  • OkHttp: Android HTTP client

Listing profiles

import { getProfiles } from 'wreq-js';

const profiles = getProfiles();
console.log(profiles);
// ['chrome_142', 'chrome_141', 'firefox_139', 'safari_18', 'edge_120', ...]

Using a profile

Specify the browser option in your fetch call:
import { fetch } from 'wreq-js';

const response = await fetch('https://example.com', {
  browser: 'chrome_142',
});

Operating systems

Different operating systems have different header values and behaviors. Use the os option to emulate a specific platform:
import { getOperatingSystems } from 'wreq-js';

console.log(getOperatingSystems());
// ['windows', 'macos', 'linux', 'android', 'ios']

Example: Windows Chrome

const response = await fetch('https://example.com', {
  browser: 'chrome_142',
  os: 'windows',
});

Example: iOS Safari

const response = await fetch('https://example.com', {
  browser: 'safari_18',
  os: 'ios',
});

Profile updates

Browser profiles are synchronized from the upstream wreq-util project. This ensures fingerprints stay current as browsers release new versions.
Use a recent version of wreq-js to benefit from updated profiles. Some targets do check for stale fingerprints.

Custom headers

By default, browser emulation headers are automatically added. To use only your custom headers:
const response = await fetch('https://api.example.com', {
  browser: 'chrome_142',
  headers: {
    'Accept': '*/*',
    'User-Agent': 'CustomBot/1.0',
  },
  disableDefaultHeaders: true,
});