diff --git a/workflows/subworfklows/README.md b/workflows/subworfklows/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..b960b6cdf88f60e0ebdc232f77e860d956ca6fc7
--- /dev/null
+++ b/workflows/subworfklows/README.md
@@ -0,0 +1,4 @@
+# Snakemake subworkflows
+
+Similar to tools, subworkflows cannot be used directly but need to be called in a higher Snakefile
+by setting up the required variables.
diff --git a/workflows/subworfklows/graphlan_from_metaphlan2/SnakeFile b/workflows/subworfklows/graphlan_from_metaphlan2/SnakeFile
new file mode 100644
index 0000000000000000000000000000000000000000..dfd7278541c6e45454f5bb3cfa487759d7428d09
--- /dev/null
+++ b/workflows/subworfklows/graphlan_from_metaphlan2/SnakeFile
@@ -0,0 +1,30 @@
+configfile: "config.yaml"
+
+"""
+This subworkflow need to be called to be used by specifying:
+- __graphlan_from_metaphlan2_input
+- __graphlan_from_metaphlan2_output
+- __graphlan_from_metaphlan2_output_dir
+"""
+
+# ==== Rule paths ==== 
+__export2graphlan_rules = "../../tools/metaphlan2/metaphlan2/metaphlan2.rules"
+__graphlan_annotate_rules = "../../tools/metaphlan2/metaphlan2_merge/metaphlan2_merge.rules"
+__graphlan_rules = "../../tools/metaphlan2/metaphlan2_heatmap/metaphlan2_heatmap.rules"
+
+# ---- export2graphlan
+__export2graphlan_input = __graphlan_from_metaphlan2_input
+__export2graphlan_output_tree = __graphlan_from_metaphlan2_output + ".tree.txt"
+__export2graphlan_output_annotation = __graphlan_from_metaphlan2_output + ".annot.txt"
+include: __export2graphlan_rules
+
+# ---- graphlan_annotate
+__graphlan_annotate_input_tree = __export2graphlan_output_tree
+__graphlan_annotate_input_annotation = __export2graphlan_output_annotation
+__graphlan_annotate_output = __graphlan_from_metaphlan2_output + ".annot.xml"
+include: __graphlan_annotate_rules
+
+# ---- graphlan
+__graphlan_input = __graphlan_annotate_output
+__graphlan_output = __graphlan_from_metaphlan2_output
+include: __graphlan_rules