diff --git a/cfg_checker/helpers/falcon_jinja2/__init__.py b/cfg_checker/helpers/falcon_jinja2/__init__.py
new file mode 100644
index 0000000..3615d21
--- /dev/null
+++ b/cfg_checker/helpers/falcon_jinja2/__init__.py
@@ -0,0 +1,6 @@
+# https://github.com/myusko/falcon-jinja
+from .template import *  # noqa
+
+__version__ = '0.0.3'
+__author__ = 'Michael Yusko'
+__license__ = 'MIT'
diff --git a/cfg_checker/helpers/falcon_jinja2/template.py b/cfg_checker/helpers/falcon_jinja2/template.py
new file mode 100644
index 0000000..cb858ff
--- /dev/null
+++ b/cfg_checker/helpers/falcon_jinja2/template.py
@@ -0,0 +1,85 @@
+# https://github.com/myusko/falcon-jinja
+import falcon
+from falcon.response import Response
+from jinja2 import Environment, FileSystemLoader
+from jinja2.exceptions import TemplateNotFound
+
+__all__ = ['FalconTemplate']
+
+
+class FalconTemplateNotFound(Exception):
+    pass
+
+
+class FalconTemplate:
+    """
+        Args:
+            path (str): Name of an directory where HTML files defined.
+        Attributes:
+            _env (jinja2.Environment): Jinja component which shared
+            variables like configuration and etc.
+            template_path (str): Name of folder where all
+            HTML files are defined.
+            loader (jinja2.FileSystemLoader): Jinja2 class which loaded
+            HTML template from filesystem.
+    """
+
+    BASE_FOLDER = 'templates'
+
+    def __init__(self, path: str = None):
+        self.template_path = path or self.BASE_FOLDER
+        self.loader = FileSystemLoader(self.template_path)
+        self._env = Environment(loader=self.loader)
+
+    @staticmethod
+    def __get_response(objects: tuple):
+        """Retrieve falcon's Response object
+            Args:
+                objects (tuple): An list with falcon.Request,
+                falcon.Response, and other arguments.
+            Returns:
+                An falcon.Response object if it there
+                otherwise False.
+        """
+        for response in objects:
+            if isinstance(response, Response):
+                return response
+        return False
+
+    def _make_template(self, template: str, context: dict):
+        """Makes a jinja template, and rendered passed context
+            Args:
+                template (str): Name of HTML file which will be rendered.
+                context (dict): An dictionary with
+                a response context.
+            Returns:
+                A string representation of HTML content
+        """
+        try:
+            template = self._env.get_template(template)
+        except TemplateNotFound:
+            raise FalconTemplateNotFound(
+                'Template {} not found '
+                'in {} folder'.format(template, self.template_path)
+            )
+        return template.render(**context)
+
+    def render(self, template: str):
+        """Decorator which renders HTML content
+            Args:
+                template (str): HTML file for which will
+                be rendered HTML content
+        """
+        def render_template(func):
+            def wrapper(*args, **kwargs):
+
+                response = self.__get_response(args)
+                func(*args, **kwargs)
+
+                response.content_type = falcon.MEDIA_HTML
+                response.status = falcon.HTTP_200
+                response.body = self._make_template(
+                    template, response.context
+                )
+            return wrapper
+        return render_template
