VendKit
Vendor curated slices of files across repos — with provenance, integrity gates, and governed upgrades.
Some files have to be identical in every repo that uses them — agent instructions, CI workflow templates, lint configs, design tokens. Copy-pasted, they drift silently until the one repo nobody updated breaks. VendKit vendors them instead: plain files in your tree, reviewed and greppable.
go install github.com/jameswbaxter/vendkit/cmd/vendkit@latestowned like first-party code · faithful to upstream
The two-lane model
Two lanes keep a vendored copy honest
A publisher repo declares which of its files form a distributable slice. Consumer repos vendor a pinned copy — and two lanes keep that copy honest.
Quickstart
From zero to governed upgrades
One static Go binary, scaffolds embedded. Publisher declares a slice, consumer onboards in one command, PRs start flowing.
Publish a slice
In the repo that owns the canonical files, vendkit-export.yml declares what's distributable. Then cut a release — the tag is the release, and it's immutable.
schema_version: 1
slice:
name: agent-docs
title: "Agent instructions"
publisher:
scm: github # github | azure-repos
repo: your-org/agent-docs
include:
- "CLAUDE.md"
- "agent-rules/**/*.md"Cut a release
Generate the checksum manifest, then tag. Releases are immutable SemVer tags and can carry migration payloads.
vendkit generate # writes the checksum manifest
vendkit release --bump minor # tags the next minor, e.g. v1.4.0Onboard a consumer
From a checkout of the publisher at the release you're pinning. One command vendors the slice, writes the manifest, and scaffolds the sync, gate, and watch pipelines. --ci azure-pipelines is a peer, not a port — same machinery, same guarantees. --ci none scaffolds no pipelines; you run the same commands by hand or on cron.
vendkit init --ci github-actions --version v1.4.0The machinery takes over
Curious where you stand? vendkit status — pinned vs latest, drift findings, per slice. vendkit conformance tells you when you're fully wired.
What people vendor with it
One canonical copy, everywhere it counts
AI instructions across a fleet
One canonical set of agent instructions — CLAUDE.md, agent rules, prompt libraries, coding-standard docs, MCP config — vendored into dozens of product repos. Every repo pins a release, hand-edits can't merge, and the next revision of your instructions lands everywhere as a reviewed PR instead of as forty stale copies.
Shared CI/pipeline templates
Golden GitHub Actions and Azure Pipelines workflows, upgraded by PR rather than by hope.
Org-wide config & policy
Linter configs, .editorconfig, security policies, license headers — byte-faithful across the fleet.
Design-system tokens & schemas
Source-of-truth files that must stay byte-identical downstream, reviewed like first-party code.
Why not…
You've tried the alternatives
How it holds together
Built so you don't have to take its word for anything
Where next
Go deeper
Rendered docs for the latest release — browse all docs, or pick a version from the selector on any page. Older releases stay published under their own version paths.
architectureHow the pieces fit together
specs/export-declarationPublisher side: declaring a slice
specs/onboardingConsumer side: init and the slice config
specs/migrationsAuthoring and verifying migrations
specs/platform-integrationCI setup: GitHub Actions & Azure Pipelines
specs/cliThe full vendkit CLI
GLOSSARY.mdPrecise terms
CONTRIBUTING.mdHow to contribute