* refactor(params)!: snake_case config + eliminate params.page + use .Param
BREAKING CHANGE: All params keys renamed from camelCase to snake_case,
[params.page] section eliminated (moved to [params] level), and users
must update their hugo.toml and front matter accordingly.
Key changes:
- All camelCase config keys → snake_case (e.g., defaultTheme → default_theme)
- [params.page] flat keys and sub-sections moved to [params] level
- Removed function/params.html (manual merge), replaced with Hugo .Param
- New function/param.html partial for page-level section params with
shorthand boolean support and site defaults merging
- New function/camel-case.html for string conversion
- snake2camel.html renamed to camel-case-keys.html
- New function/get-cover.html for cover image resolution
- Deprecation warnings in detection-deprecated.html for old config keys
- Front matter only params (subtitle, featured_image, password, repost,
weight, message) use .Params.xxx instead of .Param
- Page-level sections use param.html partial
- Simplified patch.html (siteTime only) and init/index.html
Refs: camel-case-keys.html#29 (planned v1.0 breaking change)
* refactor(params)!: move params.link to page-level, simplify link guard
- Move [params.link] and [params.link.guard] to page-level section
- link.html: .Page optional, use param.html when available for
page-level override, fall back to site config without .Page
- Remove $guardConfig variable, use $config.guard directly
- Remove unnecessary .Page from callers that don't need page override
- friends.html: use param.html for link guard instead of link_guard
* refactor(params)!: move image/codeblock/json_viewer/filetree to page-level
- Move [params.image], [params.codeblock], [params.json_viewer],
[params.filetree] to page-level sub-sections
- Templates use param.html for merged config (page override + site defaults)
- image.html: .Page optional, falls back to site config without .Page
- Add v1- prefix to all deprecation warnidf IDs
- Fix camelCase key access in image.html (blackList, cacheRemote)
- Fix Hugo-lowered camelCase keys in code-block-wrapper.html
- Add deprecation warnings for codeblock camelCase Markdown attributes
- Add deprecation warnings for file-tree camelCase Markdown attributes
- Update render-codeblock-toggle.html for snake_case attribute names
* style: standardize @param comment style across all HTML templates
- PascalCase types: {string} → {String}, {boolean} → {Boolean},
{int} → {Int}, {map} → {Map}, {array} → {Array}
- Add missing ` - ` separator between param name and description
- Remove extra alignment spaces between type and param name
* refactor(params)!: move params.mermaid to page-level, extract gen/ templates
- Move [params.mermaid] to page-level sub-sections
- Mermaid config injected into window.config (per-page override support)
- mermaid.ts reads config from window.config.mermaid instead of parameter
- Create _partials/gen/ directory for JS content generators
- Move mermaid-bootstrap.html from plugin/ to gen/
- Extract window.config JS generation into gen/config.html
- mermaid.html uses param.html for wrapper config
* refactor(params)!: consolidate link_to_* into params.post_link section
- Move link_to_markdown/source/edit/report/vscode into [params.post_link]
- Rename keys: markdown, source, edit, report (bool), editor (string)
- editor defaults to "vscode", supports "trae" etc. via protocol template
- footer.html uses .Param "post_link" for all link toggles
- Remove link_to_* from deprecated keys list
* fix: add fallback for deprecated camelCase attributes and expand deprecation warnings
- render-codeblock-file-tree.html: folderSlash attribute fallback
- render-codeblock-toggle.html: lineNosToggler/lineWrapToggler fallback + warnings
- code-block-wrapper.html: maxShownLines/wrapperClass fallback
- detection-deprecated.html: add nested key warnings for 13 sections
(header, breadcrumb, navigation, watermark, busuanzi, image, mermaid,
codeblock, filetree, math.katex, math.mathjax.options, post_summary, footer)
- detection-deprecated.html: add link_guard front matter deprecation warning
* fix(mermaid): fix rendering in hidden tab panels and neutral layer scheduling
- isRenderContextActive: check tab-panel visibility via getBoundingClientRect
instead of panel.hidden (tab-container uses slot-based hiding, not hidden attr)
- bindTabContainerChanged: render neutral layers when switching tabs so
print/fallback scenarios work correctly
FixIt is a clean, elegant but advanced blog theme for Hugo.
Don't forget to leave a ⭐️ if you like this theme, thanks!
FixIt
It is based on the original LoveIt Theme, KeepIt Theme and LeaveIt Theme.
Warning
Version v0.x only accepts bug fixes. For new feature submissions, please develop on the v1 branch.
Version 1.0 is planned for release in the first half of 2027. Welcome to join the development and discussion! See v1 Milestone for details.
Live Preview
💟 Docs | ❇️ Test | 🚼 Demo | 🆕 Starter
More FixIt examples here.
Usage
Documentation
Head to the Quick Start page for a step-by-step guide on how to create a new website with FixIt.
Outline: Installation ➜ Getting Started ➜ Content Management ➜ Advanced Usage
Starter Wizard
We provided a CLI tool to help you create a new project with FixIt by a single command.
pnpx fixit-cli create my-blog
Templates
Click the following links to generate a new repository with template:
| Template | repository | Generate link |
|---|---|---|
| A quick-start template base on Hugo Modules. | hugo-fixit-starter | Click |
| A quick-start template base on Git submodule. | hugo-fixit-starter1 | Click |
| Build multilingual sites using Fixit theme. | docs | Click |
| Customize with FixIt theme. | Lruihao/hugo-blog | Click |
Features
Click to view.
Performance and SEO
- Optimized for performance: 99/100 on mobile and 100/100 on desktop in Google PageSpeed Insights
- Optimized SEO performance with a correct SEO SCHEMA based on JSON-LD
- Google Analytics supported
- Fathom Analytics supported
- Baidu Analytics supported
- Umami Analytics supported
- Plausible Analytics supported
- Cloudflare Web Analytics supported
- Splitbee Analytics supported
- Search engine verification supported (Google, Bing, Yandex, Pinterest, Baidu, 360 and Sogou)
- CDN for third-party libraries supported
Appearance and Layout
- Responsive layout
- Light/Dark mode
- Globally consistent design language
- Pagination supported
- Easy-to-use and self-expanding table of contents
- Multilanguage supported and i18n ready
- Beautiful CSS animation
Social and Comment Systems
- Gravatar supported by Gravatar
- Local Avatar supported
- Up to 87 social links supported
- Up to 28 share sites supported
- Disqus comment system supported by Disqus
- Gitalk comment system supported by Gitalk
- Valine comment system supported by Valine
- Waline comment system supported by Waline
- Facebook comments system supported by Facebook
- Telegram comments system supported by Telegram Comments
- Commento comment system supported by Commento
- Utterances comment system supported by Utterances
- Artalk comment system supported by Artalk
- Twikoo comment system supported by Twikoo
- giscus comment system supported by giscus
Extended Features
- AI Summary, AI Search and AI Chatbot supported by PostChat
- PWA (Progressive Web App) supported
- Sub Menu supported
- Content Encryption supported (Pages, Partial)
- Friends page embedded template
- Search supported by algolia, Fuse.js, Pagefind, CSE or PostChat
- Custom Search Engine (CSE) supported by Google
- Twemoji supported
- Automatically highlighting code
- Copy code to clipboard with one click
- Images gallery supported by lightgallery
- Extended Markdown syntax for Font Awesome icons
- Extended Markdown syntax for ruby annotation
- Extended Markdown syntax for fraction
- Multiple admonitions shortcode or alerts extended Markdown syntax
- Tabs and Tab shortcode with multiple design styles
- Mathematical formula supported by KaTeX or MathJax
- Diagrams code fences extended and shortcode supported by mermaid
- Interactive data visualization shortcode and code fences extended supported by ECharts
- Timeline code fences extended and shortcode supported
- File tree code fences extended and shortcode supported
- Mapbox shortcode supported by Mapbox GL JS
- Music player shortcode supported by APlayer and MetingJS
- Bilibili player and Douyin player shortcode
- Custom style shortcode
- Custom script shortcode
- Open more custom blocks
- Animated typing supported by TypeIt
- Cookie consent banner supported by cookieconsent
- Web Watermark supported by cell-watermark
- Chinese typesetting supported by pangu.js
- Options to cache remote image locally
- ...
Multilingual and i18n
FixIt supports multilingual and i18n. For more information, see the Content Management documentation. You are welcome to contribute with a new language.
FixIt supports the following languages.
- English
- Simplified Chinese
- Traditional Chinese
- French
- Polish
- Brazilian Portuguese
- Italian
- Spanish
- German
- Serbian
- Russian
- Romanian
- Vietnamese
- Hindi
- Japanese
- Korean
Theme Components
To balance simplicity and extensibility, FixIt theme provides extra Hugo theme components for customization.
Click to view.
- fixit-bundle
🌲 Bundles the FixIt core theme and all hugo-fixit components into a single component. - cmpt-flyfish
🐟 A canvas implemented animation effect of small fish swimming. - cmpt-mdevtools
Mobile devtools component powered by vConsole and eruda. - cmpt-santa-hat
A Christmas Easter Egg by JavaScript. - cmpt-translate
🌐 A component for site automatic translation. - component-projects
🐙 Display your GitHub projects in the FixIt theme and generate blog posts from readme. - hugo-atom-feed
Hugo theme component for ATOM feed custom Output Format. - hugo-json-feed
Hugo theme component for JSON feed custom Output Format. - shortcode-asciinema
A Hugo theme component with asciinema-embed shortcode. - shortcode-caniuse
A Hugo theme component with caniuse shortcode. - shortcode-docs-bookmark
🔖 Embed bookmark of FixIt Docs. - shortcode-missing-translation
A Hugo theme component with missing-translation shortcode. - shortcode-mmt-netease
🎶 A Hugo theme component with a NetEase Cloud random comment shortcode. - shortcode-rewards
A Hugo theme component with reward-log or sponsor-log shortcode.
Community
All feedback is welcome! Head over to the discussions, Pull requests and issues tracker.
| Official Community | Description |
|---|---|
| Discussions | GitHub discussion forum |
| FixIt WeChat group | Follow and reply "FixIt" to get |
| FixIt QQ group | QQ group: 814031017 |
| FixIt Dev group | QQ group: 770835493 |
Contributing
We welcome you to join the development of FixIt. Please see contributing document. 🤗
Also, we welcome Issue or PR to our official-components.
Note
When contributing, please first discuss the change you wish to make via a discussion on this repository before making the actual change.
Acknowledgements
Thanks to the support of all contributors!
Thanks to the Hugo DoIt theme and Hexo NexT theme for inspiration and reference.
Thanks to all the open source projects used in the FixIt theme.
- UnoCSS
- normalize.css
- Font Awesome
- Simple Icons
- Animate.css
- autocomplete
- algoliasearch
- Fuse.js
- object-fit-images
- Twemoji
- emoji-data
- lightgallery
- Sharer.js
- TypeIt
- KaTeX
- MathJax
- mermaid
- ECharts
- Mapbox GL JS
- APlayer
- MetingJS
- Gitalk
- Valine
- cookieconsent
- cell-watermark
- 不蒜子
- Vercount
- pangu.js
- Artalk
- Waline
- Twikoo
- github-corners
- giscus
- crypto-js
- pace
- xxhash-wasm
<tab-container>element<json-viewer>element
License
FixIt is licensed under the MIT license. Check the LICENSE file for details.
Sponsor Support
If you enjoy the theme, please consider buying me a cup of coffee ☕️. Thanks!
Thanks to the following sponsors for their great support:
- translate.js sponsored Enterprise Translation Channel.
