diff --git a/core/modules/system/system.api.php b/core/modules/system/system.api.php
index 71297db..9bbe970 100644
--- a/core/modules/system/system.api.php
+++ b/core/modules/system/system.api.php
@@ -1241,6 +1241,47 @@ function hook_template_preprocess_default_variables_alter(&$variables) {
 }
 
 /**
+ * Declares a template file extension to be used with a theme engine.
+ *
+ * This hook is used in a theme engine implementation in the format of
+ * ENGINE_extension().
+ *
+ * @return string
+ *   The file extension the theme engine will recognize.
+ */
+function hook_extension() {
+  // Extension for template base names in Twig.
+  return '.html.twig';
+}
+
+/**
+ * Renders a template using the theme engine.
+ *
+ * This hook is used in a theme engine implementation in the format of
+ * ENGINE_render_template(). It gets passed a template name and an array of
+ * variables and returns a string containing the rendered template.
+ *
+ * @param string $template_file
+ *   The relative path to the template to be rendered including its extension in
+ *   the format 'path/to/TEMPLATE_NAME.EXT'. The path should be relative to the
+ *   Drupal root directory.
+ * @param array $variables
+ *   A keyed array of variables that are available for composing the output. The
+ *   theme engine is responsible for passing all the variables to the template.
+ *   Depending on the code in the template, all or just a subset of those
+ *   variables might be used in the template.
+ *
+ * @return string
+ *   The output generated from the template. In most cases this will be a string
+ *   containing HTML markup.
+ */
+function hook_render_template($template_file, $variables) {
+  $twig_service = \Drupal::service('twig');
+
+  return $twig_service->loadTemplate($template_file)->render($variables);
+}
+
+/**
  * Prepare a message based on parameters; called from drupal_mail().
  *
  * Note that hook_mail(), unlike hook_mail_alter(), is only called on the
diff --git a/core/themes/engines/phptemplate/phptemplate.engine b/core/themes/engines/phptemplate/phptemplate.engine
index 0521092..a4eee49 100644
--- a/core/themes/engines/phptemplate/phptemplate.engine
+++ b/core/themes/engines/phptemplate/phptemplate.engine
@@ -31,6 +31,8 @@ function phptemplate_extension() {
 }
 
 /**
+ * Implements hook_render_template().
+ *
  * Renders a system default template, which is essentially a PHP template.
  *
  * @param $template_file
diff --git a/core/themes/engines/twig/twig.engine b/core/themes/engines/twig/twig.engine
index e0cfcc2..bb26ae1 100644
--- a/core/themes/engines/twig/twig.engine
+++ b/core/themes/engines/twig/twig.engine
@@ -33,6 +33,8 @@ function twig_init(Extension $theme) {
 }
 
 /**
+ * Implements hook_render_template().
+ *
  * Renders a Twig template.
  *
  * If the Twig debug setting is enabled, HTML comments including _theme() call
@@ -43,7 +45,7 @@ function twig_init(Extension $theme) {
  * @param $variables
  *   A keyed array of variables that will appear in the output.
  *
- * @return
+ * @return string
  *   The output generated by the template, plus any debug information.
  */
 function twig_render_template($template_file, $variables) {
