https://github.com/protoconf/libprotoconf
https://github.com/protoconf/libprotoconf
Last synced: 15 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/protoconf/libprotoconf
- Owner: protoconf
- License: mit
- Created: 2021-09-09T09:18:24.000Z (over 4 years ago)
- Default Branch: main
- Last Pushed: 2023-10-05T04:25:01.000Z (over 2 years ago)
- Last Synced: 2024-06-21T18:07:31.860Z (almost 2 years ago)
- Language: Go
- Size: 92.8 KB
- Stars: 2
- Watchers: 2
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
- License: LICENSE
Awesome Lists containing this project
README
# .//libprotoconf
[](https://github.com/protoconf/libprotoconf/actions/workflows/ci.yml)
[](https://codecov.io/gh/protoconf/libprotoconf)
[](https://pkg.go.dev/github.com/protoconf/libprotoconf)
Runtime configuration made easy with `protocol-buffers`.
## Goals
Developers can define their desired configuration struct in a proto file, then get all sorts of ways to load that configuration into their software runtime:
- [x] Populate config from environment variables
- [x] Get a `flag.FlagSet` instance
- [ ] Read and merge configs from global, user and workspace locations (`/etc/mypackage/`, `$USER/.mypackage/`, `$(pwd)/.mypackage/`)
- Allow configuration changes dynamically
- [ ] Reload on Signals
- [ ] Reload on file change (`inotify`)
- [ ] `gRPC`/`rest` configuration endpoints
- [ ] key-value stores (`consul`, `etcd`, `zookeeper`, `redis`)
- [ ] protoconf gRPC streaming agent
- Formats:
- [x] JSON (`.json`)
- [x] YAML (`.yaml`, `.yml`)
- [x] pbtext (`.pb`)
- [x] pb binary (`.data`)
- [x] pb binary with base64 encoding (`.base64`, `.b64`)
- [x] jsonnet (`.jsonnet`)
- [x] toml (`.toml`)
- [ ] hcl (`.hcl`)
- [ ] cue (`.cue`)
- [ ] Pre/Post hooks for dynamic changes
- Debugging features
- [ ] `ShowConfig()` method (available via gRPC/rest)
- [ ] `ConfigMetadata()` method (available via gRPC/rest)
- [ ] Where a specific variable was set (env/flag/which file/key value store/rpc)
- [ ] When was the change applied to runtime
- [ ] When was the change made (if made before the process was starting)
- [ ] Who made the change (if data available)
- [ ] `/varz` http endpoint
- [ ] `/metrics` http endpoint for prometheus (with `ConfigMetadata()` information available)
## Implementations
- First implementation will be in Go. This implementation will also include the `protoconf` gRPC streaming agent, so developers of any language can use the dynamic reload features as a sidecar agent.
- Future implementations (please vote!)
- Rust (will probably replace Go for the agent implementation)
- Python
- JavaScript
- Java
- C++
- Suggest other languages