Python client for the Arker virtual computer platform.
Project description
Arker — Python SDK
Single-file Python client for the Arker virtual computer
platform. Spawn isolated Linux sandboxes, run shell / Python / Node code in
them, read and write files. Zero runtime dependencies (stdlib urllib).
Install
pip install arker
Or, while in alpha:
pip install git+https://github.com/ArkerHQ/arker-python-sdk@v0.1.0
Quickstart
from arker import Arker, ArkerError
arker = Arker(api_key="ark_live_...")
vm = arker.vm("arkuntu").fork(name="hello") # fresh VM from base image
result = vm.run("python3 -c 'print(2+2)'")
print(result.stdout.decode()) # → "4\n"
vm.sync.write_file("/home/user/data.csv", b"a,b\n1,2\n")
data = vm.sync.read_file("/home/user/data.csv") # → b"a,b\n1,2\n"
child = vm.fork(name="branch") # constant-time copy-on-write
child.delete()
vm.delete()
List your VMs:
page = arker.list(limit=10, sort="-created_at")
print(f"{page.total} total")
for summary in page: # iterable; also page.items
print(summary.vm_id, summary.name, summary.region, summary.created_at)
API
Arker(api_key, base_url=None)
.vm(vm_id) -> Computer # open handle (no network call)
.list(*, limit=25, offset=0, q=None, sort=None) -> VmList
Computer
.id, .delete()
.fork(*, name=, is_public=, region=) -> Computer
.run(command, *, session_id=, timeout=) -> RunResult
.sync.read_file(path) -> bytes
.sync.write_file(path, data: bytes | str)
RunResult: stdout, stderr (bytes), exit_code, duration_ms, session_id, cwd
VmSummary: vm_id, name, base_image, region, created_at (ISO 8601)
VmList: items (list[VmSummary]), total (int); iterable, len()-able
ArkerError(code, message, status) # one exception type for everything
Routing
fork, run, sync, and delete use the regional endpoint set on the
client (default https://aws-us-west-2.burst.arker.ai).
list always goes through https://arker.ai regardless of base_url,
because list data is served from a global host rather than a regional
one.
Public base-image names like "arkuntu" resolve to a ULID client-side
(see SOURCE_ALIASES in computer.py), so arker.vm("arkuntu").fork()
works on the default endpoint with no extra round-trip. Override
base_url or set ARKER_BASE_URL to point at a different region or a
self-hosted deployment.
Errors
Every server-side error becomes an ArkerError:
try:
vm.sync.read_file("/home/user/missing")
except ArkerError as err:
print(err.code) # "not_found"
print(err.message) # "file not found: /home/user/missing"
print(err.status) # 404
code is a stable enum: bad_request, unauthorized, payment_required,
forbidden, not_found, conflict, payload_too_large, internal,
not_implemented, vm_busy, unsupported_*, command_not_found.
What the SDK does for you
Hidden behind these six methods:
- Write strategy: files up to 100 MB. Small payloads go in one call;
larger ones use a direct upload path so the bytes don't traverse the
API layer.
write_filereturns once the bytes are durably stored. - Read coalescing:
read_filealways returns rawbytes, regardless of whether the server inlined the content or returned a signed URL. - Idempotent retry: transient errors are retried with exponential
backoff. Writes are server-side idempotent on
upload_id, so retries never produce duplicates. - Path validation: only
/home/user/...paths accepted;..rejected.
Demo / smoke test
Run the full surface against a live deployment:
ARKER_API_KEY=ark_live_... python tests/demo.py
It exercises every method (list, vm, fork, run, sync.write_file,
sync.read_file, error path, child fork, delete) and prints what each
call hits on the wire — useful as living documentation.
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 Distribution
Built Distribution
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 arker-0.1.2.tar.gz.
File metadata
- Download URL: arker-0.1.2.tar.gz
- Upload date:
- Size: 10.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1d63c7289a75c99da58d4ef3f7a6a3a073c0984efdc1d8e4393c6dcb04035014
|
|
| MD5 |
027303a7ee5cfb6d209a405d60ee1f82
|
|
| BLAKE2b-256 |
9b762b9f30269572f153742afb591d30829cc13a60a5c76c60d793720e34a020
|
Provenance
The following attestation bundles were made for arker-0.1.2.tar.gz:
Publisher:
publish-python.yml on ArkerHQ/arker-sdks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arker-0.1.2.tar.gz -
Subject digest:
1d63c7289a75c99da58d4ef3f7a6a3a073c0984efdc1d8e4393c6dcb04035014 - Sigstore transparency entry: 1415249478
- Sigstore integration time:
-
Permalink:
ArkerHQ/arker-sdks@b08d3287b7ea5500d6cf01078b5515eed1c562f1 -
Branch / Tag:
refs/tags/python-v0.1.2 - Owner: https://github.com/ArkerHQ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@b08d3287b7ea5500d6cf01078b5515eed1c562f1 -
Trigger Event:
push
-
Statement type:
File details
Details for the file arker-0.1.2-py3-none-any.whl.
File metadata
- Download URL: arker-0.1.2-py3-none-any.whl
- Upload date:
- Size: 8.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5f67f01e231115267c225d506727d498bede85a9fb0097049ee4f488d4899211
|
|
| MD5 |
4016aa590f5326f1e44473efd5c7cf8a
|
|
| BLAKE2b-256 |
1ae0b0d415b21971c1936083feeb0781567045fb1f7f6ca17aad3d50c351440f
|
Provenance
The following attestation bundles were made for arker-0.1.2-py3-none-any.whl:
Publisher:
publish-python.yml on ArkerHQ/arker-sdks
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
arker-0.1.2-py3-none-any.whl -
Subject digest:
5f67f01e231115267c225d506727d498bede85a9fb0097049ee4f488d4899211 - Sigstore transparency entry: 1415249547
- Sigstore integration time:
-
Permalink:
ArkerHQ/arker-sdks@b08d3287b7ea5500d6cf01078b5515eed1c562f1 -
Branch / Tag:
refs/tags/python-v0.1.2 - Owner: https://github.com/ArkerHQ
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-python.yml@b08d3287b7ea5500d6cf01078b5515eed1c562f1 -
Trigger Event:
push
-
Statement type: