This release is a pre-release and may not be stable for production use.
nokk (Python)
Undetectable headless-browser engine, one pip install away.
nokk is a lightweight, Chrome-fingerprinted headless-browser engine (V8 + a
minimal DOM, no rendering) that speaks the Chrome DevTools Protocol. This package
embeds the prebuilt nokk binary — there is no browser to download, no Rust
toolchain to install, and no Docker. pip install nokk, call launch(), and
connect your existing Playwright or pyppeteer script over CDP.
pip install nokk
Alpha: prebuilt wheels are currently Linux x86_64 only. macOS/Windows wheels are on the roadmap.
Quick start
Playwright
import nokk
from playwright.sync_api import sync_playwright
with nokk.launch() as server, sync_playwright() as pw:
browser = pw.chromium.connect_over_cdp(server.ws_endpoint)
page = browser.new_page()
page.goto("https://example.com")
print(page.title())
pyppeteer
import asyncio, nokk
from pyppeteer import connect
async def main():
with nokk.launch() as server:
browser = await connect(browserWSEndpoint=server.ws_endpoint)
page = await browser.newPage()
await page.goto("https://example.com")
print(await page.title())
asyncio.run(main())
launch() options
nokk.launch() starts the CDP server on a free port and returns a NokkServer
(a context manager). All arguments are keyword-only:
| Argument | Default | Meaning |
|---|---|---|
host |
"127.0.0.1" |
Address to bind. |
port |
0 |
TCP port; 0 picks a free one. |
workers |
engine default | Isolate worker threads. |
max_contexts |
engine default | Cap on concurrent contexts before backpressure. |
proxy |
None |
Upstream proxy, e.g. socks5://host:1080 or http://user:pass@host:port. |
session_store |
None |
Directory for persistent named-session cookie jars. |
rotate_fingerprint |
False |
Give each browser context its own coherent fingerprint (OS/UA/screen/WebGL + matching TLS). |
geoip_timezone |
False |
Derive each context's timezone/locale from its proxy's exit IP. |
allow_trackers |
False |
Load ad/analytics/tracker subresources (blocked by default). |
args |
None |
Extra raw CLI arguments passed to the binary. |
timeout |
30.0 |
Seconds to wait for the server to accept connections. |
# Each browser context looks like a different machine, timezone matched to its proxy.
with nokk.launch(rotate_fingerprint=True, geoip_timezone=True) as server:
...
The server also shuts down automatically at interpreter exit; with or
server.close() stops it immediately.
Point at a locally built binary during development with the NOKK_BINARY
environment variable.
Links
- Source & docs: https://github.com/koloss777/nokk
- Issues: https://github.com/koloss777/nokk/issues
Licensed under either of MIT or Apache-2.0, at your option.
Release files for nokk 0.1.18a1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| nokk-0.1.18a1-py3-none-manylinux_2_34_x86_64.whl | Python 3 | none | Linux glibc 2.34+ x86-64 | Details |
Release files / nokk-0.1.18a1-py3-none-manylinux_2_34_x86_64.whl
| Download URL | nokk-0.1.18a1-py3-none-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 14.7 MB |
| Tags | Linux glibc 2.34+ x86-64 Python 3 |
|
SHA-256 checksum How to use checksums |
370466493d2b579db6f85ac0f009aaac178c1a2f9a5c425270070e78f9460150
|
|
BLAKE2b-256 checksum How to use checksums |
469744e59576f86d92cc10a7453cfd29f35f68270838a554399e05f567ef8610
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.0
|