# tethered > Runtime network egress control for Python. One function call, zero dependencies, no infrastructure changes. tethered checks every connection made through Python's socket layer against an allow list, from inside the process, before the connection is opened. `activate()` sets the ceiling for the whole process, and `scope()` narrows a single code path. It is a guardrail at Python's audit-event layer, not a sandbox: code that goes below that layer (`ctypes`, a C extension, a library that resolves and connects inside its own C code) is not stopped. ## Get started - [Quick start](): Install tethered, set an allow list for the process, narrow a code path, and lock the policy in production. ## Guides - [Cookbook](): What each server, task queue and pool needs for a tethered policy to hold in every worker, how to handle a blocked connection in Django, FastAPI and Celery, and patterns for package authors. - [Subprocess control](): How a tethered policy and a scope reach Python child processes, and what external_subprocess_policy does with every other launch. - [Migrating to 1.0](): Upgrading tethered from 0.5.x to 1.0.0: the breaking changes by what a deployment uses, the message each one shows, and the change that puts it right. ## Reference - [API reference](): The tethered API: activate(), scope() and deactivate() with every parameter, the exceptions, the allow list syntax, locked mode and log-only mode. - [Compatibility](): What tethered enforces, what needs configuration, what it refuses at start-up and what it does not see, measured under real servers, task queues and client libraries. - [Architecture](): How tethered works: the audit hook and the events it handles, scopes, child processes, the C guardian behind locked mode, and the measured overhead. ## Security - [Security](): The tethered security model: the threat model, what tethered protects against and what it does not, and what locked mode does and does not do. ## Optional - [Changelog](): What changed in each tethered release.