Ananke is a flexible, production-ready starter theme for Hugo focused on accessibility, performance, and maintainable defaults.

[!IMPORTANT]
Ananke moved to its own organisation on April 23, 2026. Please update your references from
github.com/theNewDynamic/gohugo-theme-ananketogithub.com/gohugo-ananke/ananke. Bear with us as we update all documentation and links to reflect this change. Until then, both URLs will continue to work as links as well as in thegitoperations for cloning and submodules.The following steps should suffice to update your references if you have not changed the setup:
For Hugo Modules: search and replace all instances of
github.com/theNewDynamic/gohugo-theme-ananke/v2withgithub.com/gohugo-ananke/ananke/v2in your site's configuration and runhugo mod tidyto update the module dependencies.For Git Submodules: To change the remote URL for your existing submodule, run:
cd path/to/your/repo/themes/ananke # <-- adjust path as needed, keep the 'themes/ananke' part git remote set-url origin https://github.com/gohugo-ananke/ananke.gitThen find
.gitmodulesin the root of your repository and replace all instances oftheNewDynamic/gohugo-theme-anankewithgohugo-ananke/anankein that file as well.
Finally, rungit submodule syncto update the submodule configuration.Issues? Get in touch via GitHub Discussions.
Ananke supports both installation methods:
If you are new to Hugo, see Hugo's official quick start: gohugo.io/getting-started/quick-start.
After installation, use these guides to configure your site:
Ananke does not require theme changes for Hugo custom outputs. Define the output format in your site configuration and add the matching layout file to your site. Hugo resolves project layouts before theme layouts, so the custom output can live outside the theme.
For example, this configuration adds a SearchIndex JSON output for the home page:
[mediaTypes."application/json"]
suffixes = ["json"]
[outputFormats.SearchIndex]
mediaType = "application/json"
baseName = "index"
isPlainText = true
notAlternative = true
[outputs]
home = ["HTML", "RSS", "SearchIndex"]
Then add a matching layout in your site at layouts/index.searchindex.json:
{{- $pages := where site.RegularPages "Type" "in" site.Params.mainSections -}}
[
{{- range $index, $page := $pages }}
{{- if $index }},{{ end }}
{
"title": {{ $page.Title | jsonify }},
"permalink": {{ $page.RelPermalink | jsonify }},
"summary": {{ $page.Summary | plainify | jsonify }}
}
{{- end }}
]
This produces /index.json while keeping Ananke's default HTML and RSS output intact.