nono-py
Python bindings for nono capability-based sandboxing
What it is and what it does
nono-py wraps a Rust-based sandboxing library that enforces capability-based access control at the OS level. Once you apply a sandbox to a process, unauthorized operations become structurally impossible—the kernel itself blocks them, not a userspace filter. The package lets you build a capability set that grants specific filesystem paths (with read/write/execute modes), blocks network access, or runs child processes in isolated sandboxes while the parent remains unsandboxed.
Beyond basic sandboxing, nono-py includes a network proxy for domain-filtered HTTP access with credential injection (so sandboxed code never sees real API keys), filesystem snapshots with rollback, append-only audit logging with tamper detection, and resource limiting (memory and process count) on Linux with cgroup v2. It depends on cryptography and pydantic for its runtime, and is currently in alpha development status.
Use it for:
- Run untrusted or third-party Python code (agents, plugins) with restricted filesystem and network access.
- Enforce least-privilege access for microservices or batch jobs that only need specific directories or APIs.
- Audit and replay sandboxed executions using the built-in Merkle-chained audit trail and filesystem snapshots.
- Inject API credentials into sandboxed child processes without exposing secrets to the sandboxed code.
- Limit resource consumption (memory, process count) for long-running or potentially runaway workloads.
Worth the install?
AI-flagged interpretation of the facts on this page — verify before relying
nono-py provides Python bindings for OS-enforced sandboxing using Landlock (Linux) and Seatbelt (macOS), letting you restrict a process's filesystem and network access before execution.
Yes, if you need OS-enforced sandboxing for untrusted code on Linux or macOS. The package is actively maintained, has no known vulnerabilities, and offers a comprehensive API for capability-based isolation plus audit and rollback features. Install friction is moderate (prebuilt wheels available, but source builds need Rust). The alpha status and small community (34 stars) mean the API may change and edge cases may not be fully explored—suitable for projects where security isolation is a core requirement, less so for casual use.
Install
nono-py on PyPI
pip
pip install nono-pyuv
uv add nono-pypoetry
poetry add nono-pyInstalling nono-py
Before you install
Medium install friction: the package ships prebuilt wheels for Python 3.10–3.14 on macOS and Linux, but building from source requires the Rust toolchain and maturin. Active maintenance with a release 7 days ago and 34 repository stars.
License in practice
Apache-2.0 permissive license; you may use, modify, and distribute this package freely in commercial or private projects, provided you include a copy of the license and state any material changes.
Quickstart
pip install nono-py
from nono_py import CapabilitySet, AccessMode, apply, is_supported
if is_supported():
caps = CapabilitySet()
caps.allow_path("/tmp", AccessMode.READ_WRITE)
caps.block_network()
apply(caps) # Sandbox is now active and irreversible
Requires Python >=3.10; sandboxing is only supported on Linux (Landlock) and macOS (Seatbelt)—check is_supported() before applying.
Verify before relying
- Whether prebuilt wheels are available for all advertised Python versions on all platforms, or if some combinations require source compilation.
- Performance overhead of sandboxing operations relative to unsandboxed execution.
- Compatibility with containerized or virtualized environments (Docker, Kubernetes, cloud VMs).
Package facts
| License | Apache-2.0 (permissive) |
| Python support | supports the current Python release (>=3.10) |
| Install friction | medium — platform-specific wheel |
| Runtime dependencies | 2 — cryptography, pydantic |
| Maintenance | actively maintained — 7 days since the last release |
| Last repo commit | |
| First released | |
| Downloads | 109,991/month — #12,488 on PyPI (30-day window, as of 2026-08-14) |
| Known vulnerabilities | none known (OSV.dev, checked 2026-08-14) |
Evidence: nono_py-0.15.0-cp310-cp310-macosx_10_12_x86_64.whl; nono_py-0.15.0-cp310-cp310-macosx_11_0_arm64.whl; nono_py-0.15.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; nono_py-0.15.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; nono_py-0.15.0-cp311-cp311-macosx_10_12_x86_64.whl; nono_py-0.15.0-cp311-cp311-macosx_11_0_arm64.whl; nono_py-0.15.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; nono_py-0.15.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; nono_py-0.15.0-cp312-cp312-macosx_10_12_x86_64.whl; nono_py-0.15.0-cp312-cp312-macosx_11_0_arm64.whl; nono_py-0.15.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; nono_py-0.15.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; nono_py-0.15.0-cp313-cp313-macosx_10_12_x86_64.whl; nono_py-0.15.0-cp313-cp313-macosx_11_0_arm64.whl; nono_py-0.15.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; nono_py-0.15.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl; nono_py-0.15.0-cp314-cp314-macosx_10_12_x86_64.whl; nono_py-0.15.0-cp314-cp314-macosx_11_0_arm64.whl; nono_py-0.15.0-cp314-cp314-manylinux_2_17_aarch64.manylinux2014_aarch64.whl; nono_py-0.15.0-cp314-cp314-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Keywords: sandbox, security, capability, landlock, seatbelt
Tags
More Security packages
Provides Python bindings to the FreeDesktop.org…
permissive · top 1,000 on PyPI
msalMSAL for Python handles OAuth2 and OpenID…
permissive · top 1,000 on PyPI
joserfcjoserfc implements JOSE standards (JWS, JWE,…
permissive · top 1,000 on PyPI
AuthlibAuthlib provides a complete implementation of…
permissive · top 1,000 on PyPI
argon2-cffi-bindingsProvides low-level CFFI bindings to the…
permissive · top 1,000 on PyPI
adalADAL for Python authenticates applications with…
permissive · top 1,000 on PyPI
landlockLandlock provides a Python interface to Linux's…
permissive · top 5,000 on PyPI
RestrictedPythonRestrictedPython compiles and executes a…
unclear · top 5,000 on PyPI
mitmproxy-wireguardImplements a user-space WireGuard server that…
permissive · top 5,000 on PyPI
pydantic-monty-runtimeProvides the `monty` command-line binary, a…
permissive · top 15,000 on PyPI
starlark-pyo3Exposes the Starlark interpreter (a Python-like…
unclear · top 15,000 on PyPI
caioProvides async file I/O for Python via multiple…
permissive · top 1,000 on PyPI
hyperlight-sandbox-python-guestProvides a Python guest runtime for the…
permissive · top 15,000 on PyPI
llm-sandboxExecutes code generated by large language…
unclear · top 15,000 on PyPI
bashkitBashkit is a sandboxed bash interpreter for…
permissive · top 15,000 on PyPI
pydantic-montyProvides Python bindings to execute untrusted…
permissive · top 5,000 on PyPI