diff --git a/README.md b/README.md
index c8ce047..0314524 100644
--- a/README.md
+++ b/README.md
@@ -6,6 +6,18 @@ Tempered
 A dead-simple templating utility for simple shell interpolation.
 Use at your own risk and only on trusted templates.
 
+```bash
+$ tempered --help
+Tempered - Templating engine based on shell interpolation
+
+Usage: tempered [templates]
+  Interpolate templates to stdout
+
+Available options:
+  templates                The templates to interpolate
+  -h,--help                Show this help text
+```
+
 Here's a simple use-case:
 
 ```md
diff --git a/app/Main.hs b/app/Main.hs
index b3ed9ca..64ce552 100644
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,24 +1,55 @@
+{-# language OverloadedStrings #-}
 module Main where
 
 import System.Environment
 import System.Directory
+import System.Exit
+
+import Paths_tempered (version)
+import Data.Version (showVersion)
 
 import Data.Foldable
+import Data.Monoid
 import qualified Data.Map as M
 import Control.Monad.Reader
 
+import Options.Applicative
+
 import Tempered.Options
 import Tempered.Parser
 import Tempered.Template
 
+data Options = Options
+  { files :: [String]
+  , versionFlag :: Bool
+  } deriving (Show)
+
+
+options :: Parser Options
+options = Options <$> many (argument str meta) <*> switch vers
+  where meta = help "The templates to interpolate" <> metavar "templates"
+        vers = long "version" <> short 'v' <> help "Show version"
+
+argParser :: ParserInfo Options
+argParser = info (options <**> helper)
+              ( fullDesc <>
+                progDesc "Interpolate templates to stdout" <>
+                header "Tempered - Templating engine based on shell interpolation")
+
 -- | Run tempered on cmdline args.
 main :: IO ()
 main = do
+  Options filenames versionF <- execParser argParser
+  when versionF $ putStrLn (showVersion version) >> exitSuccess
   envVars <- getEnvVars
-  filenames <- getArgs
-  templates <- traverse (templateFromFile >=> handleTemplateError) filenames
+  templates <- getTemplates filenames
   runReaderT (renderOutput templates) envVars
   where
+    -- Choose stdin if we're not given any files
+    getTemplates [] = (:[]) <$> readStdInTemplate
+    getTemplates filenames = traverse (templateFromFile >=> handleTemplateError) filenames
+
+    readStdInTemplate = getContents >>= handleTemplateError . parseTemplate "stdin"
     renderOutput = traverse_ (interpTemplate  >=> liftIO . putStr)
 
 -- | Combine local and global environment variables
diff --git a/tempered.cabal b/tempered.cabal
index 5b64760..1538d83 100644
--- a/tempered.cabal
+++ b/tempered.cabal
@@ -1,5 +1,5 @@
 name:                tempered
-version:             0.1.0
+version:             0.2.0
 synopsis: A dead-simple shell interpolation templating utility
 -- description: A dead-simple shell interpolation templating utility
 homepage:            https://github.com/ChrisPenner/tempered#readme
@@ -37,6 +37,9 @@ executable tempered
                      , mtl
                      , tempered
                      , containers
+                     , optparse-applicative
+-- Required for --version flag
+  other-modules:       Paths_tempered
   default-language:    Haskell2010
 
 test-suite tempered-test