FeatureFlipper (feature_flipper v0.1.4)
Main interface for feature flag operations.
FeatureFlipper provides a simple, easy-to-integrate feature flag system for Elixir applications with Consul integration, caching, and deadline management.
Configuration
# config/config.exs
config :feature_flipper,
consul_kv_path: "telephony/services/routing",
consul_client_http_addr: "http://consul.query.dev.telnyx.io:18500",
env: System.get_env("ENV", "dev"),
hostname: System.get_env("SERVER_HOSTNAME", "local"),
version_suffix: "1.7.9-rc" # Optional, for production versioningUsage
# Define feature flippers in your application
defmodule MyApp.FeatureFlippers do
def feature_flippers do
[
{:use_warehouse_cache_tbs_2221?, %{
deadline: ~D[2025-06-30],
description: "Use warehouse cache for improved performance"
}},
{:enable_warehouse_cache_mirroring_tbs_2395?, %{
deadline: ~D[2025-06-30],
force_disable: false,
description: "Enable cache mirroring for data consistency"
}}
]
end
end
# Initialize in your application
def start_phase(:init_feature_flippers, _start_type, _phase_args) do
FeatureFlipper.ConfigLoader.init()
:ok
end
# Use feature flippers
if FeatureFlipper.enabled?(:use_warehouse_cache_tbs_2221?) do
# Feature is enabled
end
Summary
Functions
Get all feature flags and their current values.
Check for feature flippers that are past their deadline.
Check if a feature flipper is enabled.
Reload configuration from Consul.
Functions
@spec all_flags() :: map()
Get all feature flags and their current values.
Examples
iex> FeatureFlipper.all_flags()
%{
my_feature: true,
another_feature: false
}
@spec check_deadlines() :: [String.t()]
Check for feature flippers that are past their deadline.
Returns a list of warning messages for features that are past their deadline.
Examples
iex> FeatureFlipper.check_deadlines()
["Feature 'old_feature' is past its deadline of 2024-01-01"]
iex> FeatureFlipper.check_deadlines()
[]
Check if a feature flipper is enabled.
Parameters
flipper_name- The name of the feature flipper (atom)
Examples
iex> FeatureFlipper.enabled?(:my_feature)
true
@spec reload() :: :ok | {:error, term()}
Reload configuration from Consul.
This function fetches the latest feature flipper configuration from Consul and updates the local cache.
Examples
iex> FeatureFlipper.reload()
:ok
iex> FeatureFlipper.reload()
{:error, :consul_unavailable}