As you saw in our introduction, Docsy is a Hugo theme,
which means that if you want to use Docsy, you need to set up your website
source so that the Hugo static site generator can find and use the Docsy theme
files when building your site. The simplest way to do this is to copy and edit
our example site, though we also provide instructions for adding the Docsy theme
manually to new or existing sites.
If you want to build and test your site locally you also need to be able to run
Hugo itself, either by installing it and any other required dependencies, or by
using our provided Docker container.
This page describes Docsy’s installation options and helps you choose the
appropriate setup guide to get started.
Installation options
Hugo offers multiple options for using themes, all of which are supported by
Docsy.
Adding the theme as a Hugo Module:
Hugo Modules are the simplest and latest
way to use Hugo themes. Hugo uses the modules mechanism to pull in the theme
files from the main Docsy repo at your chosen revision, and it’s easy to keep
the theme up to date in your site. Our
example site uses Docsy as a Hugo
Module.
Adding the theme as a Git submodule: Adding the theme as a
Git submodule also lets
Hugo use the theme files from their own repo, though is more complicated to
maintain than the Hugo modules approach. This is the approach used in older
versions of the Docsy example site and is still supported.
Cloning the theme files: If you don’t want Hugo to have to get the theme
files from an external repo (for example, if you want to customize and
maintain your own copy of the theme directly, or your deployment choice
requires you to include a copy of the theme in your repository), you can clone
the files directly into your site source.
Migration and backward compatibility
If you have an existing site that uses Docsy as a Git submodule, and you would
like to update it to use Hugo Modules, follow our
migration guide. If you’re not ready
to migrate yet, don’t worry! Your site will continue to work as usual.
Setup guides
Follow the setup guide for your chosen approach. If you’re new to Docsy and not
sure which guide to follow, we recommend following the Use Docsy as a Hugo
Module guide as a simple and easily maintained option.
1 - Use Docsy as a Hugo Module
Learn how to get started with Docsy by using the theme as a Hugo Module.
Hugo modules are the simplest and latest way
to use Hugo themes like Docsy when building a website. Hugo uses the modules
mechanism to pull in the theme files from the main Docsy repo at your chosen
revision, and it’s easy to keep the theme up to date in your site. Our example
site uses Docsy as a Hugo module.
To find out about other setup approaches, see our
Get started overview. If you want to migrate an existing
Docsy site to use Hugo Modules, see our
migration guide.
Setup options with Hugo Modules
To use Docsy as a Hugo Module, you have a couple of options:
Copy and edit the source for the
Docsy example site. This approach
gives you a skeleton structure for your site, with top-level and documentation
sections and templates that you can modify as necessary. The example site uses
Docsy as a Hugo Module.
Build your own site using the Docsy theme. Specify the
Docsy theme like any other
Hugo theme when creating or updating your site.
With this option, you’ll get Docsy look and feel, navigation, and other
features, but you’ll need to specify your own site structure.
If you’re a beginner, we recommend that you get started by copying our example
site. If you’re already familiar with Hugo or want a very different site
structure, you can follow our guide to start a site from scratch, which gives
you maximum flexibility at the cost of higher implementation effort. In both
cases you need to follow our prerequisites guide to make sure that you have
installed Hugo and all necessary dependencies.
1.1 - Before you begin
Prerequisites for building a site with Docsy as a Hugo Module.
This page describes the prerequisites for building a site that uses Docsy as a
Hugo Module.
Install Hugo
You need a
recent extended version
(version 0.155.3 or later) of Hugo
to do local builds and previews of sites (like this one) that use Docsy. If you
install from the release page, make sure to get the extended Hugo version,
which supports
SCSS; you
may need to scroll down the list of releases to see it.
For comprehensive Hugo documentation, see gohugo.io.
If you’ve already installed Hugo, check your version:
hugo version
If the result is 0.155.3 or earlier, or if you don’t see
Extended, you’ll need to install the latest version. You can see a complete
list of Linux installation options in
Install Hugo. The
following shows you how to install Hugo from the release page:
You can conveniently install any Hugo version using hugo-extended (replace
latest with the version you want to install):
npm install hugo-extended@latest --save-dev
Install Go language
Hugo’s commands for module management require that the Go programming language
is installed on your system. Check whether go is already installed:
$ go version
go version go1.25.6
Ensure that you are using version 1.12 or higher.
If the go language is not installed on your system yet or if you need to
upgrade, go to the download area of the Go website, choose
the installer for your system architecture and execute it. Afterwards, check for
a successful installation.
Install Git VCS client
Hugo’s commands for module management require that the git client is installed
on your system. Check whether git is already present in your system:
$ git version
git version 2.52.0
If no git client is installed on your system yet, go to the
Git website, download the installer for your system
architecture and execute it. Afterwards, check for a successful installation.
Install PostCSS
To build or update your site’s CSS resources, you also need
PostCSS to create the final assets. If you need to
install it, you must have a recent version of NodeJS
installed on your machine so you can use npm, the Node package manager. By
default npm installs tools under the directory where you run
npm install:
Note that versions of PostCSS later than 5.0.1 will not load autoprefixer if
installed globally, you
must use a local install.
Install/Upgrade Node.js
To ensure you can properly build your site beyond executing hugo server, you
must have the
latest long term support (LTS) Version
of Node.js. If you do not have the latest LTS version, you may see one of the
following errors:
Error: Error building site: POSTCSS: failed to transform "scss/main.css" (text/css): Unexpected identifier
#OR
/home/user/repos/my-new-site/themes/docsy/node_modules/hugo-extended/postinstall.js:1
import install from "./lib/install.js";
^^^^^^^
SyntaxError: Unexpected identifier
at Module._compile (internal/modules/cjs/loader.js:723:23)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:789:10)
at Module.load (internal/modules/cjs/loader.js:653:32)
at tryModuleLoad (internal/modules/cjs/loader.js:593:12)
at Function.Module._load (internal/modules/cjs/loader.js:585:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:831:12)
at startup (internal/bootstrap/node.js:283:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:623:3)
What’s next?
With all prerequisites installed, choose how to start off with your new Hugo
site
1.2 - Create a new site: start with a prepopulated site
Create a new Hugo site by using a clone of the Docsy example site as your starting point.
The simplest way to create a new Docsy site is to use the source of the
Docsy example site as starting point.
This approach gives you a skeleton structure for your site, with top-level and
documentation sections and templates that you can modify as necessary. The
example site automatically pulls in the Docsy theme as a
Hugo Module, so it’s easy to
keep up to date.
If you prefer to create a site from scratch, follow the instructions in Start a
site from scratch.
TL;DR: Setup for the impatient expert
At your Unix shell or Windows command line, run the following command:
git clone --depth 1 --branch v0.14.3-dev https://github.com/google/docsy-example.git my-new-site
cd my-new-site
hugo server
The Example Site gives you a good starting point
for building your docs site and is pre-configured to automatically pull in the
Docsy theme as a Hugo Module. There are two different routes to get a local
clone of the example site:
If you want to create a local copy only, choose option 1.
If you have a GitHub account and want to create a GitHub repo for your site go
for option 2.
Option 1: Using the command line (local copy only)
If you want to use a remote repository other than GitHub (such as
GitLab, BitBucket,
AWS CodeCommit,
Gitea) or if you don’t want a remote repo at all, simply
make a local working copy of the example site directly using git clone. As
last parameter, give your chosen local repo name (here: my-new-site):
Use the dropdown for switching branches/tags to change to the latest released
tag v0.14.3-dev.
Click the button Use this template and select the option
Create a new repository from the dropdown.
Choose a name for your new repository (e.g. my-new-site) and type it in the
Repository name field. You can also add an optional Description.
Click Create repository from template to create your new repository.
Congratulations, you just created your remote GitHub clone which now serves
as starting point for your own site!
Make a local copy of your newly created GitHub repository by using
git clone, giving your repo’s web URL as last parameter.
Depending on your environment you may need to tweak the
module top level settings
inside your hugo.toml slightly, for example by adding a proxy to use when
downloading remote modules. You can find details of what these configuration
settings do in the
Hugo modules documentation.
Now you can make local edits and test your copied site locally with Hugo.
Preview your site
To build and preview your site locally, switch to the root of your cloned
project and use hugo’s server command:
cd my-new-site
hugo server
Preview your site in your browser at:
http://localhost:1313. Thanks to Hugo’s live preview,
you can immediately see the effect of changes that you are making to the source
files of your local repo. Use Ctrl + c to stop the Hugo server whenever you
like. See the known issues on MacOS.
1.3 - Create a new site: Start a new site from scratch
Create a new Hugo site from scratch with Docsy as a Hugo Module
The simplest approach to creating a Docsy site is
copying our example site.
However, if you’re an experienced Hugo user or the site structure of our example
site doesn’t meet your needs, you may prefer to create a new site from scratch.
With this option, you’ll get Docsy look and feel, navigation, and other
features, but you’ll need to specify your own site structure.
These instructions give you a minimum file structure for your site project only,
so that you build and extend your actual site step by step. The first step is
adding the Docsy theme as a Hugo Module to
your site. If needed, you can easily update the module to the
latest revision from the Docsy GitHub repo.
TL;DR: Setup for the impatient expert
At your command prompt, run the following:
hugo new site my-new-site
cd my-new-site
hugo mod init github.com/me/my-new-site
hugo mod get github.com/google/docsy@v0.14.3-dev
cat >> hugo.toml <<EOL
[module]
proxy = "direct"
[[module.imports]]
path = "github.com/google/docsy"
EOLhugo server
hugo new site my-new-site
cd my-new-site
hugo mod init github.com/me/my-new-site
hugo mod get github.com/google/docsy@v0.14.3-dev
(echo [module]^
proxy = "direct"^
[[module.imports]]^
path = "github.com/google/docsy")>> hugo.toml
hugo server
Specifying the Docsy theme as Hugo Module for
your minimal site gives you all the theme-y goodness, but you’ll need to specify
your own site structure.
Create your new skeleton project
To create a new Hugo site project and then add the Docsy theme as a Hugo module,
run the following commands from your project’s root directory.
hugo new site my-new-site
cd my-new-site
This will create a minimal site structure, containing the folders archetypes,
content, data, layouts, static, and themes and a configuration file
(default: hugo.toml).
Astuce
In Hugo 0.110.0 the default config base filename was changed to hugo.toml.
If you are using hugo 0.110 or above, consider renaming your config.toml to
hugo.toml!
Import the Docsy theme module as a dependency of your site
Only sites that are Hugo Modules themselves can import other modules. To turn
your site into a Hugo Module, run the following commands in your newly created
site directory:
hugo mod init github.com/me/my-new-site
This creates two new files, go.mod for the module definitions and go.sum
which holds the checksums for module verification.
Next declare the Docsy theme module as a dependency for your site.
hugo mod get github.com/google/docsy@v0.14.3-dev
This command adds the docsy theme module to your definition file go.mod.
Add theme module configuration settings
Add the settings in the following snippet at the end of your site’s
configuration file (default: hugo.toml) and save the file.
[module]proxy="direct"# uncomment line below for temporary local development of module# replacements = "github.com/google/docsy -> ../../docsy"[module.hugoVersion]extended=truemin="0.155.3"[[module.imports]]path="github.com/google/docsy"disable=false
You can find details of what these configuration settings do in the
Hugo modules documentation.
Depending on your environment you may need to tweak them slightly, for example
by adding a proxy to use when downloading remote modules.
Preview your site
To build and preview your site locally:
hugo server
By default, your site will be available at
http://localhost:1313. When encountering problems,
have a look at the known issues on
MacOS.
You may get Hugo errors for missing parameters and values when you try to build
your site. This is usually because you’re missing default values for some
configuration settings that Docsy uses - once you add them your site should
build correctly. You can find out how to add configuration in
Basic site configuration - we
recommend copying the example site configuration even if you’re creating a site
from scratch as it provides defaults for many required configuration parameters.
Create a new Docsy site with Docsy using Git or NPM
If you don’t want to use
Docsy as a Hugo Module (for example if you
do not want to install Go) but still don’t want to copy the theme files into
your own repo, you can use Docsy as a
Git submodule. Using
submodules also lets Hugo use the theme files from the Docsy repo, though is
more complicated to maintain than the Hugo Modules approach. This is the
approach used in older versions of the Docsy example site, and is still
supported. If you are using Docsy as a submodule but would like to migrate to
Hugo Modules, see our migration guide.
Alternatively if you don’t want Hugo to have to get the theme files from an
external repo (for example, if you want to customize and maintain your own copy
of the theme directly, or your deployment choice requires you to include a copy
of the theme in your repository), you can clone the files directly into your
site source.
This guide provides instructions for all of these options, along with common
prerequisites.
Prerequisites
Install Hugo
You need a
recent extended version (we
recommend version 0.155.3 or later) of
Hugo to do local builds and previews of sites (like this
one) that use Docsy. If you install from the release page, make sure to get the
extended Hugo version, which supports
SCSS; you
may need to scroll down the list of releases to see it.
For comprehensive Hugo documentation, see gohugo.io.
If you’ve already installed Hugo, check your version:
hugo version
If the result is 0.155.3 or earlier, or if you don’t see
Extended, you’ll need to install the latest version. You can see a complete
list of Linux installation options in
Install Hugo. The
following shows you how to install Hugo from the release page:
You can install Hugo as an NPM module using
hugo-extended:
npm install hugo-extended --save-dev
Node: Get the latest LTS release
If you have Node installed already, check your version of Node. For example:
node -v
Install or upgrade your version of Node to the active LTS release. We
recommend using nvm to manage your Node installation (Linux command
shown):
nvm install --lts
Install PostCSS
To build or update your site’s CSS resources, you’ll also need
PostCSS. Install it using the Node package manager,
npm.
IMPORTANT: Check your Node version
The PostCSS package installed by some older versions of Node is incompatible
with Docsy. Check your version of Node against the active LTS release
and upgrade, if necessary. For details, see
Node: Get the latest LTS release.
From your project root, run this command:
npm install --save-dev autoprefixer postcss-cli
Option 1: Docsy as a Git submodule
For a new site
To create a new site and add the Docsy theme as a Git submodule, run the
following commands:
As of Hugo 0.110.0, the default config base filename was changed to
hugo.* from config.*. If you are using hugo 0.110+, consider renaming
your config.* to hugo.*.
(Optional but recommended) To avoid having to repeat the previous step every
time you update Docsy, consider adding NPM scripts like the following to
your project’s package.json file:
{"...":"...","scripts":{"get:submodule":"git submodule update --init --depth 1","_prepare:docsy":"cd themes/docsy && npm install","prepare":"npm run get:submodule && npm run _prepare:docsy","...":"..."},"...":"..."}
Every time you run npm install from your project root, the prepare
script will fetch the latest version of Docsy and its dependencies.
From this point on, build and serve your site using the usual Hugo commands, for
example:
hugo serve
Option 2: Clone the Docsy theme
If you don’t want to use submodules (for example, if you want to customize and
maintain your own copy of the theme directly, or your deployment choice requires
you to include a copy of the theme in your repository), you can clone the theme
into your project’s themes subdirectory.
To clone Docsy at v0.14.3-dev into your project’s themes folder,
run the following commands from your project’s root directory:
cd themes
git clone -b v0.14.3-dev https://github.com/google/docsy
cd docsy
npm install
To work from the development version of Docsy (not recommended unless, for
example, you plan to upstream changes to Docsy), omit the
-b v0.14.3-dev argument from the clone command above.
Then consider setting up an NPM prepare script, as documented in Option 1.
Installing Docsy using NPM creates an empty github.com sibling folder.
For details, see
Docsy NPM install side-effect.
Hugo install tip
You can install Docsy’s officially supported version of
Hugo using NPM at the same time as Docsy. Just omit
the --omit flag from the command above.
Build or serve your new site using the usual Hugo commands, specifying the
path to the Docsy theme files. For example, build your site as follows:
$ hugo
Start building sites …
...
Error: failed to load modules
If Hugo reports the following error when building your site (#2116):
Error: failed to load modules: module "github.com/FortAwesome/Font-Awesome" not found in ".../myproject/node_modules/github.com/FortAwesome/Font-Awesome" ...
Then run the following command and try again:
npm rebuild
As an alternative to specifying a themesDir, on some platforms, you can
instead create a symbolic link to the Docsy theme directory as follows (Linux
commands shown, executed from the site root folder):
As of Docsy version 0.8.0, running npm install inside the Docsy theme
directory will create a sibling folder named github.com, for example:
$ ls themes
docsy github.com
This is a workaround necessary to support Docsy’s use as a single Hugo
module (#1120) in the context of projects not using Hugo modules. The
github.com folder is created via Docsy’s postinstall script. To disable
this behavior, set the environment variable DOCSY_MKDIR_HUGO_MOD_SKIP=1
before running NPM install.
You may get Hugo errors for missing parameters and values when you try to build
your site. This is usually because you’re missing default values for some
configuration settings that Docsy uses - once you add them your site should
build correctly. You can find out how to add configuration in
Basic site configuration - we
recommend copying the example site configuration even if you’re creating a site
from scratch as it provides defaults for many required configuration parameters.
Change your working directory to the newly created folder:
cd docsy-example
Build and run the container
The docsy-example repository includes a
Dockerfile that you can use
to run your site.
Build the docker image:
docker-compose build
Run the built image:
docker-compose up
Open the address http://localhost:1313 in your web browser to load the
docsy-example homepage. You can now make changes to the source files, those
changes will be live-reloaded in your browser.
Cleanup
To clean up your system and delete the container image, follow the next steps.
Site-wide configuration details and parameters are defined in your project’s
configuration file (hugo.toml or config.toml). These include your chosen
Hugo theme (Docsy, of course!), project name, community links, Google Analytics
configuration, and Markdown parser parameters. See the examples with comments in
hugo.yaml in the example project
for how to add this information. We recommend copying this hugo.yaml and
editing it even if you’re just using the theme and not copying the entire Docsy
example site, as it includes default values for many parameters that you need
to set for your site to build correctly.
You may want to remove or customize some defaults of the copied hugo.toml file
straight away:
Internationalization
The copied hugo.toml file defines content in English, Norwegian and Farsi. You
can find out more about how Docsy supports multi-language content in
Multi-language support.
If you don’t intend to translate your site, you can remove the language switcher
by removing the following lines from hugo.toml:
[languages.no]languageName="Norsk"contentDir="content/no"[languages.no.params]title="Goldydocs"description="Docsy er operativsystem for skyen"time_format_default="02.01.2006"time_format_blog="02.01.2006"[languages.fa]languageName="فارسی"contentDir="content/fa"[languages.fa.params]title="اسناد گلدی"description="یک نمونه برای پوسته داکسی"time_format_default="2006.01.02"time_format_blog="2006.01.02"
Search
By default, the Docsy example site uses its own
Google Custom Search Engine. To disable this
site search, delete or comment out the following lines:
# Google Custom Search Engine ID. Remove or comment out to disable search.
gcs_engine_id = "..."
Errors: too many open files or fatal error: pipe failed
By default, MacOS permits a small number of open File Descriptors. For larger
sites, or when you’re simultaneously running multiple applications, you might
receive one of the following errors when you run
hugo server to preview your site
locally:
POSTCSS v7 and earlier:
ERROR 2020/04/14 12:37:16 Error: listen tcp 127.0.0.1:1313: socket: too many open files
POSTCSS v8 and later:
fatal error: pipe failed
Workaround
To temporarily allow more open files:
View your current settings by running:
sudo launchctl limit maxfiles
Increase the limit to 65535 files by running the following commands. If
your site has fewer files, you can choose to set lower soft (65535) and
hard (200000) limits.
If you’re using WSL, ensure that you’re running hugo on a Linux mount of the
filesystem, rather than a Windows one, otherwise you may get unexpected errors.