diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2016 Pedro Tacla Yamada
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/Setup.hs b/Setup.hs
new file mode 100644
--- /dev/null
+++ b/Setup.hs
@@ -0,0 +1,2 @@
+import Distribution.Simple
+main = defaultMain
diff --git a/bin/ConfFmt.hs b/bin/ConfFmt.hs
new file mode 100644
--- /dev/null
+++ b/bin/ConfFmt.hs
@@ -0,0 +1,52 @@
+{-# LANGUAGE RecordWildCards #-}
+import           Control.Monad
+import qualified Data.Conf                 as Conf
+import qualified Data.Text.IO              as Text (hGetContents, readFile)
+import           Options.Applicative
+import           Options.Applicative.Types
+import           System.Environment        (getArgs)
+import           System.Exit               (exitFailure)
+import           System.IO
+import qualified Text.Megaparsec           as Megaparsec
+
+data ConfFmtOptions
+    = ConfFmtOptions { cfoInplace :: Bool
+                     , cfoOutput  :: Maybe FilePath
+                     , cfoInput   :: Maybe FilePath
+                     }
+
+options :: Parser ConfFmtOptions
+options = ConfFmtOptions
+    <$> cfoInplaceAP
+    <*> cfoOutputAP
+    <*> cfoInputAP
+
+cfoInputAP = optional (argument str
+    (metavar "INPUTFILE"
+    <> help "The input file (omission will cause `conffmt` to use stdin)"))
+
+cfoOutputAP = optional (option str (short 'o' <> long "output"))
+cfoInplaceAP = switch (long "inplace"
+    <> short 'i'
+    <> help "Format the FILE inplace, replacing it's contents")
+
+main :: IO ()
+main = do
+    ConfFmtOptions{..} <- execParser (info (helper <*> options)
+                                   ( fullDesc
+                                     <> progDesc "Format a .conf FILE"
+                                     <> header "conffmt - Conf formatter using Haskell language-conf"
+                                   ))
+    (contents, fp) <- case cfoInput of
+        Just fp ->
+            (,) <$> Text.readFile fp <*> pure fp
+        Nothing ->
+            (,) <$> Text.hGetContents stdin <*> pure "<stdin>"
+    case Megaparsec.parse Conf.conf fp contents of
+        Left err -> hPrint stderr err
+        Right ast -> do
+            let output = show (Conf.pPrintConf ast)
+            case (cfoInplace, cfoOutput) of
+                (_, Just outputFp) -> writeFile outputFp output
+                (True, _) -> writeFile fp output
+                _ -> putStr output
diff --git a/conffmt.cabal b/conffmt.cabal
new file mode 100644
--- /dev/null
+++ b/conffmt.cabal
@@ -0,0 +1,35 @@
+-- This file has been generated from package.yaml by hpack version 0.14.0.
+--
+-- see: https://github.com/sol/hpack
+
+name:           conffmt
+version:        0.2.3.0
+synopsis:       A .conf file formatter
+description:     "conffmt" is a @.conf@ file formatter that serves as an example of @language-conf@ 
+category:       Data
+homepage:       https://github.com/beijaflor-io/haskell-language-conf#readme
+bug-reports:    https://github.com/beijaflor-io/haskell-language-conf/issues
+author:         Pedro Tacla Yamada
+maintainer:     tacla.yamada@gmail.com
+copyright:      Copyright (c) 2016 Pedro Tacla Yamada
+license:        MIT
+license-file:   LICENSE
+build-type:     Simple
+cabal-version:  >= 1.10
+
+source-repository head
+  type: git
+  location: https://github.com/beijaflor-io/haskell-language-conf
+
+executable conffmt
+  main-is: ConfFmt.hs
+  hs-source-dirs:
+      bin
+  build-depends:
+      base >=4 && <5
+    , text
+    , optparse-applicative
+    , megaparsec
+    , language-conf
+    , pretty
+  default-language: Haskell2010
