diff --git a/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6 b/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6
index 4af5b67f08b..0565004f93c 100644
--- a/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6
+++ b/app/assets/javascripts/pretty-text/engines/discourse-markdown-it.js.es6
@@ -215,10 +215,12 @@ export function setup(opts, siteSettings, state) {
     html: true,
     breaks: opts.discourse.features.newline,
     xhtmlOut: false,
-    linkify: opts.discourse.features.linkify,
+    linkify: siteSettings.enable_markdown_linkify,
     typographer: siteSettings.enable_markdown_typographer
   });
 
+  opts.engine.linkify.tlds(siteSettings.markdown_linkify_tlds.split('|'));
+
   setupUrlDecoding(opts.engine);
   setupHoister(opts.engine);
   setupImageDimensions(opts.engine);
diff --git a/config/locales/server.en.yml b/config/locales/server.en.yml
index 7b162be31ee..cce71de7975 100644
--- a/config/locales/server.en.yml
+++ b/config/locales/server.en.yml
@@ -1066,6 +1066,8 @@ en:
 
     traditional_markdown_linebreaks: "Use traditional linebreaks in Markdown, which require two trailing spaces for a linebreak."
     enable_markdown_typographer: "Use basic typography rules to improve text readability of paragraphs of text, replaces (c) (tm) etc, with symbols, reduces number of question marks and so on"
+    enable_markdown_linkify: "Automatically treat text that looks like a link as a link: www.site.com and http://site.com will be automatically linked"
+    markdown_linkify_tlds: "List of top level domains that get automatically treated as links"
     post_undo_action_window_mins: "Number of minutes users are allowed to undo recent actions on a post (like, flag, etc)."
     must_approve_users: "Staff must approve all new user accounts before they are allowed to access the site. WARNING: enabling this for a live site will revoke access for existing non-staff users!"
     pending_users_reminder_delay: "Notify moderators if new users have been waiting for approval for longer than this many hours. Set to -1 to disable notifications."
diff --git a/config/site_settings.yml b/config/site_settings.yml
index 1b19897afcc..8d686b52aed 100644
--- a/config/site_settings.yml
+++ b/config/site_settings.yml
@@ -531,6 +531,13 @@ posting:
   enable_markdown_typographer:
     client: true
     default: true
+  enable_markdown_linkify:
+    client: true
+    default: true
+  markdown_linkify_tlds:
+    client: true
+    type: list
+    default: 'com|gov|net'
   enable_rich_text_paste:
     client: true
     default: false
diff --git a/lib/pretty_text.rb b/lib/pretty_text.rb
index 7655c76c8d5..fafc6c7eb40 100644
--- a/lib/pretty_text.rb
+++ b/lib/pretty_text.rb
@@ -167,7 +167,6 @@ module PrettyText
         __optInput.emojiUnicodeReplacer = __emojiUnicodeReplacer;
         __optInput.lookupInlineOnebox = __lookupInlineOnebox;
         __optInput.lookupImageUrls = __lookupImageUrls;
-        #{opts[:linkify] == false ? "__optInput.linkify = false;" : ""}
         __optInput.censoredWords = #{WordWatcher.words_for_action(:censor).join('|').to_json};
       JS
 
diff --git a/spec/components/pretty_text_spec.rb b/spec/components/pretty_text_spec.rb
index 6e0ee7e0458..971d7dd6005 100644
--- a/spec/components/pretty_text_spec.rb
+++ b/spec/components/pretty_text_spec.rb
@@ -1237,4 +1237,44 @@ HTML
 
   end
 
+  it "You can disable linkify" do
+    md = "www.cnn.com test.it http://test.com https://test.ab https://a"
+    cooked = PrettyText.cook(md)
+
+    html = <<~HTML
+      <p><a href="http://www.cnn.com" rel="nofollow noopener">www.cnn.com</a> test.it <a href="http://test.com" rel="nofollow noopener">http://test.com</a> <a href="https://test.ab" rel="nofollow noopener">https://test.ab</a> <a href="https://a" rel="nofollow noopener">https://a</a></p>
+    HTML
+
+    expect(cooked).to eq(html.strip)
+
+    # notice how cnn.com is no longer linked but it is
+    SiteSetting.markdown_linkify_tlds = "not_com|it"
+
+    cooked = PrettyText.cook(md)
+    html = <<~HTML
+    <p>www.cnn.com <a href="http://test.it" rel="nofollow noopener">test.it</a> <a href="http://test.com" rel="nofollow noopener">http://test.com</a> <a href="https://test.ab" rel="nofollow noopener">https://test.ab</a> <a href="https://a" rel="nofollow noopener">https://a</a></p>
+    HTML
+
+    expect(cooked).to eq(html.strip)
+
+    # no tlds anymore
+    SiteSetting.markdown_linkify_tlds = ""
+
+    cooked = PrettyText.cook(md)
+    html = <<~HTML
+      <p>www.cnn.com test.it <a href="http://test.com" rel="nofollow noopener">http://test.com</a> <a href="https://test.ab" rel="nofollow noopener">https://test.ab</a> <a href="https://a" rel="nofollow noopener">https://a</a></p>
+    HTML
+
+    expect(cooked).to eq(html.strip)
+
+    # lastly ... what about no linkify
+    SiteSetting.enable_markdown_linkify = false
+
+    cooked = PrettyText.cook(md)
+
+    html = <<~HTML
+      <p>www.cnn.com test.it http://test.com https://test.ab https://a</p>
+    HTML
+  end
+
 end
diff --git a/spec/integrity/common_mark_spec.rb b/spec/integrity/common_mark_spec.rb
index 063e6ddff92..89009866619 100644
--- a/spec/integrity/common_mark_spec.rb
+++ b/spec/integrity/common_mark_spec.rb
@@ -27,7 +27,8 @@ describe "CommonMark" do
         html.gsub!('<hr />', '<hr>')
         html.gsub!(/<img([^>]+) \/>/, "<img\\1>")
 
-        cooked = PrettyText.markdown(md, sanitize: false, linkify: false)
+        SiteSetting.enable_markdown_linkify = false
+        cooked = PrettyText.markdown(md, sanitize: false)
         cooked.strip!
         cooked.gsub!(" class=\"lang-auto\"", '')
         cooked.gsub!(/<span class="hashtag">(.*)<\/span>/, "\\1")