diff --git a/om-elm.cabal b/om-elm.cabal
--- a/om-elm.cabal
+++ b/om-elm.cabal
@@ -1,6 +1,6 @@
 cabal-version:       3.0
 name:                om-elm
-version:             2.0.0.8
+version:             2.0.1.0
 synopsis:            Haskell utilities for building embedded Elm programs.
 description:         This package provides utilities for serving Elm programs
                      directly from your Haskell binary. It uses TemplateHaskell
diff --git a/src/System/Elm/Middleware.hs b/src/System/Elm/Middleware.hs
--- a/src/System/Elm/Middleware.hs
+++ b/src/System/Elm/Middleware.hs
@@ -33,36 +33,49 @@
   See the function documnetation for more details.
 
 -}
-module System.Elm.Middleware (
-  requireElm,
-  elmSite,
-  elmSiteDebug,
-  PathInfo,
-) where
+module System.Elm.Middleware
+  ( requireElm
+  , elmSite
+  , elmSiteDebug
+  , elmSiteDev
+  , elmSiteOptimize
+  , PathInfo
+  )
+where
 
 
 import Control.Exception.Safe (tryAny)
 import Control.Monad (void)
-import Data.Bool (bool)
 import Data.Map (Map)
-import Data.String (IsString, fromString)
+import Data.String (IsString(fromString))
 import Data.Text (Text)
-import Distribution.Simple (UserHooks, hookedPrograms, preConf,
-  simpleUserHooks)
-import Distribution.Simple.Program (Program, configureAllKnownPrograms,
-  defaultProgramDb, requireProgram, simpleProgram)
-import Distribution.Simple.Setup (configVerbosity, fromFlagOrDefault)
+import Distribution.Simple (UserHooks(hookedPrograms, preConf), simpleUserHooks)
+import Distribution.Simple.Program
+  ( Program, configureAllKnownPrograms, defaultProgramDb, requireProgram
+  , simpleProgram
+  )
+import Distribution.Simple.Setup
+  ( ConfigFlags(configVerbosity), fromFlagOrDefault
+  )
 import Distribution.Verbosity (normal)
 import Language.Haskell.TH (Code(examineCode), Q, TExp, runIO)
 import Language.Haskell.TH.Syntax (addDependentFile)
 import Network.HTTP.Types (methodNotAllowed405, ok200)
-import Network.Wai (Application, Middleware, pathInfo, requestMethod,
-  responseLBS)
+import Network.Wai
+  ( Request(pathInfo, requestMethod), Application, Middleware, responseLBS
+  )
+import Prelude
+  ( Bool(True), Eq((==)), Foldable(length), Functor(fmap), Maybe(Just, Nothing)
+  , Monad((>>=)), MonadFail(fail), Semigroup((<>)), Show(show)
+  , Traversable(mapM), ($), (++), (.), (<$>), (=<<), FilePath, String, putStrLn
+  , reverse, take
+  )
 import Safe (lastMay)
 import System.Directory (createDirectory, removeDirectoryRecursive)
 import System.Exit (ExitCode(ExitSuccess))
-import System.Posix (ProcessStatus(Exited), executeFile, forkProcess,
-  getProcessStatus)
+import System.Posix
+  ( ProcessStatus(Exited), executeFile, forkProcess, getProcessStatus
+  )
 import qualified Data.ByteString as BS
 import qualified Data.ByteString.Char8 as BS8
 import qualified Data.Map as Map
@@ -75,7 +88,7 @@
 
   > import Distribution.Simple (defaultMainWithHooks, simpleUserHooks)
   > import System.Elm.Middleware (requireElm)
-  > 
+  >
   > main = defaultMainWithHooks (requireElm simpleUserHooks)
 
 -}
@@ -115,18 +128,32 @@
   will construct a WAI 'Middleware' which serves the compiled elm program on
   @/app.js@.
 
+  Neither the @--optimize@ nor the @--debug@ flags are passed to the
+  elm compiler.
+
 -}
+elmSiteDev  :: Map PathInfo FilePath -> Q (TExp Middleware)
+elmSiteDev = elmSite2 Dev
+
+
+{-| Deprecated. Synonym for 'elmSiteDev'.  -}
+{-# DEPRECATED elmSite "Use elmSiteDev instead. This function will be removed in a future release." #-}
 elmSite :: Map PathInfo FilePath -> Q (TExp Middleware)
-elmSite = elmSite2 False
+elmSite = elmSite2 Dev
 
 
-{- | Like 'elmSite', but serve the debug elm runtime. -}
+{- | Like 'elmSiteDev', but serve the debug elm runtime. -}
 elmSiteDebug :: Map PathInfo FilePath -> Q (TExp Middleware)
-elmSiteDebug = elmSite2 True
+elmSiteDebug = elmSite2 Debug
 
 
-elmSite2 :: Bool -> Map PathInfo FilePath -> Q (TExp Middleware)
-elmSite2 debug spec =
+{- | Like 'elmSiteDev', but pass @--optimize@ to the elm compiler. -}
+elmSiteOptimize :: Map PathInfo FilePath -> Q (TExp Middleware)
+elmSiteOptimize = elmSite2 Optimize
+
+
+elmSite2 :: Mode -> Map PathInfo FilePath -> Q (TExp Middleware)
+elmSite2 mode spec =
     buildMiddleware =<<
       mapM (\(u, c) -> (u,) <$> c) [
         (uriPath, compileElm uriPath elmFile)
@@ -167,13 +194,20 @@
           void . tryAny $ removeDirectoryRecursive buildDir
           createDirectory buildDir
           putStrLn $ "Compiling elm file: " ++ elmFile
+          let
+            flags :: [String]
+            flags =
+              case mode of
+                Debug -> ["--debug"]
+                Dev -> []
+                Optimize -> ["--optimize"]
           forkProcess
             (
               executeFile "elm" True ([
                   "make",
                   elmFile,
                   "--output=" <> buildFile
-                ] ++ bool [] ["--debug"] debug) Nothing
+                ] ++ flags) Nothing
             ) >>= getProcessStatus True True >>= \case
                 Nothing -> fail "elm should have ended."
                 Just (Exited ExitSuccess) ->
@@ -208,5 +242,11 @@
 
 {- | A WAI uri path, as per the meaning of 'pathInfo'. -}
 type PathInfo = [Text]
+
+
+data Mode
+  = Optimize
+  | Dev
+  | Debug
 
 
