{"id":13494370,"url":"https://github.com/envoyproxy/go-control-plane","last_synced_at":"2025-05-13T18:04:40.377Z","repository":{"id":37550915,"uuid":"107708884","full_name":"envoyproxy/go-control-plane","owner":"envoyproxy","description":"Go implementation of data-plane-api","archived":false,"fork":false,"pushed_at":"2025-05-06T16:47:49.000Z","size":56829,"stargazers_count":1596,"open_issues_count":29,"forks_count":526,"subscribers_count":47,"default_branch":"main","last_synced_at":"2025-05-06T17:13:06.884Z","etag":null,"topics":[],"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/envoyproxy.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":"support/README.md","governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2017-10-20T17:47:21.000Z","updated_at":"2025-05-06T16:47:53.000Z","dependencies_parsed_at":"2025-04-01T07:34:04.932Z","dependency_job_id":"6ffc329f-59d7-49ef-adcb-b7124168af4b","html_url":"https://github.com/envoyproxy/go-control-plane","commit_stats":{"total_commits":1965,"total_committers":104,"mean_commits":18.89423076923077,"dds":0.4035623409669211,"last_synced_commit":"87d7d449348def1a89bbc80a33e5cb8cc5663a7d"},"previous_names":[],"tags_count":55,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoyproxy%2Fgo-control-plane","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoyproxy%2Fgo-control-plane/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoyproxy%2Fgo-control-plane/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/envoyproxy%2Fgo-control-plane/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/envoyproxy","download_url":"https://codeload.github.com/envoyproxy/go-control-plane/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":254000824,"owners_count":21997441,"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":[],"created_at":"2024-07-31T19:01:24.365Z","updated_at":"2025-05-13T18:04:40.337Z","avatar_url":"https://github.com/envoyproxy.png","language":"Go","funding_links":[],"categories":["Go","Documentation","Frameworks / Runtimes"],"sub_categories":[],"readme":"# control-plane\n\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/envoyproxy/go-control-plane/badge)](https://securityscorecards.dev/viewer/?uri=github.com/envoyproxy/go-control-plane)\n![CI Status](https://github.com/envoyproxy/go-control-plane/actions/workflows/ci.yaml/badge.svg)\n[![Go Report Card](https://goreportcard.com/badge/github.com/envoyproxy/go-control-plane)](https://goreportcard.com/report/github.com/envoyproxy/go-control-plane)\n[![GoDoc](https://pkg.go.dev/badge/github.com/envoyproxy/go-control-plane.svg)](https://pkg.go.dev/github.com/envoyproxy/go-control-plane)\n\nThis repository contains a Go-based implementation of an API server that\nimplements the discovery service APIs defined in\n[data-plane-api](https://github.com/envoyproxy/data-plane-api).\n\n## Proto files\n\nThe Go proto files are synced from the upstream Envoy repository (https://github.com/envoyproxy/envoy) on every upstream commit.\n\nSynchronization is triggered using the `envoy-sync.yaml` workflow.\n\n## Scope\n\nDue to the variety of platforms out there, there is no single\ncontrol plane implementation that can satisfy everyone's needs. Hence this\ncode base does not attempt to be a full scale control plane for a fleet of\nEnvoy proxies. Instead, it provides infrastructure that is shared by\nmultiple different control plane implementations. The components provided\nby this library are:\n\n* _API Server:_ A generic gRPC based API server that implements xDS APIs as defined\n  in the\n  [data-plane-api](https://github.com/envoyproxy/data-plane-api). The API\n  server is responsible for pushing configuration updates to\n  Envoys. Consumers should be able to import this go library and use the\n  API server as is, in production deployments.\n\n* _Configuration Cache:_ The library will cache Envoy configurations in\nmemory in an attempt to provide fast response to consumer Envoys. It is the\nresponsibility of the consumer of this library to populate the cache as\nwell as invalidate it when necessary. The cache will be keyed based on a\npre-defined hash function whose keys are based on the\n[Node information](https://github.com/envoyproxy/data-plane-api/blob/d4988844024d0bcff4bcd030552eabe3396203fa/api/base.proto#L26-L36).\n\nAt this moment, this repository will not tackle translating platform\nspecific representation of resources (e.g., services, instances of\nservices, etc.) into Envoy-style configuration. Based on usage and\nfeedback, we might decide to revisit this aspect at a later point in time.\n\n## Requirements\n\n1. Go 1.23+\n\n## Quick start\n\nIt's recommended to run the tests with `make docker_tests` as it executes the tests\nin the same environment as CI. This makes sure to produce a consistent set of generated files.\n\n1. Build and run tests:\n\n    ```sh\n    make docker_tests\n    ```\n\n1. Take a look at the [example server](internal/example/README.md).\n\n\n## XDS API versioning\n\nThe Envoy xDS APIs follow a well defined [versioning scheme](https://www.envoyproxy.io/docs/envoy/latest/configuration/overview/versioning).\n\n### Deprecated\n\n`V2` control-plane code has been removed and will no longer be supported. For previous conversations on support for various xDS versions, see here:\n- [here](https://docs.google.com/document/d/1ZkHpz6DwEUmAlG0kb2Mgu4iaeQC2Bbb0egMbECoNNKY/edit?ts=5e602993#heading=h.15nsmgmjaaml)\n- [here](https://envoyproxy.slack.com/archives/C7LDJTM6Z/p1582925082005300)\n\n*Note*: It is recommended to use a previous SHA if there is still a need for `V2`.\n\n## Resource caching\n\nBecause Envoy clients are assumed to be ephemeral, and thus, can come and go\naway arbitrarily, the server relies on a configuration cache to minimize the\nclient load on the server. There are several caches available in this\nrepository:\n\n- `Simple` cache is a snapshot-based cache that maintains a consistent view of\n  the configuration for each group of proxies. It supports running as an ADS\n  server or as regular dis-aggregated xDS servers. In ADS mode, the cache can\n  hold responses until the complete set of referenced resources is requested\n  (e.g. the entire set of RDS as referenced by LDS). Holding the response\n  enables an atomic update of xDS collections.\n\n- `Linear` is an eventually consistent cache for a single type URL collection.\n  The cache maintains a single linear version history and a version vector for\n  the resources in the cache. For each request, it compares the request version\n  against latest versions for the requested resources, and responds with any\n  updated resources. This cache assumes the resources are entirely opaque.\n\n- `Mux` cache is a simple cache combinator. It allows mixing multiple caches\n  for different type URLs, e.g use a simple cache for LDS/RDS/CDS and a linear\n  cache for EDS.\n\n## Usage\n\nThe [example server](internal/example/README.md) demonstrates how to integrate the go-control-plane with your code.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenvoyproxy%2Fgo-control-plane","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fenvoyproxy%2Fgo-control-plane","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fenvoyproxy%2Fgo-control-plane/lists"}