ProtoConfig 1.0

golang docs Latest Release

The ProtoConfig 1.0 is an open, language agnostic specification that describes a process of using, defining, and consuming software configuration input in a unified way.

Like OpenAPI but for Configuration!

Designed to support all popular configuration patterns: Cloud Native Configuration as a Code, robust command line interfaces (CLI), static or dynamic configurability as well as remote configuration APIs.

TL;DR

The ProtoConfig 1.0 standardises application configuration, by describing the process as follows:

  1. Application developer creates a .proto file with Configuration Proto Definition, that defines what exactly options application has.
  2. Thanks to the single source of truth for your app configuration, a developer can generate a data structure in the language they need. Such structs/classes can be then used to parse incoming input in native proto or JSON encoding (for example from stdin, CLI flag or HTTP API, etc).
  1. Following the ProtoConfig convention, a human or program can now configure the application either by specifying JSON manually or by generating (again) data structure from Configuration Proto Definition in the programming language they want. Such struct/class is typed (if a language is typed), have a valid format, have help commentaries and can be encoded to protobuf supported format and passed to the configurable application!

ProtoConfig 1.0 standard specifies that every ProtoConfig 1.0 compatible application accepts encoded protobuf in proto or JSON format as the way of configuring itself. Either as the only way or in addition to other conventions (e.g args and flags).

Open Config 1.0

Goals

Configure software in a way that is:

Motivation

See "Configuration in 2021 is still broken" blog post (TBD).

Principles

See ./specification#principles.

Why Protocol Buffers and What is it

See ./specification#why-protocol-buffers

Example

See example in Go.

If you are not familiar with Go, this is still a useful example, as the flow and pattern will be similar to any language.

This Repository

Item What Status
proto/protoconfig/v1/extensions.proto Proto Config Extensions Format 1.0 Alpha
proto/examples/helloworld/v1/helloworld.proto Example Configuration Proto Definitions (CPD) Alpha
go/ Go module with (optional) Proto Config Extensions Format 1.0 bindings Alpha
go/protoc-gen-go-protoconfig Go module with (optional) protogen go plugin supporting Proto Config Extensions Format 1.0 Go language Alpha
go/examples Go module with (optional) protogen go plugin supporting Proto Config Extensions Format 1.0 Go language Alpha

Contributing

Any help wanted. Do you have an idea, want to help, don't know how to start helping?

Put an issue on this repo, create PR or ping us on the CNCF Slack (@bwplotka, @brancz)! 🤗

Other related projects

Roadmap

Help wanted!

Initial Authors