HugoBlog

cogito — Hugo Blog Template

By ethanjb

cogito is a Hugo personal blog theme forked from the cactus theme, under the MIT license, with site configuration to adjust color schemes, navigation, homepage, and post display.

Explore the design

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

1 previews
Author preview
Author-provided preview

Preview provided in the project README.

One original preview is available. Open the full image to inspect the design.

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-11View source

What stands out

A quick read of the recorded project description.

01

A Hugo personal blog theme forked from the cactus theme, with the author continuing to diverge from the original

02

Switch between four color themes—dark, light, white, classic—via site configuration

03

Supports custom CSS, main menu, homepage description, main content area title, and control over the number of homepage posts

04

Project list reads yaml, toml, or json data files from the data directory; not displayed if no data file exists

05

Comments are disabled by default and only disqus is supported; RSS, MathJax, related posts, and code highlighting must be enabled or adjusted in configuration

Template Details

cogito is a Hugo theme for personal blogs, maintained by ethanjb, forked from @monkeyWzr's cactus theme. The author states in the README that because they were not fully satisfied with the original cactus theme, they forked and maintained it themselves, and notes that over time the theme will diverge more and more from the original. The repository README also indicates that some work is still in progress, and specific progress should be checked in the issues.

The theme is customized through the Hugo site configuration file (e.g., config.toml), allowing settings for colortheme (dark, light, white, classic), custom CSS, main menu, homepage description, main content area (mainSection and mainSectionTitle), number of homepage posts or displaying all, tag overview, in-post table of contents, project list, and social links. The project list reads yaml, toml, or json data files from the data directory; if no data file is detected, that section is not displayed.

In terms of features, comments are disabled by default; when enabled, only disqus is supported, and can be controlled in site configuration or post front matter; RSS is not generated by default and must be enabled in params; MathJax supports site-level and post-level toggles; code highlighting uses Hugo's built-in syntax highlighting configuration; analytics uses Hugo's built-in analytics template, configurable with a Google Analytics tracking ID; related posts use Hugo's related content configuration. Post archives can be paginated, or pagination can be disabled to display all posts in chronological order.

Installation involves cloning the repository into the themes directory of a Hugo site, setting theme = "cogito" in the site configuration, previewing locally with hugo server, and then choosing a deployment method according to Hugo's documentation. The example configuration listed in the README comes from exampleSite/config.toml.

HugoBlog

Is it right for your project?

Use Cases

  • Building a personal blog with Hugo and wanting to adjust the number of homepage posts, tag overview, and in-post table of contents
  • Displaying a personal project list on the blog and maintaining project entries via data files
  • Enabling MathJax formulas, disqus comments, or RSS subscription for posts

Suitable For

  • Personal blog authors using Hugo who want to start from a forked version of the cactus theme
  • Users who need to adjust color schemes, navigation, and homepage display via site configuration
  • Users who accept that some features are still under development and are willing to check issues for progress

Getting started & customization

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

  1. 1

    Clone the repository into the themes directory of a Hugo site and set theme = "cogito" in the site configuration

  2. 2

    Complete site configuration by referring to the Config section of the README or exampleSite/config.toml

  3. 3

    Preview locally with hugo server; choose a deployment method according to Hugo's official Hosting & Deployment documentation

  4. 4

    Comments only support disqus; you need to register and configure a disqus shortname; RSS and MathJax are disabled by default and must be enabled in params

  5. 5

    Third-party assets such as demo images, fonts, and icons must be checked against their respective licenses; do not judge solely based on the code's MIT license

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 applies to that version's code 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

  • Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; do not judge solely based on the code's MIT license.
  • External services such as domain, hosting, database, payment, or AI may incur additional charges.
  • Comments are disabled by default and must be manually enabled in the site configuration.
  • Comments currently only support disqus; other comment engines are not available.
  • Before using disqus comments, you need to register and obtain a disqus shortname, which is an external service account requirement.
  • RSS feeds are not generated by default and must be enabled in the site configuration.
  • MathJax formula support must be manually enabled in the site configuration; it is disabled by default.
  • Using analytics requires configuring a Google Analytics tracking ID yourself, which involves an external service.
  • Some features are still under development and not yet complete; check issues for progress.
View Original Text Basis

Permission is hereby granted, free of charge

Original License Text

Comments is disabled by default. Enable comments in your `.Site.Params`.

Original README

**By now only disqus is supported in cogito.**

Original README

Before using disqus, you need to register and get your [disqus shortname](https://help.disqus.com/en/articles/1717111-what-s-a-shortname).

Original README

The rss feed is not generated by default. you can enable it in your site config:

Original README

Cactus supports mathjax. Just add `mathjax` option in your site config:

Original README

Set you tracking id in your site config.

Original README

Some works are still in progress. See the issues to see whats comming.

Original README
https://github.com/ethanjb/cogito/blob/master/LICENSEhttps://github.com/ethanjb/cogito/blob/master/README.md

Compiled by DeepSeek based on repository license and README ·2026-10-11. 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
GitHub
Documentation and maintenance reference score
Less documented · 53 / 100
Technologies
Hugo
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
2021-09-29
Screenshot last checked
2026-10-11

No demo link is recorded. Use the repository instructions to evaluate the project locally; the screenshot alone cannot establish interactive behavior.

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.

Review declaration: [email protected] · 2026-10-13

Inspect the recorded source material

SHA-256: adc3b49fe47c7ce51b40456caad950ac48ce579f3d090fde94641e2bbc729017

2026-10-11T21:32:54.070Z

Source file / repository
![](images/name.png)
A hackable hugo theme for personal blog. Forked from [cactus](https://github.com/monkeyWzr/hugo-theme-cactus) created by [@monkeyWzr](https://github.com/monkeyWzr).

[Live demo on github pages](https://slashformotion.github.io/cogito).

Some works are still in progress. See the issues to see whats comming. 

## Why this theme ? 

I am not satisfied with original [cactus](https://github.com/monkeyWzr/hugo-theme-cactus) created by [@monkeyWzr](https://github.com/monkeyWzr). Check the original one out, it's may fit your requirements. This is not my case, I prefer to make my own fork.

***Be aware: with time, this theme will differ more and more from the original.***
## Install

1. Clone cogito to your hugo site's `themes` folder.
```
git clone https://github.com/slashformotion/cogito themes/cogito
```

2. Change your theme to cogito in your site config
```toml
# config.toml

theme = "cogito"
```

3. config your site. See [Config] or a [complete config sample](exampleSite/config.toml)
4. test your site

```
hugo server
```

5. publish your site in your prefered way. See hugo's doc: [Hosting & Deployment](https://gohugo.io/hosting-and-deployment/)

## Config

### Color themes

```toml
[params]

  colortheme = "white" # dark, light, white, or classic
```

### Custom CSS

```toml
[params]
  css = ["css/custom.css"]
```

You can add multiple custom stylesheets which will be loaded after the main theme css.
For example, the above line will load the CSS-file placed at `/static/css/custom.css`.

### Navigation

```toml
# Main menu which appears below site header.
[[menu.main]]
name = "Home"
url = "/"
weight = 1

[[menu.main]]
name = "All posts"
url = "/posts"
weight = 2

[[menu.main]]
name = "Tags"
url = "/tags"
weight = 3

[[menu.main]]
name = "About"
url = "/about"
weight = 4
```

### Homepage settings

* description: description will be displayed in the homepage. Markdown syntax is supported in the description string.
```toml
[params]

  description = "Hugo is a general-purpose website framework. Technically speaking, Hugo is a static site generator. Unlike systems that dynamically build a page with each visitor request, Hugo builds pages when you create or update your content. Since websites are viewed far more often than they are edited, Hugo is designed to provide an optimal viewing experience for your website’s end users and an ideal writing experience for website authors."
```

* set your main section (used as the link for the "writings" title on the homepage)

```toml
[params]
  mainSection = "posts"
```

* change the default main section title from Writings, to something else:

```toml
[params]
  mainSectionTitle = "Blog"
```

* Show only the 5 most recent posts (default)

```toml
[params]
  showAllPostsOnHomePage = false
  postsOnHomePage = 5
```
* show all posts

```toml
[params]
  showAllPostsOnHomePage = true
  postsOnHomePage = 5 # this option will be ignored
```

* show tagsoverview (default) or not
* 
```toml
[params]
  tagsOverview = true
```

* display the table of contents inline on blog posts, rather than as part of the navigation menu:

```toml
[params]
  tocInline = true
```

* show projects list (default) or not.

```toml
[params]
  showProjectsList = true
  projectsUrl = "https://github.com/monkeyWzr"
```

Projects section will not be shown if no data file is detected. See [Projects list](#projects-list) below.

### Projects list

Create your projects data file `data/projects.yaml|toml|json`. Hugo support yaml, toml and json formats.
for former hexo cactus users: please assign your json array to a `list` key.

for example, `data/projects.json`:
```json
{
   "list": [
      {
         "name":"Hexo",
         "url":"https://hexo.io/",
         "desc":"A fast, simple & powerful blog framework"
      },
      {
         "name":"Font Awesome",
         "url":"http://fontawesome.io/",
         "desc":"The iconic font and CSS toolkit"
      }
   ]
}
```

### Social media links

```toml
[[params.social]]
  name = "github"
  link = "https://github.com/monkeyWzr"

[[params.social]]
  name = "email"
  link = "[email protected]" # no need for "mailto:" at the start

[[params.social]]
  name = "linkedin"
  link = "https://www.linkedin.com/in/monkeywzr/"
```

The `name` key expects the name of a [Font Awesome icon](https://fontawesome.com/icons?d=gallery&s=brands).

### Copyright

Assign your copy right to `.Site.Copyright`. Cactus will append current year to the head.

TODO: Customizable copyright year

```toml
copyright = "Zeran Wu" # cogito theme will use site title if copyright is not set
```

### Comments

Comments is disabled by default. Enable comments in your `.Site.Params`.
```toml
[params]
  [params.comments]
    enabled = true
    # engine = "disqus" # in progress
```

You can also enable/disable comments per post. in your posts' front matter, add:
```yaml
comments: true
```

The site config is ignored when `comments` option exists in front matter.

The default engine is disqus. **By now only disqus is supported in cogito.** I will add more options sooner or later. See [Comments Alternatives](https://gohugo.io/content-management/comments/#comments-alternatives)

Before using disqus, you need to register and get your [disqus shortname](https://help.disqus.com/en/articles/1717111-what-s-a-shortname). Assign your shortname in `.Site.disqusShortname`, or cogito will use `.Site.Title` by default.

```
disqusShortname = "wzr" # cogito will use site title if not set
```

### highlight

Use hugo's built-in [syntax highlighting](https://gohugo.io/getting-started/configuration-markup#highlight).

default config:

```toml
[markup]
  [markup.highlight]
    codeFences = true
    guessSyntax = false
    hl_Lines = ""
    lineNoStart = 1
    lineNos = false
    lineNumbersInTable = true
    noClasses = true
    style = "monokai"
    tabWidth = 4
```

### Analytics

Cactus uses hugo's built in analytics templates. Check [the official Hugo docs](https://gohugo.io/templates/internal#google-analytics) for details.

Set you tracking id in your site config.
```toml
googleAnalytics = "UA-XXXXXXXX-XX" # or G-XXXXXXXX if you are using Google Analytics v4 (gtag.js)
```

If you are using Google Analytics v3 (analytics.js), you can switch to asynchronous tracking by set `params.googleAnalyticsAsync` to `true`.
```toml
[params]
googleAnalyticsAsync = true # not required
```

### Related content

Cactus supports hugo's automatic related content. You can enable it in your site config:

```toml
[related]
  includeNewer = true
  threshold = 10
  toLower = true
  [[related.indices]]
    name = "keywords"
    weight = 80
  [[related.indices]]
    name = "title"
    weight = 80
  [[related.indices]]
    name = "tags"
    weight = 100
  [[related.indices]]
    name = "date"
    weight = 60
	pattern = "2006"
```

Please also check [Related Content](https://gohugo.io/content-management/related/) & [Better Relationships in Hugo with Hugo's Related Content](https://www.regisphilibert.com/blog/2018/04/hugo-optmized-relashionships-with-related-content/).

### RSS

The rss feed is not generated by default. you can enable it in your site config:

```toml
[params]
  rss = true
```

The rss link will be `https://example.com/index.xml` assuming your `baseURL` is set to `https://example.com/`

Please also check [Configure RSS](https://gohugo.io/templates/rss/#configure-rss)

### Mathjax

Cactus supports mathjax. Just add `mathjax` option in your site config:
```toml
[params]
  mathjax = true  # not required
```

You can also enable/disable mathjax per post. In your posts' front matter, add:
```toml
mathjax = true # or false
```

The site config will be ignored when `mathjax` option exists in front matter.

### Archive 
Pagination on posts archive can be disabled to show all posts in chronological order

```toml
[params]
  showAllPostsArchive = true # or false (default)
```

## License

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.