impello
The Python SDK for Impello sandboxes.
Install
pip install impello
Use
from impello import Sandbox
sandbox = Sandbox.create()
result = sandbox.commands.run("echo hello")
print(result.stdout)
sandbox.pause()
Set your key in the environment, or pass it to each call:
export IMPELLO_API_KEY=imp_...
Sandbox.list(api_key="imp_...")
For a process that talks to more than one account or more than one fleet, bind the settings to a client instead:
from impello import Impello
client = Impello(api_key="imp_...")
sandbox = client.Sandbox.create()
Settings
Every setting reads an IMPELLO_ name first, then the matching E2B_ name.
| Variable | Default | What it does |
|---|---|---|
IMPELLO_API_KEY |
none | The key. Starts with imp_ |
IMPELLO_DOMAIN |
sandbox.impello.ai |
The domain the API and the sandboxes sit on |
IMPELLO_API_URL |
https://api.<domain> |
The API address. Set this to reach a self-hosted API |
IMPELLO_SANDBOX_URL |
derived from the domain | The address a sandbox is reached at |
IMPELLO_DEBUG |
false |
Talk to http://localhost:3000 |
The E2B_ fallback is the migration, not politeness. Callers already export
E2B_API_KEY, E2B_API_URL and E2B_DOMAIN. Rename when it suits you.
Nothing breaks if you never do.
Only the domain has a default. Without one the SDK resolves E2B's own
e2b.app, and the failure is a connection to somebody else's fleet,
authenticated with a key that host has never seen.
Params passed to a single call beat a client's params, which beat the environment.
This is a copy of E2B's client, not a wrapper around it
impello used to depend on e2b and bind a few defaults underneath it. That
worked. It was replaced because of what it said: pip show impello listed
e2b as a requirement, and every request carried a publisher: e2b header to
our own fleet. Both are things a customer and our own logs can read, and
@impello/sdk had already stopped saying them.
So this package is now E2B's MIT-licensed Python client, vendored. The
copyright notice stays (LICENSE). It is sandbox scope only — template,
volume and secret management are not shipped, matching @impello/sdk. Four
tests in tests/test_no_e2b_dependency.py hold the claim: no declared
dependency on e2b, no import of it anywhere in the package, publisher: impello on the wire, and no shipped module pointing a customer at e2b.dev.
src/impello/api/client is generated, not written. make generate-api
rebuilds it from the API spec in the infra repo. Both tools in that pipeline
are pinned, and the pins matter — the Makefile says why.
We do not follow upstream. See docs/decisions/fork-independence.md.
Keys
A key starts with imp_. Keys minted before 2026-08-30 started with e2b_ and
no client can make one work — the server compares the whole prefix before it
hashes anything. This SDK recognises an old key and says so, rather than letting
it become a bare 401:
>>> Sandbox.create(api_key="e2b_...")
AuthenticationException: This key starts with "e2b_" and was minted before
Impello moved to its own key prefix on 2026-08-30. ...
Develop
uv sync
make test
make lint
Metadata
Release files for impello 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 | Provenance | |
|---|---|---|---|---|
| impello-0.3.0.tar.gz | 184.7 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| impello-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 514.1 kB
Release files / impello-0.3.0.tar.gz
| Download URL | impello-0.3.0.tar.gz |
|---|---|
| Size | 184.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e72eb7564d3bff029e5e5c5e3651b33eb786d08f24c9809ea45fd100a1a0e18c
|
|
BLAKE2b-256 checksum How to use checksums |
d2941b3af19852b036ed1516dc8519be5e56ae67a9a490a037a0d6ebcdec2db7
|
| 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 13, 2026.
Transparency logRelease files / impello-0.3.0-py3-none-any.whl
| Download URL | impello-0.3.0-py3-none-any.whl |
|---|---|
| Size | 329.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
04db46fae9cadc85a1ab180d7c84c7378d0232b7386bfdc0bffe3e04f48eb9bc
|
|
BLAKE2b-256 checksum How to use checksums |
23145cf76534d089c7b7b10714e4b3c7df7aaa284890b424cd1631671f7d5f26
|
| 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 13, 2026.
Transparency logSecurity for impello 0.3.0
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 2 files in this release have been uploaded with provenance metadata.
Attestation for impello-0.3.0.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 13, 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.