diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,24 @@
+Copyright (c) 2014, Scott
+
+The MIT License (MIT)
+
+Copyright (c) <year> <copyright holders>
+
+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/serial-test-generators.cabal b/serial-test-generators.cabal
new file mode 100644
--- /dev/null
+++ b/serial-test-generators.cabal
@@ -0,0 +1,69 @@
+Name:                   serial-test-generators
+Version:                0.1.0
+Author:                 Scott <scottmurphy09@gmail.com>
+Maintainer:             Scott <scottmurphy09@gmail.com>
+License:                MIT
+License-File:           LICENSE
+Category:               Test
+Synopsis:               Test your 'Aeson' 'Serialize' and 'Binary' instances for stability over time
+Description:            
+                        When I am programming haskell I write a lot of
+                        @
+                        instance ToJSON ... where
+                        instance FromJSON ... where
+                        instance Binary ... where
+                        @
+                        These libraries are often associated with state.
+
+                        So, I end up writing a lot of tests of the form ...
+
+                        >>> expect (encode someTestAeson) `toBe` "{\"someSerializedThing\":\"expected encoding\"}
+
+                        so I have to write all these pieces down... but what I would really like is
+
+
+
+                        >>> runAesonSerializeTest someTestAeson outputfile.txt
+
+
+                        That is what these libraries do for Serialize, Binary and Aeson
+                        They make very little assumption about what version of the library you are using. 
+
+
+Cabal-Version:          >= 1.10
+Build-Type:             Simple
+
+Library
+  Default-Language:     Haskell2010
+  HS-Source-Dirs:       src
+  GHC-Options:          -Wall
+  Exposed-Modules:      Test.Serial
+  Other-Modules:        
+  Build-Depends:        base >= 4 && < 5
+                      , aeson
+                      , binary
+                      , cereal
+                      , bytestring >= 0.9.0
+                        
+
+Test-Suite spec
+  Type:                 exitcode-stdio-1.0
+  Default-Language:     Haskell2010
+  Hs-Source-Dirs:       src
+                      , test
+  Ghc-Options:          -Wall
+  Main-Is:              Spec.hs
+  Build-Depends:        base
+                      , hspec
+                      , QuickCheck 
+                      , aeson
+                      , binary
+                      , cereal
+                      , bytestring
+                      , transformers >= 0.3.0
+                      , system-fileio
+
+
+Source-Repository head
+  Type:                 git
+  Location:             https://github.com/smurphy8/serial-test-generators.git
diff --git a/src/Test/Serial.hs b/src/Test/Serial.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/Serial.hs
@@ -0,0 +1,71 @@
+
+
+{- |
+Module      :  Test.Serial
+Description :  Test.Serial run serialization tests against static files
+Copyright   :  (c) Plow Technologies
+License     :  MIT License
+Maintainer  :  Scott Murphy
+Stability   :  unstable 
+Portability :   non-portable (System.Posix)
+
+
+-}
+
+
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE DeriveGeneric #-}
+
+module Test.Serial (runAesonSerializationTest, TestError (..) ) where
+
+import           Data.Aeson (ToJSON
+                           , FromJSON
+                           , toJSON
+                           , encode
+                           , eitherDecode)
+
+
+import qualified Data.ByteString.Lazy as BLazy
+import           GHC.Generics
+import           System.IO (withFile, IOMode(..),openFile,hIsEOF)
+--------------------------------------------------
+
+data TestError = NoFileFound |  -- NoFileFound could simply mean it is the first time the test was ran
+                 AesonError String
+      deriving (Generic,Read,Show,Eq,Ord)
+
+instance ToJSON TestError where
+
+newtype MockInference a = MockInference a
+   deriving (Generic)
+
+instance ToJSON a => ToJSON (MockInference a) where             
+
+
+makeMockInference :: (ToJSON a, FromJSON a) => a -> MockInference a
+makeMockInference testVal = MockInference testVal
+
+runAesonSerializationTest :: (ToJSON a, FromJSON a) => a -> FilePath -> IO (Either TestError a)
+runAesonSerializationTest dataUnderTest file = withFile file ReadWriteMode createAesonSerializeTest
+ where
+    createAesonSerializeTest h = do
+      aNewFile <- hIsEOF h
+      if aNewFile
+        then writeOutputAndExit h
+        else createAesonSerializeTest' h
+             
+    createAesonSerializeTest' h = do
+      aesonByteString <- BLazy.hGetContents h
+      case eitherDecode aesonByteString of
+        (Left s) -> return . Left .  AesonError $ s
+        (Right a) 
+          |(toJSON . makeMockInference $ a) == (toJSON.makeMockInference $ dataUnderTest)
+           -> return . Right $ a
+          |otherwise -> return . Left . AesonError $ "Serializations do not match"
+  
+    writeOutputAndExit h = do
+      putStrLn "file not found, writing given serialization to disk, rerun tests"
+      BLazy.hPut h $ encode dataUnderTest
+      return . Left $ NoFileFound
+
+  
diff --git a/test/Spec.hs b/test/Spec.hs
new file mode 100644
--- /dev/null
+++ b/test/Spec.hs
@@ -0,0 +1,1 @@
+{-# OPTIONS_GHC -F -pgmF hspec-discover #-}
