Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Quickstart

This is the smallest complete development workflow for a local Docker Engine. It assumes the Docker Unix socket is available to the current user and that the engine can run a single-node Swarm.

Build and start

just build
mkdir -p -m 0700 /tmp/piqueld-dev-run
just daemon-embedded --config examples/piqueld.toml

The example keeps its state in /tmp/piqueld-dev and its Unix API socket at /tmp/piqueld-dev-run/piqueld.sock. The daemon creates the data directory with mode 0700; an existing directory must be private and owned by your user. The daemon’s production default is /etc/piqueld/config.toml; use --config when running as a non-root developer.

Inspect and operate

In a second terminal, open the first-account setup link and create an account with a passkey, then sign in. The daemon runs as your user, so over its socket the CLI also works without login, as the host operator; piquelctl sign-in-link signs a browser in the same way, without a passkey. Over TCP, login is required:

just run --socket /tmp/piqueld-dev-run/piqueld.sock setup-link --open
just run --socket /tmp/piqueld-dev-run/piqueld.sock login
just run --socket /tmp/piqueld-dev-run/piqueld.sock status
just run --url http://localhost:7845 login
just run --url http://localhost:7845 status
just run --socket /tmp/piqueld-dev-run/piqueld.sock app plan \
  --file examples/basic-website.toml
just run --socket /tmp/piqueld-dev-run/piqueld.sock app apply \
  --file examples/basic-website.toml --deploy --yes
just run --socket /tmp/piqueld-dev-run/piqueld.sock app show basic-website

examples/basic-website.toml runs one nginx:alpine replica with an HTTP health check.

status reports the daemon version and --json produces the same structured result as the public API. app apply saves configuration; app apply --deploy also creates a deployment and waits for its operation. Add --no-wait to return after acceptance. Each explicit deployment prepares sources again and supersedes pending work. Use the same development socket for repair, source refresh, and history:

just run --socket /tmp/piqueld-dev-run/piqueld.sock app reconcile basic-website --yes
just run --socket /tmp/piqueld-dev-run/piqueld.sock app deploy basic-website --yes
just run --socket /tmp/piqueld-dev-run/piqueld.sock events --application <application-id>

The application got one environment, production, with its own env-… ID. Add another with piquelctl env create basic-website staging; app deploy, app reconcile, and app logs then need an environment, so use piquelctl env deploy basic-website staging. A manifest can also declare its environments. The piquelctl reference covers field edits, secrets, previews, and promotion.

Dashboard and cleanup

The development toolchain serves the dashboard through the running daemon, exactly like a deployment: run just dev instead of the commands above. It runs an isolated instance for the worktree, with its own Docker engine, on its own localhost port (see development instances). Give the first embedded build a moment to compile the dashboard, open the URL that just dev wait prints to inspect the overview, application list, and detail routes, and use just ctl instead of just run --socket ... for piquelctl; refresh after Rust or CSS changes. Any other daemon built with --features embedded-ui ships its own dashboard bundle inside the binary, as described in the dashboard architecture.

When finished, delete the application with its environments and note that their named volumes, if any, are retained (with several environments, add --environments production,staging):

just run --socket /tmp/piqueld-dev-run/piqueld.sock app delete basic-website --yes

The retained named volumes are deliberate so deleting an application does not silently destroy its data. Remove them separately only after confirming that the data is no longer needed.