Douklar 4.0.0, 23 October 2026.A new CLI, douklar, and retry of unfinished objects from a finished S3 Batch job.Read the release notes

Douklar

The douklar CLI

Plan and run syncs, manage config and verify ECR mappings from a terminal.

View as Markdown

Build a command

Choose what to move; the command updates as you go.

Services

The app name your mappings are grouped under. Leave it empty for every app.

Run
douklar sync plan --service ecr --service s3 --app my-app

The command line tool is douklar-cli, reached as douklar. It runs the same sync engine on your machine, against local config files.

Install

From the app checkout:

./install.sh cli
douklar --help

The installer adds the douklar-cli command. When no douklar is on PATH yet, it also links the app launcher scripts/douklar, so you get douklar as well. ./install.sh cli --no-deps skips dependency downloads for offline machines.

douklar install, douklar update and douklar companion belong to the app launcher. Every other douklar command runs douklar-cli with the same arguments.

ECR moves also need the AWS CLI and exactly ORAS v1.3.4 on PATH. douklar doctor checks the local prerequisites.

Commands

douklar status
douklar doctor [--aws] [--profile P] [--strict]
douklar config init|show|validate|generate|fmt|export
douklar mapping list|add|remove
douklar check run
douklar sync plan|run

Global options work before the command and on every command: -v, -q, --debug, --no-input, --color auto|always|never and --progress auto|live|final|off. Data commands take --json and print one JSON document on stdout.

Exit codes: 0 success, 1 the operation ran and failed, 2 usage or validation error before any work, 130 interrupted.

Plan, then run

douklar sync plan --service ecr --service s3 --app my-app
douklar sync run --service ecr --service s3 --app my-app

sync plan shows what sync run would do and writes nothing. Both read the workspace sync.yaml unless you pass --config PATH.

OptionEffect
--service ecr|s3|codecommit|dynamodb|allLimit to this service (repeatable)
--app <name>Limit to this mapping name (repeatable)
--jsonOne JSON document on stdout
--dynamodb-ttl-policy preserve_all|exclude_expired_at_cutoffrun: required when the selection contains DynamoDB
--codecommit-push-mode mirror|incrementalrun: CodeCommit push mode (default mirror)
--codecommit-overwriterun: allow reconciling a non-empty CodeCommit destination
--ecr-update-latestrun: also move the destination's ECR latest tag
--s3-transport worker_relay|server_siderun: S3 path (default worker_relay)
--s3-keep-tagsrun: copy each object's tags
--s3-kms-key-arn <ARN>run: encrypt written objects with this key (full ARN)

Without a terminal, a non-empty CodeCommit destination is skipped and reported failed unless --codecommit-overwrite is given.

Verify ECR mappings

douklar check run --exit-code

check run verifies the ECR repository pairs in the workspace sync.yaml with the console's verdict engine. It reads only. With --exit-code it exits 1 unless every mapping is in_sync, which suits CI.

Bundles for the console

douklar config export writes a bundle folder for the console's Settings > Imports. Bundles carry producer.tool = "douklar-cli"; the app imports no other producer.

Keyboard shortcuts

g h
Home
g c
The console
g m
Use cases
g d
Docs
g r
Releases
/ or Ctrl K
Search the docs (on docs pages)
t
Switch light and dark
?
Show this list