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

How a run works

What happens between pressing Run and reading the record: the queue, the worker, the states a run can end in, and where the bytes go.

View as Markdown

Douklar runs as two processes from the same image: the backend, which serves the console and the API, and the sync worker, which does the copying. They share one PostgreSQL database. The CLI uses the same core code as the backend.

From Run to record

  1. Queued. Pressing Run stores a job in PostgreSQL. The job binds the non-secret configuration you reviewed: the mappings, the options, the accounts.
  2. Claimed. The worker polls the queue (every second by default), claims the job and checks the bound configuration and the AWS identities again. A setup that changed since you queued it is refused instead of run.
  3. Running. Mappings run in parallel, a few per service at a time (ECR 4, S3 3, CodeCommit 3, DynamoDB 3 by default). Logs stream to the console over a WebSocket while the run is open.
  4. Verified. Each service checks what arrived: ECR digests and referrer graphs, a HEAD bound to each S3 server-side copy, CodeCommit ref parity, DynamoDB item reads.
  5. Recorded. The run ends in one state and stays in Activity with its counts, logs and per-resource outcomes.
Douklar console Activity page: completed and failed runs with start time, route and duration.Douklar console Activity page: completed and failed runs with start time, route and duration.
Activity: every run, newest first, with its route and outcome. Sample data.

The states

StateMeaning
queuedWaiting for the worker
runningThe worker is copying
completedThe run finished with no failed resource
partialSome resources succeeded and some failed; Retry failed repeats only the failed ones
errorThe run stopped on an error
cancelledSomeone cancelled it
timeoutIt passed its deadline (SYNC_JOB_TIMEOUT_SECONDS, two hours by default)

The Activity filters group them as Running, Complete, Warning, Failed and Cancelled.

Where the bytes go

PathData passes through
S3 worker relayThe worker's staging disk: downloaded from the source, then uploaded
S3 server-side copy, S3 BatchStays inside AWS; Douklar sends only requests
S3 local-file uploadThe browser sends files straight to S3 with presigned URLs
ECRoras on the worker streams blobs from registry to registry
CodeCommitgit on the worker keeps a local mirror, then pushes
DynamoDBThe worker reads items with Scan and writes them with PutItem

AWS bills requests, transfer, Batch jobs and KMS calls to the accounts whose identities make them. The Calculator estimates the S3 part.

What does not happen

Nothing runs on a schedule: a run starts when a person starts it. There are no external notifications; the console's inbox, bell and status pill show outcomes. One backend and one worker serve a deployment; running several replicas is not supported.

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