Skip to Content
OpenETL
Reference

Reference

Where to look up every resource, command, setting, API, event and schema, and the source in the code each one comes from.

This section links to the resource, command, setting and protocol references for this commit. Each entry identifies its documentation page, command help or source file. Source files define the behavior described by the documentation.

Resource documents

Everything you apply with openetl apply is a YAML or JSON document with an apiVersion, a kind, metadata and a spec:

apiVersion: openetl.io/v1alpha1
kind: Source
metadata:
  name: faker
spec:
  connector: faker
  config:
    seed: 42
  • A file can hold several documents, separated by ---.
  • metadata.name is lowercase letters, digits and hyphens, at most 63 characters, starting and ending with a letter or digit.
  • metadata.workspace is optional. A document without one goes to the workspace openetl apply --workspace names, default unless it says.
  • Fields a kind doesn't have are refused.
  • In spec, enums are lowercase (merge), durations are Go durations (15m), and sizes have units (256MB).
KindapiVersionBelongs toWhat it defines
Sourceopenetl.io/v1alpha1A workspaceA system data comes from: its connector, and that connector's config
Destinationopenetl.io/v1alpha1A workspaceA system data goes to: its connector, and that connector's config
Pipelineopenetl.io/v1alpha1A workspaceWhat to copy from a source to a destination, when, and how
DbtProjectopenetl.io/v1alpha1A workspaceA dbt project's files, for steps that run after a sync
Webhookopenetl.io/v1alpha1A workspaceWhere a workspace's platform events go
SparkClusteropenetl.io/v1alpha1A workspaceWhere Spark applications run
FlinkClusteropenetl.io/v1alpha1A workspaceWhere Flink jobs run
Connectoropenetl.io/v1alpha2The orgA version of an external connector package: its descriptor
DeclarativeSourceopenetl.io/v1alpha1The orgA version of a declarative source: its manifest
ConnectorSourceopenetl.io/v1alpha1The orgAn OCI registry namespace or a GitHub repository whose connector packages the catalog lists

Connector and DeclarativeSource also require metadata.version. Use a semantic version such as 1.2.0, without build metadata (+…). Their names can include an owner, such as acme/billing. OpenETL also accepts openetl.io/v1alpha1 connector descriptors as packages with one role.

Pipeline, Source and Destination list every field of those kinds' documents. The fields of each spec are defined by the messages in proto/openetl/api/v1, whose comments describe them, and read from YAML by internal/spec. The examples are working documents of each common kind. A Connector descriptor's fields are in Connector descriptor, and a DeclarativeSource manifest's in Declarative source manifest.

Choose and manage connectors covers package installation and version selection. Connector source lists the fields for adding a public or private package catalog.

Webhook, dbt project, Spark cluster and Flink cluster complete the resource references. Each field table separates required fields, conditional requirements and defaults.

The openetl CLI

openetl is the command-line client of the API. Install the CLI shows how to install it. Run openetl for its commands, and openetl COMMAND -h for a command's flags.

CommandWhat it does
versionPrints the CLI's version, such as 0.1.0-alpha
apply -f FILECreates or updates the resources in FILE, of any kind in the table above
plan -f FILEShows what apply would change, and how each pipeline would sync
pause NAMEStops a pipeline's scheduled syncs
resume NAMEStarts a pipeline's scheduled syncs again
sync NAMEStarts a sync of a pipeline now
reset NAMEReads streams from the start on the next sync or run; repeat --stream STREAM to select streams
rewind --yes NAMEAllows recovery from the previous checkpoint, potentially delivering its epoch again
overrides NAME, overrides remove NAME FIELDLists paused streams and heal overrides, or removes an override
rescale --size SIZE NAMESizes a pipeline's jobs until its next version, which restarts a running job at a checkpoint; auto gives the spec back its say
syncs NAMELists a pipeline's syncs, newest first
versions NAMELists a pipeline's versions, newest first
logs NAMEPrints a sync's log; -f follows a running one
check source NAME, check destination NAMEChecks that a source or destination is reachable
discover NAMELists a source's streams and columns
connector …Packages, publishes, validates, applies, runs and tests connectors; see below
secret set, list, deleteStores the secrets that configs name
principal create, list, delete, disable, enable, grant, revoke, password-link, sign-outManages users and service accounts, their roles, and users' passwords and sessions
whoamiShows who the API key is, and what it may do
key create, list, deleteManages principals' API keys
dataplane list, tokenLists data planes, and manages their runner tokens
audit listLists who changed what, and who read secrets
webhook list, deliveries, test, disable, enable, deleteManages the webhooks platform events go to
incident list, get, resolveShows what's wrong with pipelines, and what OpenETL did about it
holds NAMELists the columns and cells a pipeline holds back
holds release NAME STREAM COLUMN, holds discard NAME STREAM COLUMNPatches a hold's values in, or drops them; release --new-version patches them into COLUMN__v2

openetl connector has commands of its own:

CommandWhat it does
packageBuilds each directory's openetl-connector.yaml for every platform, and writes its executables and descriptor, for a release
publish oci://REGISTRY/NAMESPACEPushes what package wrote to an OCI registry, and lists it in the namespace's index
validateChecks each directory's openetl-connector.yaml without building, or with --artifact, a package version in a registry
applyApplies connector versions: descriptors and manifests in a file, or oci:// and github.com/ references
catalogLists the packages of the connected connector sources, with the reference to apply each by
spec TARGETPrints a connector's spec
check --config FILE TARGETChecks that a connector reaches its upstream with a config
discover --config FILE TARGETLists a source's streams and columns
read --config FILE TARGETReads a source's records into a table, JSON lines or Parquet
test --config FILE TARGETRuns the conformance kit's checks against a source or destination
schema file, descriptor, manifestPrints the JSON Schema of openetl-connector.yaml, a descriptor or a manifest

TARGET is an executable, a descriptor, a manifest, or a package version by reference: oci://REGISTRY/REPOSITORY:VERSION or github.com/OWNER/REPO[/PACKAGE]@VERSION.

Commands that call the API use these connection settings:

SettingFlagEnvironment variableDefault
API URL--api-urlOPENETL_API_URLhttp://localhost:8080
API key file--api-key-fileOPENETL_API_KEY_FILE.openetl/admin.key

OPENETL_API_KEY supplies the key directly and takes precedence over the key file. The key is sent in the Authorization: Bearer KEY header.

The commands and their help are in cmd/openetl.

Pipeline CLI commands lists the arguments, flags and defaults for applying, inspecting and operating pipelines. Manage connection secrets covers stored values and cloud-secret references.

openetld

openetld runs OpenETL's server side, in one of these roles:

RoleWhat it runs
serverThe API, and the console when --web names its files
orchestratorWorkflows, and the placement of jobs on runners
runnerA data plane's attempts, which it takes from the API
devThe server, an orchestrator and a runner in one process; logs are text and sign-in is off unless flags say otherwise

openetld bootstrap-key gives the admin service account a new owner key, in --bootstrap-key-file, for when every owner key is lost.

Settings have flag and environment variable forms. For example, --database-url corresponds to OPENETL_DATABASE_URL. A flag overrides the environment variable, which overrides the default. Each role accepts all settings but uses only those relevant to that role. openetld ROLE -h lists settings, variables and defaults. The runner token can also use OPENETL_RUNNER_TOKEN, which has no corresponding flag.

openetld settings lists every setting with its flag, variable and default, and the OTEL_* variables that set up traces and metrics.

The API

openetld server serves the API on its listen address over Connect, gRPC, gRPC-Web and REST. Calls carry an API key as Authorization: Bearer KEY; the console signs in with a session instead.

PathWhat it serves
GET /openapi.yamlThe REST API's OpenAPI 3 description
/v1/…The REST API
GET /healthzok while the server is up

The services, their methods and their messages are defined in proto/openetl/api/v1. The OpenAPI description is generated from them into internal/api/openapi.yaml, and the server serves that file.

Roles

A principal's roles are bound on the org, which covers every workspace, or on one workspace. Each role may do what the roles above it may, and more:

RoleBound onAdds
viewerThe org or a workspaceReads every resource but the audit log, syncs' logs and incidents included. No role reads secrets' values.
operatorThe org or a workspacePauses, resumes, syncs and rescales pipelines; checks and discovers sources and destinations; disables, enables and tests webhooks; resolves incidents; refreshes the connector catalog
editorThe org or a workspaceApplies sources, destinations, pipelines, dbt projects, webhooks, and Spark and Flink clusters, and deletes them; releases and discards holds; sets and deletes secrets
adminThe org onlyApplies connector versions and connector sources; manages principals, their keys and their roles below owner; manages runner tokens; reads the audit log; signs users out and resets their passwords
ownerThe org onlyGrants and revokes owner, and manages owners and their keys

Each API method's role is in internal/api/authz.go.

JSON Schemas

openetl connector schema prints three JSON Schemas, for editors and checks:

CommandSchema ofFile
openetl connector schema fileA package's openetl-connector.yamlinternal/connectorpkg/openetl-connector.schema.json
openetl connector schema descriptorA Connector descriptorinternal/spec/connector.schema.json
openetl connector schema manifestA DeclarativeSource manifestinternal/declarative/manifest.schema.json

Their fields are listed in openetl-connector.yaml, Connector descriptor and Declarative source manifest.

Platform events

OpenETL records these events, and webhooks deliver them:

Type
sync.started, sync.succeeded, sync.failed, sync.stoppedA sync's progress
pipeline.created, pipeline.updated, pipeline.deletedA pipeline's changes
pipeline.paused, pipeline.resumed, pipeline.rescaledA pipeline paused, resumed or rescaled
stream.paused, stream.resumedOne of a pipeline's streams paused or resumed on its own; data.stream names it, and data.incident the incident whose playbook paused it
pipeline.overriddenHeal set an override of a field of the pipeline's spec, or someone removed one: data.field, and data.value as JSON, empty once it's removed
pipeline.resetA pipeline's streams are to be read again from the start: data.streams, or every stream when it's left out
pipeline.lagging, pipeline.recoveredA continuous pipeline fell behind its source, or caught up
pipeline.teardown_failedWhat a deleted pipeline's connector kept for it couldn't be removed after 7 days of trying
schema.changed, schema.blockedA stream's schema changed, or a change was stopped
incident.opened, incident.escalated, incident.resolvedAn incident's progress
webhook.testSent to one webhook when it's tested, such as by openetl webhook test

Platform events lists every field of each type's data, from the JSON Schema in internal/events/event.schema.json.

The connector protocol

External connectors implement the protocol in proto/openetl/connector/v1. It defines source and destination operations, host services and error types. The Go SDK implements this protocol. Build a connector explains the contracts and development workflow.

Built-in connectors

Built-in connectors has every config field of faker, stdout and parquet. Other connectors define their own config references and release them with their code. The official connectors' references are in openetl-connectors.

On this page