# Create a new site: Start a new site from scratch

> Create a new Hugo site from scratch with Docsy as a Hugo Module

---

LLMS index: [llms.txt](/llms.txt)

---

The simplest approach to creating a Docsy site is
[copying our example site](/docs/get-started/docsy-as-module/example-site-as-template/).
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](https://gohugo.io/hugo-modules/) to
your site. If needed, you can easily [update](/docs/updating/) 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:

<!-- prettier-ignore-start -->




<ul class="nav nav-tabs" id="tabs-0" role="tablist">
  <li class="nav-item">
      <button class="nav-link disabled"
          id="tabs-00-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-00" role="tab"
          aria-controls="tabs-00-00" aria-selected="false">
        CLI:
      </button>
    </li><li class="nav-item">
      <button class="nav-link active"
          id="tabs-00-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-01" role="tab"
          data-td-tp-persist="bash" aria-controls="tabs-00-01" aria-selected="true">
        Unix shell
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-00-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-00-02" role="tab"
          data-td-tp-persist="batchfile" aria-controls="tabs-00-02" aria-selected="false">
        Windows command line
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-0-content">
    <div class="tab-pane fade"
        id="tabs-00-00" role="tabpanel" aria-labelled-by="tabs-00-00-tab" tabindex="0">
        <pre tabindex="0"><code></code></pre>
    </div>
    <div class="tab-pane fade show active"
        id="tabs-00-01" role="tabpanel" aria-labelled-by="tabs-00-01-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Bash" data-lang="Bash"><span class="line"><span class="cl">hugo new site my-new-site
</span></span><span class="line"><span class="cl"><span class="nb">cd</span>  my-new-site
</span></span><span class="line"><span class="cl">hugo mod init github.com/me/my-new-site
</span></span><span class="line"><span class="cl">hugo mod get github.com/google/docsy@vv0.14.4-dev
</span></span><span class="line"><span class="cl">cat &gt;&gt; hugo.toml <span class="s">&lt;&lt;EOL
</span></span></span><span class="line"><span class="cl"><span class="s">[module]
</span></span></span><span class="line"><span class="cl"><span class="s">proxy = &#34;direct&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">[[module.imports]]
</span></span></span><span class="line"><span class="cl"><span class="s">path = &#34;github.com/google/docsy&#34;
</span></span></span><span class="line"><span class="cl"><span class="s">EOL</span>
</span></span><span class="line"><span class="cl">hugo server</span></span></code></pre></div>
    </div>
    <div class="tab-pane fade"
        id="tabs-00-02" role="tabpanel" aria-labelled-by="tabs-00-02-tab" tabindex="0">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-Batchfile" data-lang="Batchfile"><span class="line"><span class="cl">hugo new site my-new-site
</span></span><span class="line"><span class="cl"><span class="k">cd</span>  my-new-site
</span></span><span class="line"><span class="cl">hugo mod init github.com/me/my-new-site
</span></span><span class="line"><span class="cl">hugo mod get github.com/google/docsy@vv0.14.4-dev
</span></span><span class="line"><span class="cl"><span class="p">(</span><span class="k">echo</span> [module]<span class="se">^
</span></span></span><span class="line"><span class="cl"><span class="se">
</span></span></span><span class="line"><span class="cl">proxy = <span class="s2">&#34;direct&#34;</span><span class="se">^
</span></span></span><span class="line"><span class="cl"><span class="se">
</span></span></span><span class="line"><span class="cl">[[module.imports]]<span class="se">^
</span></span></span><span class="line"><span class="cl"><span class="se">
</span></span></span><span class="line"><span class="cl">path = <span class="s2">&#34;github.com/google/docsy&#34;</span><span class="p">)</span> <span class="p">&gt;&gt;</span> hugo.toml
</span></span><span class="line"><span class="cl">hugo server</span></span></code></pre></div>
    </div>
</div>

<!-- prettier-ignore-end -->

You now can preview your new site inside your browser at
[http://localhost:1313](http://localhost:1313/).

## Detailed Setup instructions

Specifying the [Docsy theme](https://github.com/google/docsy) 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.

```bash
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`).

> [!TIP]
>
> 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:

```bash
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.

```bash
hugo mod get github.com/google/docsy@vv0.14.4-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.

<!-- prettier-ignore-start -->





<ul class="nav nav-tabs" id="tabs-2" role="tablist">
  <li class="nav-item">
      <button class="nav-link disabled"
          id="tabs-02-00-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-00" role="tab"
          aria-controls="tabs-02-00" aria-selected="false">
        Configuration file:
      </button>
    </li><li class="nav-item">
      <button class="nav-link active"
          id="tabs-02-01-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-01" role="tab"
          data-td-tp-persist="toml" aria-controls="tabs-02-01" aria-selected="true">
        hugo.toml
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-02-02-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-02" role="tab"
          data-td-tp-persist="yaml" aria-controls="tabs-02-02" aria-selected="false">
        hugo.yaml
      </button>
    </li><li class="nav-item">
      <button class="nav-link"
          id="tabs-02-03-tab" data-bs-toggle="tab" data-bs-target="#tabs-02-03" role="tab"
          data-td-tp-persist="json" aria-controls="tabs-02-03" aria-selected="false">
        hugo.json
      </button>
    </li>
</ul>

<div class="tab-content" id="tabs-2-content">
    <div class="tab-pane fade"
        id="tabs-02-00" role="tabpanel" aria-labelled-by="tabs-02-00-tab" tabindex="2">
        <pre tabindex="0"><code></code></pre>
    </div>
    <div class="tab-pane fade show active"
        id="tabs-02-01" role="tabpanel" aria-labelled-by="tabs-02-01-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-toml" data-lang="toml"><span class="line"><span class="cl"><span class="p">[</span><span class="nx">module</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="nx">proxy</span> <span class="p">=</span> <span class="s2">&#34;direct&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="c"># uncomment line below for temporary local development of module</span>
</span></span><span class="line"><span class="cl">  <span class="c"># replacements = &#34;github.com/google/docsy -&gt; ../../docsy&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">[</span><span class="nx">module</span><span class="p">.</span><span class="nx">hugoVersion</span><span class="p">]</span>
</span></span><span class="line"><span class="cl">    <span class="nx">extended</span> <span class="p">=</span> <span class="kc">true</span>
</span></span><span class="line"><span class="cl">    <span class="nx">min</span> <span class="p">=</span> <span class="s2">&#34;0.155.3&#34;</span>
</span></span><span class="line"><span class="cl">  <span class="p">[[</span><span class="nx">module</span><span class="p">.</span><span class="nx">imports</span><span class="p">]]</span>
</span></span><span class="line"><span class="cl">    <span class="nx">path</span> <span class="p">=</span> <span class="s2">&#34;github.com/google/docsy&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="nx">disable</span> <span class="p">=</span> <span class="kc">false</span></span></span></code></pre></div>
    </div>
    <div class="tab-pane fade"
        id="tabs-02-02" role="tabpanel" aria-labelled-by="tabs-02-02-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-yaml" data-lang="yaml"><span class="line"><span class="cl"><span class="nt">module</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">proxy</span><span class="p">:</span><span class="w"> </span><span class="l">direct</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">hugoVersion</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">extended</span><span class="p">:</span><span class="w"> </span><span class="kc">true</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span><span class="nt">min</span><span class="p">:</span><span class="w"> </span><span class="m">0.155.3</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">  </span><span class="nt">imports</span><span class="p">:</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">    </span>- <span class="nt">path</span><span class="p">:</span><span class="w"> </span><span class="l">github.com/google/docsy</span><span class="w">
</span></span></span><span class="line"><span class="cl"><span class="w">      </span><span class="nt">disable</span><span class="p">:</span><span class="w"> </span><span class="kc">false</span></span></span></code></pre></div>
    </div>
    <div class="tab-pane fade"
        id="tabs-02-03" role="tabpanel" aria-labelled-by="tabs-02-03-tab" tabindex="2">
        <div class="highlight"><pre tabindex="0" class="chroma"><code class="language-json" data-lang="json"><span class="line"><span class="cl"><span class="p">{</span>
</span></span><span class="line"><span class="cl">  <span class="nt">&#34;module&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;proxy&#34;</span><span class="p">:</span> <span class="s2">&#34;direct&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;hugoVersion&#34;</span><span class="p">:</span> <span class="p">{</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;extended&#34;</span><span class="p">:</span> <span class="kc">true</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">      <span class="nt">&#34;min&#34;</span><span class="p">:</span> <span class="s2">&#34;0.155.3&#34;</span>
</span></span><span class="line"><span class="cl">    <span class="p">},</span>
</span></span><span class="line"><span class="cl">    <span class="nt">&#34;imports&#34;</span><span class="p">:</span> <span class="p">[</span>
</span></span><span class="line"><span class="cl">      <span class="p">{</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;path&#34;</span><span class="p">:</span> <span class="s2">&#34;github.com/google/docsy&#34;</span><span class="p">,</span>
</span></span><span class="line"><span class="cl">        <span class="nt">&#34;disable&#34;</span><span class="p">:</span> <span class="kc">false</span>
</span></span><span class="line"><span class="cl">      <span class="p">}</span>
</span></span><span class="line"><span class="cl">    <span class="p">]</span>
</span></span><span class="line"><span class="cl">  <span class="p">}</span>
</span></span><span class="line"><span class="cl"><span class="p">}</span></span></span></code></pre></div>
    </div>
</div>

<!-- prettier-ignore-end -->

You can find details of what these configuration settings do in the
[Hugo modules documentation](https://gohugo.io/hugo-modules/configuration/#module-config-top-level).
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:

```bash
hugo server
```

By default, your site will be available at
[http://localhost:1313](http://localhost:1313/). When encountering problems,
have a look at the [known issues](/docs/get-started/known_issues/#macos) 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](/docs/get-started/basic-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.

## What's next?

- Add some [basic configuration](/docs/get-started/basic-configuration/)
- [Add content and customize your site](/docs/content/)
- Get some ideas from our
  [Example Site](https://github.com/google/docsy-example) and other
  [Examples and templates](/examples/).
- [Publish your site](/docs/deployment/).

[configuration file]:
  https://gohugo.io/getting-started/configuration/#configuration-file
