ppm.toml(5)

# NAME

ppm.toml - package manifest for ppm(1)

# DESCRIPTION

A *ppm.toml* file describes a single package. Manifests published to the
registry are immutable: once a version is tagged, its manifest may never
change.

# SECTIONS

## [package]

*name*
	String. Lowercase letters, digits, hyphen, underscore, and dot. Required.

*version*
	SemVer 2.0.0 string. Required.

*summary*
	Short one-line description.

*license*
	SPDX license expression, e.g. *GPL-2.0-only*.

*authors*
	Array of strings in "Name <email>" format.

*homepage*
	Project URL.

## [source]

*url*
	HTTPS URL of the source/tarball. For binary packages this is the
	prebuilt artefact; for derivations it is the upstream source tree.
	Required for published manifests.

*hash*
	SHA-512 of the bytes fetched from *url*, in the form
	*sha512:<128 hex chars>*. Required.

*sig_url*
	Optional URL of the detached Ed25519 signature. Defaults to *url* + *.sig*.

## [build]

Optional. When present, ppm treats the manifest as a *derivation* and
compiles from source whenever the output is not already in the local
content-addressed store. Output is content-addressed by a hash of the
inputs (name, version, source hash, system, script, build deps), not
of the produced bytes, so successful caching survives non-deterministic
timestamps in build artefacts.

*script*
	A *POSIX /bin/sh* snippet, executed with *-e* (abort on first error).
	It receives two environment variables:

	- *$src* — the extracted source tree (cwd starts here).
	- *$out* — the directory in which the package must place its files.

	The script must be deterministic given the same inputs.

*system*
	Optional target identifier, e.g. *x86_64-linux*. When omitted, ppm
	uses the detected host machine and OS.

## [dependencies]

A table mapping package name to a SemVer requirement expression.

```
[dependencies]
hello = "^1.2"
zlib  = ">=1.0, <2.0"
```

## [build-dependencies]

Identical syntax to *[dependencies]* but only fetched during builds.

# EXAMPLE

```
[package]
name    = "hello"
version = "1.0.0"
summary = "Greets the world"
license = "GPL-2.0-only"

[source]
url  = "https://example.org/hello-1.0.0.tar.zst"
hash = "sha512:cf83e1357eefb8bd..."

[dependencies]
libgreet = "^0.4"
```

# SEE ALSO

*ppm*(1)
