Learn to customize Bengal themes and create your own designs.
Prerequisites
0/4 complete
- Bengal installed
- Basic knowledge of HTML
- Familiarity with CSS (or willingness to learn)
- Basic Jinja2 template syntax
Understand Theme Resolution
Bengal looks for templates in this order:
- Your project —
templates/(overrides everything) - Your theme —
themes/your-theme/templates/ - Installed themes — Via pip/uv
- Default theme — Built into Bengal
You only need to override what you want to change.
Create a Custom Theme
bengal new theme my-theme
This creates:
themes/my-theme/
├── theme.yaml
├── templates/
│ ├── base.html
│ ├── page.html
│ └── partials/
│ ├── header.html
│ └── footer.html
└── static/
├── css/
│ └── style.css
└── js/
└── main.js
Configure Your Theme
Editconfig/_default/theme.yaml:
1 2 | |
Override Templates Selectively
You don't need to copy all templates. Extend the default:
1 2 3 4 5 6 7 8 9 10 11 12 | |
Everything not overridden inherits from the default theme (or parent theme).
Add Custom CSS
Createthemes/my-theme/static/css/custom.css:
1 2 3 4 5 6 7 8 9 | |
Include in your template:
1 2 3 | |
Template Variables
Key variables available in templates:
| Variable | Description |
|---|---|
site.title |
Site title |
site.pages |
All pages |
page.title |
Current page title |
page.content |
Raw content |
page.rendered_html |
Rendered HTML |
page.url |
Page URL |
menu.main |
Main navigation menu |
Debug Theme Issues
1 2 3 4 5 6 7 8 | |
Next Steps
- Theme Customization — Deep dive into overrides
- Template Functions — Available filters
- Variables Reference — All template variables
- Assets — CSS, JS, and image handling