diff --git a/example/7-template/README.md b/example/7-template/README.md
index 8074baea..780de8f8 100644
--- a/example/7-template/README.md
+++ b/example/7-template/README.md
@@ -149,6 +149,10 @@ and not supported by Dream.
OCaml's type system to prevent emitting many kinds of invalid HTML.
- [**`r-tyxml`**](../r-tyxml#files) if you are using Reason. You can use TyXML
with JSX syntax server-side!
+- [**`w-dream-html`**](../w-dream-html#files) shows how to use
+ [dream-html](https://github.com/yawaramin/dream-html), another alternative
+ library for generating HTML from OCaml, which is more closely integrated with
+ Dream.
- [**`w-template-stream`**](../w-template-stream#files) streams templates to
responses, instead of building up complete response strings.
diff --git a/example/README.md b/example/README.md
index f38fba43..0da93f97 100644
--- a/example/README.md
+++ b/example/README.md
@@ -128,6 +128,8 @@ if something is missing!
reverse proxy.
- [**`w-tyxml`**](w-tyxml#files) — uses TyXML for type-checked
HTML templating.
+- [**`w-dream-html`**](../w-dream-html#files) — uses
+ dream-html for convenient HTML generation from OCaml.
- [**`w-long-polling`**](w-long-polling#files) — old form of
asynchronous communication without WebSockets.
- [**`w-query`**](w-query#files) — reads URL query parameters.
diff --git a/example/w-dream-html/README.md b/example/w-dream-html/README.md
new file mode 100644
index 00000000..0e8411d8
--- /dev/null
+++ b/example/w-dream-html/README.md
@@ -0,0 +1,67 @@
+# `w-dream-html`
+
+
+
+[Dream-html](https://github.com/yawaramin/dream-html) can be used with Dream for
+generating HTML. Dream-html is a library that offers functions for generating
+HTML, SVG, and MathML, as well as out-of-the-box support for
+[htmx](https://htmx.org/) attributes. It is closely integrated with Dream for
+convenience.
+
+```ocaml
+let greet who =
+ let open Dream_html in
+ let open HTML in
+ html [lang "en"] [
+ head [] [
+ title [] "Greeting";
+ ];
+ comment "Embedded in the HTML";
+ body [] [
+ h1 [] [txt "Good morning, %s!" who];
+ ];
+ ]
+
+let () =
+ Dream.run
+ @@ Dream.logger
+ @@ Dream.router [
+
+ Dream.get "/"
+ (fun _ -> Dream_html.respond (greet "world"));
+
+ ]
+```
+
+
$ cd example/w-dream-html
+$ opam install --deps-only --yes .
+$ dune exec --root . ./main.exe
+
+Try it in the [playground](https://dream.as/w-dream-html).
+
+Some notes:
+
+- All text nodes and attributes are HTML-escaped by default for security, with
+ exceptions noted in the documentation
+- All text nodes and attributes accept format strings for conveniently embedding
+ variables in the HTML
+- Functions like `Dream_html.respond`, `Dream_html.send`, `Dream_html.csrf_tag`
+ provide convenient integration with Dream
+- The `` prefix is automatically rendered before the `` tag
+- The `SVG` and `MathML` modules provide their corresponding markup. The `Hx`
+ module provides htmx attributes.
+
+