diff --git a/util/dashboard/dashboard_validate.py b/util/dashboard/dashboard_validate.py
new file mode 100644
index 0000000..099453e
--- /dev/null
+++ b/util/dashboard/dashboard_validate.py
@@ -0,0 +1,52 @@
+# Copyright lowRISC contributors.
+# Licensed under the Apache License, Version 2.0, see LICENSE for details.
+# SPDX-License-Identifier: Apache-2.0
+"""
+Dashboard project json file validation
+"""
+
+import logging as log
+import sys
+
+
+def check_keys(obj, required_keys, optional_keys, err_prefix):
+    error = 0
+    for x in required_keys:
+        if not x in obj:
+            error += 1
+            log.error(err_prefix + " missing required key " + x)
+    for x in obj:
+        type = ''
+        if x in required_keys:
+            type = required_keys[x][0]
+        elif x in optional_keys:
+            type = optional_keys[x][0]
+        else:
+            log.warning(err_prefix + " contains extra key " + x)
+
+    return error
+
+
+field_required = {
+    'name': ['s', "module name"],
+    'version': ['s', "module version"],
+    'life_stage': ['s', "life stage of module"]
+}
+field_optional = {
+    'design_stage': ['s', "design stage of module"],
+    'verification_stage': ['s', "verification stage of module"],
+    'notes': ['s', "random notes"],
+}
+
+
+def validate(regs):
+    if not 'name' in regs:
+        log.error("Component has no name. Aborting.")
+        return 1
+    component = regs['name']
+
+    error = check_keys(regs, field_required, field_optional, component)
+    if (error > 0):
+        log.error("Component has top level errors. Aborting.")
+
+    return error
