diff --git a/app/controllers/projects/wikis_controller.rb b/app/controllers/projects/wikis_controller.rb
index c3353446fd115718de5aa54fedb0ae2381c0a938..45a42400b2a12465344214a9a13a84d5c8849f41 100644
--- a/app/controllers/projects/wikis_controller.rb
+++ b/app/controllers/projects/wikis_controller.rb
@@ -8,6 +8,7 @@ class Projects::WikisController < Projects::ApplicationController
 
   def pages
     @wiki_pages = Kaminari.paginate_array(@project_wiki.pages).page(params[:page])
+    @wiki_directories = WikiPage.group_by_directory(@wiki_pages)
   end
 
   def show
@@ -116,7 +117,7 @@ class Projects::WikisController < Projects::ApplicationController
     # Call #wiki to make sure the Wiki Repo is initialized
     @project_wiki.wiki
 
-    @sidebar_wiki_pages = @project_wiki.pages.first(15)
+    @sidebar_wiki_directories = WikiPage.group_by_directory(@project_wiki.pages.first(15))
   rescue ProjectWiki::CouldNotCreateWikiError
     flash[:notice] = "Could not create Wiki Repository at this time. Please try again later."
     redirect_to project_path(@project)
diff --git a/app/models/wiki_page.rb b/app/models/wiki_page.rb
index c3de278f5b7ecd14f1d3c029b46e7d9d53f8532f..30db2b13dc0c4f61f3d1388b1ab914a38ab0f2e9 100644
--- a/app/models/wiki_page.rb
+++ b/app/models/wiki_page.rb
@@ -12,6 +12,23 @@ class WikiPage
     ActiveModel::Name.new(self, nil, 'wiki')
   end
 
+  def self.group_by_directory(pages)
+    directories = {}
+
+    pages.each do |page|
+      if page.slug.include?('/')
+        # Directory hierarchy is given by matching from the beginning up to
+        # the last forward slash.
+        directory = page.slug.match(/\A(.+)\//)[1]
+        directories[directory] = add_to_directory(directories[directory], page)
+      else
+        directories['root'] = add_to_directory(directories['root'], page)
+      end
+    end
+
+    directories
+  end
+
   def to_key
     [:slug]
   end
@@ -176,6 +193,14 @@ class WikiPage
 
   private
 
+  def self.add_to_directory(directory, page)
+    if directory.present?
+      directory << page
+    else
+      [page]
+    end
+  end
+
   def set_attributes
     attributes[:slug] = @page.url_path
     attributes[:title] = @page.title
diff --git a/app/views/projects/wikis/_sidebar.html.haml b/app/views/projects/wikis/_sidebar.html.haml
index cad9c15a49eff91e76c868f78dbd2508c8a3a361..5aee1a136f590b621ddfbf44c2181f79fe93d641 100644
--- a/app/views/projects/wikis/_sidebar.html.haml
+++ b/app/views/projects/wikis/_sidebar.html.haml
@@ -12,10 +12,14 @@
   .blocks-container
     .block.block-first
       %ul.wiki-pages
-        - @sidebar_wiki_pages.each do |wiki_page|
-          %li{ class: params[:id] == wiki_page.slug ? 'active' : '' }
-            = link_to namespace_project_wiki_path(@project.namespace, @project, wiki_page) do
-              = wiki_page.title.capitalize
+        - @sidebar_wiki_directories.each do |wiki_directory, wiki_pages|
+          %li
+            = wiki_directory
+            %ul
+              - wiki_pages.each do |wiki_page|
+                %li{ class: params[:id] == wiki_page.slug ? 'active' : '' }
+                  = link_to namespace_project_wiki_path(@project.namespace, @project, wiki_page) do
+                    = wiki_page.title.capitalize
     .block
       = link_to namespace_project_wikis_pages_path(@project.namespace, @project), class: 'btn btn-block' do
         More Pages
diff --git a/app/views/projects/wikis/pages.html.haml b/app/views/projects/wikis/pages.html.haml
index e1eaffc688454390ac2e04bd7758f815acae44a8..274afb1bdea9002d38d35efaca921d8d75cd02c2 100644
--- a/app/views/projects/wikis/pages.html.haml
+++ b/app/views/projects/wikis/pages.html.haml
@@ -14,10 +14,14 @@
         Clone repository
 
   %ul.content-list
-    - @wiki_pages.each do |wiki_page|
+    - @wiki_directories.each do |wiki_directory, wiki_pages|
       %li
-        = link_to wiki_page.title, namespace_project_wiki_path(@project.namespace, @project, wiki_page)
-        %small (#{wiki_page.format})
-        .pull-right
-          %small Last edited #{time_ago_with_tooltip(wiki_page.commit.authored_date)}
+        = wiki_directory
+        %ul
+        - wiki_pages.each do |wiki_page|
+          %li
+            = link_to wiki_page.title, namespace_project_wiki_path(@project.namespace, @project, wiki_page)
+            %small (#{wiki_page.format})
+            .pull-right
+              %small Last edited #{time_ago_with_tooltip(wiki_page.commit.authored_date)}
   = paginate @wiki_pages, theme: 'gitlab'
diff --git a/changelogs/unreleased/23535-folders-in-wiki-repository.yml b/changelogs/unreleased/23535-folders-in-wiki-repository.yml
new file mode 100644
index 0000000000000000000000000000000000000000..7361b182a94c903ade4770fb017cc688f07b82e9
--- /dev/null
+++ b/changelogs/unreleased/23535-folders-in-wiki-repository.yml
@@ -0,0 +1,4 @@
+---
+title: Show directory hierarchy when listing wiki pages
+merge_request:
+author: Alex Braha Stoll
diff --git a/spec/models/wiki_page_spec.rb b/spec/models/wiki_page_spec.rb
index 5c34b1b0a30796f4c8042a1ea2dfa482fe949406..25e7b517fe600bd209468a3398167a1e81db40d2 100644
--- a/spec/models/wiki_page_spec.rb
+++ b/spec/models/wiki_page_spec.rb
@@ -7,6 +7,23 @@ describe WikiPage, models: true do
 
   subject { WikiPage.new(wiki) }
 
+  describe '::group_by_directory' do
+    context 'when there are no pages' do
+      it 'returns an empty hash' do
+      end
+    end
+
+    context 'when there are pages' do
+      let!(:page_1) { create_page('page_1', 'content') }
+      let!(:page_2) { create_page('directory/page_2', 'content') }
+      let(:pages) { [page_1, page_2] }
+
+      xit 'returns a hash in which keys are directories and values are their pages' do
+        expected_grouped_pages = { 'root' => [page_1], 'directory' => [page_2] }
+      end
+    end
+  end
+
   describe "#initialize" do
     context "when initialized with an existing gollum page" do
       before do