shithub: hugo

Download patch

ref: e4621446ce8b9f677d00ed208154e7f106bc9980
parent: 01befcce35ec992d195ce1b9a6a1eeda693cb5a8
parent: 89044b8f8795f17c36396c67823183a20fc88139
author: Bjørn Erik Pedersen <bjorn.erik.pedersen@gmail.com>
date: Wed May 6 08:12:57 EDT 2020

Merge commit '89044b8f8795f17c36396c67823183a20fc88139'

diff: cannot open b/docs/content/en/showcase/digitalgov//null: file does not exist: 'b/docs/content/en/showcase/digitalgov//null' diff: cannot open b/docs/content/en/showcase/keycdn//null: file does not exist: 'b/docs/content/en/showcase/keycdn//null' diff: cannot open b/docs/resources/_gen/images/news/0.69.0-relnotes//null: file does not exist: 'b/docs/resources/_gen/images/news/0.69.0-relnotes//null' diff: cannot open a/docs/resources/_gen/images/showcase/Aether//null: file does not exist: 'a/docs/resources/_gen/images/showcase/Aether//null' diff: cannot open b/docs/resources/_gen/images/showcase/keycdn//null: file does not exist: 'b/docs/resources/_gen/images/showcase/keycdn//null'
--- a/docs/content/en/commands/hugo_gen_doc.md
+++ b/docs/content/en/commands/hugo_gen_doc.md
@@ -13,7 +13,7 @@
 Generate Markdown documentation for the Hugo CLI.
 
 This command is, mostly, used to create up-to-date documentation
-of Hugo's command-line interface for http://gohugo.io/.
+of Hugo's command-line interface for https://gohugo.io/.
 
 It creates one Markdown file per command with front matter suitable
 for rendering in Hugo.
--- a/docs/content/en/content-management/formats.md
+++ b/docs/content/en/content-management/formats.md
@@ -34,7 +34,7 @@
 |MMark|mmark|Mmark is deprecated and will be removed in a future release.|
 |Emacs Org-Mode|org|See [go-org](https://github.com/niklasfasching/go-org).|
 |Asciidoc|asciidoc, adoc, ad|Needs Asciidoc or [Asciidoctor][ascii] installed.|
-|RST|rst|Needs [RST](http://docutils.sourceforge.net/rst.html) installed.|
+|RST|rst|Needs [RST](https://docutils.sourceforge.io/rst.html) installed.|
 |Pandoc|pandoc, pdc|Needs [Pandoc](https://www.pandoc.org/) installed.|
 |HTML|html, htm|To be treated as a content file, with layout, shortcodes etc., it must have front matter. If not, it will be copied as-is.|
 
@@ -88,7 +88,7 @@
 [mmark]: https://github.com/mmarkdown/mmark
 [org]: https://orgmode.org/
 [pandoc]: https://www.pandoc.org/
-[Pygments]: http://pygments.org/
-[rest]: http://docutils.sourceforge.net/rst.html
+[Pygments]: https://pygments.org/
+[rest]: https://docutils.sourceforge.io/rst.html
 [sc]: /content-management/shortcodes/
 [sct]: /templates/shortcode-templates/
--- a/docs/content/en/content-management/shortcodes.md
+++ b/docs/content/en/content-management/shortcodes.md
@@ -423,7 +423,7 @@
 [Instagram]: https://www.instagram.com/
 [pagevariables]: /variables/page/
 [partials]: /templates/partials/
-[Pygments]: http://pygments.org/
+[Pygments]: https://pygments.org/
 [quickstart]: /getting-started/quick-start/
 [sctemps]: /templates/shortcode-templates/
 [scvars]: /variables/shortcodes/
--- a/docs/content/en/contribute/development.md
+++ b/docs/content/en/contribute/development.md
@@ -107,7 +107,7 @@
 brew install hub
 ```
 
-Now we'll create an [alias in Bash](http://tldp.org/LDP/abs/html/aliases.html) so that typing `git` actually runs `Hub`:
+Now we'll create an [alias in Bash](https://tldp.org/LDP/abs/html/aliases.html) so that typing `git` actually runs `Hub`:
 
 ```
 echo "alias git='hub'" >> ~/.bash_profile
--- a/docs/content/en/contribute/documentation.md
+++ b/docs/content/en/contribute/documentation.md
@@ -229,7 +229,7 @@
 > Without the threat of punishment, there is no joy in flight. - [Kobo Abe][abe]
 
 {{% note "Blockquotes `!=` Admonitions" %}}
-Previous versions of Hugo documentation used blockquotes to draw attention to text. This is *not* the [intended semantic use of `<blockquote>`](http://html5doctor.com/cite-and-blockquote-reloaded/). Use blockquotes when quoting. To note or warn your user of specific information, use the admonition shortcodes that follow.
+Previous versions of Hugo documentation used blockquotes to draw attention to text. This is *not* the [intended semantic use of `<blockquote>`](https://html5doctor.com/cite-and-blockquote-reloaded/). Use blockquotes when quoting. To note or warn your user of specific information, use the admonition shortcodes that follow.
 {{% /note %}}
 
 ## Admonitions
@@ -330,5 +330,5 @@
 [ghforking]: https://help.github.com/articles/fork-a-repo/
 [hugodev]: /contribute/development/
 [shortcodeparams]: content-management/shortcodes/#shortcodes-without-markdown
-[sourceforge]: http://docutils.sourceforge.net/docs/ref/rst/directives.html#admonitions
+[sourceforge]: https://docutils.sourceforge.io/docs/ref/rst/directives.html#admonitions
 [templating function]: /functions/
--- a/docs/content/en/functions/jsonify.md
+++ b/docs/content/en/functions/jsonify.md
@@ -5,13 +5,13 @@
 godocref:
 date: 2017-02-01
 publishdate: 2017-02-01
-lastmod: 2017-02-01
+lastmod: 2020-04-13
 categories: [functions]
 menu:
   docs:
     parent: "functions"
 keywords: [strings,json]
-signature: ["jsonify INPUT"]
+signature: ["jsonify INPUT", "jsonify OPTIONS INPUT"]
 workson: []
 hugoversion:
 relatedfuncs: [plainify]
@@ -19,8 +19,18 @@
 aliases: []
 ---
 
+Jsonify encodes a given object to JSON.
+
+To customize the printing of the JSON, pass a dictionary of options as the first
+argument.  Supported options are "prefix" and "indent".  Each JSON element in
+the output will begin on a new line beginning with *prefix* followed by one or
+more copies of *indent* according to the indentation nesting.
+
+
 ```
 {{ dict "title" .Title "content" .Plain | jsonify }}
+{{ dict "title" .Title "content" .Plain | jsonify (dict "indent" "  ") }}
+{{ dict "title" .Title "content" .Plain | jsonify (dict "prefix" " " "indent" "  ") }}
 ```
 
 See also the `.PlainWords`, `.Plain`, and `.RawContent` [page variables][pagevars].
--- a/docs/content/en/functions/range.md
+++ b/docs/content/en/functions/range.md
@@ -20,6 +20,6 @@
 aliases: []
 ---
 
-Just like in the Go programming language, Go and Hugo templates make heavy use of `range` to iterate over a map, array or slice.
+Just like in the Go programming language, Go and Hugo templates make heavy use of `range` to iterate over a map, array or slice. Other templating languages use a foreach for the equivalent functionality.
 
 `range` is fundamental to templating in Hugo. (See the [Introduction to Hugo Templates](/templates/introduction/) for more examples.)
--- a/docs/content/en/functions/safeURL.md
+++ b/docs/content/en/functions/safeURL.md
@@ -69,4 +69,4 @@
 
 [configuration]: /getting-started/configuration/
 [menus]: /content-management/menus/
-[RFC 3986]: http://tools.ietf.org/html/rfc3986
+[RFC 3986]: https://tools.ietf.org/html/rfc3986
--- a/docs/content/en/getting-started/configuration.md
+++ b/docs/content/en/getting-started/configuration.md
@@ -298,16 +298,20 @@
 
 {{< new-in "0.66.0" >}}
 
-The `build` configuration section contains global build-realated configuration options.
+The `build` configuration section contains global build-related configuration options.
 
 {{< code-toggle file="config">}}
 [build]
 useResourceCacheWhen="fallback"
+writeStats = false
 {{< /code-toggle >}}
 
 
 useResourceCacheWhen
 : When to use the cached resources in `/resources/_gen` for PostCSS and ToCSS. Valid values are `never`, `always` and `fallback`. The last value means that the cache will be tried if PostCSS/extended version is not available.
+
+writeStats {{< new-in "0.69.0" >}}
+: When enabled, a file named `hugo_stats.json` will be written to your project root with some aggregated data about the build, e.g. list of HTML entities published to be used to do [CSS pruning](/hugo-pipes/postprocess/#css-purging-with-postcss). If you're only using this for the production build, you should consider placing it below [config/production](/getting-started/configuration/#configuration-directory). It's also worth mentioning that, due to the nature of the partial server builds, new HTML entities will be added when you add or change them while the server is running, but the old values will not be removed until you restart the server or run a regular `hugo` build.
 
 ## Configure Server
 
--- a/docs/content/en/getting-started/installing.md
+++ b/docs/content/en/getting-started/installing.md
@@ -86,6 +86,12 @@
 scoop install hugo
 ```
 
+Or install the extended version with:
+
+```bash
+scoop install hugo-extended
+```
+
 ### Source
 
 #### Prerequisite Tools
@@ -517,7 +523,7 @@
 [installgo]: https://golang.org/dl/
 [linuxbrew]: https://docs.brew.sh/Homebrew-on-Linux
 [Path Editor]: https://patheditor2.codeplex.com/
-[pygments]: http://pygments.org
+[pygments]: https://pygments.org
 [quickstart]: /getting-started/quick-start/
 [redhatforum]: https://discourse.gohugo.io/t/solved-fedora-copr-repository-out-of-service/2491
 [releases]: https://github.com/gohugoio/hugo/releases
--- a/docs/content/en/hosting-and-deployment/hosting-on-github.md
+++ b/docs/content/en/hosting-and-deployment/hosting-on-github.md
@@ -42,7 +42,7 @@
 
 ## GitHub User or Organization Pages
 
-As mentioned [the GitHub Pages documentation][ghorgs], you can host a user/organization page in addition to project pages. Here are the key differences in GitHub Pages websites for Users and Organizations:
+As mentioned in the [GitHub Pages documentation][ghorgs], you can host a user/organization page in addition to project pages. Here are the key differences in GitHub Pages websites for Users and Organizations:
 
 1. You must use a `<USERNAME>.github.io` to host your **generated** content
 2. Content from the `master` branch will be used to publish your GitHub Pages site
@@ -54,7 +54,7 @@
 1. Create a `<YOUR-PROJECT>` (e.g. `blog`) repository on GitHub. This repository will contain Hugo's content and other source files.
 2. Create a `<USERNAME>.github.io` GitHub repository. This is the repository that will contain the fully rendered version of your Hugo website.
 3. `git clone <YOUR-PROJECT-URL> && cd <YOUR-PROJECT>`
-4. Paste your existing Hugo project into a new local `<YOUR-PROJECT>` repository. Make sure your website works locally (`hugo server` or `hugo server -t <YOURTHEME>`) and open your browser to <http://localhost:1313>.
+4. Paste your existing Hugo project into the new local `<YOUR-PROJECT>` repository. Make sure your website works locally (`hugo server` or `hugo server -t <YOURTHEME>`) and open your browser to <http://localhost:1313>.
 5. Once you are happy with the results:
     * Press <kbd>Ctrl</kbd>+<kbd>C</kbd> to kill the server
     * Before proceeding run `rm -rf public` to completely remove the `public` directory 
--- a/docs/content/en/hosting-and-deployment/hugo-deploy.md
+++ b/docs/content/en/hosting-and-deployment/hugo-deploy.md
@@ -19,7 +19,7 @@
 toc: true
 ---
 
-You can use the "hugo deploy" command to upload your site directly to a Google Cloud Storage (GCS) bucket, an AWS S3 bucket, and/or an Azure Storage bucket.
+You can use the "hugo deploy" command to upload your site directly to a Google Cloud Storage (GCS) bucket, an AWS S3 bucket, and/or an Azure Storage container.
 
 ## Assumptions
 
@@ -46,7 +46,7 @@
 
 ### Azure Storage
 
-Follow the [Azure instructions for how to create a bucket](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal).
+Follow the [Azure instructions for how to create a storage container](https://docs.microsoft.com/en-us/azure/storage/blobs/storage-quickstart-blobs-portal).
 
 ## Configure the deployment
 
--- /dev/null
+++ b/docs/content/en/hugo-pipes/postprocess.md
@@ -1,0 +1,70 @@
+---
+title: PostProcess
+description: Allows delaying of resource transformations to after the build.
+date: 2020-04-09
+categories: [asset management]
+keywords: []
+menu:
+  docs:
+    parent: "pipes"
+    weight: 39
+weight: 39
+sections_weight: 39
+---
+
+Marking a resource with `resources.PostProcess` delays any transformations to after the build, typically because one or more of the steps in the transformation chain depends on the result of the build (e.g. files in `public`).{{< new-in "0.69.0" >}}
+
+A prime use case for this is [CSS purging with PostCSS](#css-purging-with-postcss).
+
+There are currently two limitations to this:
+
+1. This only works in `*.html` templates (i.e. templates that produces HTML files).
+2. You cannot manipulate the values returned from the resource's methods. E.g. the `upper` in this example will not work as expected:
+   
+    ```go-html-template
+    {{ $css := resources.Get "css/main.css" }}
+    {{ $css = $css | resources.PostCSS | minify | fingerprint | resources.PostProcess }}
+    {{ $css.RelPermalink | upper }}
+    ```
+
+## CSS purging with PostCSS
+
+{{% note %}}
+There are several ways to set up CSS purging with PostCSS in Hugo. If you have a simple project, you should consider going the simpler route and drop the use of `resources.PostProcess` and just extract keywords from the templates. See the [Tailwind documentation](https://tailwindcss.com/docs/controlling-file-size/#app) for some examples.
+{{% /note %}}
+
+The below configuration will write a `hugo_stats.json` file to the project root as part of the build. If you're only using this for the production build, you should consider placing it below [config/production](/getting-started/configuration/#configuration-directory).
+
+```toml
+[build]
+  writeStats = true
+```
+
+```js
+const purgecss = require('@fullhuman/postcss-purgecss')({
+    content: [ './hugo_stats.json' ],
+    defaultExtractor: (content) => {
+        let els = JSON.parse(content).htmlElements;
+        return els.tags.concat(els.classes, els.ids);
+    }
+});
+
+module.exports = {
+    plugins: [
+        require('tailwindcss'),
+        require('autoprefixer'),
+        ...(process.env.HUGO_ENVIRONMENT === 'production' ? [ purgecss ] : [])
+    ]
+};
+```
+
+Note that in the example above, the "CSS purge step" will only be applied to the production build. This means that you need to do something like this in your head template to build and include your CSS:
+
+```go-html-template
+{{ $css := resources.Get "css/main.css" }}
+{{ $css = $css | resources.PostCSS }}
+{{ if hugo.IsProduction }}
+{{ $css = $css | minify | fingerprint | resources.PostProcess }}
+{{ end }}
+<link href="{{ $css.RelPermalink }}" rel="stylesheet" />
+```
binary files /dev/null b/docs/content/en/news/0.69.0-relnotes/hugo-69-easter-featured.png differ
--- a/docs/content/en/news/0.69.0-relnotes/index.md
+++ b/docs/content/en/news/0.69.0-relnotes/index.md
@@ -1,12 +1,12 @@
 
 ---
 date: 2020-04-10
-title: "0.69.0"
-description: "0.69.0"
+title: "Post Build Resource Transformations"
+description: "Hugo 0.69.0 allows you to delay resource processing to after the build, the prime use case being removal of unused CSS."
 categories: ["Releases"]
 ---
 
-	It's Eeaster, a time for mysteries and puzzles. And at first glance, this Hugo release looks a little mysterious. The core of if is a mind-twister:
+**It's Eeaster, a time for mysteries and puzzles.** And at first glance, this Hugo release looks a little mysterious. The core of if is a mind-twister:
 
 ```go-html-template
 {{ $css := resources.Get "css/main.css" }}
--- a/docs/content/en/showcase/arolla-cocoon/bio.md
+++ b/docs/content/en/showcase/arolla-cocoon/bio.md
@@ -1,5 +1,5 @@
 
-[Camping Arolla](http://www.camping-arolla.com/) is located in the heart of the Swiss Alps, at an altitude of 1.950 meters.
+[Camping Arolla](https://www.camping-arolla.com) is located in the heart of the Swiss Alps, at an altitude of 1.950 meters.
 
 The site is built by:
 
--- a/docs/content/en/showcase/arolla-cocoon/index.md
+++ b/docs/content/en/showcase/arolla-cocoon/index.md
@@ -8,7 +8,7 @@
 
 ---
 
-Swiss [Arolla campsite](http://www.camping-arolla.com/) runs the highest campsite in Europe and I'm completely re-doing their actuel Website with Hugo.
+Swiss [Arolla campsite](https://www.camping-arolla.com) runs the highest campsite in Europe and I'm completely re-doing their actuel Website with Hugo.
 
 But they just launch a brand new offer (luxury tents with bed and fire oven), and we couldn't wait for the proper new website for having this promoted: we needed the website up and running within 24h!
 
@@ -18,8 +18,8 @@
 - Replace the main images.
 - Add a [hugo-easy-gallery / photoswipe](https://github.com/liwenyip/hugo-easy-gallery) on the main page with attractive images.
 - Add the promo video with a simple *vimeo* shortcode.
-- Replace the Google Maps widget by the [OpenStreetMap](http://www.openstreetmap.org/) equivalent
-- Use a [Zotabox](http://www.zotabox.com) contact form.
+- Replace the Google Maps widget by the [OpenStreetMap](https://www.openstreetmap.org/) equivalent
+- Use a [Zotabox](https://www.zotabox.com) contact form.
 - Write the content in French & in English directly on the content pages, describe their services, add fun facts and true testimonies.
 - Setup a GDPR compliant site with the new Hugo options.
 - Use [Netlify](https://www.netlify.com) for publishing it in a breeze.
--- /dev/null
+++ b/docs/content/en/showcase/digitalgov/bio.md
@@ -1,0 +1,2 @@
+
+**Digital.gov** helps people in the U.S. government deliver better, more accessible digital services through publishing essential guidance, resources, tools, and online events that make it easier for people to design, build, and deliver essential services for the public.
binary files /dev/null b/docs/content/en/showcase/digitalgov/featured.png differ
--- /dev/null
+++ b/docs/content/en/showcase/digitalgov/index.md
@@ -1,0 +1,66 @@
+---
+title: Digital.gov
+date: 2020-05-01
+description: "Showcase: \"Guidance on building better digital services in government.\""
+siteURL: https://digital.gov/
+siteSource: https://github.com/gsa/digitalgov.gov
+---
+
+For over a decade, Digital.gov has provided guidance, training, and community support to the people who are responsible for delivering digital services in the U.S. government. Essentially, it is a place where people can find examples of problems being solved in government, and get links to the tools and resources they need.
+
+Through collaboration in our communities of practice, Digital.gov is a window into the people who work in technology in government and the challenges they face making digital services stronger and more effective. [Read more about our site »](https://digital.gov/2019/12/19/a-new-digitalgov/)
+
+Digital.gov is built using the [U.S. Web Design System](https://designsystem.digital.gov/) (USWDS) and have followed the [design principles](https://designsystem.digital.gov/maturity-model/) in building out our new site:
+
+-   **Start with real user needs**  — We used human-centered design methods to inform our product decisions (like qualitative user research), and gathered feedback from real users. We also continually test our assumptions with small experiments.
+-   **Earn trust**  —We recognize that trust has to be earned every time. We are including all  [required links and content](https://digital.gov/resources/required-web-content-and-links/)  on our site, clearly identifying as a government site, building with modern best practices, and using https.
+-   **Embrace accessibility**  —  [Accessibility](https://digital.gov/resources/intro-accessibility/)  affects everybody, and we built it into every decision. We’re continually working to conform to Section 508 requirements, use user experience best practices, and support a wide range of devices.
+-   **Promote continuity**  — We started from shared solutions like USWDS and  [Federalist](https://federalist.18f.gov/). We designed our site to clearly identify as a government site by including USWDS’s .gov banner, common colors and patterns, and built with modern best practices.
+-   **Listen**  — We actively collect user feedback and web metrics. We use the  [Digital Analytics Program](https://digital.gov/services/dap/)  (DAP) and analyze the data to discover actionable insights. We make small, incremental changes to continuously improve our website by listening to readers and learning from what we hear.
+
+_More on the [USWDS maturity model »](https://designsystem.digital.gov/maturity-model/)_
+
+## Open Tools
+
+We didn’t start from scratch. We built and designed the Digital.gov using many of the open-source tools and services that we develop for government here in the  [Technology Transformation Services](https://www.gsa.gov/tts/) (TTS).
+
+Using services that make it possible to design, build, and iterate quickly are essential to modern web design and development, which is why [Federalist](https://federalist.18f.gov/) and the [U.S. Web Design System](https://designsystem.digital.gov/) are such a great combination.
+
+**Why Hugo?** Well, with around `~3,000` files _(and growing)_ and `~9,000` built pages, we needed a site generator that could handle that volume with lightning fast speed.
+
+Hugo was the clear option. The [Federalist](https://federalist.18f.gov/) team quickly added it to their available site generators, and we were off.
+
+At the moment, it takes around `32 seconds` to build close to `~10,000` pages!
+
+Take a look:
+
+```bash
+
+                   |  EN
+-------------------+-------
+  Pages            | 7973
+  Paginator pages  |  600
+  Non-page files   |  108
+  Static files     |  851
+  Processed images |    0
+  Aliases          | 1381
+  Sitemaps         |    1
+  Cleaned          |    0
+
+Built in 32.427 seconds
+
+```
+
+In addition to Hugo, we are proudly using a number of other tools and services, all built by government are free to use:
+
+-   [Federalist](https://federalist.18f.gov/)
+-   [Search.gov](https://www.search.gov/)  — A free, hosted search platform for federal websites.
+-   [Cloud.gov](https://www.cloud.gov/)  — helps teams build, run, and authorize cloud-ready or legacy government systems quickly and cheaply.
+-   [Federal CrowdSource Mobile Testing Program](https://digital.gov/services/mobile-application-testing-program/)  — Free mobile compatibility testing by feds, for feds.
+-   [Digital Analytics Program](https://digital.gov/services/dap/)  (DAP) — A free analytics tool for measuring digital services in the federal government
+-   [Section508.gov](https://www.section508.gov/)  and  [PlainLanguage.gov](https://www.plainlanguage.gov/)  resources
+-   [API.data.gov](https://api.data.gov/)  — a free API management service for federal agencies
+-   [U.S. Digital Registry](https://digital.gov/services/u-s-digital-registry/)  — A resource for confirming the official status of government social media accounts, mobile apps, and mobile websites.
+
+
+**Questions or feedback?** [Submit an issue](https://github.com/GSA/digitalgov.gov/issues) or send us an email to [digitalgov@gsa.gov](mailto:digitalgov@gsa.gov) :heart:
--- a/docs/content/en/showcase/flesland-flis/bio.md
+++ b/docs/content/en/showcase/flesland-flis/bio.md
@@ -3,6 +3,6 @@
 
 The page is designed and developed by Sindre Gusdal:
 
-* [Absoluttweb AS](http://www.absoluttweb.no)
+* [Absoluttweb AS](https://www.absoluttweb.no)
 * [Sindre Gusdal](https://www.linkedin.com/in/sindregusdal/)
 
--- a/docs/content/en/showcase/flesland-flis/index.md
+++ b/docs/content/en/showcase/flesland-flis/index.md
@@ -4,7 +4,7 @@
 date: 2018-04-24
 description: "showcase: Business Page for a tile shop in Bergen, Norway"
 siteURL: https://www.fleslandflis.no
-byline: "[Sindre Gusdal](http://www.absoluttweb.no), Absoluttweb AS"
+byline: "[Sindre Gusdal](https://www.absoluttweb.no), Absoluttweb AS"
 
 ---
 
--- /dev/null
+++ b/docs/content/en/showcase/keycdn/bio.md
@@ -1,0 +1,1 @@
+[KeyCDN](https://www.keycdn.com) is a high performance content delivery network (CDN) offering many powerful features, including image processing that can transform and optimize images in real time. Our network offers global coverage to speed up content delivery and is capable of delivering entire static websites, like those built with Hugo, at the edge.
binary files /dev/null b/docs/content/en/showcase/keycdn/featured.png differ
--- /dev/null
+++ b/docs/content/en/showcase/keycdn/index.md
@@ -1,0 +1,30 @@
+---
+
+title: KeyCDN
+date: 2020-04-10
+description: "Showcase: \"Hugo has become an integral part of our stack.\""
+siteURL: https://www.keycdn.com
+
+---
+
+At KeyCDN one of our primary focuses is on performance. With speed being ingrained in our DNA we knew from the start that we must use a fast static website generator that could meet our requirements. When evaluating the right solution, Hugo met our requirements and we looked no further as it was the fastest and most flexible.
+
+## Why we chose Hugo
+
+Before our migration to Hugo our website was powered by a PHP-based website that had about 50 pages and a WordPress website that had over 500 posts between our blog and knowledge base. This became harder to maintain as time continued. We felt like we were losing the speed and flexibility that we require. To overcome this we knew we needed to convert our website to be static. This would allow our website to be faster and more secure as it could be delivered by all of our edge locations.
+
+It wasn’t an easy task at the beginning, however, after evaluating Hugo and benchmarking it we knew we had found the ideal solution. Hugo was by far the fastest setup and offered an intuitive way to build our entire website exactly as needed. The Go-based templates, shortcodes, and configuration options made it easy to build a complex website.
+
+In the fall of 2018 we started the migration and within a couple short months we had built a custom static website with Hugo and migrated all content from our old systems. The simplicity and vast amount of functionality that Hugo offers made this process fast and left our entire team, including all of our writers and developers, happy with the migration. Since migrating to Hugo we haven’t looked back. Hugo has become an integral part of our stack. We’re grateful to all those who have contributed to make Hugo what it is today.
+
+## Technical overview
+
+Below is an overview of what we used with Hugo to build our website:
+
+* [KeyCDN](https://www.keycdn.com) uses a custom theme and is our primary hub for all style sheets and JavaScript. Our other websites, like [KeyCDN Tools](https://tools.keycdn.com), only import the required style sheets and JavaScript.
+* We use [Gulp](https://gulpjs.com) in our build process for many tasks, such as combining, versioning, and compressing our style sheets as well as our JavaScript.
+* Our search is powered by a custom solution that we’ve built. It allows our pages, blog, and knowledge base to be searched. It uses [Axios](https://github.com/axios/axios) to send a `POST` request containing the search query. An index file in JSON generated by Hugo is searched and the results are then returned.
+* Our commenting system is also powered by a custom solution that we’ve built. It uses Axios to send a `GET` request containing the slug to pull the comment thread and a `POST` request containing the name, email address, and comment when submitting a comment.
+* Our contact form is a simple HTML form, which uses Axios as well.
+* Our writers use shortcodes to enhance the capability of markdown.
+* Our entire website is delivered through KeyCDN using a Pull Zone, which means all of our edge locations are delivering our website.
--- a/docs/content/en/templates/lists.md
+++ b/docs/content/en/templates/lists.md
@@ -534,7 +534,7 @@
 [`first` function][firstfunction] for further details.
 
 [base]: /templates/base/
-[bepsays]: http://bepsays.com/en/2016/12/19/hugo-018/
+[bepsays]: https://bepsays.com/en/2016/12/19/hugo-018/
 [directorystructure]: /getting-started/directory-structure/
 [`Format` function]: /functions/format/
 [front matter]: /content-management/front-matter/
@@ -541,10 +541,10 @@
 [getpage]: /functions/getpage/
 [homepage]: /templates/homepage/
 [homepage]: /templates/homepage/
-[mentalmodel]: http://webstyleguide.com/wsg3/3-information-architecture/3-site-structure.html
+[mentalmodel]: https://webstyleguide.com/wsg3/3-information-architecture/3-site-structure.html
 [pagevars]: /variables/page/
 [partials]: /templates/partials/
-[RSS 2.0]: http://cyber.law.harvard.edu/rss/rss.html "RSS 2.0 Specification"
+[RSS 2.0]: https://cyber.harvard.edu/rss/rss.html "RSS 2.0 Specification"
 [rss]: /templates/rss/
 [sections]: /content-management/sections/
 [sectiontemps]: /templates/section-templates/
--- a/docs/content/en/templates/sitemap-template.md
+++ b/docs/content/en/templates/sitemap-template.md
@@ -43,7 +43,7 @@
 
 ## Hugo’s sitemap.xml
 
-This template respects the version 0.9 of the [Sitemap Protocol](http://www.sitemaps.org/protocol.html).
+This template respects the version 0.9 of the [Sitemap Protocol](https://www.sitemaps.org/protocol.html).
 
 ```xml
 {{ printf "<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\" ?>" | safeHTML }}
--- a/docs/content/en/variables/files.md
+++ b/docs/content/en/variables/files.md
@@ -39,7 +39,6 @@
 .File.BaseFileName
 : the filename without extension (e.g., `foo.en`)
 
-
 .File.Ext
 : the file extension of the content file (e.g., `md`); this can also be called using `.File.Extension` as well. Note that it is *only* the extension without `.`.
 
@@ -48,5 +47,8 @@
 
 .File.Dir
 : given the path `content/posts/dir1/dir2/`, the relative directory path of the content file will be returned (e.g., `posts/dir1/dir2/`). Note that the path separator (`\` or `/`) could be dependent on the operating system.
+
+.File.UniqueID
+: the MD5-checksum of the content file's path.
 
 [Multilingual]: /content-management/multilingual/
--- a/docs/content/en/variables/page.md
+++ b/docs/content/en/variables/page.md
@@ -131,7 +131,7 @@
 
 .RawContent
 : raw markdown content without the front matter. Useful with [remarkjs.com](
-http://remarkjs.com)
+https://remarkjs.com)
 
 .ReadingTime
 : the estimated time, in minutes, it takes to read the content.
@@ -179,8 +179,8 @@
 .Type
 : the [content type](/content-management/types/) of the content (e.g., `posts`).
 
-.UniqueID
-: the MD5-checksum of the content file's path.
+.UniqueID (deprecated)
+: the MD5-checksum of the content file's path. This variable is deprecated and will be removed, use `.File.UniqueID` instead.
 
 .Weight
 : assigned weight (in the front matter) to this content, used in sorting.
--- a/docs/content/zh/_index.md
+++ b/docs/content/zh/_index.md
@@ -34,7 +34,7 @@
 sections:
   - heading: "100s of Themes"
     cta: Check out the Hugo's themes.
-    link: http://themes.gohugo.io/
+    link: https://themes.gohugo.io/
     color_classes: bg-accent-color white
     image: /images/homepage-screenshot-hugo-themes.jpg
     copy: "Hugo provides a robust theming system that is easy to implement but capable of producing even the most complicated websites."
--- a/docs/netlify.toml
+++ b/docs/netlify.toml
@@ -3,7 +3,7 @@
 command = "hugo --gc --minify"
 
 [context.production.environment]
-HUGO_VERSION = "0.68.3"
+HUGO_VERSION = "0.69.2"
 HUGO_ENV = "production"
 HUGO_ENABLEGITINFO = "true"
 
@@ -11,7 +11,7 @@
 command = "hugo --gc --minify --enableGitInfo"
 
 [context.split1.environment]
-HUGO_VERSION = "0.68.3"
+HUGO_VERSION = "0.69.2"
 HUGO_ENV = "production"
 
 [context.deploy-preview]
@@ -18,13 +18,13 @@
 command = "hugo --gc --minify --buildFuture -b $DEPLOY_PRIME_URL"
 
 [context.deploy-preview.environment]
-HUGO_VERSION = "0.68.3"
+HUGO_VERSION = "0.69.2"
 
 [context.branch-deploy]
 command = "hugo --gc --minify -b $DEPLOY_PRIME_URL"
 
 [context.branch-deploy.environment]
-HUGO_VERSION = "0.68.3"
+HUGO_VERSION = "0.69.2"
 
 [context.next.environment]
 HUGO_ENABLEGITINFO = "true"
binary files a/docs/resources/_gen/images/news/0.48-relnotes/featured-hugo-48-poster_hub95348423e80ff144dfee01d64fb9889_95358_640x0_resize_catmullrom_2.png /dev/null differ
binary files a/docs/resources/_gen/images/news/0.49-relnotes/featured-hugo-49-poster_hud9cdb0f9aa2ec95d28fc3f49c81e7940_66352_640x0_resize_catmullrom_2.png /dev/null differ
binary files a/docs/resources/_gen/images/news/0.50-relnotes/featured-hugo-50-poster_hudcbbb9a5a0079d08447101e6cfae6e40_227240_640x0_resize_catmullrom_2.png /dev/null differ
binary files a/docs/resources/_gen/images/news/0.51-relnotes/featured-hugo-51-poster_hu25ab021d1365edeedf46d92fdb888ccf_117678_640x0_resize_catmullrom_2.png /dev/null differ
binary files a/docs/resources/_gen/images/news/0.52-relnotes/featured-hugo-52-poster_hu7f2ed09038efabda07872a275a935ada_336810_640x0_resize_catmullrom_2.png /dev/null differ
binary files a/docs/resources/_gen/images/news/0.53-relnotes/featured-hugo-53-poster_hu3f68fc193ad172155ee35a0be89133bf_110427_640x0_resize_catmullrom_2.png /dev/null differ
binary files /dev/null b/docs/resources/_gen/images/news/0.69.0-relnotes/hugo-69-easter-featured_hu1e6bcfa5c2c3547379b657838d335c52_398560_480x0_resize_catmullrom_2.png differ
binary files /dev/null b/docs/resources/_gen/images/news/0.69.0-relnotes/hugo-69-easter-featured_hu1e6bcfa5c2c3547379b657838d335c52_398560_640x0_resize_catmullrom_2.png differ
binary files a/docs/resources/_gen/images/showcase/Aether/featured_hu087b0e6f87446792599d3d3535cdd374_275219_1024x512_fill_catmullrom_top_2.png /dev/null differ
binary files a/docs/resources/_gen/images/showcase/Aether/featured_hu087b0e6f87446792599d3d3535cdd374_275219_640x0_resize_catmullrom_2.png /dev/null differ
binary files a/docs/resources/_gen/images/showcase/Aether/featured_hu087b0e6f87446792599d3d3535cdd374_275219_989c7e76c2c712f873e3f3bc40d31e81.png /dev/null differ
binary files /dev/null b/docs/resources/_gen/images/showcase/keycdn/featured_hub7f38531767be8be63ac710821ebd35e_358740_1024x512_fill_catmullrom_top_2.png differ
binary files /dev/null b/docs/resources/_gen/images/showcase/keycdn/featured_hub7f38531767be8be63ac710821ebd35e_358740_1b9f2369c3bfa3c47e6a6a32fc7b5fed.png differ
binary files /dev/null b/docs/resources/_gen/images/showcase/keycdn/featured_hub7f38531767be8be63ac710821ebd35e_358740_640x0_resize_catmullrom_2.png differ
binary files a/docs/resources/_gen/images/showcase/over/featured-over_hu096cafb8a4c371f6c5d5431b68c2978f_194841_640x0_resize_catmullrom_2.png /dev/null differ