Add a Theme as a Hugo Module

Although Hugo modules are supposed to make life simple, this took me an embarrassingly long time to fathom.

In this tutorial, I’ll show you how to add a theme as a module of your Hugo site.

I’m assuming you already have a Hugo site and have chosen a theme that’s available as a module.

If you want to learn more about modules, take a look at the Hugo documentation.

Step 1 - Ensure you have installed Go

To use Hugo modules, you’ll need Go. Run go version to check whether it’s already installed.

⬇ If you don’t have Go, you can download a version for your operating system.

Step 2 - Initialize your site as a module

Before you can use modules, your website itself needs to be a module.

Make sure you’re at the top level of your website directory. Then run:

hugo mod init website-name

Replace website-name with any unique name.

You’ll see a message to say that Go is creating your new module.

👀 To check what’s happening, run cat go.mod. You’ll see the module you just created.

Step 3 - Add theme module as a dependency

Make sure you have the full repo link for your theme. Most of them are on GitHub. Then run:

hugo mod get url-of-theme

Replace url-of-theme with the GitHub URL (without the https). For example, the command for the Ananke theme would be:

hugo mod get github.com/theNewDynamic/gohugo-theme-ananke

Note this time that the command is hugo mod get, rather than hugo mod init. That’s what tripped me up.

Hugo tells you the theme has been added.

👀 Run cat go.mod again for confirmation.

Step 4 - Edit your config file

Open your config file and add the repo URL as the value for theme. In YAML, it would look like this:

theme: github.com/theNewDynamic/gohugo-theme-ananke

In TOML, it’s:

theme = ["github.com/theNewDynamic/gohugo-theme-ananke"]

You need the full URL (without https), rather than just the name.

Save the file and run hugo serve. You should see your new theme 🎉

Conclusion

It’s certainly easy to add submodules, but only if you know exactly the right commands. I hope it worked for you, and in a fraction of the time it took me 😫

You can also watch a video of this tutorial: