diff --git a/metropolis/handbook/defs.bzl b/metropolis/handbook/defs.bzl
new file mode 100644
index 0000000..c875980
--- /dev/null
+++ b/metropolis/handbook/defs.bzl
@@ -0,0 +1,111 @@
+def _mdbook_html_impl(ctx):
+    # We will be generating our own book.toml based on this rule's configuration.
+    #
+    # We do this because:
+    #  - The book.toml must contain a reference to the source files of the
+    #    generated book. This only works as long as the source files are not
+    #    generated by Bazel.
+    #  - The book.toml file effectively describes a build, so it makes sense to
+    #    port that over to be fully managed by the Bazel rule for mdbook. This
+    #    makes things more consistent with the rest of our Bazel usage, at the
+    #    expense of slightly deviating from how upstream does things.
+    #
+    # We emit the toml into `book.toml` because that's what mdbook needs.
+    # However, instead of emitting it in a subdirectory named after this
+    # target, we do that in `${target}_`. This is so that we can use the target
+    # name as a directory containing the actual generated HTML files, making
+    # the life of developers using this rule a bit easier.
+    out_book_toml = ctx.actions.declare_file(ctx.attr.name + "_/book.toml")
+
+    # Find root of given handbook from srcs - there must be exactly one
+    # SUMMARY.md and the parent directory of that is the root.
+    summary = None
+    for f in ctx.files.srcs:
+        if not f.path.endswith('/SUMMARY.md'):
+            continue
+        if summary != None:
+            fail("More then one SUMMARY.md provided.")
+        summary = f
+    if summary == None:
+        fail("No SUMMARY.md provided in srcs.")
+
+    # We now have the SUMMARY.md file from which we can figure out the source
+    # directory of the book. However, mdbook takes a source root path relative
+    # to the book.toml file, not one relative to the current working
+    # directory... Thus, we need to prepend a list of '../' elements that bring
+    # mdbook down from the book.toml location back into the workspace execution
+    # root, which is where our SUMMARY.md path is itself rooted.
+    #
+    # For example, if book.toml lives in:
+    #   execroot/dev_source_monogon/bazel-out/k8-fastbuild/bin/metropolis/handbook/handbook_/book.toml
+    # Then we will need to prepend:
+    #   ../../../../../../../
+    # To get back to execroot/.
+    prepend = len(out_book_toml.path.split('/')) - 1
+    src_dir_path = ('../' * prepend) + summary.dirname
+
+    # Generate book.toml.
+    # Bazel does not have a toml library. We abuse JSON encoding to get
+    # serialized list/string data as an acceptable substitute to building a
+    # fully self-standing toml serializer for Bazel.
+    book_toml_contents = [
+        "[book]",
+        "title = {}".format(json.encode(ctx.attr.title)),
+        "authors = {}".format(json.encode(ctx.attr.authors)),
+        "language = {}".format(json.encode(ctx.attr.language)),
+        "multilingual = false",
+        "src = {}".format(json.encode(src_dir_path)),
+    ]
+    ctx.actions.write(
+        output = out_book_toml,
+        content = "\n".join(book_toml_contents)
+    )
+
+    out_dir = ctx.actions.declare_directory(ctx.attr.name)
+    # We also have to prepend the out dir path, for the same reasons for which
+    # we prepend src_dir_path above.
+    out_dir_path = ('../' * prepend) + out_dir.path
+    ctx.actions.run(
+        executable = ctx.executable._mdbook,
+        arguments = [
+            "build",
+            "-d", out_dir_path,
+            out_book_toml.dirname,
+        ],
+        inputs = ctx.files.srcs + [ out_book_toml ],
+        outputs = [ out_dir ],
+    )
+    return [
+        DefaultInfo(
+            files = depset([out_dir]),
+        )
+    ]
+
+mdbook_html = rule(
+    doc = "Build an mdbook source root into HTML files.",
+    implementation = _mdbook_html_impl,
+    attrs = {
+        "title": attr.string(
+            doc = "The title of the generated book.",
+        ),
+        "authors": attr.string_list(
+            default = ["Monogon Project Authors"],
+            doc = "The authors of the generated book.",
+        ),
+        "language": attr.string(
+            default = "en",
+            doc = "The language of the generated book.",
+        ),
+        "srcs": attr.label_list(
+            allow_files = True,
+            doc = "The sources of the generated book. Exaclty one file must be named SUMMARY.md, and that file's location will be used to determine the root of the book sources.",
+        ),
+
+        "_mdbook": attr.label(
+            doc = "The mdbook tool.",
+            executable = True,
+            cfg = "host",
+            default = "@dev_source_monogon//third_party/rust:cargo_bin_mdbook",
+        ),
+    },
+)
