These docs are under active development and cover the v0.20 Kobicha security model.
On this page
reference 2 min read

peipkg-config.toml Reference

peipkg-manager reads a single TOML configuration file passed via --config. Conventional path: /etc/peipkg-manager/config.toml.

For the full discussion (defaults, edge cases, what-not-to-do), see Configuration. This page is the schema reference.

Sections

Section Required
[manager] Yes
[repo] Yes
[signing] Yes
[upload] No (default: no upload)
[http] No (default: no HTTP server)
[poll] Yes

[manager]

Field Type Required Description
id string Yes Farm identifier recorded in every package's manifest.build.farm_id.
recipes_dir string Yes Absolute path to the directory containing recipe subdirectories.
state_dir string Yes Absolute path to the manager's writable state. Created on first run; subdirectories sources/, stage/, publish/, repo/ are managed by the daemon.

[repo]

Used at first-run init only.

Field Type Required Description
name string Yes Repository name. Recorded in repo.json's repo.name. Kebab-case recommended.
description string Optional Human-readable description. Empty if omitted.

[signing]

Field Type Required Description
key_file string Yes Path to Ed25519 private key (PEM PKCS#8 or 32-byte raw seed). Must be readable by the daemon's user.

[upload]

Field Type Required Description
backend string Optional (default none) One of rclone, none. none (or omitted section) disables upload.
remote string Required when backend = "rclone" rclone remote and path, e.g. r2:pkgs.example.org. Must exist in rclone's config.

[http]

Field Type Required Description
addr string Optional (default "") Listen address. "" disables HTTP entirely.
webhook_secret_file string Required when addr is set and any recipe has github_webhook = true Path to a file containing the GitHub webhook HMAC secret. Trailing whitespace stripped.

[poll]

Field Type Required Description
default_interval duration string Yes Per-recipe poll cadence default. Recipes can override via [watch].poll_interval. Minimum: 1m.

Duration format

Duration values are Go-style human-readable strings:

Suffix Unit
ns nanoseconds
us, µs microseconds
ms milliseconds
s seconds
m minutes
h hours

Durations can combine units: 1h30m, 90m, 5400s are all equivalent.

Strict parsing

Unknown keys at any level are rejected with an error naming the offending key. There is no forward-compatibility allowance for unknown fields — the manager binary is the source of truth for which fields are valid.

This is intentional: misspelt keys silently dropped by the parser would behave like "I forgot to set this," and the result is hard to debug. Strict rejection means a typo fails fast, before the daemon starts.

See also