Skip to main content

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_file returns once the bytes are durably stored.
  • Read coalescing: read_file always returns raw bytes, 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

arker-0.1.1.tar.gz (10.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

arker-0.1.1-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

Details for the file arker-0.1.1.tar.gz.

File metadata

  • Download URL: arker-0.1.1.tar.gz
  • Upload date:
  • Size: 10.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arker-0.1.1.tar.gz
Algorithm Hash digest
SHA256 7088b57856f8866bce821bdce1337cc79c4ccfd94e4dbc093f28df3385c2903b
MD5 1cf6a0c044407be3fb9db45d7fe1a24b
BLAKE2b-256 3a7a30946a1c8bdb3e58147ec6314b6b993771a8443b801874d6af2a312bcc39

See more details on using hashes here.

Provenance

The following attestation bundles were made for arker-0.1.1.tar.gz:

Publisher: publish-python.yml on ArkerHQ/arker-sdks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file arker-0.1.1-py3-none-any.whl.

File metadata

  • Download URL: arker-0.1.1-py3-none-any.whl
  • Upload date:
  • Size: 8.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for arker-0.1.1-py3-none-any.whl
Algorithm Hash digest
SHA256 f1e6f23b445bac731a62e49b24c1430fbe6bb32d0b33334749f8b7c6a8835168
MD5 1b1d65fc5e317993f0fc11506b266633
BLAKE2b-256 dfa82763c02b52df88db0eb9b2418afd3562529e77b268c0aaa466c933987a6e

See more details on using hashes here.

Provenance

The following attestation bundles were made for arker-0.1.1-py3-none-any.whl:

Publisher: publish-python.yml on ArkerHQ/arker-sdks

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page