Static site generator.
Project description
Brigid
A simple blog engine—but not simpler than it should be.
Demo
- My blog: tiendil.org — see it in action with all features.
- Sources of the blog: tiendil-org-content — see how the content is organized.
Or run the project from the root of this repository:
poetry install
./bin/dev-server.sh
Features
- Monolithic design — install and run. No need to look for plugins or themes.
- Extensive tag support for navigating and organizing content.
- Markdown as a source code for posts.
- Multi-language support by design.
Extensive tag support
- Powerful tag filtering for posts. Especially useful if your blog is also your knowledge base.
- Similar post suggestions based on common tags & links (configurable).
- Post collections: for instance, if you want an always-up-to-date list of posts tagged
travels
andbest
. - Post series: for example, if you want a dedicated set of posts marked by a special tag like
my-cool-experiments-with-chatgpt
. - Prev/Next post navigation for series of posts.
Markdown as a source
- Every page is a Markdown file.
- Each Markdown file has a TOML frontmatter with metadata.
- In addition to standard Markdown features, Brigid supports custom blocks:
- Lists of posts in a collection.
- Contents of a post series.
- Image / gallery.
- YouTube video.
- Spoilers / details.
- Info blocks (admonitions).
- Tables.
- Including content from other files (snippets).
Multi-language support
- Cross-linking between posts/pages in different languages.
- SEO support for multi-language content.
- Configurable translations.
- Configurable per-language site menu.
- Auto-detect language by headers and redirect users to the right entry point, e.g.
my-cool-blog.org
->my-cool-blog.org/<language>/
- Auto-marking links to posts that are not translated yet. For example, if you have a post in German and want to link to your English post that currently lacks a German translation (but might have one later).
Other features
- Mobile-friendly.
- SEO-friendly.
- No default cookies.
- Custom headers/footers with JS code.
- Last posts block on the post page.
- Configurable redirects on the content side—no need to inject them in your reverse proxy configs.
How to run
Set environment variables:
BRIGID_ENVIRONMENT="prod"
# Path to your content directory.
# You can find examples here:
# - ./test-content
# - https://github.com/Tiendil/tiendil-org-content/tree/main/content
BRIGID_LIBRARY_DIRECTORY="<path-to-your-content-dir>"
# Optional: Brigid will store files here for your reverse proxy to serve.
BRIGID_API_CACHE_DIRECTORY="<path-to-your-cache-dir>"
# Python list of allowed origins for CORS:
BRIGID_ORIGINS="[\"https://my-site.org\"]"
Install and run the server:
pip install brigid uvicorn
uvicorn brigid.application.application:app \
--host 0.0.0.0 \
--port 8000 \
--workers 4
That’s it! You’ll have a server running on port 8000.
Consider the following for production deployment:
- Process Management: Use a process manager like systemd, supervisord, or Docker to ensure reliable, long-term operation.
- Reverse Proxy: Set up a reverse proxy such as Nginx or Caddy to enhance performance and security.
Design principles
A subjective list of design principles I follow in this project:
- One solid, stable, simple, up-to-date solution. Just install and run.
- Markdown won ⇒ use Markdown as the primary source for posts.
- TOML won ⇒ use TOML for metadata and frontmatter instead of YAML.
- No unnecessary or unused features.
- Designed for non-trivial posts: long, multi-language, with images, tables, code, etc.
- Server-side rendering is good — use it as the primary approach.
- Use minimal JS only when truly required.
- No CSS experiments—only stable, verified solutions.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file brigid-0.12.1.tar.gz
.
File metadata
- Download URL: brigid-0.12.1.tar.gz
- Upload date:
- Size: 57.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9ef6ecf1b5a1ac7164efcf5c7f1f775289447e6a769940d1c766e93d5e54efc0 |
|
MD5 | 0c489e2b0dcba309ce31b2f0f750a790 |
|
BLAKE2b-256 | 0a0d9b26c4d0c6b1142d87905f23152327e589b0b40e5579ed8aece643d17d58 |
Provenance
The following attestation bundles were made for brigid-0.12.1.tar.gz
:
Publisher:
release.yml
on Tiendil/brigid
-
Statement:
- Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
brigid-0.12.1.tar.gz
- Subject digest:
9ef6ecf1b5a1ac7164efcf5c7f1f775289447e6a769940d1c766e93d5e54efc0
- Sigstore transparency entry: 161818587
- Sigstore integration time:
- Permalink:
Tiendil/brigid@feede492576b74018d2f1277a8a80f81dbbb4aa7
- Branch / Tag:
refs/heads/main
- Owner: https://github.com/Tiendil
- Access:
public
- Token Issuer:
https://token.actions.githubusercontent.com
- Runner Environment:
github-hosted
- Publication workflow:
release.yml@feede492576b74018d2f1277a8a80f81dbbb4aa7
- Trigger Event:
workflow_dispatch
- Statement type:
File details
Details for the file brigid-0.12.1-py3-none-any.whl
.
File metadata
- Download URL: brigid-0.12.1-py3-none-any.whl
- Upload date:
- Size: 87.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.0.1 CPython/3.12.8
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ecc89da996fe8b002ee43b88f5f05cb43f38c7271450022dd5c5ed4eb5444b9e |
|
MD5 | 1cf2f4c09064392f624b5678a288eabf |
|
BLAKE2b-256 | 1b79a257a1f20b3a14f60757adfe2e352cd1effc3660d03fc5401e331920645e |
Provenance
The following attestation bundles were made for brigid-0.12.1-py3-none-any.whl
:
Publisher:
release.yml
on Tiendil/brigid
-
Statement:
- Statement type:
https://in-toto.io/Statement/v1
- Predicate type:
https://docs.pypi.org/attestations/publish/v1
- Subject name:
brigid-0.12.1-py3-none-any.whl
- Subject digest:
ecc89da996fe8b002ee43b88f5f05cb43f38c7271450022dd5c5ed4eb5444b9e
- Sigstore transparency entry: 161818589
- Sigstore integration time:
- Permalink:
Tiendil/brigid@feede492576b74018d2f1277a8a80f81dbbb4aa7
- Branch / Tag:
refs/heads/main
- Owner: https://github.com/Tiendil
- Access:
public
- Token Issuer:
https://token.actions.githubusercontent.com
- Runner Environment:
github-hosted
- Publication workflow:
release.yml@feede492576b74018d2f1277a8a80f81dbbb4aa7
- Trigger Event:
workflow_dispatch
- Statement type: