Embed isolated microVM sandboxes directly in your Python code — local (embedded) or smolfleet cloud.
Project description
smol — Python SDK
Embed isolated microVM sandboxes directly in your Python code. Same API
locally (embedded engine, no server) or against the smolfleet cloud — the
backend is chosen via ConnectOptions / SMOL_CLOUD_TOKEN. Mirrors the
Node SDK.
Supported platforms (native local transport): macOS Apple Silicon, and Linux x64/arm64 with glibc ≥ 2.34 (RHEL 9, Ubuntu 22.04+, Debian 12, Amazon Linux 2023; the wheel is tagged
manylinux_2_34). The cloud transport works anywhere the wheel installs. Not yet published: macOS Intel, and glibc < 2.34.
from smol import Machine, MachineConfig, ResourceSpec
# Local (embedded microVM) — boots in-process, no server.
with Machine.create(MachineConfig(resources=ResourceSpec(cpus=2, memory_mb=1024, network=True))) as m:
res = m.run("python:3.12", ["python", "-c", "print(2 ** 10)"])
res.assert_success()
print(res.stdout) # 1024
m.write_file("/tmp/in.txt", "hi")
print(m.read_file("/tmp/in.txt").decode())
# Cloud (smolfleet) — same API, just point at the cloud.
from smol import ConnectOptions
with Machine.create(
MachineConfig(image="alpine:3.20"),
ConnectOptions(target="cloud", api_key="smk_…"), # or set SMOL_CLOUD_TOKEN
) as m:
print(m.exec(["echo", "hi"]).stdout)
Architecture
- Pure-Python layer (
python/smol):Machine, transports, types, errors — zero third-party deps (the cloud transport uses onlyurllib). - Native core (
src/lib.rs, cratesmol-py): apyo3extension that links thesmolvmengine in-process for the local path — the Python analogue of thesmol-nodeNAPI crate. The local API is synchronous (the engine blocks). - Cloud transport: a REST client to smolfleet
/v1whose request/response shapes match smolfleet's OpenAPI contract (Bearersmk_…).
API
Machine.create(config=None, conn=None)— create and start a machine.machine.exec(command, opts=None)/machine.run(image, command, opts=None)→ExecResultmachine.read_file(path)→bytes/machine.write_file(path, data, mode=None)machine.pull_image(image)/machine.list_images()(local)machine.stop()/machine.delete()/machine.state()- Use it as a context manager to auto-
delete()on exit. - Errors are typed:
SmolError(with.code),ExecutionError,NotSupportedError,InvalidConfigError.
ExecResult has .exit_code, .stdout, .stderr, .success, .output, and
.assert_success().
Install / build from source
The cloud path is pure Python. The local path needs the native extension, which
links libkrun from the sibling smolvm repo (three levels up).
python -m venv .venv && . .venv/bin/activate
pip install maturin
# Build + install the native extension (points at the repo's bundled libkrun):
LIBKRUN_BUNDLE=../../../lib maturin develop
To boot local microVMs the engine needs a code-signed boot helper carrying the
macOS com.apple.security.hypervisor entitlement (the Python process itself does
not). Point it at one (and the libkrun dir):
SMOLVM_BOOT_BINARY=../../../target/release/smolvm \
SMOLVM_LIB_DIR=../../../lib \
python your_script.py
On Linux the host needs /dev/kvm.
Tests
python tests/test_unit.py # error parsing + path encoding (no VM/network)
python tests/test_cloud_mock.py # cloud transport vs a mock /v1 (no VM/network)
# Local VM boot (needs the native build + the env above):
SMOLVM_BOOT_BINARY=… SMOLVM_LIB_DIR=… .venv/bin/python tests/test_local_e2e.py
License
Apache-2.0
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file smolmachines-0.1.3-cp39-abi3-manylinux_2_34_x86_64.whl.
File metadata
- Download URL: smolmachines-0.1.3-cp39-abi3-manylinux_2_34_x86_64.whl
- Upload date:
- Size: 49.1 MB
- Tags: CPython 3.9+, manylinux: glibc 2.34+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f6007b5be17a7d249bcddab8377aade61d77344a7edd169bffbf979100692b0d
|
|
| MD5 |
f97b1c9aee41c37c67786b05deb9384f
|
|
| BLAKE2b-256 |
745098672503e0bfe9ceb16338716bafe20962abebc7a90c5304950e669f454d
|
File details
Details for the file smolmachines-0.1.3-cp39-abi3-manylinux_2_34_aarch64.whl.
File metadata
- Download URL: smolmachines-0.1.3-cp39-abi3-manylinux_2_34_aarch64.whl
- Upload date:
- Size: 36.1 MB
- Tags: CPython 3.9+, manylinux: glibc 2.34+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
0b9512b31fb1beef97d619478df227322dc5fab0308772eef644d48cafd70a31
|
|
| MD5 |
3221986dafebefa78d73c046de152ada
|
|
| BLAKE2b-256 |
04e5247f0769dc1cb83fb4bd50428a2de71ffe2f984f525f7cdc03c0c015a755
|
File details
Details for the file smolmachines-0.1.3-cp39-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: smolmachines-0.1.3-cp39-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 24.8 MB
- Tags: CPython 3.9+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: maturin/1.13.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
93c1fe2d98f0668024c4958ed5e03658db1f7390f24e2017842b310ade5249f9
|
|
| MD5 |
fe454a48a17515d50d7a79d91bef59e5
|
|
| BLAKE2b-256 |
257a1926b027f271e54f41016706a7be2c84beed39ba8e18d3a583cb85ac9840
|