---
title: "Using Feature Flags with Sculpin"
excerpt: |
How I've started using feature flags within a client's Sculpin website.
tags: [sculpin]
date: 2022-01-09
---
## Background
I was asked last week to add a new feature, a Facebook pixel for measuring and
building advertising campaigns, to a client's website which I built using the
[Sculpin](https://sculpin.io) static site generator.
The site uses settings within the `app/config/sculpin_site.yml` file for
storing site IDs and usernames. For this, I would add something like:
```yaml
facebook:
pixel:
id: "abc123"
```
It can then be retrieved with `{{ site.facebook.pixel.id }}`.
If I then needed to disable the pixel, then I'd typically remove the pixel
ID:
```yaml
facebook:
pixel:
id: ~
```
## Introducing feature flags
A technique that I like to use on other projects is using
[feature flags](https://www.atlassian.com/continuous-delivery/principles/feature-flags)
(aka feature toggles).
Whilst, in this instance, a feature flag wouldn't separate deploying code from
toggling a feature - a static site will need to be re-generated and deployed -
I thought that there was value in being able to easily toggle a feature without
changing its configuration or removing code within the site's templates.
## Feature flags in Sculpin
My Sculpin feature flag implementation was to add a `feature_flags` key within
`sculpin_site.yml`, with each feature's name as the key and a boolean value to
set whether it's enabled - similar to how the Drupal 7 version of the
[Feature Toggle module](https://www.drupal.org/project/feature_toggle) works.
This is how I added the Facebook pixel feature flag:
```yaml
feature_flags:
add_facebook_pixel: true
```
## Using the Facebook pixel feature flag
The Facebook pixel code is stored within it's own partial that I can include
from my `source/_layouts/app.html.twig` layout, including the pixel ID and
whether or not the feature flag is enabled.
```twig
{% verbatim %}
{% include "facebook-pixel" with {
is_enabled: site.feature_flags.add_facebook_pixel,
pixel_id: site.facebook.pixel.id,
} only %}
{% endverbatim %}
```
Within the partial, I can check that both the feature flag is enabled and that
there is a Facebook pixel ID, and only add the pixel code if both conditions
return a truthy value.
```twig
{% if is_enabled and pixel_id %}
{% endif %}
```
Now the pixel can be removed just by setting `add_facebook_pixel: false` in
`sculpin_site.yml`, and without changing any other configuration or templates.