diff --git a/README.md b/README.md
index aeb8c6f..da31aaf 100644
--- a/README.md
+++ b/README.md
@@ -50,3 +50,8 @@
 starting point for your own code.
 
 _Note_: The `goapp` tool is part of the [Google App Engine SDK for Go](https://cloud.google.com/appengine/downloads#Google_App_Engine_SDK_for_Go).
+
+### [template][template/] ([godoc](//godoc.org/github.com/golang/example/template))
+
+A trivial web server that demonstrates the use of the
+[`template` package](https://golang.org/pkg/text/template/)'s `block` feature.
diff --git a/template/image.tmpl b/template/image.tmpl
new file mode 100644
index 0000000..14d1097
--- /dev/null
+++ b/template/image.tmpl
@@ -0,0 +1,9 @@
+{{define "content"}}
+<div id="image">
+	<img src="{{.URL}}" title="{{.Title}}" alt="{{.Title}}">
+</div>
+{{end}}
+
+{{define "sidebar"}}
+<a href="/">Back</a>
+{{end}}
diff --git a/template/index.tmpl b/template/index.tmpl
new file mode 100644
index 0000000..9b77440
--- /dev/null
+++ b/template/index.tmpl
@@ -0,0 +1,41 @@
+<!DOCTYPE html>
+<html>
+	<head>
+		<meta charset="utf-8">
+		<title>{{.Title}}</title>
+		<style>
+			body {
+				font-family: sans-serif;
+			}
+			h1 {
+				background: #ddd;
+			}
+			#sidebar {
+				float: right;
+			}
+		</style>
+	</head>
+	<body>
+		<h1>{{.Title}}</h1>
+
+		<div id="sidebar">
+			{{block "sidebar" .}}
+			<h2>Links</h2>
+			{{/* The dashes in the following template directives
+			     ensure the generated HTML of this list contains no
+			     extraneous spaces or line breaks. */}}
+			<ul id="sidebar">
+				{{- range .Links}}
+				<li><a href="{{.URL}}">{{.Title}}</a></li>
+				{{- end}}
+			</ul>
+			{{end}}
+		</div>
+
+		{{block "content" .}}
+		<div id="content">
+			{{.Body}}
+		</div>
+		{{end}}
+	</body>
+</html>
diff --git a/template/main.go b/template/main.go
new file mode 100644
index 0000000..5da5475
--- /dev/null
+++ b/template/main.go
@@ -0,0 +1,97 @@
+/*
+Copyright 2016 Google Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+     http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+// Command template is a trivial web server that uses the text/template (and
+// html/template) package's "block" feature to implement a kind of template
+// inheritance.
+//
+// It should be executed from the directory in which the source resides,
+// as it will look for its template files in the current directory.
+package main
+
+import (
+	"html/template"
+	"log"
+	"net/http"
+	"strings"
+)
+
+func main() {
+	http.HandleFunc("/", indexHandler)
+	http.HandleFunc("/image/", imageHandler)
+	log.Fatal(http.ListenAndServe("localhost:8080", nil))
+}
+
+// indexTemplate is the main site template.
+// The default template includes two template blocks ("sidebar" and "content")
+// that may be replaced in templates derived from this one.
+var indexTemplate = template.Must(template.ParseFiles("index.tmpl"))
+
+// Index is a data structure used to populate an indexTemplate.
+type Index struct {
+	Title string
+	Body  string
+	Links []Link
+}
+
+type Link struct {
+	URL, Title string
+}
+
+// indexHandler is an HTTP handler that serves the index page.
+func indexHandler(w http.ResponseWriter, r *http.Request) {
+	data := &Index{
+		Title: "Image gallery",
+		Body:  "Welcome to the image gallery.",
+	}
+	for name, img := range images {
+		data.Links = append(data.Links, Link{
+			URL:   "/image/" + name,
+			Title: img.Title,
+		})
+	}
+	if err := indexTemplate.Execute(w, data); err != nil {
+		log.Println(err)
+	}
+}
+
+// imageTemplate is a clone of indexTemplate that provides
+// alternate "sidebar" and "content" templates.
+var imageTemplate = template.Must(template.Must(indexTemplate.Clone()).ParseFiles("image.tmpl"))
+
+// Image is a data structure used to populate an imageTemplate.
+type Image struct {
+	Title string
+	URL   string
+}
+
+// imageHandler is an HTTP handler that serves the image pages.
+func imageHandler(w http.ResponseWriter, r *http.Request) {
+	data, ok := images[strings.TrimPrefix(r.URL.Path, "/image/")]
+	if !ok {
+		http.NotFound(w, r)
+		return
+	}
+	if err := imageTemplate.Execute(w, data); err != nil {
+		log.Println(err)
+	}
+}
+
+// images specifies the site content: a collection of images.
+var images = map[string]*Image{
+	"go":     {"The Go Gopher", "https://golang.org/doc/gopher/frontpage.png"},
+	"google": {"The Google Logo", "https://www.google.com/images/branding/googlelogo/1x/googlelogo_color_272x92dp.png"},
+}
