brigid


Namebrigid JSON
Version 0.12.1 PyPI version JSON
download
home_pageNone
SummaryStatic site generator.
upload_time2025-01-12 16:16:01
maintainerNone
docs_urlNone
authorAliaksei Yaletski (Tiendil)
requires_python<4.0,>=3.12
licenseBSD-3-Clause
keywords blog blog-engine site markdown cms content management system personal site
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Brigid

A simple blog engine—but not simpler than it should be.

## **Demo**

- My blog: [tiendil.org](https://tiendil.org/) — see it in action with all features.
- Sources of the blog: [tiendil-org-content](https://github.com/Tiendil/tiendil-org-content) — see how the content is organized.

Or run the project from the root of this repository:

```bash
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` and `best`.
- 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:

```bash
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:

```bash
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.


            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "brigid",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.12",
    "maintainer_email": null,
    "keywords": "blog, blog-engine, site, markdown, cms, content management system, personal site",
    "author": "Aliaksei Yaletski (Tiendil)",
    "author_email": "a.eletsky@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/0a/0d/9b26c4d0c6b1142d87905f23152327e589b0b40e5579ed8aece643d17d58/brigid-0.12.1.tar.gz",
    "platform": null,
    "description": "# Brigid\n\nA simple blog engine\u2014but not simpler than it should be.\n\n## **Demo**\n\n- My blog: [tiendil.org](https://tiendil.org/) \u2014 see it in action with all features.\n- Sources of the blog: [tiendil-org-content](https://github.com/Tiendil/tiendil-org-content) \u2014 see how the content is organized.\n\nOr run the project from the root of this repository:\n\n```bash\npoetry install\n\n./bin/dev-server.sh\n```\n\n## Features\n\n- **Monolithic design** \u2014 install and run. No need to look for plugins or themes.\n- **Extensive tag support** for navigating and organizing content.\n- **Markdown as a source code** for posts.\n- **Multi-language support** by design.\n\n### Extensive tag support\n\n- Powerful tag filtering for posts. Especially useful if your blog is also your knowledge base.\n- Similar post suggestions based on common tags & links (configurable).\n- Post collections: for instance, if you want an always-up-to-date list of posts tagged `travels` and `best`.\n- Post series: for example, if you want a dedicated set of posts marked by a special tag like `my-cool-experiments-with-chatgpt`.\n- Prev/Next post navigation for series of posts.\n\n### Markdown as a source\n\n- Every page is a Markdown file.\n- Each Markdown file has a TOML frontmatter with metadata.\n- In addition to standard Markdown features, Brigid supports custom blocks:\n    - Lists of posts in a collection.\n    - Contents of a post series.\n    - Image / gallery.\n    - YouTube video.\n    - Spoilers / details.\n    - Info blocks (admonitions).\n    - Tables.\n    - Including content from other files (snippets).\n\n### Multi-language support\n\n- Cross-linking between posts/pages in different languages.\n- SEO support for multi-language content.\n- Configurable translations.\n- Configurable per-language site menu.\n- Auto-detect language by headers and redirect users to the right entry point, e.g. `my-cool-blog.org` -> `my-cool-blog.org/<language>/`\n- 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).\n\n### Other features\n\n- Mobile-friendly.\n- SEO-friendly.\n- No default cookies.\n- Custom headers/footers with JS code.\n- Last posts block on the post page.\n- Configurable redirects on the content side\u2014no need to inject them in your reverse proxy configs.\n\n## How to run\n\nSet environment variables:\n\n```bash\nBRIGID_ENVIRONMENT=\"prod\"\n\n# Path to your content directory.\n# You can find examples here:\n# - ./test-content\n# - https://github.com/Tiendil/tiendil-org-content/tree/main/content\nBRIGID_LIBRARY_DIRECTORY=\"<path-to-your-content-dir>\"\n\n# Optional: Brigid will store files here for your reverse proxy to serve.\nBRIGID_API_CACHE_DIRECTORY=\"<path-to-your-cache-dir>\"\n\n# Python list of allowed origins for CORS:\nBRIGID_ORIGINS=\"[\\\"https://my-site.org\\\"]\"\n\n```\n\nInstall and run the server:\n\n```bash\npip install brigid uvicorn\n\nuvicorn brigid.application.application:app \\\n    --host 0.0.0.0 \\\n    --port 8000 \\\n    --workers 4\n```\n\nThat\u2019s it! You\u2019ll have a server running on port 8000.\n\nConsider the following for production deployment:\n\n- Process Management: Use a process manager like systemd, supervisord, or Docker to ensure reliable, long-term operation.\n- Reverse Proxy: Set up a reverse proxy such as Nginx or Caddy to enhance performance and security.\n\n### Design principles\n\nA subjective list of design principles I follow in this project:\n\n- One solid, stable, simple, up-to-date solution. Just install and run.\n- Markdown won \u21d2 use Markdown as the primary source for posts.\n- TOML won \u21d2 use TOML for metadata and frontmatter instead of YAML.\n- No unnecessary or unused features.\n- Designed for non-trivial posts: long, multi-language, with images, tables, code, etc.\n- Server-side rendering is good \u2014 use it as the primary approach.\n- Use minimal JS only when truly required.\n- No CSS experiments\u2014only stable, verified solutions.\n\n",
    "bugtrack_url": null,
    "license": "BSD-3-Clause",
    "summary": "Static site generator.",
    "version": "0.12.1",
    "project_urls": {
        "Repository": "https://github.com/Tiendil/brigid"
    },
    "split_keywords": [
        "blog",
        " blog-engine",
        " site",
        " markdown",
        " cms",
        " content management system",
        " personal site"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "1b79a257a1f20b3a14f60757adfe2e352cd1effc3660d03fc5401e331920645e",
                "md5": "1cf2f4c09064392f624b5678a288eabf",
                "sha256": "ecc89da996fe8b002ee43b88f5f05cb43f38c7271450022dd5c5ed4eb5444b9e"
            },
            "downloads": -1,
            "filename": "brigid-0.12.1-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "1cf2f4c09064392f624b5678a288eabf",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.12",
            "size": 87093,
            "upload_time": "2025-01-12T16:15:57",
            "upload_time_iso_8601": "2025-01-12T16:15:57.123010Z",
            "url": "https://files.pythonhosted.org/packages/1b/79/a257a1f20b3a14f60757adfe2e352cd1effc3660d03fc5401e331920645e/brigid-0.12.1-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "0a0d9b26c4d0c6b1142d87905f23152327e589b0b40e5579ed8aece643d17d58",
                "md5": "0c489e2b0dcba309ce31b2f0f750a790",
                "sha256": "9ef6ecf1b5a1ac7164efcf5c7f1f775289447e6a769940d1c766e93d5e54efc0"
            },
            "downloads": -1,
            "filename": "brigid-0.12.1.tar.gz",
            "has_sig": false,
            "md5_digest": "0c489e2b0dcba309ce31b2f0f750a790",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.12",
            "size": 56983,
            "upload_time": "2025-01-12T16:16:01",
            "upload_time_iso_8601": "2025-01-12T16:16:01.692070Z",
            "url": "https://files.pythonhosted.org/packages/0a/0d/9b26c4d0c6b1142d87905f23152327e589b0b40e5579ed8aece643d17d58/brigid-0.12.1.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-01-12 16:16:01",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Tiendil",
    "github_project": "brigid",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "brigid"
}
        
Elapsed time: 0.40197s