tree: 7598158380d37602e5003d4219b1c8642b2c17ac [path history] [tgz]
  1. buf/
  2. bufpkg/
  3. gen/
  4. pkg/
  5. README.md
private/README.md

Package structure

  • private/pkg contains utility packages that are not Buf-company-specific. In theory, any of these packages could be split into a separate repository in the future, and not depend on Buf types or concepts.
  • private/bufpkg contains utility packages that are Buf-company-specific, but not specific to github.com/bufbuild/buf. These packages could be split into separate repositories in the future.
  • private/buf contains packages specific to github.com/bufbuild/buf. In other repositories, this should be named after that specific repository, for example github.com/bufbuild/foo would contain private/foo.

There's a strict dependency graph imposed at this level:

  • cmd/{binary} packages must be main packages, and any sub-packages must be internal. cmd/{binary} packages can import from any private package.
  • private/buf packages can import from private/bufpkg and private/pkg packages, but not cmd packages.
  • private/bufpkg packages can import from private/pkg packages, but not cmd or private/bufpkg packages.
  • private/pkg packages can only import from other private/pkg packages.

That is, the ordering is strictly cmd -> private/buf -> private/bufpkg -> private/pkg. This is enforced by linting tools.