Themes are complete design packages. Use one as-is, customize it, or build your own.
Note
Do I need this? Yes when switching, customizing, or authoring themes. For a first override, see Swizzle tutorial or Customize the Default Theme.
Theme Resolution
Your files always win. Override only what you need.
Choose Your Approach
Effort: None
Works out of the box. Set colors via CSS variables.
Effort: Low-Medium
Override specific templates. No forking required.
Effort: High
Full control. Start from scratch or fork existing.
Bundled Themes
| Theme | Use when |
|---|---|
default |
You want Bengal's built-in documentation theme with no extra packages. |
Bengal bundles a singledefaulttheme. For component-library themes such as
the external Chirp UI theme, install the theme package and pointthemeat it;
the package supplies its own templates and assets through the theme library
asset contract below.
Theme authors can package reusable component systems with theme library asset contracts. Bengal will load the package templates, emit the declared CSS/JS in both dev and static builds, and warn or fail when rendered HTML references missing local assets.
Quick Reference
# bengal.toml
[build]
theme = "default"
/* static/css/custom.css */
:root {
--color-primary: #3b82f6;
--color-background: #0f172a;
--font-family-base: "Inter", sans-serif;
}
Include in your template:
<link rel="stylesheet" href="{{ asset_url('css/custom.css') }}">
Or store the path in [theme.config]and reference it:
[theme.config]
custom_css = ["css/custom.css"]
Then in your template:
{% for css_file in theme.config.custom_css %}
<link rel="stylesheet" href="{{ asset_url(css_file) }}">
{% end %}
your-project/
└── templates/
└── partials/
└── header.html # Your version wins
Use bengal theme swizzle --template-path partials/header.htmlto copy the original, then modify as needed.
Theme Contents
| Directory | Purpose |
|---|---|
templates/ |
HTML templates (Kida) |
static/ |
CSS, JS, images |
assets/ |
Processed assets |
theme.toml |
Theme configuration |
Tip
Start minimal: Override CSS variables first. Only copy templates when you need structural changes. The less you override, the easier upgrades will be.