diff --git a/README.md b/README.md
index 848686b40..ef0a29ca9 100644
--- a/README.md
+++ b/README.md
@@ -220,7 +220,19 @@ depend on `mgmt`.
│ │
└───────────────────────────┘
```
-
+
+>[!NOTE]
+> This graph is incomplete. It simply illustrates the tier concept.
+
+
+
+
+
+
+Full workspace dependency graph. Note that tier-1 packages (like net) never depend on tier-2 packages (like nat).
+
+
+
diff --git a/justfile b/justfile
index ee68a48ef..8ac29140c 100644
--- a/justfile
+++ b/justfile
@@ -505,3 +505,11 @@ coverage *args: \
(cargo "llvm-cov" "report" "--html" "--output-dir=./target/nextest/coverage" "--profile=fuzz") \
(cargo "llvm-cov" "report" "--json" "--output-path=./target/nextest/coverage/report.json" "--profile=fuzz") \
(cargo "llvm-cov" "report" "--codecov" "--output-path=./target/nextest/coverage/codecov.json" "--profile=fuzz")
+
+
+# regenerate the dependency graph for the project
+[script]
+depgraph:
+ just cargo depgraph --exclude dataplane-test-utils,dataplane-dpdk-sysroot-helper --workspace-only \
+ | sed 's/dataplane-//g' \
+ | dot -Grankdir=TD -Gsplines=polyline -Granksep=1.5 -Tsvg > workspace-deps.svg
diff --git a/workspace-deps.svg b/workspace-deps.svg
new file mode 100644
index 000000000..c538ad407
--- /dev/null
+++ b/workspace-deps.svg
@@ -0,0 +1,402 @@
+
+
+
+
+