Video demo: Watch on YouTube
Bullshield is a Chromium-first anti-fingerprinting extension built to reduce browser fingerprint inconsistencies by applying one coherent generated profile across the surfaces that websites commonly compare.
It is not a simple User-Agent switcher. Changing only one visible value usually makes fingerprinting easier, not harder. Bullshield focuses on consistency between related surfaces so the browser presents one aligned profile instead of conflicting values.
Bullshield can align or control:
- request headers and Client Hints
- navigator identity and browser capability surfaces
- screen size, DPR, and CSS media query exposure
- locale and timezone behavior
- WebGL and WebGPU identity surfaces
- canvas, audio, DOMRect, text metrics, and math-related fingerprint surfaces
- fonts, media devices, PDF viewer, permissions, speech voices, battery, and WebRTC exposure
- worker-related paths and early browser-level override paths
- per-domain rules and activation state
- popup profile controls and saved profile history
Anti-fingerprinting protection has to run in several contexts and at several timing layers.
Bullshield currently uses these permissions for its single purpose:
<all_urls>scriptingdeclarativeNetRequestcookieswebNavigationdebuggerstoragetabsalarms
These permissions are used to inject protection at the right time, align outgoing request data, prepare page-side payload handoff before site scripts execute, manage per-site state, and keep the active profile available across the extension runtime.
Bullshield includes:
- first-run onboarding with permission disclosure
- a popup with the active generated profile, current domain state, and quick actions
- dedicated settings areas for general behavior, fingerprint controls, and profile generation
The popup overview used in the repository preview is shown above and matches the current project UI.
Bullshield is designed to operate locally inside the browser extension runtime.
It stores extension state such as:
- settings
- onboarding state
- the active generated profile
- user-saved profile history
Bullshield does not require an account for its core runtime.
Bullshield is designed to reduce inconsistencies commonly highlighted by fingerprinting diagnostics such as CreepJS by keeping correlated surfaces aligned instead of spoofing one value in isolation.
That does not justify claiming that the extension is universally undetectable. Observed results still depend on the selected settings, browser build, operating system, enabled extensions, and the test methodology.
src/ source code
static/ packaged static assets and icons
.github/workflows/ CI and release automation
docs/chrome-web-store/ store listing, privacy, reviewer, and asset docs
docs/legal/ privacy policy and attribution
docs/repo/ repository and release notes
Expected local environment:
- Node
24.14.0 - npm
>=10
Install and validate:
npm ci
npm run lint
npm run test
npm run buildProduction builds are written to:
dist/chrome/dist/firefox/dist/chrome.zipdist/firefox.zip
The packaged extension version is read from package.json, so release tags should match the package version.
- Repository:
https://github.com/jarczakpawel/bullshield-browser - Issues:
https://github.com/jarczakpawel/bullshield-browser/issues - Privacy policy:
docs/legal/privacy-policy.md
MIT
