pf-cli is the command-line frontend for the projectfile: it reads, writes and validates fields, resolves remote includes, and generates derived artifacts. It embeds the v1 JSON Schema for offline validation and is the canonical tool for editing projectfiles locally and in CI.
  • Go 96.9%
  • Shell 2%
  • Dockerfile 1%
  • Makefile 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Damián Búho e50c8a26bd
All checks were successful
audited / image-is-audited (push) Has been skipped
audited / runner-is-ready (push) Successful in 3s
audited / gpg-is-ready (push) Successful in 4s
published / release-tag (push) Successful in 3s
audited / signing-is-ready (push) Successful in 6s
published / schema-fetched (push) Successful in 3s
published / runner-is-ready (push) Successful in 6s
published / gpg-is-ready (push) Successful in 5s
published / signing-is-ready (push) Successful in 6s
audited / source-is-secure (push) Successful in 31s
audited / audited (push) Has been skipped
published / projectfile-is-valid (push) Successful in 19s
published / source-is-compliant (push) Successful in 9s
published / source-is-secure (push) Successful in 17s
published / source-is-tested (push) Successful in 17s
published / documentation-passes-lint (push) Successful in 1m2s
published / source-passes-lint (push) Successful in 2m24s
published / projectfile-is-ok (push) Successful in 19s
published / binaries-are-built (amd64, linux) (push) Successful in 15s
published / binaries-are-built (arm64, linux) (push) Successful in 9s
published / binaries-are-built (amd64, darwin) (push) Successful in 17s
published / binaries-are-built (arm64, darwin) (push) Successful in 15s
published / binaries-are-built (riscv64, linux) (push) Successful in 7s
published / binaries-are-signed (push) Has been skipped
published / binaries-are-torrented (push) Has been skipped
published / binaries-torrent-is-verified (push) Has been skipped
published / image-is-built (amd64) (push) Successful in 1m28s
published / image-has-sbom (amd64) (push) Has been skipped
published / image-is-secure (amd64) (push) Successful in 16s
published / container-is-verified (amd64) (push) Successful in 3m13s
published / image-is-published (dockerhub) (push) Successful in 11s
published / image-is-published (kiota) (push) Successful in 14s
published / release-is-published (push) Has been skipped
published / go-install-is-ok (push) Has been skipped
published / release-notes-are-published (push) Has been skipped
published / published (push) Successful in 0s
chore(makefile): sync m6e submodules
core: 13.3.0
#m6e #auto
2026-10-26 16:13:36 -03:00
.compose chore: init 2026-08-07 18:56:52 -03:00
.container refactor: move pf-cli main to cmd/pf-cli 2026-10-16 18:30:48 -03:00
.forgejo/workflows build(workflows): enable zstd in artifacts 2026-10-26 14:24:43 -03:00
.github/workflows build(workflows): enable zstd in artifacts 2026-10-26 14:24:43 -03:00
.makefile chore(makefile): sync m6e submodules 2026-10-26 16:13:36 -03:00
.scripts build: take the binary version from M6E_RELEASE_TAG first 2026-10-17 00:44:48 -03:00
cmd/pf-cli refactor: move pf-cli main to cmd/pf-cli 2026-10-16 18:30:48 -03:00
docs docs(makefile): update help documentation 2026-10-23 12:22:31 -03:00
internal test(cmd): cover the duplicate-include warning and the init fallback 2026-10-18 05:16:40 -03:00
LICENSES chore: init 2026-08-07 18:56:52 -03:00
.claudeignore chore: sorting for claudeignore 2026-09-13 12:49:39 -03:00
.containerignore build: ignore .worktrees (oci/docker) 2026-09-29 23:59:48 -03:00
.dockerignore build: ignore .worktrees (oci/docker) 2026-09-29 23:59:48 -03:00
.fdignore chore: cleanup ignores 2026-08-17 15:17:27 -03:00
.gitattributes chore: clean j2 from attributes 2026-09-14 00:37:02 -03:00
.gitignore build: track the embedded v1 schema so go install builds 2026-10-16 18:30:00 -03:00
.gitmodules build: hard .gitmodules before big refactoring of m6e 2026-09-02 18:40:25 -03:00
.textlintignore chore: cleanup ignores 2026-08-17 15:17:27 -03:00
.yamllint chore(makefile): sync m6e submodules 2026-09-18 00:20:33 -03:00
AGENTS.md build: narrow the coverage gate to what the Go coverage tool can reach 2026-10-18 05:24:10 -03:00
AI_POLICY.md chore(docs): prevent user data from triggering textlint 2026-08-19 23:24:09 -03:00
CITATION.cff chore(version): 3.4.5 2026-10-24 22:05:05 -03:00
CODE_OF_CONDUCT.md docs: cleanup code of conduct 2026-08-18 02:18:09 -03:00
CODEOWNERS chore: init 2026-08-07 18:56:52 -03:00
CONTRIBUTING.md chore: regenerate contributing 2026-09-30 06:40:32 -03:00
Dockerfile refactor: move pf-cli main to cmd/pf-cli 2026-10-16 18:30:48 -03:00
go.mod fix(deps): bump projectfile/core to v2.20.1 2026-10-26 15:00:49 -03:00
go.sum fix(deps): bump projectfile/core to v2.20.1 2026-10-26 15:00:49 -03:00
go.sum.license chore: init 2026-08-07 18:56:52 -03:00
lefthook.yaml chore: regenerate lefthook.yaml 2026-09-29 22:29:14 -03:00
LICENSE chore: init 2026-08-07 18:56:52 -03:00
Makefile chore: init 2026-08-07 18:56:52 -03:00
projectfile.go refactor: move pf-cli main to cmd/pf-cli 2026-10-16 18:30:48 -03:00
projectfile.yaml chore(version): 3.4.5 2026-10-24 22:05:05 -03:00
README.md fix: refactor CI workflows (new goals + preflight checks) 2026-10-18 17:18:28 -03:00
SECURITY.md docs(security): show the fingerprint of the reporting key 2026-10-15 23:29:53 -03:00
SUPPORT.md chore(docs): regen documentation (actual forges) 2026-09-18 14:55:42 -03:00

Español · Українська

Projectfile CLI

pf-cli is the command-line frontend for the projectfile: it reads, writes and validates fields, resolves remote includes, and generates derived artifacts. It embeds the v1 JSON Schema for offline validation and is the canonical tool for editing projectfiles locally and in CI.

Stand with Ukraine Projectfile inside License Cosign PRs welcome REUSE compliance

Project status Last commit on kiota.ch Last commit on Codeberg Last commit on GitHub

Publish pipeline on GitHub Vulnerability audit on GitHub Dependency freshness on GitHub Analysis sweep on GitHub

Publish pipeline on kiota.ch Vulnerability audit on kiota.ch Dependency freshness on kiota.ch Analysis sweep on kiota.ch

Features

  • Document read, write and query

See Features for the full list.

What this provides

  • Executable pf-cli — command pf-cli
  • Container image ghcr.io/projectfile-org/cli:latest
  • Container image damianbuho/projectfile-cli:latest

Installation

Container image

Pull the published container image:

Pull from GHCR — linux/amd64, linux/arm64, linux/riscv64

docker pull ghcr.io/projectfile-org/cli:latest
alias pf-cli='docker run --rm --user "$(id -u):$(id -g)" --group-add 0 --volume "$PWD:/app/ws" --workdir /app/ws ghcr.io/projectfile-org/cli:latest pf-cli'

Pull from DockerHub — linux/amd64

docker pull damianbuho/projectfile-cli:latest
alias pf-cli='docker run --rm --user "$(id -u):$(id -g)" --group-add 0 --volume "$PWD:/app/ws" --workdir /app/ws damianbuho/projectfile-cli:latest pf-cli'

Stable releases also publish X.Y.Z, X.Y and X tags — pull the precision you want to pin.

If the registries above are unreachable, pull from the origin instead:

Pull from Kiota — linux/amd64

docker pull kiota.ch/projectfile/cli:latest
alias pf-cli='docker run --rm --user "$(id -u):$(id -g)" --group-add 0 --volume "$PWD:/app/ws" --workdir /app/ws kiota.ch/projectfile/cli:latest pf-cli'

Then run it as if it were installed — the alias runs every example as written against the current directory:

pf-cli --help

Go toolchain

Install with the Go toolchain:

go install projectfile.org/projectfile/cli/v3/cmd/pf-cli@latest

Then run pf-cli --help.

Prebuilt binary

Download the prebuilt binary for your platform from GitHub Releases:

mkdir -p ~/.local/bin
curl --fail --location --output ~/.local/bin/pf-cli https://github.com/projectfile-org/cli/releases/latest/download/pf-cli-$(uname -s | tr A-Z a-z)-$(uname -m)
chmod +x ~/.local/bin/pf-cli
~/.local/bin/pf-cli --help

Published for: linux/amd64, linux/arm64, linux/riscv64, darwin/amd64, darwin/arm64

To uninstall, delete that one file: rm ~/.local/bin/pf-cli.

Usage

pf-cli

$ pf-cli --help
pf-cli is the command-line frontend for the projectfile: it reads, writes and
validates fields, resolves remote includes, and generates derived artifacts. It
embeds the v1 JSON Schema for offline validation and is the canonical tool for
editing projectfiles locally and in CI.

File and forge sync (bridge, forge, scan): use pf-bridge.

Usage:
  pf-cli [command]

Examples:
  pf-cli init --namespace org.example --name demo
  pf-cli get identity.name
  pf-cli set license.spdx MIT
  pf-cli add keywords rust wasm
  pf-cli del keywords[0]
  pf-cli validate
  pf-cli convert yaml toml
  pf-cli optimize
  pf-cli cache status

Read:
  get         Read one or more projectfile fields

Write:
  add         Append items to a projectfile list
  del         Remove a field, list item, or map entry from projectfile
  set         Write a value into a projectfile field

Validate:
  validate    Validate a projectfile against the v1 JSON Schema

Maintain:
  cache       Manage pf-cli’s local cache for offline use
  convert     Convert a projectfile between encodings (toml/yaml/json)
  includes    Manage the includes list
  init        Scaffold a new projectfile document
  optimize    Remove local fields that duplicate include values
  setup       Edit your per-user configuration interactively

Other:
  completion  Generate the autocompletion script for the specified shell
  help        Help about any command

Common flags:
    -q, --quiet          mute info; warnings and errors still print
  -v, --verbose        show each step; also PF_CLI_VERBOSE=1
  --offline            refuse network; use cache and embedded data

Flags:
      --colors string        colour output: auto|always|never; also PF_CLI_NO_COLOR=1 (default "auto")
      --fail-on string       abort includes at error|warning (default "error")
  -h, --help                 help for pf-cli
      --ignore-user-config   skip $XDG_CONFIG_HOME/projectfile/cli.* loading
      --offline              refuse network; use cache and embedded data
  -q, --quiet                mute info; warnings and errors still print
      --sorted               write YAML keys in sorted order
      --timeout duration     per-attempt network timeout (default 10s)
  -v, --verbose              show each step; also PF_CLI_VERBOSE=1
  -V, --version              print the version

Documentation:
  https://github.com/projectfile-org/cli/tree/main/docs

Report a bug:
  https://github.com/projectfile-org/cli/issues

Use "pf-cli [command] --help" for more information about a command.

Examples and every command’s help are in Usage.

Building

Clone the repository with its submodules:

git clone --recurse-submodules https://codeberg.org/projectfile/cli cli && cd cli

Build the container image locally:

make container-build

Run make with no arguments for the default target; run make help to list every target.

For the local dev loop, make dev-container brings up the dev-container.

Pipeline entry points:

  • make analyzed — Run the heavy analysis sweep (mutation testing, benchmarks)
  • make audited — Re-scan the pinned dependencies and published artifacts for new vulnerabilities
  • make check-outdated — Report every pinned dependency that lags upstream
  • make release-is-ready — Run the pseudo-CI pipeline locally — build, test and scan, without publishing

Documentation

Policies

License

This project is licensed under MIT — see the LICENSE file for details.