diff --git a/content/en/news/_index.md b/content/en/news/_index.md
index e37c33a3c..bb2531dd6 100644
--- a/content/en/news/_index.md
+++ b/content/en/news/_index.md
@@ -1,4 +1,4 @@
---
-title: Hugo News
+title: News
aliases: [/release-notes/]
---
diff --git a/layouts/news/list.html b/layouts/news/list.html
new file mode 100644
index 000000000..a41e45a2c
--- /dev/null
+++ b/layouts/news/list.html
@@ -0,0 +1,57 @@
+{{ define "main" }}
+
+
+
+
+ {{ .Title }}
+
+
+ {{ .Content }}
+
+
+
+
+ {{ $interior_classes := $.Site.Params.flex_box_interior_classes }}
+
+
+ {{ $news_items := slice }}
+
+ {{/* Get releases from GitHub. */}}
+ {{ $u := "https://api.github.com/repos/gohugoio/hugo/releases" }}
+ {{ $releases := partial "utilities/get-remote-data.html" $u }}
+ {{ $releases = where $releases "draft" false }}
+ {{ $releases = where $releases "prerelease" false }}
+ {{ range $releases | first 20 }}
+ {{ $ctx := dict
+ "Date" (.published_at | time.AsTime)
+ "Title" (printf "Release %s" .name)
+ "Permalink" .html_url
+ "Section" "news"
+ "Summary" ""
+ }}
+ {{ $news_items = $news_items | append $ctx }}
+ {{ end }}
+
+ {{/* Get content pages from news section. */}}
+ {{ range .Pages }}
+ {{ $ctx := dict
+ "Date" .Date
+ "Title" .Title
+ "RelPermalink" .RelPermalink
+ "Section" "news"
+ "Summary" .Summary
+ "Params" (dict "description" .Description)
+ }}
+ {{ $news_items = $news_items | append $ctx }}
+ {{ end }}
+
+ {{/* Sort by date (descending) and render. */}}
+ {{ range sort $news_items "Date" "desc" }}
+ {{ partial "boxes-section-summaries.html" (dict "context" . "classes" $interior_classes "fullcontent" false) }}
+ {{ end }}
+
+
+
+
+
+{{ end }}
diff --git a/layouts/news/list.xml b/layouts/news/list.xml
new file mode 100644
index 000000000..948d405d4
--- /dev/null
+++ b/layouts/news/list.xml
@@ -0,0 +1,74 @@
+
+
+{{- printf "" | safeHTML }}
+
+
+ {{- $title := printf "%s on %s" .Title site.Title }}
+ {{- $description := printf "Recent content in %s on %s" .Title site.Title }}
+ {{- if .IsHome }}
+ {{- $title = site.Title }}
+ {{- $description := printf "Recent content on %s" site.Title }}
+ {{- end }}
+ {{ $title }}
+ {{ $description }}
+ {{ .Permalink }}
+ Hugo {{ hugo.Version }}
+ {{ or site.Language.LanguageCode site.Language.Lang }}
+ {{- with site.Copyright }}
+ {{ . }}
+ {{- end }}
+ {{- with .OutputFormats.Get "RSS" }}
+ {{ printf "" .Permalink .MediaType | safeHTML }}
+ {{- end }}
+
+ {{- $news_items := slice }}
+
+ {{- /* Get releases from GitHub. */}}
+ {{- $u := "https://api.github.com/repos/gohugoio/hugo/releases" }}
+ {{- $releases := partial "utilities/get-remote-data.html" $u }}
+ {{- $releases = where $releases "draft" false }}
+ {{- $releases = where $releases "prerelease" false }}
+ {{- range $releases | first 20 }}
+ {{- $summary := printf
+ "Hugo %s was released on %s. See [release notes](%s) for details."
+ .tag_name
+ (.published_at | time.AsTime | time.Format "2 Jan 2006")
+ .html_url
+ }}
+ {{- $ctx := dict
+ "PublishDate" (.published_at | time.AsTime)
+ "Title" (printf "Release %s" .name)
+ "Permalink" .html_url
+ "Section" "news"
+ "Summary" ($summary | $.Page.RenderString)
+ }}
+ {{- $news_items = $news_items | append $ctx }}
+ {{- end }}
+
+ {{- /* Get content pages from news section. */}}
+ {{- range .Pages }}
+ {{- $ctx := dict
+ "PublishDate" .PublishDate
+ "Title" .Title
+ "RelPermalink" .RelPermalink
+ "Section" "news"
+ "Summary" .Summary
+ "Params" (dict "description" .Description)
+ }}
+ {{- $news_items = $news_items | append $ctx }}
+ {{- end }}
+
+ {{- /* Sort by PublishDate (descending) and render. */}}
+ {{- $limit := cond (gt site.Config.Services.RSS.Limit 1) site.Config.Services.RSS.Limit 999 }}
+ {{- range sort $news_items "PublishDate" "desc" | first $limit }}
+ -
+ {{ .Title }}
+ {{ .Permalink }}
+ {{ .PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
+ {{ .Permalink }}
+ {{ .Summary | transform.XMLEscape | safeHTML }}
+
+ {{- end }}
+ {{ (index (sort $news_items "PublishDate" "desc") 0).PublishDate.Format "Mon, 02 Jan 2006 15:04:05 -0700" | safeHTML }}
+
+
diff --git a/layouts/partials/utilities/get-remote-data.html b/layouts/partials/utilities/get-remote-data.html
new file mode 100644
index 000000000..69ac41da4
--- /dev/null
+++ b/layouts/partials/utilities/get-remote-data.html
@@ -0,0 +1,23 @@
+{{/*
+Parses the serialized data from the given URL and returns a map or an array.
+
+Supports CSV, JSON, TOML, YAML, and XML.
+
+@param {string} . The URL from which to retrieve the serialized data.
+@returns {any}
+
+@example {{ partial "get-remote-data.html" "https://example.org/foo.json" }}
+*/}}
+
+{{ $url := . }}
+{{ $data := dict }}
+{{ with resources.GetRemote $url }}
+ {{ with .Err }}
+ {{ errorf "%s" . }}
+ {{ else }}
+ {{ $data = .Content | transform.Unmarshal }}
+ {{ end }}
+{{ else }}
+ {{ errorf "Unable to get remote resource %q" $url }}
+{{ end }}
+{{ return $data }}