diff --git a/.gitignore b/.gitignore
index 120aa31257..35151d257b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,5 +1,4 @@
/book/html/
-/book/src/img/
/book/src/tests.ok
/farf/
/solana-release/
diff --git a/book/build-svg.sh b/book/build-svg.sh
new file mode 100755
index 0000000000..624e6b52a2
--- /dev/null
+++ b/book/build-svg.sh
@@ -0,0 +1,11 @@
+#!/usr/bin/env bash
+set -e
+
+cd "$(dirname "$0")"
+
+make -j"$(nproc)" -B svg
+
+if [[ -n $CI ]]; then
+ # In CI confirm that no svgs need to be built
+ git diff --exit-code
+fi
diff --git a/book/makefile b/book/makefile
index 1e7da7628d..79e04165e8 100644
--- a/book/makefile
+++ b/book/makefile
@@ -9,6 +9,8 @@ TEST_STAMP=src/tests.ok
all: $(TARGET)
+svg: $(SVG_IMGS)
+
test: $(TEST_STAMP)
open: $(TEST_STAMP)
diff --git a/book/src/img/consensus.svg b/book/src/img/consensus.svg
new file mode 100644
index 0000000000..70a3235081
--- /dev/null
+++ b/book/src/img/consensus.svg
@@ -0,0 +1,159 @@
+
+
diff --git a/book/src/img/data-plane-fanout.svg b/book/src/img/data-plane-fanout.svg
new file mode 100644
index 0000000000..ad73f77ef0
--- /dev/null
+++ b/book/src/img/data-plane-fanout.svg
@@ -0,0 +1,183 @@
+
diff --git a/book/src/img/data-plane-neighborhood.svg b/book/src/img/data-plane-neighborhood.svg
new file mode 100644
index 0000000000..1a7f080a31
--- /dev/null
+++ b/book/src/img/data-plane-neighborhood.svg
@@ -0,0 +1,322 @@
+
diff --git a/book/src/img/data-plane-seeding.svg b/book/src/img/data-plane-seeding.svg
new file mode 100644
index 0000000000..765b53c93f
--- /dev/null
+++ b/book/src/img/data-plane-seeding.svg
@@ -0,0 +1,138 @@
+
diff --git a/book/src/img/data-plane.svg b/book/src/img/data-plane.svg
new file mode 100644
index 0000000000..5a33b8bf6e
--- /dev/null
+++ b/book/src/img/data-plane.svg
@@ -0,0 +1,192 @@
+
diff --git a/book/src/img/fork-generation.svg b/book/src/img/fork-generation.svg
new file mode 100644
index 0000000000..3d13d7549b
--- /dev/null
+++ b/book/src/img/fork-generation.svg
@@ -0,0 +1,330 @@
+
diff --git a/book/src/img/forks-pruned.svg b/book/src/img/forks-pruned.svg
new file mode 100644
index 0000000000..5a8f41f21c
--- /dev/null
+++ b/book/src/img/forks-pruned.svg
@@ -0,0 +1,92 @@
+
diff --git a/book/src/img/forks-pruned2.svg b/book/src/img/forks-pruned2.svg
new file mode 100644
index 0000000000..f57f691d73
--- /dev/null
+++ b/book/src/img/forks-pruned2.svg
@@ -0,0 +1,92 @@
+
diff --git a/book/src/img/forks.svg b/book/src/img/forks.svg
new file mode 100644
index 0000000000..725a73f5d3
--- /dev/null
+++ b/book/src/img/forks.svg
@@ -0,0 +1,122 @@
+
diff --git a/book/src/img/passive-staking-callflow.svg b/book/src/img/passive-staking-callflow.svg
new file mode 100644
index 0000000000..378686284a
--- /dev/null
+++ b/book/src/img/passive-staking-callflow.svg
@@ -0,0 +1,238 @@
+
+
diff --git a/book/src/img/runtime.svg b/book/src/img/runtime.svg
new file mode 100644
index 0000000000..0a9b8289b2
--- /dev/null
+++ b/book/src/img/runtime.svg
@@ -0,0 +1,346 @@
+
diff --git a/book/src/img/sdk-tools.svg b/book/src/img/sdk-tools.svg
new file mode 100644
index 0000000000..629a3feaa3
--- /dev/null
+++ b/book/src/img/sdk-tools.svg
@@ -0,0 +1,237 @@
+
diff --git a/book/src/img/spv-bank-merkle.svg b/book/src/img/spv-bank-merkle.svg
new file mode 100644
index 0000000000..a07908d17e
--- /dev/null
+++ b/book/src/img/spv-bank-merkle.svg
@@ -0,0 +1,163 @@
+
diff --git a/book/src/img/spv-block-merkle.svg b/book/src/img/spv-block-merkle.svg
new file mode 100644
index 0000000000..18ea80cadd
--- /dev/null
+++ b/book/src/img/spv-block-merkle.svg
@@ -0,0 +1,203 @@
+
diff --git a/book/src/img/tpu.svg b/book/src/img/tpu.svg
new file mode 100644
index 0000000000..1de96c7927
--- /dev/null
+++ b/book/src/img/tpu.svg
@@ -0,0 +1,312 @@
+
diff --git a/book/src/img/tvu.svg b/book/src/img/tvu.svg
new file mode 100644
index 0000000000..de4c59c97e
--- /dev/null
+++ b/book/src/img/tvu.svg
@@ -0,0 +1,311 @@
+
diff --git a/book/src/img/validator-proposal.svg b/book/src/img/validator-proposal.svg
new file mode 100644
index 0000000000..bf8410aba8
--- /dev/null
+++ b/book/src/img/validator-proposal.svg
@@ -0,0 +1,496 @@
+
diff --git a/book/src/img/validator.svg b/book/src/img/validator.svg
new file mode 100644
index 0000000000..11be7b6a71
--- /dev/null
+++ b/book/src/img/validator.svg
@@ -0,0 +1,456 @@
+
diff --git a/ci/test-checks.sh b/ci/test-checks.sh
index 3ca63a03cf..0145461569 100755
--- a/ci/test-checks.sh
+++ b/ci/test-checks.sh
@@ -23,6 +23,7 @@ _ cargo +"$rust_stable" audit --ignore RUSTSEC-2019-0013
_ ci/nits.sh
_ ci/order-crates-for-publishing.py
_ book/build.sh
+_ book/build-svg.sh
{
cd programs/bpf