Configuration Reference
PolicyPress is configured through a single config.toml file at the repository root. It is a Zola configuration file. PolicyPress-specific settings live under [extra.policypress], keeping them cleanly separated from theme-level settings in [extra].
Required fieldsπ
These fields must be present or PolicyPress will exit with an error before building anything.
| Field | Location | Description |
|---|---|---|
base_url | top-level | Canonical URL of the published site (e.g. "https://security.example.com") |
organization | [extra.policypress] | Organization name β injected into PDFs and via {{ org() }} shortcode |
logo | [extra.policypress] | Filename of the logo image relative to static/ (e.g. "logo.png") |
pdf_color | [extra.policypress] | Hex accent color used on PDF cover pages (e.g. "#0e90f3") |
policy_dir | [extra.policypress] | Path to the policy directory relative to content/ (e.g. "policies/") |
Example minimal configuration:
base_url = "https://security.example.com"
title = "Example Co Security Center"
compile_sass = true
theme = "policypress"
[[taxonomies]]
name = "SCF"
render = false
[[taxonomies]]
name = "TSC2017"
render = true
[extra.policypress]
organization = "Example Co"
logo = "logo.png"
pdf_color = "#0e90f3"
policy_dir = "policies/"PDF and build optionsπ
| Field | Location | Type | Default | Description |
|---|---|---|---|---|
redact_web | [extra.policypress] | bool | false | When true, renders a redaction bar over {% redact() %} β¦ {% end %} blocks on the website. Does not affect PDF generation β use --redact on the CLI. |
show_draft_pdfs | [extra.policypress] | bool | false | When true, links to draft PDFs appear on the policy index page |
Draft and redact modes can also be set at build time via GitHub Action inputs or CLI flags (
--draft/--redact). Action inputs always overrideconfig.toml.
Site content fieldsπ
| Field | Location | Type | Default | Description |
|---|---|---|---|---|
lead | [extra.policypress] | string | - | Subtitle shown below the site title on the homepage |
policy_root | [extra.policypress] | string | - | Zola internal link to the policies section index (e.g. "@/reports/scf.md") |
scf_report_page | [extra.policypress] | string | - | Internal link to the SCF compliance report page |
soc2_report_page | [extra.policypress] | string | - | Internal link to the SOC 2 report page |
Navigationπ
The main navigation bar is controlled by [[extra.menu.main]] entries. Each entry accepts:
| Field | Type | Description |
|---|---|---|
title | string | Display label |
url | string | Target URL |
icon | string | Font Awesome class (e.g. "fas fa-file-alt") |
weight | integer | Sort order - lower numbers appear first |
[[extra.menu.main]]
title = "Policies"
url = "/policies/"
icon = "fas fa-file-alt"
weight = 10Team directoryπ
The team page is populated from [[extra.policyteam.members]] entries:
| Field | Type | Required | Description |
|---|---|---|---|
name | string | yes | Full name |
title | string | yes | Job title |
email | string | no | Contact email |
phone | string | no | Contact phone |
image | string | no | Filename under static/ |
page | string | no | Path to a content page for the team member |
Brandingπ
| Field | Location | Type | Default | Description |
|---|---|---|---|---|
brand_color | [extra] | string | theme default | Hex color for the web themeβs primary/accent surfaces (buttons, links, badges, highlights). Applied at load time - no SCSS recompile needed. Set it to the same value as pdf_color so web and PDF branding match. |
pdf_color | [extra.policypress] | string | - | Hex accent color for PDF cover pages and rules (see Required fields). |
logo | [extra.menu] / [extra.policypress] | string | - | The navbar logo is [extra.menu].logo (web); the PDF title-page/header logo is [extra.policypress].logo; [extra.schema].logo and [extra.open].image set the JSON-LD and Open Graph images. |
[extra]
brand_color = "#0e90f3"Homepageπ
Two homepage layouts are available, selected by homepage_style in [extra]:
| Value | Layout |
|---|---|
"dashboard" (default) | A compliance dashboard computed from your policies - policy count, reviews overdue, framework coverage, and a per-policy review-status list - plus any [extra.frontpage.features.cards] shown as navigation tiles. Best for an internal ISMS. |
"marketing" | A landing page (hero, feature grid, quick actions, statistics) driven by [extra.frontpage]. Best for a public-facing site. |
[extra]
homepage_style = "dashboard" # or "marketing"
The [extra.frontpage] keys below drive the marketing layout. All sub-keys are optional - omit any section to hide it. In dashboard mode only features.cards is used (as navigation tiles).
| Section | Description |
|---|---|
[extra.frontpage.hero] | title and subtitle for the hero banner |
[extra.frontpage.cta] | Primary call-to-action button: text and url |
[extra.frontpage.secondary_cta] | Secondary call-to-action button |
[extra.frontpage.features] | Feature cards grid (title, subtitle, [[cards]]) |
[extra.frontpage.quick_actions] | Quick-action tiles (title, subtitle, [[actions]]) |
[[extra.frontpage.statistics]] | Statistics strip - each entry has number and label |
Taxonomiesπ
Taxonomies let you cross-reference policies against compliance frameworks. Each taxonomy declared in config.toml can appear in policy front matter.
[[taxonomies]]
name = "TSC2017" # SOC 2 Trust Services Criteria
render = true # generates a browseable taxonomy page
[[taxonomies]]
name = "SCF" # Secure Controls Framework
render = false # indexed for reports but no public page
Values used in policy front matter must match exactly (case-sensitive).
Social links and Open Graphπ
[[extra.menu.social]]
name = "GitHub"
pre = '<svg β¦></svg>' # inline SVG icon
url = "https://github.com/your-org"
weight = 10
Open Graph tags for link previews:
[extra.open]
enable = true
image = "logo.png" # fallback OG image
og_locale = "en_US"Footerπ
[extra.footer]
info = 'Powered by <a href="β¦">PolicyPress</a>'
[[extra.footer.nav]]
name = "Privacy"
url = "/policies/privacy/"
weight = 10Faviconπ
PolicyPress ships a default favicon. To use your own, place a favicon.ico in your repositoryβs static/ directory β Zola serves files from static/ before falling back to the theme, so your file takes precedence automatically.
static/
favicon.ico β drop your icon here; replaces the theme default
logo.png
Modern browsers also pick up PNG icons. If you want to supply multiple sizes or a web manifest, add them to static/ and they will be served alongside your site without any config changes.
Standard Zola fieldsπ
These standard Zola settings are relevant to PolicyPress deployments:
| Field | Recommended value | Notes |
|---|---|---|
compile_sass | true | Required - PolicyPress ships SCSS |
theme | "policypress" | Required |
build_search_index | true | Powers the site search widget |
generate_feeds | true or false | Optional Atom feed |
minify_html | false | Safe to enable for production |
[markdown].smart_punctuation | true | Recommended for policy prose |
[markdown].github_alerts | true | Enables > [!NOTE] callouts |
[markdown].bottom_footnotes | true | Recommended |