diff --git a/.gitignore b/.gitignore
index 0c572cedf6a9d04b282f94fb3e5a9f9109265311..dfafb89a9f4b50fab484362d4def44342a9370f4 100644
--- a/.gitignore
+++ b/.gitignore
@@ -29,3 +29,4 @@ build/
 dist/
 setup.json
 parser.osio.log
+gui/src/metainfo.json
diff --git a/dependencies/parsers/amber b/dependencies/parsers/amber
index 56e9412d0d322fd88240fe2af41716a0016831c7..e7077c9a824e01b45b0e4989858ecd35f59f4cc7 160000
--- a/dependencies/parsers/amber
+++ b/dependencies/parsers/amber
@@ -1 +1 @@
-Subproject commit 56e9412d0d322fd88240fe2af41716a0016831c7
+Subproject commit e7077c9a824e01b45b0e4989858ecd35f59f4cc7
diff --git a/dependencies/parsers/charmm b/dependencies/parsers/charmm
index 7decbdcf25ef48b019bde17c472f54d65a124c9a..cc6c9545300cf6ea3347357fedffc6798415a299 160000
--- a/dependencies/parsers/charmm
+++ b/dependencies/parsers/charmm
@@ -1 +1 @@
-Subproject commit 7decbdcf25ef48b019bde17c472f54d65a124c9a
+Subproject commit cc6c9545300cf6ea3347357fedffc6798415a299
diff --git a/dependencies/parsers/dl-poly b/dependencies/parsers/dl-poly
index 059d4c7f1a452383d67f0ecf0c9bc267580083dc..fa54fe567a1250af3009ecc9692d14c64a399f29 160000
--- a/dependencies/parsers/dl-poly
+++ b/dependencies/parsers/dl-poly
@@ -1 +1 @@
-Subproject commit 059d4c7f1a452383d67f0ecf0c9bc267580083dc
+Subproject commit fa54fe567a1250af3009ecc9692d14c64a399f29
diff --git a/dependencies/parsers/gromacs b/dependencies/parsers/gromacs
index f7f156204c16b54e4df998a8a275bcf4a5aaf901..2310b63ff3904ddd6f912c32789568787c6ab250 160000
--- a/dependencies/parsers/gromacs
+++ b/dependencies/parsers/gromacs
@@ -1 +1 @@
-Subproject commit f7f156204c16b54e4df998a8a275bcf4a5aaf901
+Subproject commit 2310b63ff3904ddd6f912c32789568787c6ab250
diff --git a/dependencies/parsers/gromos b/dependencies/parsers/gromos
index 8d896ede93e794d0fdb905e42281ef7c871bc05d..b7d913f0d8f82a9bb564e346bb60f66008ac791b 160000
--- a/dependencies/parsers/gromos
+++ b/dependencies/parsers/gromos
@@ -1 +1 @@
-Subproject commit 8d896ede93e794d0fdb905e42281ef7c871bc05d
+Subproject commit b7d913f0d8f82a9bb564e346bb60f66008ac791b
diff --git a/dependencies/parsers/namd b/dependencies/parsers/namd
index 97b653e3fe695775f53a96249a0bb9ad694ef742..a741cfe607e9dfd1f2d65aeddbcc4bc5a15bbc13 160000
--- a/dependencies/parsers/namd
+++ b/dependencies/parsers/namd
@@ -1 +1 @@
-Subproject commit 97b653e3fe695775f53a96249a0bb9ad694ef742
+Subproject commit a741cfe607e9dfd1f2d65aeddbcc4bc5a15bbc13
diff --git a/dependencies/parsers/tinker b/dependencies/parsers/tinker
index 85cc99b320454f8c8a68bdf376e128c156cf2ac2..7f5fc6a358dc7e40e716cc5205fa04e8cf9c6d6c 160000
--- a/dependencies/parsers/tinker
+++ b/dependencies/parsers/tinker
@@ -1 +1 @@
-Subproject commit 85cc99b320454f8c8a68bdf376e128c156cf2ac2
+Subproject commit 7f5fc6a358dc7e40e716cc5205fa04e8cf9c6d6c
diff --git a/dependencies/python_common b/dependencies/python_common
index cf843eda3e4650bc240eb0d1a1ab5b0cea6dda96..afdd0937aab2681ca3912cfd9d95c7633fdcd7b9 160000
--- a/dependencies/python_common
+++ b/dependencies/python_common
@@ -1 +1 @@
-Subproject commit cf843eda3e4650bc240eb0d1a1ab5b0cea6dda96
+Subproject commit afdd0937aab2681ca3912cfd9d95c7633fdcd7b9
diff --git a/nomad/app/api/metainfo.py b/nomad/app/api/metainfo.py
index be6d05cd38f1b1300287251a2c5ae4b50987e104..0ef4467922b2428d7d7cc3d32a300dbb570a9a63 100644
--- a/nomad/app/api/metainfo.py
+++ b/nomad/app/api/metainfo.py
@@ -102,21 +102,12 @@ class LegacyMetainfoResource(Resource):
         Other required packages might also be returned, e.g. a parser might organize its
         definitions in multiple packages.
         '''
-        package = metainfo_package_name
-        if package.endswith('.nomadmetainfo.json'):
-            package = package[:-19]
-        if package.endswith('.json'):
-            package = package[:-5]
-
         try:
-            python_package_name, _ = python_package_mapping(package)
-            python_package_name = '.'.join(python_package_name.split('.')[:-1])
-            python_module = importlib.import_module(python_package_name)
-            metainfo = getattr(python_module, 'm_env')
+            metainfo = LegacyMetainfoEnvironment.from_legacy_package_path(metainfo_package_name)
         except (ImportError, KeyError, FileNotFoundError, AttributeError):
-            abort(404, message='Metainfo package %s does not exist.' % package)
+            abort(404, message='Metainfo package %s does not exist.' % metainfo_package_name)
 
         if isinstance(metainfo, LegacyMetainfoEnvironment):
             return metainfo.to_legacy_dict(metainfo.packages)
         else:
-            abort(404, message='Metainfo package %s is not a legacy package.' % package)
+            abort(404, message='Metainfo package %s is not a legacy package.' % metainfo_package_name)
diff --git a/nomad/cli/dev.py b/nomad/cli/dev.py
index 2e5232b8a2ec8ba756c574eccf40a2634d28e18d..9dea162cc95e0d2b9a1de4967c94d7eca94e356d 100644
--- a/nomad/cli/dev.py
+++ b/nomad/cli/dev.py
@@ -43,6 +43,22 @@ def qa(skip_tests: bool, exitfirst: bool):
     sys.exit(ret_code)
 
 
+@dev.command(help='Generates a JSON with all metainfo.')
+def metainfo():
+    import json
+
+    from nomad.metainfo import Package
+    from nomad.parsing.parsers import parsers
+
+    # Ensure all metainfo is loaded
+    for parser in parsers:
+        _ = parser.metainfo_env
+
+    data = {key: value.m_to_dict() for key, value in Package.registry.items()}
+
+    print(json.dumps(data, indent=2))
+
+
 @dev.command(help='Generates source-code for the new metainfo from .json files of the old.')
 @click.argument('path', nargs=-1)
 def legacy_metainfo(path):
diff --git a/nomad/metainfo/legacy.py b/nomad/metainfo/legacy.py
index 57b50bc011b789ba4c35a0a11084530216595871..a2130efd102339d83256795d22c75ebe3dbda7e2 100644
--- a/nomad/metainfo/legacy.py
+++ b/nomad/metainfo/legacy.py
@@ -22,6 +22,7 @@ from typing import cast, Dict, List, Union, Any, Set, Iterable, Tuple
 import numpy as np
 from pint.errors import UndefinedUnitError
 import os.path
+import importlib
 
 
 from nomadcore.local_meta_info import loadJsonFile, InfoKindEl, InfoKindEnv
@@ -105,6 +106,22 @@ class LegacyMetainfoEnvironment(Environment):
     the environment.
     '''
 
+    @staticmethod
+    def from_legacy_package_path(path):
+        metainfo_package_name = os.path.basename(path)
+        package = metainfo_package_name
+        if package.endswith('.nomadmetainfo.json'):
+            package = package[:-19]
+        if package.endswith('.json'):
+            package = package[:-5]
+
+        python_package_name, _ = python_package_mapping(package)
+        python_package_name = '.'.join(python_package_name.split('.')[:-1])
+        python_module = importlib.import_module(python_package_name)
+        metainfo = getattr(python_module, 'm_env')
+
+        return metainfo
+
     legacy_package_name = Quantity(type=str)
 
     def __init__(self, *args, **kwargs):
diff --git a/nomad/search.py b/nomad/search.py
index 06cec0bbcc6f2e60f857b375a17577f06bafa5e9..94e29769212554611ae4e9e6df02e6ea8e769eff 100644
--- a/nomad/search.py
+++ b/nomad/search.py
@@ -23,7 +23,7 @@ from elasticsearch.exceptions import NotFoundError
 from datetime import datetime
 import json
 
-from nomad import config, datamodel, infrastructure, datamodel, utils
+from nomad import config, datamodel, infrastructure, utils
 from nomad.metainfo.search_extension import search_quantities, metrics, order_default_quantities