Skip to content

Protobuf with Go import paths for Go and TypeScript: project boilerplate w/ Makefile. Supports grpc, vtprotobuf, drpc, ts-proto, twirp, starpc.

License

Notifications You must be signed in to change notification settings

aperturerobotics/protobuf-project

Folders and files

NameName
Last commit message
Last commit date
Jul 3, 2024
May 16, 2024
May 16, 2024
May 16, 2024
May 16, 2024
May 16, 2024
May 26, 2023
May 16, 2024
Apr 29, 2024
May 16, 2024
Jul 3, 2024
Jul 3, 2024
May 16, 2024
May 16, 2024
Apr 29, 2024
May 16, 2024
Jul 3, 2024

Repository files navigation

protobuf-project template

This template uses protobuf-go-lite to generate reflection-free Go code and protobuf-es-lite for TypeScript interfaces.

Uses a Makefile to download tools to ./hack/bin.

Includes targets for linting, checking outdated modules, etc.

You can create a new repository with this template on GitHub.

Also check out the managed template at template.

Usage

Protobuf imports use Go paths and package names:

syntax = "proto3";
package example;

// Import .proto files using Go-style import paths.
import "github.com/aperturerobotics/controllerbus/controller/controller.proto";

// GetBusInfoResponse is the response type for GetBusInfo.
message GetBusInfoResponse {
  // RunningControllers is the list of running controllers.
  repeated controller.Info running_controllers = 1;
}

To generate the protobuf files:

$ git add -A
$ yarn install
$ yarn gen

The Makefile will download the tools using Go to a bin dir.

Makefile

The available make targets are:

  • genproto: Generate protobuf files.
  • test: run go test -v ./...
  • lint: run golangci-lint on the project.
  • fix: run golangci-lint --fix on the project.
  • list: list go module dependencies
  • outdated: list outdated go module dependencies

To generate the TypeScript and Go code:

  • yarn install
  • yarn gen

Branches

Other available branches:

  • norpc: does not have any RPC library.
  • drpc: uses the dRPC rpc library instead of starpc.
  • grpc: uses the gRPC rpc library instead of starpc.
  • starpc: uses the starpc rpc library (same as main).
  • twirp: uses the Twirp rpc library instead of starpc.

Demo

This branch implements a starpc service and demo.

To run the demo: yarn then yarn run demo.

Developing on MacOS

On MacOS, some homebrew packages are required for yarn gen:

brew install bash make coreutils gnu-sed findutils protobuf
brew link --overwrite protobuf

Add to your .bashrc or .zshrc:

export PATH="/opt/homebrew/opt/coreutils/libexec/gnubin:$PATH"
export PATH="/opt/homebrew/opt/gnu-sed/libexec/gnubin:$PATH"
export PATH="/opt/homebrew/opt/findutils/libexec/gnubin:$PATH"
export PATH="/opt/homebrew/opt/make/libexec/gnubin:$PATH"

Support

Please open a GitHub issue with any questions / issues.

... or feel free to reach out on Matrix Chat or Discord.

License

MIT