diff --git a/Data/Vinyl/JSON.hs b/Data/Vinyl/JSON.hs
new file mode 100644
--- /dev/null
+++ b/Data/Vinyl/JSON.hs
@@ -0,0 +1,46 @@
+{-# LANGUAGE DataKinds
+   , TypeOperators
+   , OverloadedStrings
+   , FlexibleInstances
+   , ScopedTypeVariables
+   , KindSignatures
+   , FlexibleContexts
+   #-}
+{-| This adds and instance of FromJSON to SimpleRecords
+ -
+ -}
+module Data.Vinyl.JSON where
+
+import Control.Applicative
+import Control.Monad
+
+import Data.Vinyl
+
+-- import Data.ByteString as L
+import Data.Aeson
+
+import Data.Text as T
+
+import GHC.TypeLits
+-- import Data.Proxy
+
+instance FromJSON (PlainRec '[]) where
+    parseJSON (Object v) = pure RNil
+    parseJSON _ = mzero
+
+instance (KnownSymbol sym, FromJSON a, FromJSON (PlainRec fields)) =>
+        FromJSON (PlainRec ((sym ::: a) ': (fields :: [*]))) where
+    parseJSON (Object v) = ((<+>) :: PlainRec '[sym ::: a] 
+                                  -> PlainRec fields 
+                                  -> PlainRec  ((sym ::: a) ': fields))
+                                <$> ((field =:) <$> (v .: json_name))
+                                <*> rest_rec
+        where field = Field :: (sym ::: a)
+              json_name = T.pack $ show field
+              rest_rec = parseJSON (Object v)
+              -- I had to type (<+>) because I can't say the type of rest_rec,
+              -- as it uses an internal type
+              -- rest_rec :: Data.Aeson.Types.Internal.Parser (PlainRec (fields))
+              -- but I needed to type rest_rec's result record to have it parse
+
+
diff --git a/Data/Vinyl/JSON/Examples.hs b/Data/Vinyl/JSON/Examples.hs
new file mode 100644
--- /dev/null
+++ b/Data/Vinyl/JSON/Examples.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE DataKinds
+   , TypeOperators
+   , OverloadedStrings
+   , FlexibleInstances
+   , ScopedTypeVariables
+   , KindSignatures
+   , FlexibleContexts
+   #-}
+
+module Data.Vinyl.JSON.Examples where
+
+import Control.Applicative
+import Control.Monad
+
+import Data.Vinyl
+
+-- import Data.ByteString as L
+import Data.Aeson
+
+import Data.Text as T
+
+import GHC.TypeLits
+
+import Data.Vinyl.JSON
+
+-- Examples of use
+--{-
+example_json = "{\"name\": \"jon\", \"job\":\"Code\", \"age\":42, \"things\":[1,2,3] }"
+
+nested_json = "{\"dad\" : { \"name\" : \"bob\" } }"
+
+parsed_example :: Maybe (PlainRec '[("name" ::: Text),
+                                    ("job"  ::: Text),
+                                    ("age"  ::: Int),
+                                    ("things" ::: [Int])])
+parsed_example = decode example_json
+
+parsed_nested :: Maybe (PlainRec '[("dad" ::: 
+                            (PlainRec '[("name" ::: Text)]))])
+parsed_nested = decode nested_json
+--}
diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+
+The MIT License (MIT)
+
+Copyright (c) 2014 Theo Belaire
+
+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/test-suite/HLint.hs b/test-suite/HLint.hs
new file mode 100644
--- /dev/null
+++ b/test-suite/HLint.hs
@@ -0,0 +1,16 @@
+module Main (main) where
+
+import Language.Haskell.HLint (hlint)
+import System.Exit (exitFailure, exitSuccess)
+
+arguments :: [String]
+arguments =
+    [
+    , "library"
+    , "test-suite"
+    ]
+
+main :: IO ()
+main = do
+    hints <- hlint arguments
+    if null hints then exitSuccess else exitFailure
diff --git a/vinyl-json.cabal b/vinyl-json.cabal
new file mode 100644
--- /dev/null
+++ b/vinyl-json.cabal
@@ -0,0 +1,47 @@
+-- Initial vinyl-json.cabal generated by cabal init.  For further 
+-- documentation, see http://haskell.org/cabal/users-guide/
+
+name:                vinyl-json
+version:             0.1.0.0
+synopsis:            Provide json instances automagically to vinyl types
+description:         This adds Data.Aeson FromJSON instances for Simple records
+license:             MIT
+license-file:        LICENSE
+author:              Theo Belaire
+maintainer:          theo.belaire@gmail.com
+-- copyright:           
+category:            Web
+build-type:          Simple
+-- extra-source-files:  
+cabal-version:       >=1.10
+
+source-repository head
+    type:       git
+    location:   https://github.com/tbelaire/vinyl-json.git
+
+flag documentation
+    default: False
+
+library
+  if flag(documentation)
+    build-depends: hscolour == 1.20.*
+
+  exposed-modules:     Data.Vinyl.JSON
+                       Data.Vinyl.JSON.Examples
+  -- other-modules:       
+  -- other-extensions:    
+  build-depends:       base >= 4.7 && < 5,
+                       aeson,
+                       text,
+                       template-haskell == 2.9.*,
+                       vinyl,
+                       bytestring
+  hs-source-dirs:      .
+  default-language:    Haskell2010
+
+test-suite hlint
+    build-depends:    base, hlint == 1.8.*
+    default-language: Haskell2010
+    hs-source-dirs:   test-suite
+    main-is:          HLint.hs
+    type:             exitcode-stdio-1.0
