diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# `dhall-text 1.0.10`
+# `dhall-text 1.0.11`
 
 This `dhall-text` package provides a `dhall-to-text` executable which you can
 use to template text using the Dhall configuration language.
diff --git a/dhall-text.cabal b/dhall-text.cabal
--- a/dhall-text.cabal
+++ b/dhall-text.cabal
@@ -1,5 +1,5 @@
 Name: dhall-text
-Version: 1.0.10
+Version: 1.0.11
 Cabal-Version: >=1.8.0.2
 Build-Type: Simple
 Tested-With: GHC == 7.10.2, GHC == 8.0.1
@@ -24,8 +24,10 @@
     Hs-Source-Dirs: exec
     Main-Is: Main.hs
     Build-Depends:
-        base             >= 4.8.0.0  && < 5   ,
-        dhall            >= 1.14.0   && < 1.15,
-        optparse-generic >= 1.1.1    && < 1.4 ,
-        text             >= 0.11.1.0 && < 1.3
+        base                 >= 4.8.0.0  && < 5   ,
+        dhall                >= 1.15.0   && < 1.16,
+        optparse-applicative                < 0.15,
+        text                 >= 0.11.1.0 && < 1.3
     GHC-Options: -Wall
+    Other-Modules:
+        Paths_dhall_text
diff --git a/exec/Main.hs b/exec/Main.hs
--- a/exec/Main.hs
+++ b/exec/Main.hs
@@ -1,25 +1,63 @@
-{-# LANGUAGE DataKinds          #-}
-{-# LANGUAGE DeriveAnyClass     #-}
-{-# LANGUAGE DeriveGeneric      #-}
-{-# LANGUAGE ExplicitNamespaces #-}
-{-# LANGUAGE OverloadedStrings  #-}
-{-# LANGUAGE TypeOperators      #-}
-{-# LANGUAGE RecordWildCards    #-}
+{-# LANGUAGE RecordWildCards #-}
 
-import Options.Generic (Generic, ParseRecord, type (<?>)(..))
+import Control.Applicative ((<|>))
+import Data.Monoid ((<>))
+import Options.Applicative (Parser, ParserInfo)
 
-import qualified Data.Text.Lazy.IO
+import qualified Data.Text.IO
+import qualified Data.Version
 import qualified Dhall
-import qualified Options.Generic
+import qualified Options.Applicative
+import qualified Paths_dhall_text
 
-newtype Options = Options
-    { explain :: Bool <?> "Explain error messages in detail"
-    } deriving (Generic, ParseRecord)
+data Options
+    = Default { explain :: Bool }
+    | Version
 
+parseOptions :: Parser Options
+parseOptions = parseVersion <|> parseDefault
+  where
+    parseVersion =
+        Options.Applicative.subparser
+            (   Options.Applicative.command "version" parserInfoVersion
+            <>  Options.Applicative.metavar "version"
+            )
+      where
+        parserInfoVersion =
+            Options.Applicative.info parser
+                (   Options.Applicative.fullDesc
+                <>  Options.Applicative.progDesc "Display version"
+                )
+
+        parser =
+            Options.Applicative.helper <*> pure Version
+
+    parseDefault = Default <$> parseExplain
+      where
+        parseExplain =
+            Options.Applicative.switch
+                (   Options.Applicative.long "explain"
+                <>  Options.Applicative.help "Explain error messages in detail"
+                )
+
+parserInfoOptions :: ParserInfo Options
+parserInfoOptions =
+    Options.Applicative.info
+        (Options.Applicative.helper <*> parseOptions)
+        (   Options.Applicative.progDesc "Template text using Dhall"
+        <>  Options.Applicative.fullDesc
+        )
+
 main :: IO ()
 main = do
-    Options {..} <- Options.Generic.getRecord "Template text using Dhall"
-    let detail = if unHelpful explain then Dhall.detailed else id
-    code <- Data.Text.Lazy.IO.getContents
-    text <- detail (Dhall.input Dhall.auto code)
-    Data.Text.Lazy.IO.putStr text
+    options <- Options.Applicative.execParser parserInfoOptions
+
+    case options of
+        Default {..} -> do
+            let detail = if explain then Dhall.detailed else id
+            code <- Data.Text.IO.getContents
+            text <- detail (Dhall.input Dhall.auto code)
+            Data.Text.IO.putStr text
+
+        Version -> do
+            putStrLn (Data.Version.showVersion Paths_dhall_text.version)
