diff --git a/app/presenters/instance_presenter.rb b/app/presenters/instance_presenter.rb
index 5d5be58bae07d231978792bdffbadaf71d1d0e31..8104b753162e09e1d235e88004e8fff749c77559 100644
--- a/app/presenters/instance_presenter.rb
+++ b/app/presenters/instance_presenter.rb
@@ -31,4 +31,8 @@ class InstancePresenter
   def version_number
     Mastodon::Version
   end
+
+  def source_url
+    Mastodon::Version.source_url
+  end
 end
diff --git a/app/views/about/more.html.haml b/app/views/about/more.html.haml
index a6fd265fabcd7256ffb1798dc35eea829cc4522b..094188472e08afd244d7ceeabd5ef0f0cb195671 100644
--- a/app/views/about/more.html.haml
+++ b/app/views/about/more.html.haml
@@ -63,5 +63,5 @@
   .footer-links
     .container
       %p
-        = link_to t('about.source_code'), 'https://github.com/tootsuite/mastodon'
-        = " (#{@instance_presenter.version_number})"
\ No newline at end of file
+        = link_to t('about.source_code'), @instance_presenter.source_url
+        = " (#{@instance_presenter.version_number})"
diff --git a/app/views/about/show.html.haml b/app/views/about/show.html.haml
index acdb12ad72c0392e6f968f1972abf80c8f4ec480..93270fe3d66b5e248cccc1f76f389071b9949e18 100644
--- a/app/views/about/show.html.haml
+++ b/app/views/about/show.html.haml
@@ -76,5 +76,5 @@
   .footer-links
     .container
       %p
-        = link_to t('about.source_code'), 'https://github.com/tootsuite/mastodon'
-        = " (#{@instance_presenter.version_number})"
\ No newline at end of file
+        = link_to t('about.source_code'), @instance_presenter.source_url
+        = " (#{@instance_presenter.version_number})"
diff --git a/lib/mastodon/version.rb b/lib/mastodon/version.rb
index 381e9aac92dfa3ceb66c0bf183ab44d4d4a809e5..fcca875d9bcb8ac826c3505c6fc6854b7163f3e5 100644
--- a/lib/mastodon/version.rb
+++ b/lib/mastodon/version.rb
@@ -31,5 +31,22 @@ module Mastodon
     def to_s
       [to_a.join('.'), flags].join
     end
+
+    def source_base_url
+      'https://github.com/tootsuite/mastodon'
+    end
+
+    # specify git tag or commit hash here
+    def source_tag
+      nil
+    end
+
+    def source_url
+      if source_tag
+        "#{source_base_url}/tree/#{source_tag}"
+      else
+        source_base_url
+      end
+    end
   end
 end
diff --git a/spec/views/about/show.html.haml_spec.rb b/spec/views/about/show.html.haml_spec.rb
index c0ead6349129e660a0b98d5ac551493032198ce4..aa151dd2778bdd69ec4ce4922a081a3d1128145f 100644
--- a/spec/views/about/show.html.haml_spec.rb
+++ b/spec/views/about/show.html.haml_spec.rb
@@ -13,6 +13,7 @@ describe 'about/show.html.haml', without_verify_partial_doubles: true do
                                 site_title: 'something',
                                 site_description: 'something',
                                 version_number: '1.0',
+                                source_url: 'https://github.com/tootsuite/mastodon',
                                 open_registrations: false,
                                 closed_registrations_message: 'yes')
     assign(:instance_presenter, instance_presenter)