diff --git a/nomad/datamodel/datamodel.py b/nomad/datamodel/datamodel.py
index 3250cd04990b130af1b508c6c0cae3ee0d333a83..2f99944cd38956bca8d409434a07efc8b6d86bc3 100644
--- a/nomad/datamodel/datamodel.py
+++ b/nomad/datamodel/datamodel.py
@@ -39,6 +39,7 @@ from .metainfo.simulation.run import Run  # noqa
 from .metainfo.workflow import Workflow  # noqa
 from .metainfo.measurements import Measurement  # noqa
 from .metainfo.catalysis import ExperimentCatalysis  # noqa
+from nomad.datamodel.metainfo.tabulartree import TabularTree  # noqa
 
 
 class AuthLevel(int, Enum):
@@ -696,5 +697,7 @@ class EntryArchive(metainfo.MSection):
 
     experiment_catalysis = metainfo.SubSection(sub_section=ExperimentCatalysis, repeats=False)
 
+    tabular_tree = metainfo.SubSection(sub_section=TabularTree, repeats=False)
+
 
 m_package.__init_metainfo__()
diff --git a/nomad/datamodel/metainfo/tabulartree.py b/nomad/datamodel/metainfo/tabulartree.py
new file mode 100644
index 0000000000000000000000000000000000000000..49675061ae439c7f6179cb2d4867f8a44bfa7ec8
--- /dev/null
+++ b/nomad/datamodel/metainfo/tabulartree.py
@@ -0,0 +1,57 @@
+#
+# Copyright The NOMAD Authors.
+#
+# This file is part of NOMAD. See https://nomad-lab.eu for further info.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#     http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+
+import typing
+
+from nomad.metainfo import (
+    MSection, Package, Quantity, SubSection)
+
+
+m_package = Package(name='tabulartree')
+
+
+class TabularTreeNodeInfo(MSection):
+    value = Quantity(type=typing.Any)
+    description = Quantity(type=str)
+    unit = Quantity(type=str)
+
+
+class TabularTreeLevel3(MSection):
+    name = Quantity(type=str, default='<node name?>')
+    info = SubSection(sub_section=TabularTreeNodeInfo)
+
+
+class TabularTreeLevel2(MSection):
+    name = Quantity(type=str, default='<node name?>')
+    info = SubSection(sub_section=TabularTreeNodeInfo)
+    nodes = SubSection(sub_section=TabularTreeLevel3, repeats=True)
+
+
+class TabularTreeLevel1(MSection):
+    name = Quantity(type=str, default='<node name?>')
+    info = SubSection(sub_section=TabularTreeNodeInfo)
+    nodes = SubSection(sub_section=TabularTreeLevel2, repeats=True)
+
+
+class TabularTree(MSection):
+    name = Quantity(type=str, default='<node name?>')
+    info = SubSection(sub_section=TabularTreeNodeInfo)
+    nodes = SubSection(sub_section=TabularTreeLevel1, repeats=True)
+
+
+m_package.__init_metainfo__()