primp

Python HTTP client that impersonates real browser TLS and HTTP/2 fingerprints.

Library
PyPI
v1.3.1
574stars
MIT License

Repository Health

Pre-computed score based on development activity, maintenance, community, maturity, and trend momentum.How we score it →
70/100Good
Development Activity64
Maintenance76
Community52
Maturity48
Momentum40

Technical Analysis

AI-assessed by reading the actual repository — architecture, code quality, innovation, and documentation.How we score it →
80/100Excellent
Architecture80
Code Quality72
Innovation85
Learning Curve82

primp (Python Requests IMPersonate) is a high-performance HTTP client for Python built on a Rust core. Unlike ordinary HTTP libraries, it mimics the TLS and HTTP/2 fingerprints (JA3/JA4, Akamai) of real web browsers such as Chrome, Safari, Edge, Firefox, and Opera, so its requests look like genuine browser traffic.

This makes primp especially useful for web scraping and automation against sites that fingerprint clients to block bots. It offers a requests-style API while delegating the networking and impersonation to compiled Rust for speed.

What You Get

  • A requests-style Client with get, post, put, patch, delete, and head methods
  • Browser impersonation profiles for Chrome, Safari, Edge, Firefox, and Opera
  • OS fingerprint selection (Android, iOS, Linux, macOS, Windows, random)
  • A fast Rust networking core exposed through prebuilt Python wheels

Common Use Cases

  • Scraping sites that block clients by TLS/HTTP2 fingerprint
  • Automating requests that must appear to come from a specific browser
  • Replacing requests/httpx where anti-bot fingerprinting is a problem

Under The Hood

Architecture - primp is a monorepo: the core HTTP/impersonation engine lives in crates/primp (Rust) and the Python bindings in crates/primp-python. The Python package is a thin binding layer over the Rust client, which builds on the reqwest/rquest stack to control the TLS (BoringSSL) handshake and HTTP/2 frame settings that constitute a browser fingerprint. Impersonation profiles select a preconfigured set of these low-level parameters.

Tech Stack - Roughly 96% Rust with a small Python surface. The Rust side handles async networking and TLS via BoringSSL to reproduce JA3/JA4 and Akamai fingerprints; the Python side is packaged as a native extension distributed as prebuilt wheels, so end users typically need no Rust toolchain.

Code Quality - The project is actively maintained (56 releases, frequent commits) with a clear versioning cadence and per-crate structure. As a single-maintainer project the bus factor is low, but the release discipline and browser-profile update history indicate careful, ongoing upkeep tracking new browser versions.

API Design - The public API deliberately mirrors Python’s requests: a Client object plus HTTP verb methods returning response objects with .text, .json, and similar accessors. Enabling impersonation is a single constructor argument (impersonate=“chrome_146”), keeping the ergonomics familiar while hiding the substantial low-level fingerprinting machinery.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack
Join 750+ subscribers

Search