denosaurs
A JS sandbox for AI agents
Run untrusted, LLM-generated JavaScript safely in Python — real V8, real isolation, real tool-calling.
___
_/ o \
\____/
| |
\ \
| |
\ \
/ \__________________
/ \________
| \____________
\___________________ ______/
| | | | \__________________/
| | | | | | | |
|_| |_| |_| |_|
Documentation · Examples · Issues
16-18x faster repeat execution via context-isolated isolate pooling —
~3 ms cold Runtime() start vs. ~167-185 µs per pooled
IsolatePool checkout+eval, measured with Criterion and pytest-benchmark,
with a dedicated test proving no state leaks between checkouts. Proven, not
claimed — see BENCHMARKS.md.
What this is
Agent frameworks and tool-execution runtimes increasingly need to run
JavaScript the model itself wrote — a code-generation step, a small data
transform, a "call this JS snippet to compute the answer" tool. That code is
untrusted by construction. denosaurs embeds a real V8 isolate per
runtime (via Rust/PyO3) so that code runs with no filesystem, no
network, and no ambient Node.js APIs by default, with heap and wall-clock
limits you set, and a real way to kill it if it doesn't stop on its own.
It is not a general "embed any JS anywhere" library and not a JS interpreter reimplemented in Python — it's V8, the same engine behind Chrome and Node.js, so the JS your model writes actually behaves like JS.
import denosaurs
denosaurs.bind_function("add", lambda a, b: a + b)
print(denosaurs.eval("add(2, 3)")) # 5
Why it's different
- Real V8, not a toy interpreter. Every language quirk, every standard library method, every performance characteristic your model expects from "JavaScript" is the real thing.
- Cross-thread termination that actually works. A watchdog thread
calling
.terminate()on a runawaywhile(true){}used to panic instead of stopping the code (pyo3_runtime.PanicException: Runtime is unsendable, but sent to another thread) — a real bug in the upstream design that meant a stuck agent tool call couldn't be killed from outside.TerminationHandlefixes this: it exposes only theSend + Syncpart of V8's isolate handle, so a watchdog on a separate thread can interrupt execution safely. SeePATCH.mdfor the full root cause and proof;tests/test_termination_handle.pyis the regression test. - Context-isolated pooling, so speed doesn't cost you isolation. A cold
V8 isolate costs ~3 ms to create;
IsolatePoolkeeps a small set of them warm and hands out a brand-new, empty V8Contexton every checkout — the isolate is reused, but no JS-visible global state (globalThis, etc.) ever survives from one caller to the next, even when they land on the same underlying isolate. Measured: ~3 ms cold-start → ~170-185 µs pooled, ~16-18x, with a dedicated test proving aglobalThisvalue set in one checkout is gone (typeof x === 'undefined') in the next. SeeBENCHMARKS.mdandsrc/runtime/pool.rsfor the numbers and the reasoning. - A host-callback bridge for tool-calling from JS.
bind_function/bind_objectlet the sandboxed JS call back into Python — the primitive an agent needs when the model's JS wants to invoke a real tool, not just compute a value.
Get Started
pip install denosaurs # or uv pip install denosaurs
Requires Python 3.10+ on macOS or Linux. denosaurs is experimental —
expect breaking changes between versions.
Quickstart: sandboxed eval, tool-calling, and a timeout
import asyncio
from denosaurs import Runtime, RuntimeConfig
# Cap memory; the runtime terminates itself if JS tries to exceed it.
config = RuntimeConfig(max_heap_size=10 * 1024 * 1024) # 10 MB
async def main():
with Runtime(config) as runtime:
# The tool-calling primitive: expose a Python function to the sandboxed JS.
def get_weather(city: str) -> str:
return f"72F and sunny in {city}"
runtime.bind_function("getWeather", get_weather)
# Model-generated JS calling back into your tool.
result = runtime.eval("getWeather('Zurich')")
print(result) # "72F and sunny in Zurich"
# Enforce a wall-clock timeout on code that might not terminate.
try:
await runtime.eval_async("while (true) {}", timeout=2.0)
except Exception as exc:
print(f"killed a runaway eval after 2s: {exc}")
asyncio.run(main())
Running an untrusted sync eval() you can't await? Grab a
TerminationHandle
before the call and .terminate() it from a watchdog thread — see
tests/test_termination_handle.py for
the exact pattern (and the bug it fixed, in PATCH.md).
For a fast path when you're running many short-lived, independent snippets
(e.g. one per agent turn) and don't need bind_function/modules for that
particular call, check out an isolate from a warm IsolatePool instead of
paying full cold-start cost each time:
from denosaurs import IsolatePool
pool = IsolatePool(size=4)
with pool.checkout() as isolate:
print(isolate.eval("1 + 41")) # 42
Integrations
- FastMCP tool bridge - expose FastMCP tools to sandboxed JS via
bind_functionand an in-processfastmcp.Client - pydantic-ai "code mode" agent - an agent tool where the model submits one JS batch script instead of many separate tool calls, run safely with a timeout
- Vendored npm libraries - run real npm document-generation libraries (
pptxgenjs,pdf-lib) from their browser bundles inside the sandbox; see the guide for what makes a library a good candidate - Arrow IPC dataframes - move 100k+ row tables into the sandbox as Arrow IPC
bytesinstead of JSON objects (5 ms vs 253 ms, and it works at the default 10 MB serialization limit that rejects the JSON payload); see the guide
Documentation
- Quick Start
- Concepts: runtimes, type conversion, resource controls
- Guides: binding functions, module loading, snapshots
- Use cases: AI agent sandboxes, workflow runners, plugin systems
- API reference
- Benchmarks — measured, reproducible numbers, including the pooling comparison above
Metadata
Release files for denosaurs 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| denosaurs-0.2.2.tar.gz | 343.5 kB | With provenance | Details for denosaurs-0.2.2.tar.gz |
Built distributions (wheels)
Total release size: 327.7 MB
Release files / denosaurs-0.2.2.tar.gz
| Download URL | denosaurs-0.2.2.tar.gz |
|---|---|
| Size | 343.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e245ab3ce9fdf15599eb0cfbffc7c786384cc39dfa6c44b9cd2b99a2db0762ad
|
|
BLAKE2b-256 checksum How to use checksums |
fd963c658b7376baafff83e46c18b16514665006ea692ea54415caba5a169172
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl
| Download URL | denosaurs-0.2.2-pp311-pypy311_pp73-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 21.9 MB |
| Tags | Linux glibc 2.28+ x86-64 PyPy 3.11 PyPy 3.11 7.3 |
|
SHA-256 checksum How to use checksums |
c6f44bbade0b3295fffb8931761041c225b498e05adadc2ab590af5227374b6b
|
|
BLAKE2b-256 checksum How to use checksums |
414b2aab8257e8886c0e9eeb97d0bd797d8c1bbe8d13d8e3b98b8eb5ec516f86
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp314-cp314t-manylinux_2_28_x86_64.whl
| Download URL | denosaurs-0.2.2-cp314-cp314t-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 21.9 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
879f0d07895f2c9368a630ac958298f37b3c3de481fd6c77bbd0bf067836823a
|
|
BLAKE2b-256 checksum How to use checksums |
28979a2dad63d33497ec94c22cccc00e1ed89b699ebaaf5faa010d1a92adf354
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp314-cp314-win_amd64.whl
| Download URL | denosaurs-0.2.2-cp314-cp314-win_amd64.whl |
|---|---|
| Size | 18.9 MB |
| Tags | CPython 3.14 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
b867a78e8d7179d04cafe9284193adcfc407317965e1ded9ecec070c7d1fb219
|
|
BLAKE2b-256 checksum How to use checksums |
a7906f798a9443cd391b4ee140e0731297b92f2ae13c0f1f225bc15f2b9d5c45
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp314-cp314-manylinux_2_28_x86_64.whl
| Download URL | denosaurs-0.2.2-cp314-cp314-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 21.9 MB |
| Tags | CPython 3.14 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
2dabe76856e5060fcc8e4cdc3a711bfa55fc46f102854e06255a12d118b5b76a
|
|
BLAKE2b-256 checksum How to use checksums |
8a5f563a76db02890885bd8b1ba698459890d90cb3af0d408f111953981e63db
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp314-cp314-macosx_11_0_arm64.whl
| Download URL | denosaurs-0.2.2-cp314-cp314-macosx_11_0_arm64.whl |
|---|---|
| Size | 19.9 MB |
| Tags | CPython 3.14 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
4b70661761d4ca0bb3def75763dfa907e10297b78585db9cc5e452abbdf9047b
|
|
BLAKE2b-256 checksum How to use checksums |
e545276ad5cdfe8346aa895173e4aa4dbd5a36035b9722b30436b211143c6fd8
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp313-cp313-win_amd64.whl
| Download URL | denosaurs-0.2.2-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 18.9 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
a0b0bd25bbeca0320c2888c232b3b5196d9a5afb956e5ef3b0a2049595972fe6
|
|
BLAKE2b-256 checksum How to use checksums |
2facb39b5b979e42eb0c4d45fee97a100d1b502a073654945fd189dae125b95a
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | denosaurs-0.2.2-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 21.9 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
5c6d2818fd7604ec71b0c889bdc3f7a01fe9760f59cfa816d810a37eb7482eb6
|
|
BLAKE2b-256 checksum How to use checksums |
d9d7d96e485af5611f51f984e59f5e0f320faa9033f038584f71e61cd8cac977
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp313-cp313-macosx_11_0_arm64.whl
| Download URL | denosaurs-0.2.2-cp313-cp313-macosx_11_0_arm64.whl |
|---|---|
| Size | 19.9 MB |
| Tags | CPython 3.13 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
282851e7138891d240184e374e65673cd0b06de2c39a07d34b14155df9bec074
|
|
BLAKE2b-256 checksum How to use checksums |
112953dc1672c5402c914e5ba382aac7f4180f9381c9a141ab4f2699ec81a21e
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp312-cp312-win_amd64.whl
| Download URL | denosaurs-0.2.2-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 18.9 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
c913146a47f3565ccc6779337e9c198fb815a28bf64f74a91e493d59f292d09f
|
|
BLAKE2b-256 checksum How to use checksums |
304c586e72b351d7c19e614735302762eb943ccde982e7f73b86457f831aa74f
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | denosaurs-0.2.2-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 21.9 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
b4994ad59e17ef38958baab7161945c6214387c0b6c5aa14911e8796e942f40b
|
|
BLAKE2b-256 checksum How to use checksums |
439d070a7c7538dbcc63e1c912019bba6945df4c126349411e4df9fc504e27d9
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp312-cp312-macosx_11_0_arm64.whl
| Download URL | denosaurs-0.2.2-cp312-cp312-macosx_11_0_arm64.whl |
|---|---|
| Size | 19.9 MB |
| Tags | CPython 3.12 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ae27bf5cdfddbcfa4c39aa85272b6543e01c2737d50363ca90200243804eb817
|
|
BLAKE2b-256 checksum How to use checksums |
11b1181a8203117ff96eb281c056eeb0585d79324ecb77d3fbdda780723fdfcd
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp311-cp311-win_amd64.whl
| Download URL | denosaurs-0.2.2-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 18.9 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
cde9520d48030338077d5078b726b3432c930df1f8526251bd5371af9ec4afc1
|
|
BLAKE2b-256 checksum How to use checksums |
a8901e96fd5bc03525b0d812dfba48b50536cdd570fdc591d490d75d6c6d516d
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | denosaurs-0.2.2-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 21.9 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
0fa171351d205ed28cb0b6a7a556cda7c6b7bbd4d84dcba353ad5f21af62f43e
|
|
BLAKE2b-256 checksum How to use checksums |
1075de47f424f384ecb4ce8176b52ba070e3c4950bc206b1a1255cdd2d0f2c2f
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp311-cp311-macosx_11_0_arm64.whl
| Download URL | denosaurs-0.2.2-cp311-cp311-macosx_11_0_arm64.whl |
|---|---|
| Size | 19.9 MB |
| Tags | CPython 3.11 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
a6b7a3aa5bf2909bad9ab98d91286099cc4de8080de27915975952762e7ee180
|
|
BLAKE2b-256 checksum How to use checksums |
fb9be3289cf15b4740c2b186cee8aafc261f48bab85fbc417c332c3753aa2ec3
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp310-cp310-win_amd64.whl
| Download URL | denosaurs-0.2.2-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 18.9 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
7c13e8958ea5daf06f0643d9a38c1a8b561ecda4dec314f9a9a28270d236dd0d
|
|
BLAKE2b-256 checksum How to use checksums |
f5e0a37037e485455aa382fd4b0cec95867f19c9c5d0c412e8ca00e0cae6846c
|
| 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 21, 2026.
Transparency logRelease files / denosaurs-0.2.2-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | denosaurs-0.2.2-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 21.9 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6fca676ad5686a7bed4f3e6d30f0fb0d1eb3dbec9f7018eeef40aec7eb33ea89
|
|
BLAKE2b-256 checksum How to use checksums |
ec32b88f81598e7d0a24c97c75f3e8164109085455919b03f47a7ab8d1a63575
|
| 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 21, 2026.
Transparency logSecurity for denosaurs 0.2.2
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.
Full provenance
All 17 files in this release have been uploaded with provenance metadata.
Attestation for denosaurs-0.2.2.tar.gz
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 21, 2026.
Transparency logA note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.