onyxweb
URL in, fully-rendered HTML out. A Rust + Chromium (CDP) engine with a typed Python API, built for high-throughput recon, scraping, and change detection.
No Node process like Playwright, no WebDriver like Selenium. One install, one process, ~8.5 URL/s.
Installation
uv add onyxweb # or: pip install onyxweb
uv run onyxweb --install # one-time: fetch both pinned Chrome builds (~560 MB: shell ~180 MB, full ~380 MB)
# uv run onyxweb --install --engine shell # just the shell, if that is all you use
# uv run onyxweb --install --force # download again even if the pinned build is there
Python 3.11+. Wheels for linux (x86_64, aarch64), macOS (arm64), Windows x64. Anything else builds from source and needs rustup.
Embedding onyxweb in another tool? await onyxweb.aensure_chrome(dest=...) installs the browser wherever you want and returns the path for Client(chrome_path=...); find_chrome() is a no-network "is it installed?" check.
Quickstart
import onyxweb
r = onyxweb.fetch("https://example.com") # rendered HTML, post-JS
png = onyxweb.screenshot("https://example.com") # png / jpeg / webp
both = onyxweb.fetch_all("https://example.com") # both, from one page visit
r.title # "Example Domain"
r.text # visible text; script and style source left out
r.links, r.images, r.scripts # lazy buckets of records (see Page buckets)
# CSS + BeautifulSoup-style queries, parsed and run in Rust
r.dom.find_all("a", limit=10)
RenderResult is not a str. Pass r.html to regex, lxml, or BS4. str(r), "x" in r, and len(r) still work.
Examples
1) Sweep a lot of URLs
with onyxweb.Client(concurrency=16) as c:
for r in c.batch(urls, capture="html"):
if isinstance(r, Exception): # batch never raises; failures land in place
continue
print(r.status_code, r.title)
2) Async, or N threads on one Client
async with onyxweb.AsyncClient(concurrency=16) as ac:
results = await asyncio.gather(*(ac.fetch(u) for u in urls))
The GIL is released for all Rust work, so a thread pool over one Client runs genuinely parallel.
3) Get past a WAF
from onyxweb.presets.full import stealth
with onyxweb.Client(**stealth.BASIC) as c: # real Chrome, automation tells stripped
r = c.fetch("https://www.tesla.com/")
4) Drive the page before capture
r = client.fetch(
url,
scripts=[HOOK_JS], # runs before any page script
post_load_scripts=["document.title"], # returns land in r.post_load_results
actions=[onyxweb.Click(selector="#login")], # CDP-trusted click / fill / hover / wait
block_urls=["*://*.tracker.example/*"],
extra_headers={"Referer": "https://ref.example/"},
)
Per-call settings are reverted before the tab returns to the pool, so nothing leaks between fetches.
Page buckets
A captured page is sorted into 9 lazy buckets: scripts, styles, links, images, iframes, forms, meta, comments, json_ld. Sizing or printing one costs nothing until you read its records.
r.overview(prnt=True) # count and size of every bucket, no records built
r.content.scripts # inline half: source that lives in the document
r.resources.scripts # external half: URLs the page loads
r.resources.all() # everything the browser fetches, in document order
r.scripts.search("apiKey") # records containing a string, matched in Rust
r.scripts.matches(r'"apiKey":"(\w+)"', regex=True)[0].value # just the captured key
Every URL-bearing record carries url (absolute) and raw (as authored). Search patterns use Rust's regex crate: linear time, no lookaround.
Snapshots
A snapshot is one JSON file holding a page and its response. Save it once, then read it later with no Chrome and no network.
r.save("page.json") # html, headers, metadata, verdicts
r = onyxweb.RenderResult.load("page.json") # same buckets, search and text
onyxweb https://example.com --json -o page.json # fetch once, keep a snapshot
onyxweb page overview page.json # then look, with no re-fetch
onyxweb page search page.json apiKey
onyxweb page text page.json scripts 1 # one record, whole
onyxweb page reads a snapshot and never fetches:
| Command | Prints |
|---|---|
overview FILE |
count and size of every bucket |
search FILE QUERY |
each match with its surroundings; --bucket, --field, --regex and --case-sensitive narrow it |
text FILE BUCKET INDEX |
one record's whole content; INDEX is the # column of a table |
A snapshot holds the html, final URL, status, headers, metadata, console messages, script results and anti-bot verdict. It holds no screenshot. The file is JSON, not pickle, so loading one runs no code, and it carries a version: load rejects a newer one and says how to fix it. r.snapshot() returns the same data as a dict.
onyxweb page --help
usage: python -m onyxweb page [-h] command ...
Query a saved page snapshot offline.
positional arguments:
command
overview count and size of every bucket
search show where a query matches
text print one record's whole content
options:
-h, --help show this help message and exit
usage: python -m onyxweb page search [-h]
[--bucket {scripts,styles,iframes,comments,forms,meta,json_ld,links,images}]
[--field FIELD] [--regex]
[--case-sensitive]
snapshot query
positional arguments:
snapshot file from --json -o or RenderResult.save
query text to find, or a pattern with --regex
options:
-h, --help show this help message and exit
--bucket {scripts,styles,iframes,comments,forms,meta,json_ld,links,images}
search one bucket only
--field FIELD match only inside this record field, e.g. url
--regex treat the query as a pattern
--case-sensitive match letter case exactly
Serving agents
onyxweb-server, a separate package in this repository, serves onyxweb's browser to agents over MCP so an agent such as Claude Code can fetch a page once, then look, find and read it in pieces. Install and usage: python/server/README.md.
Anti-bot
r.anti_bot is populated on every fetch, whether or not you try to get past anything, so a plain fetch tells you a host sits behind Akamai.
r.anti_bot # AntiBot(vendor="cloudflare", kind="challenge", resolved=True) or None
bypass_anti_bot=True waits out challenge interstitials and self-heals hard blocks by dropping only the anti-bot cookies, then retrying once. Vendor-agnostic (Akamai, Cloudflare, DataDome, PerimeterX, Imperva).
In testing the full engine cleared Akamai, DataDome, PerimeterX, and Cloudflare on sites like tesla.com and ticketmaster. It does not beat Kasada or an interactive captcha, and says so through .anti_bot instead of handing back a challenge stub.
Two engines
onyxweb.Client(engine="shell") # default: bundled chrome-headless-shell, fast and light
onyxweb.Client(engine="full") # real Chrome, --headless=new, beats WAFs the shell can't
Presets
Spread into Client(...). Organized engine-first, since the two engines want opposite recipes.
| Preset | When to use it |
|---|---|
full.stealth.BASIC |
Akamai/Cloudflare-class WAFs (needs a full Chrome binary) |
shell.stealth.BASIC |
naive JS bot checks, not a real WAF bypass |
shell.stealth.FINGERPRINT |
BASIC plus WebGL vendor override and canvas noise |
shell.recon.FAST |
subdomain sweeps: JS off, 5 s timeout, ad/tracker blocklist |
shell.archival.FULL_PAGE |
change-detection snapshots of SPA-heavy sites |
onyxweb --preset list # print every preset and exit
The response
Every result carries the whole HTTP response, shaped to match blasthttp so it drops straight into BBOT's HTTP_RESPONSE.
r.metadata.status_code, r.metadata.protocol, r.metadata.remote_ip
r.metadata.redirect_chain, r.metadata.cert_info, r.metadata.body_hashes
r.headers["content-type"], r.headers.cookies, r.headers.raw
Hashes (md5 / mmh3 / sha256) are computed in Rust and match Python's hashlib and mmh3.hash() byte for byte.
CLI
onyxweb https://example.com # HTML to stdout
onyxweb https://example.com -o page.html -s shot.png
onyxweb https://example.com --json # snapshot JSON: page, headers, metadata
onyxweb https://example.com --json -o page.json # ... to a file
onyxweb --help # every config knob is a flag
Configuration
Flat kwargs, a ClientConfig object, or ONYXWEB_* environment variables.
onyxweb.Client(viewport=(1920, 1080), locale="en-GB", proxy="http://user:pass@host:8080")
client.config is a live view: assign at any depth and the next fetch uses it. Launch-only fields (concurrency, chrome options) raise ValueError instead of failing silently. Full field list with docs: python/onyxweb/onyxweb/config.py.
Two knobs worth knowing, both off by default, since outerHTML drops this content:
onyxweb.Client(include_shadow_dom=True) # web components
onyxweb.Client(include_iframes=True) # same-origin iframes
Docker and BBOT
Chrome runs with its sandbox on, and the sandbox cannot start as root, under Docker's default container profile, or where the kernel restricts user namespaces (Ubuntu 23.10 and later). The launch then fails with browser launch failed: ... pass sandbox=False. In Docker, including BBOT in Docker, turn the sandbox off in one of two ways:
onyxweb.Client(sandbox=False)
docker run -e ONYXWEB_CHROME__SANDBOX=false ... # any process that builds a Client, BBOT included
Tested: the default Docker seccomp profile, as root and as a non-root user, on both engines. Off adds --no-sandbox, so a renderer exploit from a hostile page runs as the container's user. Treat the container as the boundary: mount no host paths and add no capabilities. A seccomp profile that permits Chrome's namespace calls also keeps the sandbox on inside Docker; that route is not tested here.
The variable applies to any Client, including one built with engine= or chrome_path=. Releases up to 0.2.3 ignored it in that case.
Errors
try:
r = client.fetch(url)
except onyxweb.ChromeExitedError: # Chrome died; every later call fails too, so build a new Client
...
except TimeoutError: # navigation + CDP timeouts, and QueueTimeoutError
...
except onyxweb.OnyxwebError: # subclasses RuntimeError; carries .url and .kind
...
client.alive is False once Chrome has exited or the client is closed, and checking it costs no fetch. Client(queue_timeout_ms=5000) makes fetch, screenshot and fetch_all raise QueueTimeoutError (a TimeoutError) after 5 s without a free tab, instead of waiting; batch ignores it.
Testing without Chrome
onyxweb.testing.FakeClient stands in for AsyncClient in your own tests. It serves canned pages, records each call, and never launches Chrome.
from onyxweb.testing import FakeClient
fake = FakeClient({"https://example.com/": "<h1>Example</h1>"})
page = await fake.fetch("https://example.com/") # a RenderResult; an unlisted URL serves itself
fake.fetched # [("https://example.com/", {})]
fake.die() # every later fetch raises ChromeExitedError
A page is html or a ready-made RenderResult, error= makes every call raise, and each call checks its keyword arguments as the real client does. screenshot, fetch_all and batch work the same way and return a fake image of the format asked for. FakeClientFactory builds one fake per engine for code that takes a make_client(engine) callable.
Development
The Python code lives under python/. Each project has its own tests, tool config and dev group: the library in python/onyxweb, and onyxweb-server in python/server.
uv sync --all-packages --group dev # venv, both projects' dev tools, Rust extension in editable mode
uv run onyxweb --install # both engines; `onyxweb-download-chrome` adds --all, --platform and --dest
cd python/onyxweb
uv run pytest # tests are Python end-to-end; no Rust unit tests, on purpose
uv run pytest -m real_sites # integration tests against live sites (opt-in)
Run pytest, ruff and mypy from inside a project, one project at a time: both have a top-level conftest.py. Editing src/*.rs rebuilds on the next uv run. Set ONYXWEB_LOG=debug for engine logs. Benchmarks and the engine comparison that led here are in BENCHMARKS.md.
License
BSD 3-Clause. The bundled chrome-headless-shell is also BSD-3-Clause (Google's Chrome for Testing).
Release files for onyxweb 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| onyxweb-0.3.0.tar.gz | 156.2 kB | Details |
Built distributions (wheels)
Total release size: 54.1 MB
Release files / onyxweb-0.3.0.tar.gz
| Download URL | onyxweb-0.3.0.tar.gz |
|---|---|
| Size | 156.2 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
d695a3094218d7893ff0b16e9d75038d1c5082ae3504551305aaedb841ca2f58
|
|
BLAKE2b-256 checksum How to use checksums |
90222c562d0f78aba31b2e9d16a8cc3799fefdec21c6fe6b26c30f8f40d91d89
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp314-cp314-win_amd64.whl
| Download URL | onyxweb-0.3.0-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3689c65f6344f65dee75b0ac20c457b3457345bf16bfe853fb82b37fc53ca397
|
|
BLAKE2b-256 checksum How to use checksums |
e4ca69820efc3d3ebbf5a8f8aae8b08f373b8fd3d6c1da7f91dcfe0d86a0068a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | onyxweb-0.3.0-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
71e3907a22fb4ac126d49f3f6a6242558804ae31633b52a714790c539b5fe3f9
|
|
BLAKE2b-256 checksum How to use checksums |
c8e58e1c95f76690822ec73e92cb5ac33bde421cec8243a0dedc923ce3549f93
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp313-cp313-win_amd64.whl
| Download URL | onyxweb-0.3.0-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
3f4f3b5009d3b50c10c4e4f7f689b4ef3371e7bc7d4c5acd78063509636a3046
|
|
BLAKE2b-256 checksum How to use checksums |
a30381fc291ec5866739b819e69316414fd7c44961084af10f028e3a6b783402
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | onyxweb-0.3.0-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
7c9029d41bb0b4e8cd79300de682e41466b26d5f2b3f5fe083ca72d4e81824df
|
|
BLAKE2b-256 checksum How to use checksums |
91648cbd75293420d56cbc3128ecdcf4eb09bcf6e2d22d7faf3b55c19b443427
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp313-cp313-manylinux_2_28_aarch64.whl
| Download URL | onyxweb-0.3.0-cp313-cp313-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
7d5beafc1b997fadd25c5180f5651bdc3df270116184b71d54c4f1df96bac490
|
|
BLAKE2b-256 checksum How to use checksums |
9d98e6937478d46032431c664fd2ebcc603c41ec834749ea7d0b5db2980a7bc9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | onyxweb-0.3.0-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
794736b2645a8d28e55be91a1a1929ebf6bf25fc9bb0a91e6d56c0f99e0b5ea2
|
|
BLAKE2b-256 checksum How to use checksums |
32d53a4db923fb59fa2cf8ef169b9099b1ea9d6140e92cefeae9dfe888e05200
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp312-cp312-win_amd64.whl
| Download URL | onyxweb-0.3.0-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
d20aafeee5fa53ebd42660d95b8c29a1765eaa038fe038b30de406b0703ccf8a
|
|
BLAKE2b-256 checksum How to use checksums |
bfc532c711e60e1e8b7a306be4dfbf0a85ef342dc190d285c089929cb12cce09
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | onyxweb-0.3.0-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
b723eab7d433ee9563ddaa05950a0f489008b87c773910a10c48816da5720da6
|
|
BLAKE2b-256 checksum How to use checksums |
6b406faacb55d73f2f7d8aa120826d6ff7bd98cb28e6e7e472d2e837b48e6c64
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp312-cp312-manylinux_2_28_aarch64.whl
| Download URL | onyxweb-0.3.0-cp312-cp312-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
14fd066861927ed6463acea3b3cf2113525799d0eeb46c4622c9a28aad8af9b7
|
|
BLAKE2b-256 checksum How to use checksums |
813668839f5fee00d14a9f0e3342712d5d73e00d390e29bf04d1fa801175ce96
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | onyxweb-0.3.0-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
570a0222f950c0213c6978bfb77fe2d084e57fdb4e6ceb1e70352de987bd008c
|
|
BLAKE2b-256 checksum How to use checksums |
e52ad68c61554e7c17e53bd82c50ddf42c9566d00cdea071b9fc71d411495604
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp311-cp311-win_amd64.whl
| Download URL | onyxweb-0.3.0-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 4.1 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
adb4523e11f65d1ba28bff4c6e76e783b323ec7dc22629b1266c95c301526c5d
|
|
BLAKE2b-256 checksum How to use checksums |
deb894bd2ce9a5b68b99d0fb4aa431743174f09f83133270e22f77b3799ee3c3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | onyxweb-0.3.0-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 4.0 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
130c10061af3b4f7b0e1a622d741bafe93a375bba6f12ac5024028edb9b04a6c
|
|
BLAKE2b-256 checksum How to use checksums |
0e0a7a617b4fcb6325423845836c4ac804e1da953ee64254ff527b7d3bcc2887
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp311-cp311-manylinux_2_28_aarch64.whl
| Download URL | onyxweb-0.3.0-cp311-cp311-manylinux_2_28_aarch64.whl |
|---|---|
| Size | 3.8 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ ARM64 |
|
SHA-256 checksum How to use checksums |
55585f95f0623b9f89678167f5bcbcd1d4d339d9e039dc2b009f0fadeebac19c
|
|
BLAKE2b-256 checksum How to use checksums |
b61baa7e7c3bf4c81288fe7e8f1c0b2261f68b2ce91b11c67804cf308c87a0df
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency logRelease files / onyxweb-0.3.0-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | onyxweb-0.3.0-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 3.6 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
90c4557c7510af8bbab1ceadbca59ac2a522fc6af181651c99e54db3d2a7dde4
|
|
BLAKE2b-256 checksum How to use checksums |
18a22757524c2ace67fb91e8f46fee7021211dfd1f263662d03d1f2e3759c72d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 22, 2026.
Transparency log