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.0.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.0-py3-none-any.whl (8.7 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: arker-0.1.0.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.0.tar.gz
Algorithm Hash digest
SHA256 40c225c487e82ab52cb783727dc19369e37729ebeda81d4f2962e8da4b6062c4
MD5 96cf44c55f4d53949088b70e7257c973
BLAKE2b-256 7fdcc70765d845b91e222370469e32b55b51e3df49495f8976754cbb03de419d

See more details on using hashes here.

Provenance

The following attestation bundles were made for arker-0.1.0.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.0-py3-none-any.whl.

File metadata

  • Download URL: arker-0.1.0-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.0-py3-none-any.whl
Algorithm Hash digest
SHA256 66e52133ec84c9e8b780568b2fbb02ee17b485ca045a0f7254fa237a370cee1e
MD5 1b61f3a77fa2c1d0e46a426af4fbbaa9
BLAKE2b-256 587a4bf137816c18338264f1c0a072165f0aa988587eeef74a799ca01bca274c

See more details on using hashes here.

Provenance

The following attestation bundles were made for arker-0.1.0-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