diff --git a/hshetl/editor.py b/hshetl/editor.py
new file mode 100644
index 0000000000000000000000000000000000000000..ec93a1b155e8bfe7c2a268a51415b49eaaf88cf2
--- /dev/null
+++ b/hshetl/editor.py
@@ -0,0 +1,56 @@
+from __future__ import print_function
+import hshetl
+import yaml
+import json
+
+def find_subclasses(cls):
+    result = []
+    for subcls in cls.__subclasses__():
+        if not subcls.__module__.startswith("hshetl"):
+            continue
+        result.append(subcls)
+        result += find_subclasses(subcls)
+    return result
+
+def json_encode_class(cls):
+    arg_resolver = hshetl.ConfigurationArgumentMatcher()
+    props, required = arg_resolver.get_constructor_arguments(cls)
+    cfg = {"yaml_tag": cls.yaml_tag,
+           "verbose_name": cls.__name__,
+           "properties": {}}
+    for prop in props:
+        cfg["properties"][prop] = {"type": "!!str",
+                                   "form": {"display": "textfield"}}
+        if prop in required:
+            cfg["properties"][prop]["defaults"] = "foo"
+
+def dump_schema():
+    yaml_subclasses = {}
+    for cls in find_subclasses(yaml.YAMLObject):
+        name = cls.__module__ + "." + cls.__name__
+        yaml_subclasses.setdefault(name, cls)
+    docs = {"order": ["connectors", "entities", "jobs"],
+            "children": {"connectors": [],
+                       "entities": ["!entity"],
+                       "jobs": []}}
+    classes = []
+    for cls in sorted(yaml_subclasses):
+        print(yaml_subclasses[cls])
+        continue
+    return
+    if True:
+        if "job" in cls.__name__.lower():
+            docs["children"]["jobs"].append(cls.yaml_tag)
+        elif "connector" in cls.__name__.lower():
+            docs["children"]["connectors"].append(cls.yaml_tag)
+        classes.append(json_encode_class(cls))
+    with open('editor_data.js','w') as f:
+        print("\"use strict\";\n\nvar hshetl_editor_data = " +
+                       json.dumps({"documents": docs, "classes": classes},
+                                  indent=4,
+                                  separators=(',', ': ')),
+                       file=f)
+
+
+if __name__ == '__main__':
+    dump_schema()