diff --git a/rhodecode/model/validation_schema/widgets.py b/rhodecode/model/validation_schema/widgets.py
new file mode 100644
--- /dev/null
+++ b/rhodecode/model/validation_schema/widgets.py
@@ -0,0 +1,32 @@
+# -*- coding: utf-8 -*-
+
+# Copyright (C) 2011-2017 RhodeCode GmbH
+#
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU Affero General Public License, version 3
+# (only), as published by the Free Software Foundation.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU Affero General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# This program is dual-licensed. If you wish to learn more about the
+# RhodeCode Enterprise Edition, including its added features, Support services,
+# and proprietary license terms, please see https://rhodecode.com/licenses/
+
+import logging
+
+import deform
+import deform.widget
+
+
+log = logging.getLogger(__name__)
+
+
+class CodeMirrorWidget(deform.widget.TextAreaWidget):
+    template = 'codemirror'
+    requirements = (('deform', None), ('codemirror', None))
diff --git a/rhodecode/templates/forms/codemirror.pt b/rhodecode/templates/forms/codemirror.pt
new file mode 100644
--- /dev/null
+++ b/rhodecode/templates/forms/codemirror.pt
@@ -0,0 +1,30 @@
+<div tal:define="rows rows|field.widget.rows;
+                 cols cols|field.widget.cols;
+                 css_class css_class|field.widget.css_class;
+                 oid oid|field.oid;
+                 name name|field.name;
+                 style style|field.widget.style;
+                 help_block help_block|field.widget.help_block|'';
+                 codemirror_options codemirror_options|field.widget.codemirror_options|{};
+                 codemirror_mode codemirror_mode|field.widget.codemirror_mode|''
+                ">
+
+<textarea tal:attributes="rows rows;
+                          cols cols;
+                          class string: form-control ${css_class or ''};
+                          style style"
+          id="${oid}"
+          name="${name}">${cstruct}</textarea>
+
+<p tal:condition="help_block" class="help-block">${help_block}</p>
+<script type="text/javascript">
+deform.addCallback(
+ '${oid}',
+ function(oid) {
+   var myCodeMirror = initCodeMirror(oid, '', false, ${codemirror_options});
+   setCodeMirrorMode(myCodeMirror, '${codemirror_mode}');
+ }
+);
+</script>
+
+</div>