Feature flags is a way to have features under development live on production and visible only to admins/beta-users.
The idea of Feature Flags came from Flicker. They manage their development on a single branch using feature flags.
Using Feature Flags¶
Feature flags are used in templates and in controller classes.
To make some part of the template visible only if a feature-flag is enabled:
$if "lists" in ctx.features: <h3>Lists</h3> $for list in page.get_lists(): ...
To enable a url only if a feature flag is enabled:
class home(delegate.page): path = "/" def is_enabled(self): return "home-v2" in web.ctx.features def GET(self): return render_template("home")
Setting Feature Flags¶
In Open Library, the feature flags are specified in the openlibrary.yml file as follows:
features: merge-authors: enabled lists: admin lending_v2: filter: usergroup usergroup: beta-users
The value of a feature flag is called a filter. A filter can be specified either as its name or as a dict containing its name and parameters. For example, the following 2 example mean the same.
features: lists: admin features: lists: filter: admin
Available filters are:
Enabled for all users.
Disabled for all users.
Enabled only for logged-in users.
Enabled for admin users.
Enabled for the users part of the specified usergroup.lending_v2: filter: usergroup usergroup: beta-users
Enabled only if the url has a specified query parameter.debug: filter: queryparam name: debug value: true