CLI and SDKs
The official skippr-cloud CLI is the default way to use Skippr Cloud. Cloud service commands share one binary. Public SDKs cover the same Cloud services. skippr-cloud is not the self-hosted ELT engine and not Skippr Data Engineer.
Status: Preview for Cloud service commands. Self-hosted ingest is skipprd (discover, schema, sync). Data Engineer is sde.
At a glance
| Surface | Package | Use it to |
|---|---|---|
| CLI | skippr-cloud | Sign in, call Cloud services as skippr-cloud <service> <operation> |
| Rust SDK | skippr-cloud | Typed Cloud JSON and auth REST calls from Rust |
| TypeScript SDK | @skippr-cloud/cloud | The same Cloud services from Node.js |
| Python SDK | skippr-cloud | The same Cloud services from Python |
Root commands handle the Cloud session: login, logout, whoami. Cloud services (tables, functions, elt, deploy, and the rest of the service catalog) expose skippr-cloud <service> <operation>. Self-hosted ingest is skipprd discover / skipprd schema / skipprd sync. Data Engineer is sde.
Install
macOS and Linux:
curl -fsSL https://install.skippr.io/install.sh | shWindows PowerShell: irm https://install.skippr.io/install.ps1 | iex.
On macOS and Linux the installer also links sc to skippr-cloud. Windows installs skippr-cloud.exe only (sc.exe is Service Control).
There is no Homebrew, npm, or PyPI package for the Cloud CLI. OSS skipprd and sde install from GitHub Releases or brew tap skipprd/tap. Full Cloud install: this page. Engine: elt.skippr.io. Data Engineer: data-engineer.skippr.io.
Authenticate
skippr-cloud login --email you@example.com
skippr-cloud whoamiYou get a one-time code by email. Paste it at the prompt. Later Cloud commands use that session.
The official SDKs use the same default credential chain as the CLI: a bearer token, then the workload role when you run on Skippr Cloud, then CLOUD_ACCESS_KEY_ID / CLOUD_SECRET_ACCESS_KEY. Call Client::from_env(), CloudClient.fromEnv(), or CloudClient.from_env() rather than passing keys in application code. skippr-cloud login writes a session file used only when that chain is empty.
Self-hosted engine login and CI keys live on elt.skippr.io. Data Engineer is sde.
Keys for Terraform and CI are on Cloud User Directory.
Call a Cloud service
List services, then create a table. Resource creates use the same four tabs as the service guides. For provider credentials and the shared cloud provider block, see Terraform and CDKTF.
skippr-cloud tables list-tables
skippr-cloud deploy runner list-runner-poolsskippr-cloud tables create-table --table-name notes --input - <<JSON
{
"attributeDefinitions": [
{ "attributeName": "pk", "attributeType": "S" }
],
"keySchema": [
{ "attributeName": "pk", "keyType": "HASH" }
]
}
JSONresource "cloud_table" "notes" {
table_name = "notes"
hash_key = "pk"
}import { CloudProvider, CloudTable } from "@skippr/provider-cloud";
const cloud = new CloudProvider(this, "cloud", { region: "eu-central-1" });
new CloudTable(this, "notes", {
tableName: "notes",
hashKey: "pk",
provider: cloud,
});from skippr_cdktf import CloudProvider, CloudTable
cloud = CloudProvider(self, "cloud", region="eu-central-1")
CloudTable(
self,
"notes",
table_name="notes",
hash_key="pk",
provider=cloud,
)Flags map to request fields (--table-name becomes tableName). Nested objects, arrays, and JSON values use --input - or --input request.json. skippr-cloud services lists Cloud services. skippr-cloud <service> --help lists operations. Sub-products nest one extra segment: skippr-cloud deploy runner <operation>.
ELT
skippr-cloud elt is a Cloud service, the same way skippr-cloud tables and skippr-cloud functions are. It registers source-to-destination pipelines, starts runs, and inspects status.
Status: Preview. You can create a pipeline, start a run, and inspect status. A started run stays RUNNING until the engine reports a result.
Self-hosted extract and load on your machine is skipprd discover / skipprd schema / skipprd sync at elt.skippr.io. Data Engineer is sde.
Commands
| Command | What it does |
|---|---|
skippr-cloud elt create-pipeline | Register a named source and sink |
skippr-cloud elt get-pipeline | Read one pipeline |
skippr-cloud elt list-pipelines | List pipelines |
skippr-cloud elt update-pipeline | Change source or sink in place |
skippr-cloud elt delete-pipeline | Remove a pipeline |
skippr-cloud elt start-run | Record a run for a pipeline |
skippr-cloud elt describe-run | Inspect run status |
skippr-cloud elt list-runs | List runs for a pipeline |
skippr-cloud elt stop-run | Request a halt |
skippr-cloud elt --help lists the same operations. JSON contracts are on the elt API action reference. Concepts, limits, and access facts are on the ELT service guide.
Create a pipeline
Creating the pipeline is CLI, Terraform, CDKTF TypeScript, or CDKTF Python. Starting a run is a data-plane call.
skippr-cloud elt create-pipeline --name orders-bronze --source postgres://orders --sink iceberg://lake/ordersresource "cloud_pipeline" "orders_bronze" {
name = "orders-bronze"
source = "postgres://orders"
sink = "iceberg://lake/orders"
}import { CloudProvider, CloudPipeline } from "@skippr/provider-cloud";
const cloud = new CloudProvider(this, "cloud", { region: "eu-central-1" });
new CloudPipeline(this, "orders-bronze", {
name: "orders-bronze",
source: "postgres://orders",
sink: "iceberg://lake/orders",
provider: cloud,
});from skippr_cdktf import CloudProvider, CloudPipeline
cloud = CloudProvider(self, "cloud", region="eu-central-1")
CloudPipeline(
self,
"orders-bronze",
name="orders-bronze",
source="postgres://orders",
sink="iceberg://lake/orders",
provider=cloud,
)Start and inspect a run
skippr-cloud elt start-run --pipeline-name orders-bronze
skippr-cloud elt describe-run --run-id <run-id>
skippr-cloud elt list-runs --pipeline-name orders-bronze
skippr-cloud elt stop-run --run-id <run-id>UpdatePipeline changes source or sink without recreating the pipeline. Preview runs stay RUNNING until the engine reports.
Use an SDK
Pass the region your client should use. The current region is eu-central-1; more will follow.
TypeScript:
import { CloudClient } from "@skippr-cloud/cloud";
const client = new CloudClient({
region: "eu-central-1",
bearerToken: process.env.CLOUD_BEARER_TOKEN,
});
const tables = await client.call("tables", "ListTables", {});Python:
from skippr_cloud import CloudClient
import os
client = CloudClient(region="eu-central-1", bearer_token=os.environ["CLOUD_BEARER_TOKEN"])
print(client.call("tables", "ListTables", {}))Rust:
use skippr_cloud::{Client, Config};
let client = Client::new(Config::from_env()?)?;
let tables = client.call_json("tables", "ListTables", serde_json::json!({})).await?;HTTPS wire contracts remain in the API reference for clients that do not use the CLI or SDK.
