Skip to main content

wreq-js

Node.js/TypeScript HTTP client with browser profile and transport controls exposed by native Rust bindings.

Native Bindings

No browser process management. Requests run through native Rust bindings.

Browser Profiles

Browser and operating system profiles exposed through a fetch-like API.

Fetch Style API

A fetch-style API with extra options for browser profiles and sessions.

WebSocket Support

WebSocket API with helper and constructor styles.

Why wreq-js?

Standard HTTP clients like axios, fetch, got, and curl can differ from browsers on the network layer. Signals often inspected by servers can include:
  1. TLS handshake details such as cipher suite order and extension sets
  2. HTTP behavior details such as protocol settings and framing choices
  3. Header defaults such as ordering and platform-specific values
Some anti-bot systems inspect these signals. wreq-js uses the wreq Rust engine underneath and exposes profile controls through a TypeScript friendly API.

When to use wreq-js

  1. Web scraping and data collection
  2. API automation with browser profile controls
  3. Multiple HTTP requests with shared session or transport settings
  4. Login flows and session management
  5. Proxy usage scenarios with per request or transport scoped settings
  1. DOM or JavaScript execution (not a browser runtime)
  2. CAPTCHA solving or page automation
  3. Full browser automation (use Playwright/Puppeteer instead)

Quick Example

If your script makes more than one request, start with a session and reuse it. Sessions reuse the same session context across requests, which is the recommended shape for multi-step flows.
import { fetch } from 'wreq-js';

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

console.log(await response.json());
That’s it. You can select browser profiles with a familiar fetch-style API. For a detailed compatibility breakdown, see /concepts/compatibility-matrix.

Next Steps