A short tutorial. From zero to a built site in a few minutes.
Prerequisites
You need uv and Python 3.14t. Install uv if you don't have it:
curl -LsSf https://astral.sh/uv/install.sh | sh
Install the free-threaded Python build:
uv python install 3.14t
Create a Bengal site
uv run --python=3.14t bengal new site my-site
cd my-site
Or use a preset:
uv run --python=3.14t bengal new site my-blog --template blog
uv run --python=3.14t bengal new site my-docs --template docs
Presets create sections, sample content, and config. blog gives you a blog and about section. docs gives you getting-started, guides, and reference.
Add content
Content lives in content/. Each section is a directory with an _index.md and Markdown files.
---
title: My First Post
date: '2026-03-15'
tags:
- python
- bengal
---
# My First Post
Hello, world.
Save as content/blog/my-first-post.md. Bengal picks it up automatically.
Run the dev server
uv run --python=3.14t bengal serve
Or the short alias:
uv run --python=3.14t bengal s
Open http://localhost:8000. Live reload is on by default. Edit a file and the browser refreshes.
Build for production
uv run --python=3.14t bengal build
Output goes to public/. Deploy that directory to any static host — Netlify, Vercel, S3, GitHub Pages.
Why free-threading matters here
On Python 3.14t, Bengal uses parallel rendering. A 1,000-page site builds in ~2.5 s with 8 workers instead of ~9 s single-threaded. The bigger win is incremental builds: change one page and only that page rebuilds. See Bengal — Built for Python's Free-Threaded Future for the architecture.