diff --git a/CHANGELOG b/CHANGELOG
index 3504c6c74e4ae9a9970545d2b675a402a1e4fb62..bb408314ea8eacd6834074bae2a6de3ffaaf669e 100644
--- a/CHANGELOG
+++ b/CHANGELOG
@@ -1,6 +1,7 @@
 Please view this file on the master branch, on stable branches it's out of date.
 
 v 8.10.0 (unreleased)
+  - Replace Haml with Hamlit to make view rendering faster. !3666
   - Wrap code blocks on Activies and Todos page. !4783 (winniehell)
   - Add Sidekiq queue duration to transaction metrics.
   - Fix MR-auto-close text added to description. !4836
diff --git a/Gemfile b/Gemfile
index 092ea9d69b0b300052dd11c5e07555968f710c1b..bae00090fdadf1d521bd3b1ba86afad4279dda5f 100644
--- a/Gemfile
+++ b/Gemfile
@@ -76,7 +76,7 @@ gem 'rack-cors',    '~> 0.4.0', require: 'rack/cors'
 gem "kaminari", "~> 0.17.0"
 
 # HAML
-gem "haml-rails", '~> 0.9.0'
+gem 'hamlit', '~> 2.5'
 
 # Files attachments
 gem "carrierwave", '~> 0.10.0'
diff --git a/Gemfile.lock b/Gemfile.lock
index ce52985bd4ae55f657fdb723df4ac8381f8e5ca2..7ea7ea95c1bf6430d6586830c0e948ce7ace0ed9 100644
--- a/Gemfile.lock
+++ b/Gemfile.lock
@@ -320,14 +320,10 @@ GEM
     grape-entity (0.4.8)
       activesupport
       multi_json (>= 1.3.2)
-    haml (4.0.7)
+    hamlit (2.5.0)
+      temple (~> 0.7.6)
+      thor
       tilt
-    haml-rails (0.9.0)
-      actionpack (>= 4.0.1)
-      activesupport (>= 4.0.1)
-      haml (>= 4.0.6, < 5.0)
-      html2haml (>= 1.0.1)
-      railties (>= 4.0.1)
     hashie (3.4.3)
     health_check (1.5.1)
       rails (>= 2.3.0)
@@ -337,11 +333,6 @@ GEM
     html-pipeline (1.11.0)
       activesupport (>= 2)
       nokogiri (~> 1.4)
-    html2haml (2.0.0)
-      erubis (~> 2.7.0)
-      haml (~> 4.0.0)
-      nokogiri (~> 1.6.0)
-      ruby_parser (~> 3.5)
     htmlentities (4.3.4)
     http_parser.rb (0.5.3)
     httparty (0.13.7)
@@ -733,6 +724,7 @@ GEM
       railties (>= 3.2.5, < 6)
     teaspoon-jasmine (2.2.0)
       teaspoon (>= 1.0.0)
+    temple (0.7.7)
     term-ansicolor (1.3.2)
       tins (~> 1.0)
     test_after_commit (0.4.2)
@@ -882,7 +874,7 @@ DEPENDENCIES
   gon (~> 6.0.1)
   grape (~> 0.13.0)
   grape-entity (~> 0.4.2)
-  haml-rails (~> 0.9.0)
+  hamlit (~> 2.5)
   health_check (~> 1.5.1)
   hipchat (~> 1.5.0)
   html-pipeline (~> 1.11.0)
diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb
index 418598418348c3ed5220b9107d704d4fc1435f5b..62d13a4b4f326f11125888aa9eacae55cb495838 100644
--- a/app/helpers/application_helper.rb
+++ b/app/helpers/application_helper.rb
@@ -197,7 +197,7 @@ module ApplicationHelper
 
   def render_markup(file_name, file_content)
     if gitlab_markdown?(file_name)
-      Haml::Helpers.preserve(markdown(file_content))
+      Hamlit::RailsHelpers.preserve(markdown(file_content))
     elsif asciidoc?(file_name)
       asciidoc(file_content)
     elsif plain?(file_name)
diff --git a/config/initializers/haml.rb b/config/initializers/haml.rb
deleted file mode 100644
index 1516476815a56e96907396b699a59de3b2f931c4..0000000000000000000000000000000000000000
--- a/config/initializers/haml.rb
+++ /dev/null
@@ -1,7 +0,0 @@
-Haml::Template.options[:ugly] = true
-
-# Remove the `:coffee` and `:coffeescript` filters
-#
-# See https://git.io/vztMu and http://stackoverflow.com/a/17571242/223897
-Haml::Filters.remove_filter('coffee')
-Haml::Filters.remove_filter('coffeescript')
diff --git a/config/initializers/hamlit.rb b/config/initializers/hamlit.rb
new file mode 100644
index 0000000000000000000000000000000000000000..7b545d8c06c6eea5e53597d11b9867c013df2c8d
--- /dev/null
+++ b/config/initializers/hamlit.rb
@@ -0,0 +1,18 @@
+module Hamlit
+  class TemplateHandler
+    def call(template)
+      Engine.new(
+        generator: Temple::Generators::RailsOutputBuffer,
+        attr_quote: '"',
+      ).call(template.source)
+    end
+  end
+end
+
+ActionView::Template.register_template_handler(
+  :haml,
+  Hamlit::TemplateHandler.new,
+)
+
+Hamlit::Filters.remove_filter('coffee')
+Hamlit::Filters.remove_filter('coffeescript')
diff --git a/doc/development/gotchas.md b/doc/development/gotchas.md
index 21078c8d6f9aba69873a757e449d5658a1bf327c..9d7fe7440d27505ee8eb0e638d6a3d976ebcdf64 100644
--- a/doc/development/gotchas.md
+++ b/doc/development/gotchas.md
@@ -46,7 +46,7 @@ Rubocop](https://gitlab.com/gitlab-org/gitlab-ce/blob/8-4-stable/.rubocop.yml#L9
 Using the inline `:coffee` or `:coffeescript` Haml filters comes with a
 performance overhead.
 
-_**Note:** We've [removed these two filters](https://gitlab.com/gitlab-org/gitlab-ce/blob/8-5-stable/config/initializers/haml.rb)
+_**Note:** We've [removed these two filters](https://gitlab.com/gitlab-org/gitlab-ce/blob/master/config/initializers/hamlit.rb)
 in an initializer._
 
 ### Further reading
diff --git a/spec/helpers/visibility_level_helper_spec.rb b/spec/helpers/visibility_level_helper_spec.rb
index ff98249570d1074349c4c4d632bcdf55db7ce4b1..5e7594170c5240c2ad859d83c34ab0bc22d8b6d3 100644
--- a/spec/helpers/visibility_level_helper_spec.rb
+++ b/spec/helpers/visibility_level_helper_spec.rb
@@ -1,11 +1,6 @@
 require 'spec_helper'
 
 describe VisibilityLevelHelper do
-  include Haml::Helpers
-
-  before :all do
-    init_haml_helpers
-  end
 
   let(:project)          { build(:project) }
   let(:group)            { build(:group) }