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/bench/Bench.hs b/bench/Bench.hs
new file mode 100644
--- /dev/null
+++ b/bench/Bench.hs
@@ -0,0 +1,7 @@
+import BasicPrelude
+import Criterion.Main
+
+main :: IO ()
+main = defaultMain
+  [
+  ]
diff --git a/rtcm.cabal b/rtcm.cabal
new file mode 100644
--- /dev/null
+++ b/rtcm.cabal
@@ -0,0 +1,54 @@
+name:                  rtcm
+version:               0.1.0
+synopsis:              Haskell bindings for RTCM.
+description:           Haskell bindings for RTCM.
+homepage:              http://github.com/swift-nav/librtcm
+license:               BSD3
+author:                Swift Navigation Inc.
+maintainer:            Mark Fine <dev@swiftnav.com>
+copyright:             Copyright (C) 2015 Swift Navigation, Inc.
+category:              Network
+build-type:            Simple
+cabal-version:         >= 1.10
+
+source-repository head
+  type:                git
+  location:            https://github.com/swift-nav/librtcm
+
+library
+  hs-source-dirs:      src
+  exposed-modules:     Data.RTCM3
+  ghc-options:         -Wall
+  build-depends:       base >= 4.7 && < 5
+                     , basic-prelude
+  default-language:    Haskell2010
+  default-extensions:  NoImplicitPrelude
+                       OverloadedStrings
+
+test-suite test
+  type:                exitcode-stdio-1.0
+  hs-source-dirs:      test
+  main-is:             Test.hs
+  build-depends:       base
+                     , basic-prelude
+                     , tasty
+                     , tasty-hunit
+                     , rtcm
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
+  default-language:    Haskell2010
+  default-extensions:  NoImplicitPrelude
+                       OverloadedStrings
+
+benchmark bench
+  type:                exitcode-stdio-1.0
+  hs-source-dirs:      bench
+  main-is:             Bench.hs
+  build-depends:       base
+                     , basic-prelude
+                     , criterion
+                     , rtcm
+  ghc-options:         -threaded -rtsopts -with-rtsopts=-N -Wall
+  default-language:    Haskell2010
+  default-extensions:  NoImplicitPrelude
+                       OverloadedStrings
+
diff --git a/src/Data/RTCM3.hs b/src/Data/RTCM3.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/RTCM3.hs
@@ -0,0 +1,13 @@
+-- |
+-- Module:      Data.RTCM3
+-- Copyright:   (c) 2015 Mark Fine
+-- License:     BSD3
+-- Maintainer:  Mark Fine <mark.fine@gmail.com>
+-- Stability:   experimental
+-- Portability: portable
+--
+-- RTCM3 module.
+
+module Data.RTCM3
+  (
+  ) where
diff --git a/test/Test.hs b/test/Test.hs
new file mode 100644
--- /dev/null
+++ b/test/Test.hs
@@ -0,0 +1,10 @@
+import BasicPrelude
+import Test.Tasty
+
+tests :: TestTree
+tests = testGroup "Tests"
+  [
+  ]
+
+main :: IO ()
+main = defaultMain tests
