{"id":13740799,"url":"https://github.com/jhump/goprotoc","last_synced_at":"2025-04-04T15:07:29.377Z","repository":{"id":34882448,"uuid":"135474301","full_name":"jhump/goprotoc","owner":"jhump","description":"Library for writing protoc plugins in Go; also includes a pure-Go protoc replacement","archived":false,"fork":false,"pushed_at":"2025-01-23T19:23:30.000Z","size":161,"stargazers_count":86,"open_issues_count":3,"forks_count":8,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-28T14:06:18.591Z","etag":null,"topics":["codegeneration","go","golang","protobuf","protoc-plugin","protocol-buffers"],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jhump.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-05-30T17:08:58.000Z","updated_at":"2025-01-26T13:06:08.000Z","dependencies_parsed_at":"2022-08-08T02:15:32.614Z","dependency_job_id":"9151166d-200a-40d4-8ed5-be245f830844","html_url":"https://github.com/jhump/goprotoc","commit_stats":null,"previous_names":[],"tags_count":7,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhump%2Fgoprotoc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhump%2Fgoprotoc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhump%2Fgoprotoc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jhump%2Fgoprotoc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jhump","download_url":"https://codeload.github.com/jhump/goprotoc/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247198450,"owners_count":20900080,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["codegeneration","go","golang","protobuf","protoc-plugin","protocol-buffers"],"created_at":"2024-08-03T04:00:52.322Z","updated_at":"2025-04-04T15:07:29.353Z","avatar_url":"https://github.com/jhump.png","language":"Go","funding_links":[],"categories":["Language-Specific"],"sub_categories":["Go"],"readme":"# Go-protoc\n[![Build Status](https://circleci.com/gh/jhump/goprotoc/tree/master.svg?style=svg)](https://circleci.com/gh/jhump/goprotoc/tree/master)\n[![Go Report Card](https://goreportcard.com/badge/github.com/jhump/goprotoc)](https://goreportcard.com/report/github.com/jhump/goprotoc)\n[![GoDoc](https://godoc.org/github.com/jhump/goprotoc/plugins?status.svg)](https://godoc.org/github.com/jhump/goprotoc/plugins)\n\nThis repo makes it easy to work in the protobuf tool chain using Go. \n\n## Writing Plugins for `protoc`\nFirst and foremost, the included `plugins` package makes it easy to implement `protoc` plugins in Go. It defines\nan interface that plugins implement as well as facilities to actually integrate with `protoc` (e.g. implementing\nthe proper plugin protocol). It also provides \"name resolution\" logic: computing qualified names in Go source\ncode for elements in proto descriptors. This makes it a snap to write plugins in Go that generate additional Go\ncode from your proto sources.\n\n## Pure Go version of `protoc`\nThis repo also contains a pure-Go re-implementation of `protoc`. This new version of `protoc`, named `goprotoc`\n(of course!), will delegate to a `protoc` executable on the path, driving it as if it were a plugin, for generating\nC++, C#, Objective-C, Java, JavaScript, Python, PHP, and Ruby code (since they are implemented in `protoc` itself).\nBut it provides descriptors to `protoc`, parsed by `goprotoc`, instead of having `protoc` re-parse all of the source\ncode. And it can invoke any other plugins (such as `protoc-gen-go`) the same way that `protoc` would.\n\nIn addition to the `goprotoc` command, this repo provides a package that other Go programs can use as the\nentry-point to running Protocol Buffer code gen, without having to shell out to an external program.\n\n## Extras\nYou'll also find a `protoc` plugin named `protoc-gen-gox` that can be the entry point for generating Go code. It\nwill delegate to `protoc-gen-go` for standard code gen and gRPC code gen, but it can also be configured to execute\nother plugins that emit additional Go code. It's sort of like a plugin multiplexer that supports a configuration\nfile for enabling and configuring the various plugins that it invokes.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhump%2Fgoprotoc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjhump%2Fgoprotoc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjhump%2Fgoprotoc/lists"}