> ## Documentation Index
> Fetch the complete documentation index at: https://ctrlrun.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Install

> pip install ctrlrun puts one package, pyyaml and click on your machine, nothing else. Python 3.11 or later.

`pip install ctrlrun` installs the kernel and exactly two dependencies, `pyyaml` and `click`. It
needs Python 3.11 or later and nothing running: no server, no database, no dashboard. State is a
SQLite file the library creates beside your policy. CI runs the full suite on Python 3.11, 3.12,
3.13 and 3.14.

```bash theme={null}
pip install ctrlrun
ctrlrun --version
```

## What is in the box

| | |
| - | - |
| `ctrlrun` the package | the decorator, the policy loader, the SQLite store, approvals, authority, receipts, `verify` |
| `ctrlrun` the command | `init`, `demo`, `approve`, `deny`, `resolve`, `inspect`, `receipts`, `effects`, `stats`, `verify`, `delegate`, `revoke`, `gateway` |
| dependencies | `pyyaml`, `click` |

A test asserts the dependency list has not grown, and another asserts that importing `ctrlrun`
imports nothing from an extra.

## Extras

Each extra is imported lazily. Using a feature without its extra raises `MissingDependency`
with the install command in the message.

| Extra | Adds | Needed for |
| - | - | - |
| `ctrlrun[gateway]` | `httpx` | `ctrlrun gateway`, the MCP gateway |
| `ctrlrun[identity]` | `pyjwt[crypto]` | `JWTIdentityProvider`, verifying a bearer token against a JWKS or a pinned key |
| `ctrlrun[otel]` | the OpenTelemetry API, SDK and OTLP/HTTP exporter | `OTelEventSink` |
| `ctrlrun[postgres]` | `psycopg` | `PostgresStateStore` |

```bash theme={null}
pip install "ctrlrun[gateway,postgres]"
```

Adapters are separate distributions on their own version lines: `ctrlrun-langgraph` and
`ctrlrun-openai-agents`. Most readers do not need one; see
[Three ways in](/docs/get-started/three-ways-in).

## Check it works

```bash theme={null}
ctrlrun demo
```

The demo runs five scenarios in process with no network and writes its evidence under
`.ctrlrun/demo/` in the current directory. It never touches a store you already have.

## Next

* [Protect your first action](/docs/get-started/quickstart): one function end to end.
* [Choosing between the three ways in](/docs/get-started/choosing).
* [Why](/docs/why): what the library believes.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.