A very simple, yet highly scalable feature flag service
- Go 100%
| go.mod | ||
| go.sum | ||
| LICENSE.md | ||
| main.go | ||
| README.md | ||
ffs
ffs is a very simple, yet highly-scalable feature flag service.
Features
currently there are literally no features other than reading and writing to keys. The application itself is stateless, only dependant on the valkey database that contains the feature flags. valkey clusters are supported out of the box.
Feature Keys
Feature Keys are identifiers up to 4096 characters in length. logical grouping is done using the / character. permitted characters are a-z, A-Z, 0-9, ., -, _
Feature Values
Currently, feature values can only be true or false.
Configuration
Everything is configured through environment variables
| Variable | Description | Default |
|---|---|---|
FFS_DEBUG |
Set to true to enable debug logs |
false |
FFS_HOST |
Adress to bind the http server to | :8080 |
FFS_VALKEY_CONNECTION |
Connection string(s) to valkey in form of (ip|hostname):port. if cluster, separate multiple with a , |
None |
Roadmap
- Authentication via cryptographic keys
- Response signing
- Simple web frontend
- Containerization workflow
- Replicated setup guide for valkey and backend
- Support data types other than bool
- Strings
- Ints
- Relations between feature flags
- Feature flag named the same as a scope in the same scope should override if set to false.
- General relations (if a is not set, b has to be set/cannot be set)
- Complex relations (semantic relations of the values: if a set to true, b has to be in range 0-9, ...)
Local development
It's pretty simple:
- Start a valkey server (I use apple container):
container run --publish 127.0.0.1:6379:6379 valkey/valkey - Run the application
FFS_VALKEY_CONNECTION=127.0.0.1:6379 FFS_DEBUG=true go run .