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 versioning

Usage

# 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

all_flags()

@spec all_flags() :: map()

Get all feature flags and their current values.

Examples

iex> FeatureFlipper.all_flags()
%{
  my_feature: true,
  another_feature: false
}

check_deadlines()

@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()
[]

enabled?(flipper_name)

@spec enabled?(atom()) :: boolean()

Check if a feature flipper is enabled.

Parameters

  • flipper_name - The name of the feature flipper (atom)

Examples

iex> FeatureFlipper.enabled?(:my_feature)
true

reload()

@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}