A very simple, yet highly scalable feature flag service
Find a file
2026-06-28 23:23:09 +02:00
go.mod init 2026-06-28 23:20:43 +02:00
go.sum init 2026-06-28 23:20:43 +02:00
LICENSE.md init 2026-06-28 23:20:43 +02:00
main.go init 2026-06-28 23:20:43 +02:00
README.md chore: readme 2026-06-28 23:23:09 +02:00

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 .

License

AGPLV v3