diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2017, Nikita Volkov
+
+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/demo/Main.hs b/demo/Main.hs
new file mode 100644
--- /dev/null
+++ b/demo/Main.hs
@@ -0,0 +1,20 @@
+module Main where
+
+import Prelude
+import qualified OptparseApplicative.Simple.Parser as A
+import qualified OptparseApplicative.Simple.IO as B
+import qualified Attoparsec.Data.Explicit as B
+
+
+main =
+  B.parser "demo" parser >>= print
+  where
+    parser =
+      (,,) <$> arg1 <*> arg2 <*> arg3
+      where
+        arg1 =
+          A.argument "arg1" (Just 'a') (Just "Description1") (Just (True, "True")) B.bool
+        arg2 =
+          A.argument "arg2" Nothing Nothing Nothing B.text
+        arg3 =
+          A.argument "arg3" Nothing Nothing Nothing B.utf8Bytes <|> pure ""
diff --git a/library/OptparseApplicative/Simple/IO.hs b/library/OptparseApplicative/Simple/IO.hs
new file mode 100644
--- /dev/null
+++ b/library/OptparseApplicative/Simple/IO.hs
@@ -0,0 +1,26 @@
+module OptparseApplicative.Simple.IO
+(
+  parser,
+)
+where
+
+import BasePrelude
+import Data.Text (Text)
+import qualified OptparseApplicative.Simple.Parser as D
+import qualified OptparseApplicative.Simple.ParserInfo as C
+import qualified Options.Applicative as B
+
+
+{-|
+Parses the application arguments and outputs help when needed.
+-}
+parser 
+  :: Text -- ^ Program description
+  -> D.Parser a -- ^ Arguments specification
+  -> IO a -- ^ IO action producing the parsed arguments
+parser description parser =
+  parserInfo (C.parser description parser)
+
+parserInfo :: C.ParserInfo a -> IO a
+parserInfo =
+  B.execParser
diff --git a/library/OptparseApplicative/Simple/Parser.hs b/library/OptparseApplicative/Simple/Parser.hs
new file mode 100644
--- /dev/null
+++ b/library/OptparseApplicative/Simple/Parser.hs
@@ -0,0 +1,43 @@
+module OptparseApplicative.Simple.Parser
+(
+  Parser,
+  argument,
+)
+where
+
+import BasePrelude
+import Data.Text (Text)
+import qualified Options.Applicative as A
+import qualified Data.Attoparsec.Text as B
+import qualified Data.Text as C
+
+
+{-|
+Specification of a command line arguments parser and help generator.
+
+Has instances of 'Functor', 'Applicative' and 'Alternative',
+which you can use for composition.
+-}
+type Parser =
+  A.Parser
+
+{-|
+Definition of a single argument.
+-}
+argument
+  :: Text -- ^ Long name
+  -> Maybe Char -- ^ Possible short name
+  -> Maybe Text -- ^ Possible description
+  -> Maybe (a, Text) -- ^ Possible default value with its text representation to display in the generated help
+  -> B.Parser a -- ^ Attoparsec parser of the value. The \"attoparsec-data\" package provides such parsers for a lot of standard types
+  -> A.Parser a
+argument longName shortName description defaultValue parser =
+  A.option readM mods
+  where
+    readM =
+      A.eitherReader (B.parseOnly parser . C.pack)
+    mods =
+      A.long (C.unpack longName) <>
+      foldMap A.short shortName <>
+      foldMap (A.help . C.unpack) description <>
+      foldMap (\(value, text) -> A.value value <> A.showDefaultWith (const (C.unpack text))) defaultValue
diff --git a/library/OptparseApplicative/Simple/ParserInfo.hs b/library/OptparseApplicative/Simple/ParserInfo.hs
new file mode 100644
--- /dev/null
+++ b/library/OptparseApplicative/Simple/ParserInfo.hs
@@ -0,0 +1,28 @@
+module OptparseApplicative.Simple.ParserInfo
+(
+  parser,
+  -- * Reexports
+  B.ParserInfo,
+)
+where
+
+import BasePrelude
+import Data.Text (Text)
+import qualified OptparseApplicative.Simple.Parser as C
+import qualified Options.Applicative as B
+import qualified Data.Text as D
+
+
+{-|
+Constructs ParserInfo from Parser.
+-}
+parser 
+  :: Text -- ^ Program description
+  -> B.Parser a -- ^ Parser
+  -> B.ParserInfo a
+parser description parser =
+  B.info (B.helper <*> parser) mods
+  where
+    mods =
+      B.fullDesc <>
+      B.progDesc (D.unpack description)
diff --git a/optparse-applicative-simple.cabal b/optparse-applicative-simple.cabal
new file mode 100644
--- /dev/null
+++ b/optparse-applicative-simple.cabal
@@ -0,0 +1,84 @@
+name:
+  optparse-applicative-simple
+version:
+  1
+category:
+  CLI, Parsing, Options
+synopsis:
+  Simple command line interface arguments parser
+description:
+  A very simple API for the \"optparse-applicative\" library,
+  which maintains the compatibility with it,
+  while being completely self-sufficient.
+  IOW, you don't need to depend on \"optparse-applicative\" to
+  apply this library,
+  yet you still can integrate with it, when needed.
+homepage:
+  https://github.com/nikita-volkov/optparse-applicative-simple
+bug-reports:
+  https://github.com/nikita-volkov/optparse-applicative-simple/issues
+author:
+  Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer:
+  Nikita Volkov <nikita.y.volkov@mail.ru>
+copyright:
+  (c) 2017, Nikita Volkov
+license:
+  MIT
+license-file:
+  LICENSE
+build-type:
+  Simple
+cabal-version:
+  >= 1.10
+
+source-repository head
+  type:
+    git
+  location:
+    git://github.com/nikita-volkov/optparse-applicative-simple.git
+
+library
+  hs-source-dirs:
+    library
+  exposed-modules:
+    OptparseApplicative.Simple.Parser
+    OptparseApplicative.Simple.IO
+  other-modules:
+    OptparseApplicative.Simple.ParserInfo
+  default-extensions:
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language:
+    Haskell2010
+  build-depends:
+    -- 
+    optparse-applicative == 0.13.*,
+    attoparsec == 0.13.*,
+    -- 
+    text == 1.*,
+    base-prelude < 2
+
+test-suite demo
+  type:
+    exitcode-stdio-1.0
+  hs-source-dirs:
+    demo
+  main-is:
+    Main.hs
+  ghc-options:
+    -O2
+    -threaded
+    "-with-rtsopts=-N"
+  ghc-prof-options:
+    -O2
+    -threaded
+    -fprof-auto
+    "-with-rtsopts=-N -p -s -h -i0.1"
+  default-extensions:
+    Arrows, BangPatterns, ConstraintKinds, DataKinds, DefaultSignatures, DeriveDataTypeable, DeriveFoldable, DeriveFunctor, DeriveGeneric, DeriveTraversable, EmptyDataDecls, FlexibleContexts, FlexibleInstances, FunctionalDependencies, GADTs, GeneralizedNewtypeDeriving, LambdaCase, LiberalTypeSynonyms, MagicHash, MultiParamTypeClasses, MultiWayIf, NoImplicitPrelude, NoMonomorphismRestriction, OverloadedStrings, PatternGuards, ParallelListComp, QuasiQuotes, RankNTypes, RecordWildCards, ScopedTypeVariables, StandaloneDeriving, TemplateHaskell, TupleSections, TypeFamilies, TypeOperators, UnboxedTuples
+  default-language:
+    Haskell2010
+  build-depends:
+    optparse-applicative-simple,
+    attoparsec-data == 0.1.*,
+    rerebase == 1.*
