diff --git a/config/feature_flags/development/jira_issues_show_integration.yml b/config/feature_flags/development/jira_issues_show_integration.yml
new file mode 100644
index 0000000000000000000000000000000000000000..dd89ace22bed6b80635072e67484c5c8a85edb37
--- /dev/null
+++ b/config/feature_flags/development/jira_issues_show_integration.yml
@@ -0,0 +1,8 @@
+---
+name: jira_issues_show_integration
+introduced_by_url: https://gitlab.com/gitlab-org/gitlab/-/merge_requests/52446
+rollout_issue_url: https://gitlab.com/gitlab-org/gitlab/-/issues/299832
+milestone: '13.9'
+type: development
+group: group::ecosystem
+default_enabled: false
diff --git a/ee/app/assets/javascripts/integrations/jira/issues_show/components/jira_issues_show_root.vue b/ee/app/assets/javascripts/integrations/jira/issues_show/components/jira_issues_show_root.vue
new file mode 100644
index 0000000000000000000000000000000000000000..e6f3631bf2c54722bc32fca5ce150acd4dae34ee
--- /dev/null
+++ b/ee/app/assets/javascripts/integrations/jira/issues_show/components/jira_issues_show_root.vue
@@ -0,0 +1,9 @@
+<script>
+export default {
+  name: 'JiraIssuesShow',
+};
+</script>
+
+<template>
+  <div></div>
+</template>
diff --git a/ee/app/assets/javascripts/integrations/jira/issues_show/jira_issues_show_bundle.js b/ee/app/assets/javascripts/integrations/jira/issues_show/jira_issues_show_bundle.js
new file mode 100644
index 0000000000000000000000000000000000000000..18b094ba437c56d10d19b84cd9da3864dde3f713
--- /dev/null
+++ b/ee/app/assets/javascripts/integrations/jira/issues_show/jira_issues_show_bundle.js
@@ -0,0 +1,16 @@
+import Vue from 'vue';
+
+import JiraIssuesShowApp from './components/jira_issues_show_root.vue';
+
+export default function initJiraIssueShow({ mountPointSelector }) {
+  const mountPointEl = document.querySelector(mountPointSelector);
+
+  if (!mountPointEl) {
+    return null;
+  }
+
+  return new Vue({
+    el: mountPointEl,
+    render: (createElement) => createElement(JiraIssuesShowApp),
+  });
+}
diff --git a/ee/app/assets/javascripts/pages/projects/integrations/jira/issues/show/index.js b/ee/app/assets/javascripts/pages/projects/integrations/jira/issues/show/index.js
new file mode 100644
index 0000000000000000000000000000000000000000..aa5c0b83bb8927b182dd8eabcc9c5ae4ab7b51cb
--- /dev/null
+++ b/ee/app/assets/javascripts/pages/projects/integrations/jira/issues/show/index.js
@@ -0,0 +1,3 @@
+import initJiraIssueShow from 'ee/integrations/jira/issues_show/jira_issues_show_bundle';
+
+initJiraIssueShow({ mountPointSelector: '.js-jira-issues-show-app' });
diff --git a/ee/app/controllers/projects/integrations/jira/issues_controller.rb b/ee/app/controllers/projects/integrations/jira/issues_controller.rb
index 604d417392c8d4258767d1efb623a5a763d0a0ed..a4c742d3eabdecbb70e0fcbb1c8a15dc4530e57d 100644
--- a/ee/app/controllers/projects/integrations/jira/issues_controller.rb
+++ b/ee/app/controllers/projects/integrations/jira/issues_controller.rb
@@ -9,6 +9,7 @@ class IssuesController < Projects::ApplicationController
         include SortingPreference
 
         before_action :check_feature_enabled!
+        before_action :check_issues_show_enabled!, only: :show
 
         before_action do
           push_frontend_feature_flag(:jira_issues_integration, project, type: :licensed, default_enabled: true)
@@ -76,6 +77,10 @@ def check_feature_enabled!
           return render_404 unless project.jira_issues_integration_available? && project.jira_service.issues_enabled
         end
 
+        def check_issues_show_enabled!
+          render_404 unless ::Feature.enabled?(:jira_issues_show_integration, @project, default_enabled: :yaml)
+        end
+
         # Return the informational message to the user
         def render_integration_error(exception)
           render json: { errors: [exception.message] }, status: :bad_request
diff --git a/ee/app/views/projects/integrations/jira/issues/show.html.haml b/ee/app/views/projects/integrations/jira/issues/show.html.haml
new file mode 100644
index 0000000000000000000000000000000000000000..9a009709603586acd19cc67ab441ea6f3fd8751c
--- /dev/null
+++ b/ee/app/views/projects/integrations/jira/issues/show.html.haml
@@ -0,0 +1 @@
+.js-jira-issues-show-app
diff --git a/ee/config/routes/project.rb b/ee/config/routes/project.rb
index 9efc0d55f1d250a75acd7395e9a21b375ca9ed66..5c0189a5c18e5f26c042e93f6f0df99608011eba 100644
--- a/ee/config/routes/project.rb
+++ b/ee/config/routes/project.rb
@@ -110,7 +110,7 @@
 
         namespace :integrations do
           namespace :jira do
-            resources :issues, only: [:index]
+            resources :issues, only: [:index, :show]
           end
         end
 
diff --git a/ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb b/ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb
index e0b852f18644ac3bfab1db08986b2e43898ceaee..2ad55241ec9da84c578d765b3d7e1bb342daadc8 100644
--- a/ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb
+++ b/ee/spec/controllers/projects/integrations/jira/issues_controller_spec.rb
@@ -172,4 +172,30 @@
       end
     end
   end
+
+  describe 'GET #show' do
+    context 'when `jira_issues_show_integration` feature is disabled' do
+      before do
+        stub_feature_flags(jira_issues_show_integration: false)
+      end
+
+      it 'returns 404 status' do
+        get :show, params: { namespace_id: project.namespace, project_id: project, id: 1 }
+
+        expect(response).to have_gitlab_http_status(:not_found)
+      end
+    end
+
+    context 'when `jira_issues_show_integration` feature is enabled' do
+      before do
+        stub_feature_flags(jira_issues_show_integration: true)
+      end
+
+      it 'renders `show` template' do
+        get :show, params: { namespace_id: project.namespace, project_id: project, id: 1 }
+
+        expect(response).to render_template(:show)
+      end
+    end
+  end
 end