SDKsAPI Reference

API Reference

Side-by-side method reference for the JavaScript and Python SDKs. Every method maps to an RPC endpoint on the Fleet server.

Mutating methods require a fullAccess API token. Read-only tokens can only call non-mutating methods.


Node information

JavaScriptPythonRPCMutating
getNodeInfo()Promise<NodeInfo>get_node_info()NodeInfoGetNodeInfoNo
getNodeStats()Promise<NodeStats>get_node_stats()NodeStatsGetNodeStatsNo
// JavaScript
const info = await client.getNodeInfo();
console.log(`${info.name} — ${info.machineModel}, macOS ${info.osVersion}`);
console.log(`${info.cpuCores} cores, ${info.totalMemoryGB} GB RAM`);
 
const stats = await client.getNodeStats();
console.log(`CPU: ${stats.cpuUsagePercent.toFixed(1)}%`);
console.log(`VMs: ${stats.runningVMCount}/${stats.totalVMCount}`);
# Python
info = client.get_node_info()
print(f"{info.name}{info.machine_model}, macOS {info.os_version}")
print(f"{info.cpu_cores} cores, {info.total_memory_gb} GB RAM")
 
stats = client.get_node_stats()
print(f"CPU: {stats.cpu_usage_percent:.1f}%")
print(f"VMs: {stats.running_vm_count}/{stats.total_vm_count}")

VM management

JavaScriptPythonRPCMutating
listVMs()Promise<VM[]>list_vms()List[VM]ListVMsNo
getVM(vmId)Promise<VM | null>get_vm(vm_id)Optional[VM]No
startVM(vmId)Promise<boolean>start_vm(vm_id)boolStartVMYes
stopVM(vmId)Promise<boolean>stop_vm(vm_id)boolStopVMYes
suspendVM(vmId)Promise<boolean>suspend_vm(vm_id)boolSuspendVMYes
startVMRecovery(vmId)Promise<boolean>start_vm_recovery(vm_id)boolStartVMRecoveryYes
cloneVM(vmId, newName)Promise<VM>clone_vm(vm_id, new_name)VMCloneVMYes
renameVM(vmId, newName)Promise<boolean>rename_vm(vm_id, new_name)boolRenameVMYes
deleteVM(vmId)Promise<boolean>delete_vm(vm_id)boolDeleteVMYes
createVM(options)Promise<string>create_vm(name, ...)strCreateVMOnNodeYes

createVM / create_vm parameters:

JS OptionPython ParameterTypeDefault
namenamestringrequired
cpuCountcpu_countnumber4
memoryMBmemory_mbnumber8192
diskGBdisk_gbnumber64
ipswPathipsw_pathstring
ociImageoci_imagestring

VM settings

JavaScriptPythonRPCMutating
getVMSettings(vmId)Promise<Record>get_vm_settings(vm_id)dictGetVMSettingsNo
updateVMSettings(vmId, settings)Promise<boolean>update_vm_settings(vm_id, ...)boolUpdateVMSettingsYes

Updatable fields:

JS FieldPython ParameterTypeDescription
cpuCountcpu_countnumberVirtual CPUs
memorySizememory_sizenumberMemory in MB
displayWidthdisplay_widthnumberDisplay width (px)
displayHeightdisplay_heightnumberDisplay height (px)
intentintentstring"disposable", "persistent", "interactive", "ci"
ttlSecondsttl_secondsnumberTTL in seconds. -1 to clear.
// JavaScript
await client.updateVMSettings(vmId, { intent: "ci", ttlSeconds: 3600 });
# Python
client.update_vm_settings(vm_id, intent="ci", ttl_seconds=3600)

Snapshots

JavaScriptPythonRPCMutating
listSnapshots(vmId)Promise<Snapshot[]>list_snapshots(vm_id)List[Snapshot]ListSnapshotsNo
createSnapshot(vmId, name, desc?)Promise<Snapshot>create_snapshot(vm_id, name, desc?)SnapshotCreateSnapshotYes
restoreSnapshot(vmId, snapId)Promise<boolean>restore_snapshot(vm_id, snap_id)boolRestoreSnapshotYes
deleteSnapshot(vmId, snapId)Promise<boolean>delete_snapshot(vm_id, snap_id)boolDeleteSnapshotYes
// JavaScript
const snap = await client.createSnapshot(vmId, "clean", "Before tests");
await client.restoreSnapshot(vmId, snap.id);
# Python
snap = client.create_snapshot(vm_id, "clean", "Before tests")
client.restore_snapshot(vm_id, snap.id)

Command execution

JavaScriptPythonRPCMutating
execCommand(vmId, cmd, opts?)Promise<ExecResult>exec_command(vm_id, cmd, ...)ExecResultExecCommandYes

Parameters:

JS OptionPython ParameterTypeDefaultDescription
options.sshUserssh_userstring"cideradmin"SSH username
options.sshPasswordssh_passwordstringSSH password
options.timeouttimeoutnumber300Timeout in seconds

The HTTP request timeout is automatically extended to timeout + 60 seconds to prevent premature disconnection.

// JavaScript
const result = await client.execCommand(vmId, "uname -a", {
  sshUser: "admin", sshPassword: "password", timeout: 600,
});
console.log(`${result.success ? "OK" : "FAIL"}: ${result.stdout}`);
# Python
result = client.exec_command(vm_id, "uname -a",
    ssh_user="admin", ssh_password="password", timeout=600)
print(f"{'OK' if result.success else 'FAIL'}: {result.stdout}")

Templates

JavaScriptPythonRPCMutating
listTemplates()Promise<Template[]>list_templates()List[Template]ListTemplatesNo
getTemplate(id)Promise<Template | null>get_template(id)Optional[Template]GetTemplateNo
getTemplateByName(name)Promise<Template | null>get_template_by_name(name)Optional[Template]GetTemplateNo
createTemplateFromVM(opts)Promise<Template>create_template_from_vm(...)TemplateCreateTemplateFromVMYes
deleteTemplate(id)Promise<boolean>delete_template(id)boolDeleteTemplateYes

createTemplateFromVM / create_template_from_vm parameters:

JS OptionPython ParameterTypeDefault
vmIdvm_idstringrequired
namenamestringrequired
descriptiondescriptionstring
categorycategorystring"custom"
keepOriginalVMkeep_original_vmbooleantrue

Shared folders

JavaScriptPythonRPCMutating
listSharedFolders(vmId)Promise<SharedFolder[]>list_shared_folders(vm_id)List[dict]ListSharedFoldersNo
addSharedFolder(opts)Promise<boolean>add_shared_folder(...)boolAddSharedFolderYes
removeSharedFolder(vmId, name)Promise<boolean>remove_shared_folder(vm_id, name)boolRemoveSharedFolderYes
setSharedFolderEnabled(vmId, name, on)Promise<boolean>set_shared_folder_enabled(vm_id, name, on)boolSetSharedFolderEnabledYes

addSharedFolder / add_shared_folder parameters:

JS OptionPython ParameterTypeDefault
vmIdvm_idstringrequired
namenamestringrequired
hostPathhost_pathstringrequired
readOnlyread_onlybooleanfalse
mountTagmount_tagstring"CiderStackShare"

Image management

JavaScriptPythonRPCMutating
listIPSWs()list_ipsws()ListRemoteIPSWsNo
listOCIImages()list_oci_images()ListRemoteOCIImagesNo
downloadIPSW(url, name, ver)download_ipsw(url, name, ver)DownloadIPSWOnNodeYes
getIPSWInfo(path)get_ipsw_info(path)GetIPSWInfoNo
pullOCIImage(ref, creds?)pull_oci_image(ref, user?, pass?)PullOCIImageOnNodeYes
pushImage(vmId, name, insecure?)push_image(vm_id, name, insecure?)PushImageYes
// JavaScript — pull and create
await client.pullOCIImage("ghcr.io/myorg/base:latest");
const vmId = await client.createVM({
  name: "from-image", ociImage: "ghcr.io/myorg/base:latest",
});
# Python — pull and create
client.pull_oci_image("ghcr.io/myorg/base:latest")
vm_id = client.create_vm(name="from-image", oci_image="ghcr.io/myorg/base:latest")

Tasks

JavaScriptPythonRPC
getTasks(includeCompleted?)Promise<Task[]>get_tasks(include_completed?)List[Task]GetTasks

Fleet overview

JavaScriptPythonRPC
getFleetOverview()Promise<FleetOverview>get_fleet_overview()dictGetFleetOverview
getFleetEvents(limit?, type?)Promise<FleetEvent[]>get_fleet_events(limit?, type?)List[dict]GetFleetEvents
getRemoteResources()Promise<Record>get_remote_resources()dictGetRemoteResources

Note: The JavaScript SDK returns typed objects for fleet data. The Python SDK returns raw dicts — access nested data like overview["overview"]["stats"].


API token management

JavaScriptPythonRPCMutating
generateAPIToken(name, perms?)Promise<APIToken>generate_api_token(name, perms?)APITokenGenerateAPITokenYes
revokeAPIToken(id)Promise<boolean>revoke_api_token(id)boolRevokeAPITokenYes
listAPITokens()Promise<APITokenSummary[]>list_api_tokens()List[APITokenSummary]ListAPITokensNo

Note: Token management requires node ID authentication (not API token auth). See Authentication.


Fleet utilities

JavaScriptPythonRPCMutating
unpair(nodeId)Promise<boolean>unpair(node_id)boolUnpairYes
cleanupVMs(force?)Promise<number>cleanup_vms(force?)intCleanupVMsYes
getIPSWInfo(path)Promise<Record>get_ipsw_info(path)dictGetIPSWInfoNo

cleanupVMs destroys VMs whose TTL has expired. By default, only disposable VMs are cleaned up. Pass force=true to include persistent VMs.


Error handling

Both SDKs throw/raise FleetError on API failures.

// JavaScript
import { FleetError } from "@ciderstack/fleet-sdk";
 
try {
  await client.startVM("bad-id");
} catch (error) {
  if (error instanceof FleetError) {
    console.error(error.message);
    console.error(error.response);
  }
}
# Python
from ciderstack import FleetError
 
try:
    client.start_vm("bad-id")
except FleetError as e:
    print(e)
    print(e.response)

Common errors

ScenarioErrorCause
Missing authAuthentication requiredNo token or node ID provided
Invalid tokenAuthentication requiredToken revoked or doesn’t exist
Read-only violationPermission deniedreadOnly token used on mutating method
Bad VM IDVM not foundVM doesn’t exist or was deleted
Wrong VM stateVM must be stoppedOperation requires stopped VM
Already runningVM is already runningTried to start a running VM
Not runningVM must be runningTried to exec/suspend on stopped VM
NetworkRequest failedFleet server unreachable

See also