High-performance HTTP client for Node.js with real-browser TLS and HTTP/2 fingerprints, powered by Rust.
- Native performance (no browser/process spawning)
- Real browser TLS fingerprints (JA3/JA4)
- HTTP/2 impersonation (SETTINGS/PRIORITY/header ordering)
- Multiple browser profiles (Chrome/Firefox/Safari/Edge/Opera/OkHttp)
- WebSocket support with fingerprint consistency
- Prebuilt native binaries for macOS/Linux/Windows
- TypeScript-ready with generated definitions
All guides, concepts, and API reference live at:
(If you're looking for examples, sessions/cookies, proxy usage, streaming, WebSockets, or the full API surface - it's all there.)
npm install wreq-js
# or
yarn add wreq-js
pnpm add wreq-js
bun add wreq-jsPrebuilt binaries are provided for:
- macOS (Intel & Apple Silicon)
- Linux (x64 & ARM64, glibc & musl)
- Windows (x64)
If a prebuilt binary for your platform/commit is unavailable, the package will build from source (requires a Rust toolchain).
import { fetch } from 'wreq-js';
const res = await fetch('https://example.com/api', {
browser: 'chrome_142',
os: 'windows',
});
console.log(await res.json());For most real-world workloads, start with a session and reuse it across requests. This keeps TLS/cookies warm and avoids paying setup costs on every call.
import { createSession } from 'wreq-js';
const session = await createSession({ browser: 'chrome_142', os: 'windows' });
try {
const a = await session.fetch('https://example.com/a');
const b = await session.fetch('https://example.com/b');
console.log(a.status, b.status);
} finally {
await session.close();
}More session patterns: https://wreq.sqdsh.win
Use wreq-js when you need fetch()-style ergonomics but want the network layer to look like a real browser.
If you need DOM/JS execution, CAPTCHA solving, or full browser automation, use Playwright/Puppeteer instead.
See CONTRIBUTING.md.
This is a maintained fork of will-work-for-meal/node-wreq (originally named node-wreq), with ongoing updates, compatibility fixes, and performance work.