# daijro/browserforge architecture

> Architecture diagram of the GitHub repository daijro/browserforge, generated by GitDiagram from its file tree, README and a sample of source files (last updated 2026-09-30). It is an AI-made overview: check details against the source.

- Interactive diagram: https://gitdiagram.com/daijro/browserforge
- Repository: https://github.com/daijro/browserforge

## Overview

BrowserForge generates statistically realistic HTTP headers and browser fingerprints, then can apply fingerprints to browser-automation contexts or pages. The principal workflow is constrained generation: header options feed Bayesian sampling, fingerprint generation adds screen and browser properties, and injector adapters configure automation engines. The README also documents locale, HTTP-version and screen constraints, User-Agent-based generation, and optional WebRTC/slim behavior. Edges are limited to relationships shown in excerpts or the source index; the remaining fingerprint and injector internals were not inspected.

Main entry points: [`browserforge/headers/generator.py`](https://github.com/daijro/browserforge/blob/main/browserforge/headers/generator.py) (Header generator), [`browserforge/fingerprints/generator.py`](https://github.com/daijro/browserforge/blob/main/browserforge/fingerprints/generator.py) (Fingerprint generator), [`browserforge/injectors/utils.py`](https://github.com/daijro/browserforge/blob/main/browserforge/injectors/utils.py) (Injection utilities), [`browserforge/injectors/playwright/injector.py`](https://github.com/daijro/browserforge/blob/main/browserforge/injectors/playwright/injector.py) (Playwright adapter)

## Diagram (Mermaid)

```mermaid
flowchart TD

subgraph group_generation["Generation"]
  node_headers["Header generator<br/>[generator.py]"]
  node_header_utils["Header utilities<br/>[utils.py]"]
  node_fingerprint["Fingerprint generator<br/>[generator.py]"]
end

subgraph group_sampling["Sampling"]
  node_network["Bayesian sampler"]
end

subgraph group_injection["Browser injection"]
  node_inject_utils["Injection utilities<br/>[utils.py]"]
  node_pw["Playwright adapter<br/>[injector.py]"]
  node_pyppeteer["Pyppeteer adapter<br/>[injector.py]"]
  node_undetected["Undetected adapter<br/>[injector.py]"]
end

node_user(("Library user"))
node_playwright_browser["Playwright browser"]
node_pyppeteer_browser["Pyppeteer browser"]
node_undetected_browser["Undetected browser"]

node_user -->|"requests headers"| node_headers
node_headers -->|"returns headers"| node_user
node_user -->|"requests fingerprint"| node_fingerprint
node_fingerprint -->|"returns fingerprint"| node_user
node_headers -->|"samples constraints"| node_network
node_fingerprint -->|"samples properties"| node_network
node_fingerprint -->|"generates headers"| node_headers
node_headers -->|"uses utilities"| node_header_utils
node_user -->|"creates context"| node_pw
node_pw -->|"builds injection"| node_inject_utils
node_pw -->|"configures context"| node_playwright_browser
node_user -->|"creates page"| node_pyppeteer
node_pyppeteer -->|"builds injection"| node_inject_utils
node_pyppeteer -->|"configures page"| node_pyppeteer_browser
node_user -->|"creates context"| node_undetected
node_undetected -->|"builds injection"| node_inject_utils
node_undetected -->|"configures context"| node_undetected_browser
node_inject_utils -->|"generates if absent"| node_fingerprint

click node_headers "https://github.com/daijro/browserforge/blob/main/browserforge/headers/generator.py"
click node_header_utils "https://github.com/daijro/browserforge/blob/main/browserforge/headers/utils.py"
click node_fingerprint "https://github.com/daijro/browserforge/blob/main/browserforge/fingerprints/generator.py"
click node_network "https://github.com/daijro/browserforge/blob/main/browserforge/bayesian_network.py"
click node_inject_utils "https://github.com/daijro/browserforge/blob/main/browserforge/injectors/utils.py"
click node_pw "https://github.com/daijro/browserforge/blob/main/browserforge/injectors/playwright/injector.py"
click node_pyppeteer "https://github.com/daijro/browserforge/blob/main/browserforge/injectors/pyppeteer/injector.py"
click node_undetected "https://github.com/daijro/browserforge/blob/main/browserforge/injectors/undetected_playwright/injector.py"

classDef toneNeutral fill:#f8fafc,stroke:#334155,stroke-width:1.5px,color:#0f172a
classDef toneBlue fill:#dbeafe,stroke:#2563eb,stroke-width:1.5px,color:#172554
classDef toneAmber fill:#fef3c7,stroke:#d97706,stroke-width:1.5px,color:#78350f
classDef toneMint fill:#dcfce7,stroke:#16a34a,stroke-width:1.5px,color:#14532d
classDef toneRose fill:#ffe4e6,stroke:#e11d48,stroke-width:1.5px,color:#881337
classDef toneIndigo fill:#e0e7ff,stroke:#4f46e5,stroke-width:1.5px,color:#312e81
classDef toneTeal fill:#ccfbf1,stroke:#0f766e,stroke-width:1.5px,color:#134e4a
class node_headers,node_header_utils,node_fingerprint,node_user,node_playwright_browser,node_pyppeteer_browser,node_undetected_browser toneBlue
class node_network toneAmber
class node_inject_utils,node_pw,node_pyppeteer,node_undetected toneMint
```

## Components

### Generation

- [Header generator](https://github.com/daijro/browserforge/blob/main/browserforge/headers/generator.py): `browserforge/headers/generator.py`
- [Header utilities](https://github.com/daijro/browserforge/blob/main/browserforge/headers/utils.py): `browserforge/headers/utils.py`
- [Fingerprint generator](https://github.com/daijro/browserforge/blob/main/browserforge/fingerprints/generator.py): `browserforge/fingerprints/generator.py`

### Sampling

- [Bayesian sampler](https://github.com/daijro/browserforge/blob/main/browserforge/bayesian_network.py): `browserforge/bayesian_network.py`

### Browser injection

- [Injection utilities](https://github.com/daijro/browserforge/blob/main/browserforge/injectors/utils.py): `browserforge/injectors/utils.py`
- [Playwright adapter](https://github.com/daijro/browserforge/blob/main/browserforge/injectors/playwright/injector.py): `browserforge/injectors/playwright/injector.py`
- [Pyppeteer adapter](https://github.com/daijro/browserforge/blob/main/browserforge/injectors/pyppeteer/injector.py): `browserforge/injectors/pyppeteer/injector.py`
- [Undetected adapter](https://github.com/daijro/browserforge/blob/main/browserforge/injectors/undetected_playwright/injector.py): `browserforge/injectors/undetected_playwright/injector.py`

### Other components

- **Library user**
- **Playwright browser**
- **Pyppeteer browser**
- **Undetected browser**

## Connections

- Library user → Header generator: requests headers (evidence: `README.md`)
- Header generator → Library user: returns headers (evidence: `README.md`)
- Library user → Fingerprint generator: requests fingerprint (evidence: `README.md`)
- Fingerprint generator → Library user: returns fingerprint (evidence: `README.md`)
- Header generator → Bayesian sampler: samples constraints (evidence: `browserforge/headers/generator.py`)
- Fingerprint generator → Bayesian sampler: samples properties (evidence: `browserforge/fingerprints/generator.py`)
- Fingerprint generator → Header generator: generates headers (evidence: `browserforge/fingerprints/generator.py`)
- Header generator → Header utilities: uses utilities (evidence: `browserforge/headers/generator.py`)
- Library user → Playwright adapter: creates context (evidence: `browserforge/injectors/playwright/injector.py`)
- Playwright adapter → Injection utilities: builds injection (evidence: `browserforge/injectors/playwright/injector.py`)
- Playwright adapter → Playwright browser: configures context (evidence: `browserforge/injectors/playwright/injector.py`)
- Library user → Pyppeteer adapter: creates page (evidence: `browserforge/injectors/pyppeteer/injector.py`)
- Pyppeteer adapter → Injection utilities: builds injection (evidence: `browserforge/injectors/pyppeteer/injector.py`)
- Pyppeteer adapter → Pyppeteer browser: configures page (evidence: `browserforge/injectors/pyppeteer/injector.py`)
- Library user → Undetected adapter: creates context (evidence: `browserforge/injectors/undetected_playwright/injector.py`)
- Undetected adapter → Injection utilities: builds injection (evidence: `browserforge/injectors/undetected_playwright/injector.py`)
- Undetected adapter → Undetected browser: configures context (evidence: `browserforge/injectors/undetected_playwright/injector.py`)
- Injection utilities → Fingerprint generator: generates if absent (evidence: `browserforge/injectors/utils.py`)
