diff --git a/src/Shift/Server.hs b/src/Shift/Server.hs
index 0e69ee400e0ad33b1bb910e535d125cfe60b28e8..3eaff0d12b153c88a39ae65ab3a67046bfc18d90 100644
--- a/src/Shift/Server.hs
+++ b/src/Shift/Server.hs
@@ -1,16 +1,22 @@
 {-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE ScopedTypeVariables #-}
 
 module Shift.Server (runServer) where
 
-import Web.Scotty (scotty, get, param, html)
+import CMarkGFM (commonmarkToHtml, nodeToCommonmark, nodeToHtml)
+import Control.Monad.IO.Class (MonadIO (liftIO))
+import Data.Text.Lazy (fromChunks)
 import Shift.CLI (ShiftOptions)
 import Shift.Git (renderToNode)
-import Control.Monad.IO.Class (MonadIO(liftIO))
-import CMarkGFM (nodeToHtml, nodeToHtml, commonmarkToHtml)
-import Data.Text.Lazy (fromChunks)
+import Web.Scotty (rescue, rescue, get, html, param, scotty, text)
 
 runServer :: ShiftOptions -> IO ()
 runServer options = scotty 3000 $
-    get "/" $ do
-        node <- liftIO $ renderToNode options
-        html $ fromChunks [nodeToHtml [] [] node]
+  get "/" $ do
+    (asMarkdown :: Bool) <- param "as_markdown" `rescue` (\_ -> pure False)
+
+    node <- liftIO $ renderToNode options
+
+    if asMarkdown
+      then text $ fromChunks [nodeToCommonmark [] Nothing node]
+      else html $ fromChunks [nodeToHtml [] [] node]