pf-bridge is the projection tool of the projectfile: it derives forge identity files, assembles feature and roadmap fragments, and projects the projectfile onto the files a forge and repository expect. Companion binary to pf-cli for the projectfile.org tooling.
  • Go 95.6%
  • Go Template 3.5%
  • Shell 0.7%
  • Dockerfile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Damián Búho af0ed13edf
Some checks failed
published / projectfile-is-valid (push) Successful in 4s
published / release-tag (push) Successful in 2s
published / runner-is-ready (push) Failing after 3s
published / source-is-compliant (push) Successful in 7s
published / source-is-tested (push) Failing after 13s
published / source-is-secure (push) Successful in 26s
published / documentation-passes-lint (push) Successful in 1m2s
published / source-passes-lint (push) Successful in 1m9s
published / gpg-is-ready (push) Successful in 4s
published / projectfile-is-ok (push) Successful in 5s
published / signing-is-ready (push) Successful in 6s
published / binaries-are-built (amd64, darwin) (push) Has been skipped
published / binaries-are-built (amd64, linux) (push) Has been skipped
published / binaries-are-built (arm64, darwin) (push) Has been skipped
published / binaries-are-built (arm64, linux) (push) Has been skipped
published / binaries-are-built (riscv64, linux) (push) Has been skipped
published / image-is-built (amd64) (push) Has been skipped
published / container-is-verified (amd64) (push) Has been skipped
published / gsa (amd64, darwin) (push) Has been skipped
published / gsa (amd64, linux) (push) Has been skipped
published / gsa (arm64, darwin) (push) Has been skipped
published / gsa (arm64, linux) (push) Has been skipped
published / gsa (riscv64, linux) (push) Has been skipped
published / image-has-sbom (amd64) (push) Has been skipped
published / image-is-secure (amd64) (push) Has been skipped
published / binaries-are-signed (push) Has been skipped
published / image-is-published (dockerhub) (push) Has been skipped
published / image-is-published (kiota) (push) Has been skipped
published / binaries-are-torrented (push) Has been skipped
published / binaries-torrent-is-verified (push) Has been skipped
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) Failing after 0s
test(cff): raise the CITATION.cff bridge coverage to 93%
Cover the field mapper table in both directions, the Syncer interface
surface and the validator reject paths. Each mapped field now pins its
force and gap-fill semantics, so a mapper that stops honouring them
fails here rather than in a consumer's generated file.
2026-10-21 15:01:14 -03:00
.compose build(compose): add the dev compose file the local plane selects 2026-09-17 21:56:18 -03:00
.container refactor: move pf-bridge main to cmd/pf-bridge 2026-10-16 18:34:12 -03:00
.forgejo/workflows build(workflows): fix preflights 2026-10-21 14:42:04 -03:00
.github/workflows build(workflows): fix preflights 2026-10-21 14:42:04 -03:00
.makefile chore(makefile): sync m6e submodules 2026-10-21 02:23:22 -03:00
.scripts build: take the binary version from M6E_RELEASE_TAG first 2026-10-17 00:44:49 -03:00
cmd refactor: move pf-bridge main to cmd/pf-bridge 2026-10-16 18:34:12 -03:00
docs docs(makefile): update help documentation 2026-10-21 00:04:38 -03:00
internal test(cff): raise the CITATION.cff bridge coverage to 93% 2026-10-21 15:01:14 -03:00
LICENSES chore: init 2026-08-06 20:07:21 -03:00
.claudeignore fix(ignore): emit ignore outputs in global alphabetical order 2026-09-11 15:09:17 -03:00
.containerignore build: ignore .worktrees (oci/docker) 2026-09-29 23:59:47 -03:00
.dockerignore build: ignore .worktrees (oci/docker) 2026-09-29 23:59:47 -03:00
.fdignore fix(fragments): carry textlint directive pairs in translated fragment sources 2026-08-16 16:33:03 -03:00
.gitattributes chore: clean j2 from attributes 2026-09-14 00:37:01 -03:00
.gitignore build: ignore .worktrees 2026-09-29 23:56:47 -03:00
.gitmodules build: hard .gitmodules before big refactoring of m6e 2026-09-02 18:40:24 -03:00
.releaserc.yaml chore: init 2026-08-06 20:07:21 -03:00
.textlintignore fix(fragments): carry textlint directive pairs in translated fragment sources 2026-08-16 16:33:03 -03:00
.yamllint chore(lint): track the generated .yamllint like every sibling 2026-09-17 21:44:49 -03:00
AGENTS.md refactor: drop the PATH lookup dispatcher 2026-10-15 23:39:17 -03:00
AI_POLICY.md fix(bridge): wrap the AI_POLICY project-name line in textlint-disable 2026-08-19 23:03:09 -03:00
CITATION.cff chore(version): 4.1.1 2026-10-17 20:58:33 -03:00
CODE_OF_CONDUCT.md docs: cleanup code of conduct 2026-08-18 02:18:08 -03:00
CODEOWNERS feat(i18n): localized link labels, GitHub issues link, llm-generator doc 2026-08-15 19:05:45 -03:00
CONTRIBUTING.md chore: regenerate contributing 2026-09-30 06:40:30 -03:00
Dockerfile refactor: move pf-bridge main to cmd/pf-bridge 2026-10-16 18:34:12 -03:00
go.mod chore(go): move the licence header below the module directive 2026-10-17 22:36:18 -03:00
go.sum build(deps): bump kiota.ch/projectfile/core/v2 to v2.20.0 2026-10-17 20:53:29 -03:00
go.sum.license chore: init 2026-08-06 20:07:21 -03:00
lefthook.yaml chore: regenerate lefthook.yaml 2026-09-29 22:29:13 -03:00
LICENSE chore: init 2026-08-06 20:07:21 -03:00
Makefile chore: init 2026-08-06 20:07:21 -03:00
projectfile.yaml chore(version): 4.1.1 2026-10-17 20:58:33 -03:00
README.md fix: refactor CI workflows (new goals + preflight checks) 2026-10-18 17:18:27 -03:00
SECURITY.md docs(security): show the fingerprint of the reporting key 2026-10-15 23:27:51 -03:00
SUPPORT.md chore(docs): regen support 2026-10-17 13:57:12 -03:00

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

Projectfile Bridges

pf-bridge is the projection tool of the projectfile: it derives forge identity files, assembles feature and roadmap fragments, and projects the projectfile onto the files a forge and repository expect. Companion binary to pf-cli for the projectfile.org tooling.

Stand with Ukraine Projectfile inside License Cosign PRs welcome REUSE compliance

Project status Last commit on kiota.ch 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

  • Community files without the copypaste
  • Feature and roadmap docs that include your parents
  • Every forge mirror tells the same story
  • Licensed and citable
  • One place for your package metadata
  • A readme that keeps up with the project
  • Release notes written from your history
  • Start in minutes, stay in sync afterwards
  • Every tool reads the same lists

See Features for the full list.

What this provides

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

Installation

Container image

Pull the published container image:

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

docker pull ghcr.io/projectfile-org/bridge:latest

Pull from DockerHub — linux/amd64

docker pull damianbuho/projectfile-bridge:latest

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/bridge:latest

Go toolchain

Install with the Go toolchain:

go install projectfile.org/projectfile/bridge/v4/cmd/pf-bridge@latest

Then run pf-bridge --help.

Prebuilt binary

Download the prebuilt binary for your platform from GitHub Releases:

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

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

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

Usage

pf-bridge

$ pf-bridge --help
pf-bridge — keep every project file in sync with your projectfile document

A projectfile (projectfile.yaml) is the single source of truth for a project:
identity, people, links, and tool config. pf-bridge copies that data out
into the files each tool already reads — README.md, package.json,
CITATION.cff, forge settings — and reads two-way files back.
Spec: https://projectfile.org/specification/

Usage:
  pf-bridge <bridge> [args]   run one bridge (e.g. readme, npm, forge)
  pf-bridge all [flags]       update every file from the projectfile [rw]
  pf-bridge check [flags]     verify declared files match, write nothing [ro]
  pf-bridge to all            write projectfile out to every file [rw]
  pf-bridge from all          read every two-way file back in [rw]
  pf-bridge --list            list installed bridges
  pf-bridge completion SHELL  print completion script (bash|zsh|fish)

[rw] updates files, [ro] only reads or compares. `check` without names
covers the bridges this project declares; `check <name>…` narrows it,
`check --all` covers every installed bridge instead.

Shared flags (also accepted after a bridge name):
  --check, --dry-run, --force, --create-all, --fail-on-drift, --offline,
  --quiet, --verbose. Each has a PF_BRIDGE_* env equivalent.
  Drift warns by default; --fail-on-drift makes it fatal.

Tools:
  cache                Manage the local SPDX and include cache
  forge                Push projectfile metadata out to the repository forge
  init                 Scaffold a new projectfile document (prefer pf-cli init)
  release-notes        Render release notes from git
  scan                 Run scanners to refresh projectfile metadata from filesystem signals
Package manifests:
  composer   [rw]  composer.json — two-way sync
  npm        [rw]  package.json — two-way sync
  pyproject  [rw]  pyproject.toml — two-way sync
  shard      [rw]  shard.yml — two-way sync
Citation and ownership:
  cff          [rw]  CITATION.cff — two-way sync
  codeowners   [rw]  CODEOWNERS — two-way sync
  funding      [ro]  FUNDING.yml — one-way render
  fundingjson  [ro]  funding.json — one-way render
Documentation:
  ai-policy     [ro]  AI_POLICY.md — one-way render
  coc           [ro]  CODE_OF_CONDUCT.md — one-way render
  contributing  [ro]  CONTRIBUTING.md — one-way render
  dei           [ro]  DEI.md — one-way render
  fragments     [ro]  FEATURES.md, ROADMAP.md, … assembled from docs/<name>.d fragments (one-way render)
  readme        [ro]  README.md — one-way render
  security      [ro]  SECURITY.md — one-way render
  support       [ro]  SUPPORT.md — one-way render
Repository setup:
  browserslist     [ro]  .browserslistrc — one-way render
  gitattributes    [ro]  .gitattributes — one-way render
  ignore           [ro]  .claudeignore, .containerignore, .dockerignore, .fdignore, .gitignore, .npmignore, .textlintignore — one-way render
  license          [ro]  LICENSE + LICENSES/<spdx>.txt (one-way render, always overwrite)
  releaserc        [ro]  .releaserc.yaml — one-way render
  vulnerabilities  [ro]  .grype.yaml, .trivyignore, audit-ci.jsonc, osv-scanner.toml — one-way render
  yamllint         [ro]  .yamllint — one-way render

Help per bridge: pf-bridge <bridge> --help

Examples and every command’s help are in Usage.

Building

Clone the repository with its submodules:

git clone --recurse-submodules https://github.com/projectfile-org/bridge bridge && cd bridge

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

Policies

License

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