On this page
Command-line reference
This is the exhaustive reference for pekit's command line and the environment it exports to the commands it runs. Every flag listed here is a real flag accepted by the parser; there are no others. For a narrative walk-through of the grammar and recipe location, see Invocation and flags; for what each command does, see Commands and targets.
Synopsis
pekit [global flags] <command> [args and flags]
pekit [global flags] workspace [workspace flags] <command> [args and flags]
<command> is exactly one of build, test, install, package, publish,
clean, or workspace. Flags may appear before or after the command word and
are parsed identically on both sides — the sole exception is the workspace tail
(see Workspace flags). A bare -- ends flag parsing; every
following token is captured verbatim as a positional selector. Positional
selectors may not begin with -.
There is no --help and no help command, and no version banner: -V is an
alias for the --version selector, not a print-version flag.
Flag value forms
The shape of a flag determines how its value may be written.
| Shape | How a value is written |
|---|---|
| No-value | Never takes a value. --flag=x errors with unexpected_flag_value. |
| Required-value | --flag value or --flag=value. A missing next token, a next token that is -- or begins with -, or an empty --flag= all error with missing_flag_value. |
| Optional-value | Value only via --flag=value. The bare --flag is valid and means an empty value; it never consumes the following token. |
Global flags
Accepted by every command, before or after the command word. These are never subject to the capability matrix below.
| Flag | Value form | Semantics |
|---|---|---|
--recipe <path|dir> |
Required-value | Use this recipe instead of searching upward from the cwd. A directory means <dir>/pekit.toml. |
--workspace <path|dir> |
Required-value | Use this workspace file/root. Valid only with the workspace command. |
--allow-unused |
No-value | Downgrade "command does not support this recognised flag" from a fatal error to a suppressed notice. |
--dry-run |
No-value | Run the full planning pipeline but stop before any side effect; emit plan events instead. |
--quiet |
No-value | Human renderer, routine progress suppressed (only warning, artifact, publish, workspace_summary events). |
--verbose |
No-value | Human renderer plus extra staging/progress events. |
--json |
No-value | Emit newline-delimited JSON events on stdout instead of the human log. |
The renderer is chosen from these flags: --json selects the JSON renderer
(with --dry-run it buffers and prints a single plan object); otherwise the
human renderer runs, in quiet mode when --quiet is set.
Version, source, and build flags
These are command-specific: each is only accepted by the commands marked in the
capability matrix. Passing one to a command that does not
support it is unsupported_flag unless --allow-unused is set.
| Flag | Value form | Meaning |
|---|---|---|
--version <v>, -V <v> |
Required-value | Select a single recipe version. -V is an exact alias. |
--latest |
No-value | Select only the newest available version. |
--all-versions |
No-value | Act on every available version. |
--local[=<path>] |
Optional-value | Use a local source tree instead of resolving source; bare form uses the default, =<path> overrides it. |
--prefer-local[=<path>] |
Optional-value | Use the local source when present, otherwise resolve normally. |
--no-build[=<list>] |
Optional-value | Reuse already-staged build targets. Bare form reuses all; =a,b,c reuses only the named build targets. Only affects build-kind targets whose stage already exists. |
--env <name> |
Required-value | Select the environment file layer. main (default) loads env.pekit.toml; <name> loads <name>.env.pekit.toml; none loads no env file. |
--keyring <name|path> |
Required-value | Load a keyring file. A bare name resolves to <name>.keyring.pekit.toml searched in the workspace root then recipe root; a path-like value is used directly. Repeatable. |
--keyring.<path>=<value> |
Dotted, = required |
Set a single keyring value inline. Requires a non-empty dotted path and the =; otherwise invalid_keyring_flag. Repeatable. |
--refresh-source |
No-value | Force source re-materialisation, ignoring any source cache. |
--allow-unanchored |
No-value | Permit publish from source with unanchored provenance (otherwise unanchored_provenance). |
--all |
No-value | package/publish: act on every package definition instead of a selector. |
--output-only |
No-value | clean: remove managed output only, without running a clean target. |
--target-only |
No-value | clean: run the clean target only, without removing managed output. |
--version/-V, --latest, and --all-versions form one mutually-exclusive
group ("version selection"); --local and --prefer-local form the
"local source flags" group.
Workspace flags
workspace delegates to another command. Its tail is parsed specially: the two
workspace-only flags must appear after workspace and before the
delegated command word. Everything after the delegated command is parsed as an
ordinary invocation of that command.
| Flag | Value form | Meaning |
|---|---|---|
--jobs <N>, --jobs=<N> |
Required-value, positive integer | Maximum concurrent members. Default 1. A non-integer or value <= 0 errors with invalid_flag_value. |
--fail-fast |
No-value | Abort the whole workspace run on the first member failure. |
Global flags (--dry-run, --json, --recipe, …) may also appear in the tail
before the delegated command. A version/source/build flag placed there is an
error (missing_workspace_command, "workspace command flag … must appear after
the delegated command"): those belong after the delegated command. The same
code fires when no delegated command follows at all. See
Workspaces.
Capability matrix
Which command accepts which flag group. Global flags and workspace flags are
omitted (global flags are accepted everywhere). A blank cell means the flag group
is unsupported for that command.
| Command | version selection | local source | --no-build |
--env |
--keyring |
--refresh-source |
--allow-unanchored |
--all |
clean mode |
|---|---|---|---|---|---|---|---|---|---|
build |
Yes | Yes | Yes | Yes | Yes | Yes | |||
test |
Yes | Yes | Yes | Yes | Yes | Yes | |||
install |
Yes | Yes | Yes | Yes | Yes | Yes | |||
package |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | ||
publish |
Yes | Yes | Yes | Yes | Yes | Yes | Yes | Yes | |
clean |
Yes | Yes | Yes |
"clean mode" is the --output-only / --target-only pair.
Validation and mutual-exclusion rules
The parser rejects contradictory or malformed invocations before doing any work.
| Rejected condition | Diagnostic |
|---|---|
--quiet with --verbose |
--quiet and --verbose cannot be used together |
--quiet with --json |
--quiet and --json cannot be used together |
--recipe with --workspace |
--recipe and --workspace cannot be used together |
--workspace without the workspace command |
--workspace can only be used with the workspace command |
| No command word | missing_command |
More than one of --version / --latest / --all-versions |
mutually exclusive |
--local with --prefer-local |
mutually exclusive |
--output-only with --target-only |
mutually exclusive |
| A recognised flag the effective command does not support | unsupported_flag (suppressed under --allow-unused) |
clean --output-only with --env or --keyring |
"clean --output-only does not run a target, so … is unused" (suppressed under --allow-unused) |
clean with more than one selector |
invalid_selector (clean accepts at most one) |
package/publish with --all and a selector |
"--all cannot be combined with package selectors" |
A positional selector beginning with - |
invalid_selector (use -- before selector-like values) |
--allow-unused relaxes only the "recognised-but-unused" and
"clean --output-only unused env/keyring" checks; it never excuses unknown
flags, malformed values, the mutual-exclusion rules, or bad selectors.
Exit codes
| Code | Meaning |
|---|---|
0 |
Success. |
1 |
Any error — bad invocation, missing recipe, failed target, and so on. |
There are no other exit codes.
Environment contract
Before running a target's command, pekit constructs its environment in layers:
managed PEKIT_* variables, then keyring exports, then user-declared env
(workspace → source → recipe → env-file). The process inherits the parent
environment with these overlaid. User env may not define any PEKIT_*
variable — doing so is reserved_env. The command runs with its working
directory set to the source root (or the recipe root for a clean target).
Always set
Exported for every target pekit runs.
| Variable | Value |
|---|---|
PEKIT_RECIPE_ROOT |
Directory containing the resolved recipe (pekit.toml). |
PEKIT_SOURCE_ROOT |
Root of the materialised source tree. Equals the recipe root for a non-delegated recipe. |
PEKIT_LITERAL_ROOT |
Root used to resolve @source: payload references. |
PEKIT_ROOT |
Per-source pekit work base (staging lives beneath it). |
PEKIT_OUT_BASE |
Base directory for this source's managed output. |
PEKIT_OUT |
This target's own stage directory (where it should write). |
PEKIT_COMMAND |
The command kind running the target (build, test, install, clean). |
PEKIT_TARGET |
The target's name. |
PEKIT_BUILD_TIMESTAMP |
Run start time, Unix seconds. |
PEKIT_SOURCE_TIMESTAMP |
Source provenance time, Unix seconds. |
PEKIT_WORKSPACE_ROOT |
Workspace root, or an empty string when not in a workspace (always set). |
PEKIT_DEPENDENCIES_FILE |
Path to the JSON dependency payload pekit writes for this target. |
PEKIT_DEPENDENCY_PROVIDER |
Selected env dependency provider (empty when none). |
PEKIT_DEPENDENCIES |
Resolved dependencies as name constraint lines, one per line (empty when none). |
Set only when a version is selected
Exported only when the run resolves a non-empty version.
| Variable | Value |
|---|---|
PEKIT_VERSION |
Full version string. |
PEKIT_VERSION_MAJOR |
Major component. |
PEKIT_VERSION_MINOR |
Minor component. |
PEKIT_VERSION_PATCH |
Patch component. |
PEKIT_VERSION_PRERELEASE |
Pre-release component (may be empty). |
PEKIT_VERSION_BUILDMETA |
Build-metadata component (may be empty). |
Per-dependency and per-keyring variables
| Variable pattern | When set | Value |
|---|---|---|
PEKIT_<NEED>_OUT |
One per entry in the target's needs |
Stage directory of that needed build target. <NEED> is the target name upper-cased with - and . replaced by _. Two needs mapping to the same name is env_collision. |
PEKIT_KEYRING_<PATH> |
One per keyring leaf loaded via --keyring / --keyring.<path>=<value> |
The keyring value. <PATH> is the dotted keyring path upper-cased, with each run of non-alphanumeric characters collapsed to a single _ and trailing _ trimmed. For example --keyring.token=… exports PEKIT_KEYRING_TOKEN, and a nested [registry] token = … exports PEKIT_KEYRING_REGISTRY_TOKEN. |
A keyring export that collides with a managed PEKIT_* variable or with a normal
env variable is env_collision.