HugoHTMLBlog

bootstrap-bp-hugo-theme — Hugo Blog Template

By spech66

A Bootstrap-based Hugo blog theme offering out-of-the-box configuration for color themes, SEO metadata, automatic image scaling and WebP conversion, and multilingual support.

Explore the design

Compare the page layouts and mobile experience. Open any screenshot for a closer look.

2 previews
Desktop homepage1 / 2
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 2

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-03View source

What stands out

A quick read of the recorded project description.

01

Provides multiple color themes including dark, light, blue, and Bootstrap default

02

Featured images are automatically scaled and converted to WebP, and used for Open Graph and Twitter Cards

03

Supports Schema.org structured data, including Event-type pages

04

Does not load the full Bootstrap JavaScript bundle by default, retaining only a small navigation script

05

Supports multilingual and i18n, with social icons output as inline SVG

06

Bootstrap components are compiled on demand; Modal, Carousel, etc. can be enabled by overriding import files

Template Details

This is a Hugo blog theme built on Bootstrap, with the repository under the MIT license. The theme is organized around Hugo's templating and configuration mechanisms, primarily aimed at personal blogs, article lists, and content-oriented sites. It provides multiple color themes (dark, light, blue, or Bootstrap default) and supports adjusting behaviors such as start page columns, date format, list grouping, summary display, menu expansion, and reading time display via params in config.toml.

For content presentation, the theme supports page archetypes including Page, Post, Audio, Video, Quote, and Link. Cards display categories, dates, reading time, and tags, and accent colors can be adjusted via custom CSS variables. For images, the theme uses Hugo's feature/cover naming convention to set featured images, automatically scales and converts them to WebP, and uses them for Open Graph and Twitter Cards. The theme also provides an img-post shortcode for floating images within content.

For SEO and structured data, the theme supports Schema.org, Open Graph, and metadata. Schema.org can be enabled after configuring the author; pages with front matter such as datum generate Event structured data. The theme includes two menus, main and footer. Social icons are output as inline SVG, with icon data stored in data/bpicons.json and extensible by the user.

For performance and resource control, the theme does not load the full Bootstrap JavaScript bundle by default, retaining only a navigation script of about 1 KB. Bootstrap components are compiled on demand; Modal, Carousel, Tooltip, etc. are not included by default. To use them, copy and uncomment the corresponding imports in the site and enable bootstrapJS. Custom CSS/JS can be merged and minified into a single file, or included separately via configuration or page metadata. The theme supports multilingual and i18n, and removes Hugo's native Google Analytics template.

HugoHTMLBlog

Is it right for your project?

Use Cases

  • Building a personal blog centered on article lists and card displays
  • Content sites that need automatic featured image processing and WebP output
  • Sites that want to configure Open Graph, Twitter Cards, and Schema.org metadata for articles
  • Hugo projects that need multilingual support and custom menus and social icons

Suitable For

  • Developers building blogs with Hugo who want to customize based on Bootstrap
  • Sites that need out-of-the-box SEO metadata and structured data configuration
  • Users who want to adjust layout and display behavior via config.toml parameters
  • Projects that need to include Bootstrap components on demand to control page resources

Getting started & customization

Use these recorded setup notes alongside the repository instructions for your chosen version.

  1. 1

    Create a themes folder in the Hugo site directory and clone the theme repository into it via git clone.

  2. 2

    Configure site parameters based on the config.toml in exampleSite, such as startPageColumns, themeColor, showPostSummary, etc.

  3. 3

    To use Bootstrap components such as Modal and Carousel, copy the theme's assets/sass/_bootstrap-imports.scss to the site and uncomment the corresponding lines, and set bootstrapJS = true.

  4. 4

    Custom styles can be written to assets/css/custom.css and scripts to assets/js/custom.js; the theme will merge and minify them with the theme files.

  5. 5

    The theme has removed Hugo's native Google Analytics template; if analytics are needed, integrate them separately.

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This entry covers the free version under the MIT license in the public repository; the free scope is the code of this version and does not imply that external services or third-party assets are free.

Must comply with when using

  • Free use, modification, commercial use, and distribution of this version's code are permitted.
  • When distributing copies or substantial portions of the code, retain the original author's copyright notice and the full MIT license notice.
  • The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.

Additional costs & items to verify

  • The theme has removed Hugo's native Google Analytics template; if website analytics are needed, a third-party analytics service must be integrated separately, which may involve external accounts or costs.
  • When using Bootstrap components that require JavaScript, such as Modal, Carousel, and Tooltip, bootstrapJS = true must be set additionally for the corresponding scripts to load.
  • The theme no longer includes Font Awesome and does not load the full Bootstrap JavaScript bundle by default; if these features are needed, they must be included separately via csscdn or bootstrapJS configuration.
  • The icon glyphs in the theme come from Font Awesome Free 5 under the CC BY 4.0 license, which differs from the theme code's MIT license; attribution and other conditions must be observed when using them.
  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses and cannot be judged solely by the code's MIT license.
  • External services such as domains, hosting, databases, payments, or AI may incur additional charges.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

The native Hugo Google Analytics template has been removed!

Original README

Components that need JavaScript also require `bootstrapJS = true`.

Original README

Font Awesome is no longer part of the theme and the Bootstrap JavaScript bundle is no longer loaded by default.

Original README

The icons are stored in `data/bpicons.json` (glyphs from [Font Awesome Free 5](https://fontawesome.com/license/free), CC BY 4.0).

Original README
https://github.com/spech66/bootstrap-bp-hugo-theme/blob/master/LICENSEhttps://github.com/spech66/bootstrap-bp-hugo-theme/blob/master/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-03. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.

Project checks & description sources

Template Information

Source platforms
Hugo Themes
Documentation and maintenance reference score
More documented · 92 / 100
Technologies
Hugo · HTML
Website type
Blog
How this score is calculated

Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.

What to verify for this project

Repository update recorded
2026-10-03
Screenshot last checked
2026-10-03

A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.

The catalog identifies Hugo as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.

Use a selection guide →

How this description was prepared

AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.

Automatically checked against source and license rules; no manual editorial review.

Inspect the recorded source material

SHA-256: 378aa5b790706d77f5ad99d77e466531089bdadb6293ac6e4555c76e6cac554b

2026-10-03T07:55:37.053Z

Source file / repository

# Bootstrap-BP hugo theme

[Bootstrap v5](https://getbootstrap.com/) based Hugo theme which provides out of the box best practices like performance and SEO readiness. Featured images will be resized automatically. This is based on the [Hugo docs](https://gohugo.io/templates/homepage/), [hugo-best-practices](https://github.com/spech66/hugo-best-practices), [Front-End Checklist](https://github.com/thedaviddias/Front-End-Checklist) and the [Front-End Performance Checklist](https://github.com/thedaviddias/Front-End-Performance-Checklist). Contains four different color themes.

Other themes by Sebastian Pech: [Bootstrap-BP](https://github.com/spech66/bootstrap-bp-hugo-theme), [Materialize-BP](https://github.com/spech66/materialize-bp-hugo-theme),
[Bootstrap-BP hugo startpage](https://github.com/spech66/bootstrap-bp-hugo-startpage).

## Table of contents

<!-- START doctoc generated TOC please keep comment here to allow auto update -->
<!-- DON'T EDIT THIS SECTION, INSTEAD RE-RUN doctoc TO UPDATE -->


- [Bootstrap-BP hugo theme](#bootstrap-bp-hugo-theme)
  - [Table of contents](#table-of-contents)
  - [Features](#features)
  - [Install the theme](#install-the-theme)
  - [Update the theme](#update-the-theme)
  - [Run example site](#run-example-site)
  - [Configuration and theme specific settings](#configuration-and-theme-specific-settings)
  - [Screenshots of configurations](#screenshots-of-configurations)
  - [Google Analytics](#google-analytics)
  - [Page templates / archetypes](#page-templates--archetypes)
  - [Schema.org support](#schemaorg-support)
  - [Images, Open Graph and Twitter Cards](#images-open-graph-and-twitter-cards)
  - [Menus](#menus)
  - [Social Icons](#social-icons)
  - [Icons](#icons)
  - [Custom CSS/JS](#custom-cssjs)
  - [Post cards](#post-cards)
  - [Floating images](#floating-images)
  - [Performance: Bootstrap parts, JavaScript and Font Awesome](#performance-bootstrap-parts-javascript-and-font-awesome)

<!-- END doctoc generated TOC please keep comment here to allow auto update -->

## Features

- Color themes
- SEO best practices supported (Schema.org, open graph, meta information, ...)
- Automatically resizing of images and conversion to WebP (partial `image-webp.html`, used by cards, `optfigure` and `featurette-image`)
- One minified file per resource only (js, css)
- CDN font support (Google Fonts, ...)
- Optional masonry-like mode for startpage
- Settings for easy customization of layouts and features
- Multiple page templates / archetypes supported
- Icons for Social Media as inline SVG (no icon font)
- No Bootstrap JavaScript bundle by default (~1 KB navigation script)
- Custom css/js
- Floating images in posts (shortcode `img-post`)
- Multilingual and i18n support
- ...

## Install the theme

With Git installed, run the following commands inside the Hugo site folder. If Hugo has not yet been installed, read the setup guide [here](https://gohugo.io/getting-started/quick-start/).

```sh
mkdir themes
cd themes
git clone https://github.com/spech66/bootstrap-bp-hugo-theme.git
```

You can get a zip of the latest version of the theme from the [home page](https://github.com/spech66/bootstrap-bp-hugo-theme) and extract it to the themes folder.

## Update the theme

Go to the themes folder as in the installation and run the following command.

```sh
git pull
```

## Run example site

Go to the `exampleSite` folder from the theme `themes/bootstrap-bp-hugo-theme/exampleSite` and run the following command.

```sh
hugo server --themesDir ../..
```

## Configuration and theme specific settings

Most settings should be done with hugo specific variables. There are only a few (optional) additional `[params]`.
Use the `config.toml` from the `exampleSite` subdirectory as base.

- `startPageColumns = true` will show the start page in a Masonry-like mode.
- `customDateFormat = "02.01.2006"` to override the date format.
- `showListsGrouped = true` to add headers for every year.
- `showPostSummary = true` to only show a summary on index and lists.
- `alwaysExpandMenu = true` to expand the menu on non-mobile devices otherwise the mobile button is shown on all devices.
- `themeColor` set to dark, light, blue (do not set for bootstrap default).
- `hideReadingTime` to hide reading time.
- `bootstrapJS = true` to load the full Bootstrap JavaScript bundle (modals, tooltips, carousels, ...). Default: only a small navigation script.

## Screenshots of configurations

`startPageColumns = false`

![startPageColumns = false](https://raw.githubusercontent.com/spech66/bootstrap-bp-hugo-theme/master/images/tn.png)

`startPageColumns = true`

![startPageColumns = true](https://raw.githubusercontent.com/spech66/bootstrap-bp-hugo-theme/master/images/tn2.png)

## Google Analytics

The native Hugo Google Analytics template has been removed!

## Page templates / archetypes

This theme has support for the following archetypes. Based on the specified types the layout and functionality of a page is slightly changed.

- Page (not on the startpage)
- Post (regular post/blog pages)
- Audio (shows spotify in the header)
- Video (shows youtube in the header)
- Quote (highlights a quote and the author)
- Link (show a link with the page title)

## Schema.org support

Provide one author to enable the Schema.org support.

```yaml
[params.author]  
  name = "Sebastian Pech"
```

Pages with a `datum` in the front matter (courses, workshops, events) get an `Event` schema. Used parameters: `datum`, `enddatum` or `termine` (list with `end`), `ort`, `adresse`, `preis` ("kostenlos"/"Spende" becomes 0), `image` and `anmeldung_ab`. The offer's `validFrom` is taken from `anmeldung_ab`, then the page date, then a `YYYY-MM` prefix of the content folder name, otherwise the event start.

## Images, Open Graph and Twitter Cards

This theme uses Hugos `feature/cover` name method to set the optimized feature image. The image named `*feature*` or `*cover*` is used for the posts featured image and get resized. This will also be in the Twitter Cards and Open Graph block.

The header image is automatically added if there is a file called `*feature*` or `*cover*`. The first wildcard is preferred over the second one. If there are multiple images the first one is used.

```yaml
# Site Config toml
title = "My hugo site"

[params]
  description = "Text about the site"

# Post yaml
---
title: "{{ replace .Name "-" " " }}"
date: {{ .Date }}
publishdate: {{ now.Format "2006-01-02" }}
lastmod: {{ now.Format "2006-01-02" }}
draft: true
description: "Text about this post"
tags:
    - "tag 1"
---
```

## Menus

There are two menus in the theme. `main` and `footer`. Specify the entries in the config or the header of the content. `params.icon` shows an icon from `data/bpicons.json` in front of the name (see [Icons](#icons)).

```yaml
[menu]

  [[menu.main]]
    identifier = "about"
    name = "About"
    url = "/about/"
    weight = 10
    [menu.main.params]
      icon = "newspaper"

  [[menu.footer]]
    identifier = "Imprint"
    name = "Imprint"
    url = "/imprint/"
    weight = 10

  [[menu.footer]]
    identifier = "categories"
    name = "Categories"
    url = "/categories/"
    weight = 20

  [[menu.footer]]
    identifier = "tags"
    name = "Tags"
    url = "/tags/"
    weight = 30
```

```yaml
---
[...]
menu = "main"
---
```

## Social Icons

Icons for Social Media. Add the block to the config.

```yaml
# Sets Social Media icons to appear and link to your account. Value should be your
# username unless otherwise noted.
# Code from https://themes.gohugo.io/future-imperfect/ theme
[params.social]
  # Coding Communities
  github           = ""
  gitlab           = ""
  stackoverflow    = "" # User Number
  bitbucket        = ""
  jsfiddle         = ""
  codepen          = ""
  # Visual Art Communities
  deviantart       = ""
  flickr           = ""
  behance          = ""
  dribbble         = ""
  # Publishing Communities
  wordpress        = ""
  medium           = ""
  # Professional/Business Oriented Communities
  linkedin         = ""
  linkedin_company = ""
  foursquare       = ""
  xing             = ""
  slideshare       = ""
  # Social Networks
  facebook         = ""
  googleplus       = ""
  reddit           = ""
  quora            = ""
  youtube          = ""
  vimeo            = ""
  whatsapp         = "" # WhatsApp Number
  instagram        = ""
  tiktok           = "" # @username
  tumblr           = ""
  twitter          = ""
  skype            = ""
  snapchat         = ""
  pinterest        = ""
  telegram         = ""
  discord          = "" # invite link
  # Email
  email            = ""
```

## Icons

All icons of the theme are inline SVGs rendered by the `icon.html` partial. Only the icons a page actually uses end up in its HTML, no icon font is downloaded.

```go-html-template
{{ partial "icon.html" "clock" }}
{{ partial "icon.html" (dict "name" "github" "class" "icon-2x") }}
```

The icons are stored in `data/bpicons.json` (glyphs from [Font Awesome Free 5](https://fontawesome.com/license/free), CC BY 4.0). To add your own icon, create `data/bpicons.json` in your site with an entry `"name": {"w": <width>, "d": "<path>"}`. The path uses font units (512 units high, baseline at 0, like the Font Awesome 5 SVG fonts).

## Custom CSS/JS

The theme provides two ways for custom css/js. The first way is writing your styles to `/assets/css/custom.css` and scripts to `/assets/js/custom.js`. This will merge and minify the styles/scripts with the theme specific files resulting in only one file for the whole website.

The second way is using the Site configuration or the post metadata to target specific files in the `/assets/` folder. This will result in one import line per script/style.

```toml
[params]
  js=["/js/test_site.js"]
  jscdn=["https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js"]
  css=["/css/test_site.css"]
  csscdn=["https://fonts.googleapis.com/css?family=Roboto&display=swap"]
```

```yaml
---
js:
    - /js/test.js
jscdn:
    - https://cdn.jsdelivr.net/npm/[email protected]/dist/vue.js
css:
    - /css/test.css
csscdn:
    - https://fonts.googleapis.com/css?family=Roboto:100,300,400,500,700,900
---
```

## Post cards

Cards show the categories as a small line above the title, a meta line (date, reading time; on the full page also last updated and author) and the tags below. Tags that are also a category are skipped, lists show at most three tags. In lists the whole card links to the post and the summary is cut after four lines.

- Accent color of the category line: set `--bp-accent` in your `assets/css/custom.css`, e.g. `:root { --bp-accent: #c2410c; }`. Default is the `$primary` color of the color theme.
- Extra content below the meta line: create `layouts/partials/content_card_body_extra.html` in your site. The theme ships an empty one.
- Reading time label: i18n key `readingTimeShort`.

**Upgrading from older versions:** sites with their own copy of `content_card_body.html` should remove it (or compare it with the new one), otherwise the old meta line and "Read more" link stay.

## Floating images

`img-post` shows a resource of the page (max. 384 px wide, WebP) floating right or left of the text, or centered.

```
{{< img-post file="photo.jpg" alt="Description" type="right" >}}
```

`type` is `right`, `left` or `center` (default). Positional parameters (`path`, `file`, `alt`, `type`) still work, `path` is ignored.

## Performance: Bootstrap parts, JavaScript and Font Awesome

To keep pages small the theme only compiles the Bootstrap components it uses (see `assets/sass/_bootstrap-imports.scss`). Modal, carousel, tooltip, popover, offcanvas, accordion, toasts and a few others are left out.

If you need one of them, copy `assets/sass/_bootstrap-imports.scss` from the theme to `assets/sass/_bootstrap-imports.scss` in your site and uncomment the component. Components that need JavaScript also require `bootstrapJS = true`.

**Upgrading from older versions:** Font Awesome is no longer part of the theme and the Bootstrap JavaScript bundle is no longer loaded by default.

- Bootstrap JavaScript components (modal, tooltip, ...): set `bootstrapJS = true`.
- Menu icons via `pre = "<i class='fas fa-...'></i>"`: replace them with `[menu.main.params] icon = "..."`.
- Font Awesome classes in your content or layouts (`<i class="fas fa-...">`): switch to `{{ partial "icon.html" "name" }}`, or load Font Awesome yourself with the existing `csscdn` parameter:

```toml
[params]
  csscdn = ["https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.15.4/css/all.min.css"]
```
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.