Project Configuration

The project configuration file is located in /.helix/config.xlsx (for sharepoint) or /.helix/config (for google drive). It consists of a table using Key and value columns. For example:

The format of the keys follows the identifier-dot notation, like in javascript. You can think of the sheets as a flattened JSON structure. If a key appears more than once, it would form an array, eg:

Will conceptually be a structure like:

{
  "access": {
    "allow": [
      "*@adobe.com",
      "*@example.com",
    ]
  }
}

The following table lists the configuration options of a project.

Key Comment Example
name Name of the project used by the slack bot when reporting. Franklin Website
slack slack channel for this project T03DFTYDQ/C12U1A8480Q
host host displayed in slack-bot info www.example.com
timezone timezone used by slack-bot Europe/Zurich
cdn.prod.host CDN host name for production environment www.example.com
cdn.prod.type CDN type fastly
cdn.prod.route Route or routes on the CDN that are rendered with Franklin /site
cdn.prod.serviceId Fastly specific: service ID 1234
cdn.prod.authToken Fastly specific: API Token
cdn.prod.endpoint Akamai specific: Endpoint
cdn.prod.clientSecret Akamai specific: Client secret
cdn.prod.clientToken Akamai specific: Client token
cdn.prod.accessToken Akamai specific:Access token
cdn.prod.origin Cloudflare specific: origin
cdn.prod.plan Cloudflare specific: plan
cdn.prod.zoneId Cloudflare specific: zone id
cdn.prod.apiToken Cloudflare specific: api token
cdn.preview.host Custom CDN host name for preview environment preview.example.com
cdn.live.host Custom CDN host name for live environment live.example.com
access.allow The email glob of the users that are allowed. This will enable site authentication if set. *@adobe.com
access.require.repository The list of owner/repo pointers to projects that are allowed to use this content. adobe/helix-website
admin.role.author The email glob of the users with the author role. *@adobe.com
admin.role.publish The email glob of the users with the publish role. *@adobe.com
blueprint configuration blueprint repository in the owner/repo format. Can be multiple. adobe/franklin-defaults
admin.events.github.target The target Github repository to send notifications. hlxsites/target-gh-repo

Also see the JSON Schema and Typescript Types of this config.

Blueprints

A project can define configuration blueprints that serve as defaults for the config.

The blueprints are defined in the .helix directory of the github repository. eg:

adobe/franklin-defaults
  ├── README.md
  ├── .helix/
  │   ├── blueprint-targets.json
  │   └── blueprint-config.json
  └── fstab.yaml

The blueprint-targets.json needs to be a JSON array with the owner/repo names, eg:

[
	"adobe/franklin-project1",
	"adobe/franklin-project2"
]

Each project wanting to use the blueprint will need to register the blueprint configuration repository using the blueprint property in .helix/config.json (see configuration options above) and be listed in the .helix/blueprint-targets.json in the blueprint configuration repository.

This two-way referencing is needed to ensure that no project can steal the configuration of another one,
And that no blueprint repository can force their config on an unrelated project.

Note: The blueprints configuration are only applied when the respective configuration files (/.helix/config, /.helix/headers, /metadata) are previewed, but not when the blueprint config is pushed.

The blueprints contain the defaults for the project config (as described above). They can also provide defaults for the headers and metadata configuration and have the following structure:

{
  "config": {
    "data": {
      ....project config
    }
  },
  "metadata": {
    "data": {
      ....metadata config
    }
  },
  "headers": {
    "data": {
      ....headers config
    }
  }
}

The metadata and the headers config follow the Modifiers format, which are an array of key/value pairs within path glob objects. Eg:

"metadata": {
    "data": {
      "/news/**": [
        {"key": "category", "value": "news"},
        {"key": "locale", "value": "en-US"}
      ],
      "/blog/**": [
        {"key": "category", "value": "blog"}
      ],
      "/**": [
        {"key": "title", "value": "ACME CORP"},
        {"key": "description", "value": "Lorem ipsum dolor…"},
        {"key": "locale", "value": "en-US"}
      ]
    },
  },
}