Minimalist black-and-white visual style
hugo-theme-yinyang — Hugo Starter Template
By joway
YinYang is a black-and-white Hugo blog theme that supports multilingual content, Disqus comments, and SEO-related configuration.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Multilingual content directory support
Disqus comment integration
Standalone SEO template partial
Images under assets/images automatically converted to WebP with srcset generation
Configurable extra head, extra CSS, and content inserted before and after posts
Template Details
YinYang is a minimalist black-and-white blog theme for Hugo. The repository is MIT-licensed, and the demo site is blog.joway.io. The theme centers on a black-and-white palette and minimalist typography, making it suitable for personal writing blogs.
In terms of features, the theme provides multilingual support (separate content directories per language via contentDir), Disqus comment integration, and a standalone SEO template partial. Configuration options cover the site title, main content sections (mainSections), footer social links, extra head content, extra CSS files, Twitter Cards, and content inserted at the top and bottom of posts.
There are clear usage constraints: Hugo extended 0.158 or later is required; older versions will error on .Language.Label or .Site.Language.Locale. Images under assets/images/ are converted to WebP and generate srcset, while images under static/ are served as-is. The lazyImage and staticPrefix parameters are no longer needed and will be ignored. Setting params.extraHeadProductionOnly = true skips extraHead during hugo server. Installation is done by adding the repository as a git submodule to themes/yinyang and setting theme = "yinyang" in config.toml.
Is it right for your project?
Use Cases
- Building a personal writing blog
- Running a multilingual blog site
- Static blogs that need Disqus comments
- Blogs that want unified control over additional content at the top and bottom of posts
Suitable For
- Personal bloggers using Hugo
- Writers who prefer minimalist black-and-white typography
- Sites that need multilingual content organization
- Developers who accept managing the theme as a git submodule
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Requires Hugo extended 0.158 or later; older versions will error on .Language.Label / .Site.Language.Locale.
- 2
Run git submodule add https://github.com/joway/hugo-theme-yinyang.git themes/yinyang in the site root, and set theme = "yinyang" in config.toml.
- 3
Images under assets/images/ are converted to WebP and generate srcset; images under static/ remain as-is.
- 4
The lazyImage and staticPrefix parameters are no longer needed and will be ignored if set.
- 5
Setting params.extraHeadProductionOnly = true skips extraHead during hugo server.
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version in the public repository under the MIT license; the free scope applies to this version's code and does not imply that external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercialize, and distribute this version's code for free.
- 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
- Using this theme requires Hugo extended version 0.158 or later; older versions will error at .Language.Label or .Site.Language.Locale and cannot build properly.
- The comment feature depends on the third-party Disqus service; you must register a Disqus account and enter the disqus account name in the configuration. Comment data is hosted by an external service.
- If you need site analytics, you must integrate Google Analytics and enter your own G-XXXXXXXXXX tracking ID, which is an external third-party service.
- The subscription link in the example configuration points to the author's own Mailchimp mailing list; using it directly will direct readers to the original author's subscription service, so it must be replaced with your own link.
- The staticPrefix in the example points to the author's personal CDN repository address; copying it will reference someone else's resources. This parameter is ignored in newer versions.
- The example footer includes images and links pointing to the CC BY-NC-ND 4.0 license, which prohibits commercial use and derivatives; if you retain this example content, note its non-commercial restrictions, and the images come from the author's site.
- Demo images, fonts, icons, and other third-party assets must be checked against their respective licenses; they 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
Hugo **extended** >= 0.158 (older versions fail on `.Language.Label` / `.Site.Language.Locale`).
Original README
[disqus](https://disqus.com) support
Original README
[services.googleAnalytics] id = "" # e.g. G-XXXXXXXXXX
Original README
postFooterContent = "<br/><br/><p>Subscribe:<a target='_blank' href='https://mailchi.mp/a1a0d59e7a19/joway'>Joway's Blog</a></p>"
Original README
staticPrefix = "https://cdn.jsdelivr.net/gh/joway/blog"
Original README
https://github.com/joway/hugo-theme-yinyang/blob/master/LICENSE.mdhttps://github.com/joway/hugo-theme-yinyang/blob/master/README.mdpostFooterContent = '<br/><br/><p>Subscribe:<a target="_blank" href="https://mailchi.mp/a1a0d59e7a19/joway"><b>Mailchimp</b></a></p><br/><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://blog.joway.io/images/cc.png" /></a>'
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-02. 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 · 83 / 100
- Technologies
- Hugo
- Website type
- Starter
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-09-12
- Screenshot last checked
- 2026-10-02
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: 36edd2beb801378b9acac161493be342f41c5e7a5e2155ca543e5037e6534790
2026-10-02T14:55:14.019Z
Source file / repository# YinYang
[YinYang](https://en.wikipedia.org/wiki/Yin_and_yang) is a black-white theme for [Hugo](https://gohugo.io/).
[**Demo**](https://blog.joway.io)
> **Requirements:** Hugo **extended** >= 0.158 (older versions fail on `.Language.Label` / `.Site.Language.Locale`).
> Images under `assets/images/` are converted to WebP with `srcset`; images under `static/` are served unchanged.
> `lazyImage` and `staticPrefix` are no longer needed (native `loading="lazy"` is used) and are ignored.
> Set `params.extraHeadProductionOnly = true` to skip `extraHead` during `hugo server`.
## Feature
- minimalist
- multi-language support
- [disqus](https://disqus.com) support
- [SEO Optimization](https://github.com/joway/hugo-theme-yinyang/blob/master/layouts/partials/seo.html)
## Screenshot

## Installation
From the root of your site:
```shell
git submodule add https://github.com/joway/hugo-theme-yinyang.git themes/yinyang
```
Change `config.toml`:
```toml
theme = "yinyang"
```
## Configuration
### Head Title
```
[params]
headTitle = "Joway Wang"
```
If there is no `headTitle` in params, use `.Site.Params.author.name`.
### Main section
Set your main section:
```
[params]
mainSections = ["posts"]
```
### Multi-Language
```
[languages]
[languages.en]
contentDir = "content/en"
languageName = "English"
weight = 1
[languages.cn]
contentDir = "content/cn"
languageName = "Chinese"
weight = 2
```
Then your posts files should be put into `content/en` or `content/cn`.
### Footer
```
[[params.socials]]
name = "About Me"
link = "https://joway.io"
[[params.socials]]
name = "Github"
link = "https://github.com/joway"
```
### Extra Head
```
[params]
extraHead = '<script src="xxxx.js"></script>'
```
### Extra CSS files
```
[params]
extraCSSFiles = ["css/foo.css", "css/bar.css"]
```
### Twitter Cards
Add the following setting:
```
[params]
twitterCards = true
```
In a post's front matter, include a keyword `images` with a value of a list of
URLs of images that will be used for Twitter Cards.
### Insert content on every post
```
[params]
postHeaderContent = ""
postFooterContent = "<br/><br/><p>Subscribe:<a target='_blank' href='https://mailchi.mp/a1a0d59e7a19/joway'>Joway's Blog</a></p>"
```
### Example
```
# ---------- Site ----------
baseURL = "https://blog.joway.io/"
languageCode = "en-us"
theme = "yinyang"
title = "Random Thoughts"
DefaultContentLanguage = "cn"
canonifyURLs = false
enableRobotsTXT = true
# ---------- Content Language ----------
[languages]
# [languages.en]
# contentDir = "content/en"
# languageName = "English"
# weight = 1
[languages.cn]
contentDir = "content/cn"
languageName = "简体中文"
weight = 2
# ---------- URL ----------
[permalinks]
post = "/blog/:title/"
# ---------- Markdown / Highlight ----------
[markup]
[markup.goldmark]
[markup.goldmark.renderer]
unsafe = true
[markup.highlight]
guessSyntax = true
noClasses = false
style = "tango"
tabWidth = 2
# ---------- Theme Params ----------
[params]
description = "Log something useless, but interesting."
disqus = "joway" # disqus account name
extraHead = ''
favicon = "/logo.png"
headTitle = "Random Thoughts"
mainSections = ["posts"]
postFooterContent = '<br/><br/><p>Subscribe:<a target="_blank" href="https://mailchi.mp/a1a0d59e7a19/joway"><b>Mailchimp</b></a></p><br/><a rel="license" href="http://creativecommons.org/licenses/by-nc-nd/4.0/"><img alt="Creative Commons License" style="border-width:0" src="https://blog.joway.io/images/cc.png" /></a>'
postHeaderContent = ""
staticPrefix = "https://cdn.jsdelivr.net/gh/joway/blog"
# extraBody = '<script>(adsbygoogle = window.adsbygoogle || []).push({});</script>'
# postAds = '<ins class="adsbygoogle" style="display:block" data-ad-client="ca-pub-6400651395935595" data-ad-slot="5705651853" data-ad-format="auto" data-full-width-responsive="true"></ins>'
lazyImage = true
# ---------- Analytics ----------
[services]
[services.googleAnalytics]
id = "" # e.g. G-XXXXXXXXXX
# ---------- Author ----------
[params.author]
homepage = "https://joway.io/"
name = "Joway"
# ---------- Social Links ----------
# [[params.socials]]
# name = "Telegram"
# link = "https://t.me/biosthinking"
# [[params.socials]]
# name = "RSS"
# link = "/index.xml"
# [[params.socials]]
# name = "Slides"
# link = "/presentations"
[[params.socials]]
link = "https://mailchi.mp/a1a0d59e7a19/joway"
name = "Subscribe"
[[params.socials]]
link = "/travel"
name = "Travel"
[[params.socials]]
link = "https://joway.io"
name = "About"
# ---------- Optional: Related Posts ----------
# [related]
# includeNewer = true
# threshold = 80
# toLower = false
# [[related.indices]]
# name = "date"
# weight = 100
# [[related.indices]]
# name = "keywords"
# weight = 100
```
Explore similar templates
Compare previews and descriptions within the same stack and category.

hugo-xmin
hugo-xmin is an extremely minimal Hugo theme written by Yihui Xie for template beginners. HTML and CSS total about 140 lines, with no external dependencies, and it uses the MIT license.
Hugo · Starter

hugo-theme-gallery
A Hugo Extended photo gallery theme that organizes images with Page Bundles, automatically generating album lists and gallery pages with a Justified layout and PhotoSwipe lightbox.
Hugo · Starter

reveal-hugo
reveal-hugo is a Hugo theme that converts Markdown content into Reveal.js-based HTML presentations. It supports slide separation with `---`, shortcodes for fragments, slides, sections, notes, Markdown, and MathJax, and organizes content as root or section presentations with order controlled by weight.
Hugo · Starter

anatole
Anatole is a minimalistic two-column Hugo theme ported from farbox-theme-Anatole, featuring dark mode, multilingual and RTL support, and optional portfolio, comments, analytics, KaTeX, and Mermaid integrations. It suits personal blogs, portfolios, or documentation sites built with Hugo.
Hugo · Starter

hugo-theme-diary
A Hugo diary-style theme ported from the Hexo theme Journal, with a grid homepage for essays and daily notes. It supports six languages, dark mode, table-of-contents scroll positioning, reading time, code highlighting, and configurable sidebar, fonts, and colors.
Hugo · Starter

risotto
risotto is a minimalist, responsive Hugo theme inspired by terminal ricing aesthetics. It uses semantic HTML and pure CSS with no JavaScript, and its layout relies on CSS Grid for native responsiveness without manual breakpoints.
Hugo · Starter
