diff --git a/hakyll.cabal b/hakyll.cabal
--- a/hakyll.cabal
+++ b/hakyll.cabal
@@ -1,5 +1,5 @@
 Name:    hakyll
-Version: 4.6.8.1
+Version: 4.6.9.0
 
 Synopsis: A static website compiler library
 Description:
@@ -159,7 +159,7 @@
     old-locale         >= 1.0     && < 1.1,
     old-time           >= 1.0     && < 1.2,
     pandoc             >= 1.12.4  && < 1.14,
-    pandoc-citeproc    >= 0.4     && < 0.7,
+    pandoc-citeproc    >= 0.4     && < 0.8,
     parsec             >= 3.0     && < 3.2,
     process            >= 1.0     && < 1.3,
     random             >= 1.0     && < 1.2,
@@ -247,7 +247,7 @@
     old-locale         >= 1.0     && < 1.1,
     old-time           >= 1.0     && < 1.2,
     pandoc             >= 1.12.4  && < 1.14,
-    pandoc-citeproc    >= 0.4     && < 0.7,
+    pandoc-citeproc    >= 0.4     && < 0.8,
     parsec             >= 3.0     && < 3.2,
     process            >= 1.0     && < 1.3,
     random             >= 1.0     && < 1.2,
diff --git a/src/Hakyll/Main.hs b/src/Hakyll/Main.hs
--- a/src/Hakyll/Main.hs
+++ b/src/Hakyll/Main.hs
@@ -5,6 +5,7 @@
 module Hakyll.Main
     ( hakyll
     , hakyllWith
+    , hakyllWithExitCode
     ) where
 
 
@@ -13,7 +14,7 @@
 import qualified System.Console.CmdArgs.Explicit as CA
 import           System.Environment              (getProgName)
 import           System.IO.Unsafe                (unsafePerformIO)
-import           System.Exit                     (exitWith)
+import           System.Exit                     (ExitCode(ExitSuccess), exitWith)
 
 --------------------------------------------------------------------------------
 import qualified Hakyll.Check                    as Check
@@ -28,12 +29,14 @@
 hakyll :: Rules a -> IO ()
 hakyll = hakyllWith Config.defaultConfiguration
 
-
 --------------------------------------------------------------------------------
 -- | A variant of 'hakyll' which allows the user to specify a custom
 -- configuration
 hakyllWith :: Config.Configuration -> Rules a -> IO ()
-hakyllWith conf rules = do
+hakyllWith conf rules = hakyllWithExitCode conf rules >>= exitWith
+
+hakyllWithExitCode :: Config.Configuration -> Rules a -> IO ExitCode
+hakyllWithExitCode conf rules = do
     args' <- cmdArgs (hakyllArgs conf)
 
     let verbosity' = if verbose args' then Logger.Debug else Logger.Message
@@ -42,15 +45,17 @@
 
     logger <- Logger.new verbosity'
     case args' of
-        Build   _     -> Commands.build conf logger rules >>= exitWith
-        Check   _ _   -> Commands.check conf logger check'
-        Clean   _     -> Commands.clean conf logger
-        Deploy  _     -> Commands.deploy conf >>= exitWith
-        Help    _     -> showHelp
-        Preview _ p   -> Commands.preview conf logger rules p
-        Rebuild _     -> Commands.rebuild conf logger rules >>= exitWith
-        Server  _ _ _   -> Commands.server conf logger (host args') (port args')
-        Watch   _ _ p s -> Commands.watch conf logger (host args') p (not s) rules
+        Build   _     -> Commands.build conf logger rules
+        Check   _ _   -> Commands.check conf logger check' >> ok
+        Clean   _     -> Commands.clean conf logger >> ok
+        Deploy  _     -> Commands.deploy conf
+        Help    _     -> showHelp >> ok
+        Preview _ p   -> Commands.preview conf logger rules p >> ok
+        Rebuild _     -> Commands.rebuild conf logger rules
+        Server  _ _ _   -> Commands.server conf logger (host args') (port args') >> ok
+        Watch   _ _ p s -> Commands.watch conf logger (host args') p (not s) rules >> ok
+    where
+        ok = return ExitSuccess
 
 
 --------------------------------------------------------------------------------
