MyNixOS website logo
Description

Turn Features On and Off using Feature Flags.

Feature flags allow developers to turn features of their software on and off in form of configuration. This package provides functions for creating feature flags in code. It exposes an interface for defining own feature flags which are enabled based on custom criteria.

featureflag

R buildstatus

The featureflag package provides a feature flag (also called as feature toggles, feature switches) implementation for R. Feature flags allow developers to turn functionalities on and off based on configuration.

If you are interested in learning more about feature flags, check out those great resources:

Installation

Install the development version from GitHub with:

# install.packages("devtools")
devtools::install_github("szymanskir/featureflag")

Examples

Simple example

The featureflag package currently supports one type of feature flags: bool feature flags (simple on and off flags):

library(featureflag)

my_feature_flag <- create_bool_feature_flag(TRUE)

if (is_enabled(my_feature_flag)) {
  print("My feature is enabled!")
} else {
  print("My feature is not enabled!")
}

if and if/else helpers

featureflag provides helpers that allow you to omit boilerplate code such as if or if/else. They can be replace by the usage of feature_if or feature_ifelse accordingly:

feature_ifelse(
  my_feature_flag,
  print("My feature is enabled!"),
  print("My feature is not enabled!")
)

Shiny example

The source code of all examples is available in the examples folder of the repository.

Feature flags can be especially useful when developing shiny applications. The example below shows how feature flags can be used to turn parts application on and off – in this case an extra instance of the counter module.

FLAGS <- list(
    extra_counter_flag = create_bool_feature_flag(value = FALSE)
)


ui <- fluidPage(
    counterButton("counter1", "Always Visible Counter"),

    feature_if(FLAGS$extra_counter_flag, {
        counterButton("flagged_counter", "Flagged Counter")
    })
)

server <- function(input, output, session) {
    counterServer("counter1")

    feature_if(FLAGS$extra_counter_flag, {
        counterServer("flagged_counter")
    })
}

Defining feature flags in configuration files

The featureflag package can also be used in combination with the config package by using the R code execution feature:

default:
  extra_counter_flag: !expr featureflag::create_bool_feature_flag(value = TRUE)

test:
  extra_counter_flag: !expr featureflag::create_bool_feature_flag(value = TRUE)

production:
  extra_counter_flag: !expr featureflag::create_bool_feature_flag(value = FALSE)

Create your own feature flag

You can create feature flags that are turned on based on your own custom criteria. The procedure on how to define your own feature flag is presented in this tutorial.

Metadata

Version

0.1.0

License

Unknown

Platforms (75)

    Darwin
    FreeBSD
    Genode
    GHCJS
    Linux
    MMIXware
    NetBSD
    none
    OpenBSD
    Redox
    Solaris
    WASI
    Windows
Show all
  • aarch64-darwin
  • aarch64-genode
  • aarch64-linux
  • aarch64-netbsd
  • aarch64-none
  • aarch64_be-none
  • arm-none
  • armv5tel-linux
  • armv6l-linux
  • armv6l-netbsd
  • armv6l-none
  • armv7a-darwin
  • armv7a-linux
  • armv7a-netbsd
  • armv7l-linux
  • armv7l-netbsd
  • avr-none
  • i686-cygwin
  • i686-darwin
  • i686-freebsd
  • i686-genode
  • i686-linux
  • i686-netbsd
  • i686-none
  • i686-openbsd
  • i686-windows
  • javascript-ghcjs
  • loongarch64-linux
  • m68k-linux
  • m68k-netbsd
  • m68k-none
  • microblaze-linux
  • microblaze-none
  • microblazeel-linux
  • microblazeel-none
  • mips-linux
  • mips-none
  • mips64-linux
  • mips64-none
  • mips64el-linux
  • mipsel-linux
  • mipsel-netbsd
  • mmix-mmixware
  • msp430-none
  • or1k-none
  • powerpc-netbsd
  • powerpc-none
  • powerpc64-linux
  • powerpc64le-linux
  • powerpcle-none
  • riscv32-linux
  • riscv32-netbsd
  • riscv32-none
  • riscv64-linux
  • riscv64-netbsd
  • riscv64-none
  • rx-none
  • s390-linux
  • s390-none
  • s390x-linux
  • s390x-none
  • vc4-none
  • wasm32-wasi
  • wasm64-wasi
  • x86_64-cygwin
  • x86_64-darwin
  • x86_64-freebsd
  • x86_64-genode
  • x86_64-linux
  • x86_64-netbsd
  • x86_64-none
  • x86_64-openbsd
  • x86_64-redox
  • x86_64-solaris
  • x86_64-windows