Skip to content

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 ​

SurfacePackageUse it to
CLIskippr-cloudSign in, call Cloud services as skippr-cloud <service> <operation>
Rust SDKskippr-cloudTyped Cloud JSON and auth REST calls from Rust
TypeScript SDK@skippr-cloud/cloudThe same Cloud services from Node.js
Python SDKskippr-cloudThe 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:

bash
curl -fsSL https://install.skippr.io/install.sh | sh

Windows 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 ​

bash
skippr-cloud login --email you@example.com
skippr-cloud whoami

You 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.

bash
skippr-cloud tables list-tables
skippr-cloud deploy runner list-runner-pools
bash
skippr-cloud tables create-table --table-name notes --input - <<JSON
{
  "attributeDefinitions": [
    { "attributeName": "pk", "attributeType": "S" }
  ],
  "keySchema": [
    { "attributeName": "pk", "keyType": "HASH" }
  ]
}
JSON
hcl
resource "cloud_table" "notes" {
  table_name = "notes"
  hash_key   = "pk"
}
ts
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,
});
python
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 ​

CommandWhat it does
skippr-cloud elt create-pipelineRegister a named source and sink
skippr-cloud elt get-pipelineRead one pipeline
skippr-cloud elt list-pipelinesList pipelines
skippr-cloud elt update-pipelineChange source or sink in place
skippr-cloud elt delete-pipelineRemove a pipeline
skippr-cloud elt start-runRecord a run for a pipeline
skippr-cloud elt describe-runInspect run status
skippr-cloud elt list-runsList runs for a pipeline
skippr-cloud elt stop-runRequest 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.

bash
skippr-cloud elt create-pipeline --name orders-bronze --source postgres://orders --sink iceberg://lake/orders
hcl
resource "cloud_pipeline" "orders_bronze" {
  name   = "orders-bronze"
  source = "postgres://orders"
  sink   = "iceberg://lake/orders"
}
ts
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,
});
python
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 ​

bash
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:

javascript
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:

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:

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.