diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,28 @@
+Copyright (c) 2014, Parnell Springmeyer
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are met:
+
+* Redistributions of source code must retain the above copyright notice, this
+  list of conditions and the following disclaimer.
+
+* Redistributions in binary form must reproduce the above copyright notice,
+  this list of conditions and the following disclaimer in the documentation
+  and/or other materials provided with the distribution.
+
+* Neither the name of the {organization} nor the names of its
+  contributors may be used to endorse or promote products derived from
+  this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
+AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
+DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
+SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
+CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
diff --git a/README.org b/README.org
new file mode 100644
--- /dev/null
+++ b/README.org
@@ -0,0 +1,4 @@
+snaplet-amqp
+============
+
+A snaplet providing a convenience interface to the Haskell AMQP package.
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/snaplet-amqp.cabal b/snaplet-amqp.cabal
new file mode 100644
--- /dev/null
+++ b/snaplet-amqp.cabal
@@ -0,0 +1,71 @@
+Name:                snaplet-amqp
+Version:             0.1.2.0
+Synopsis:            Snap framework snaplet for the AMQP library
+Homepage:            https://github.com/ixmatus/snaplet-amqp
+License:             BSD3
+License-file:        LICENSE
+Author:              Parnell Springmeyer
+Maintainer:          parnell@digitalmentat.com
+Copyright:           (c) 2014 Parnell Springmeyer
+Category:            Web
+Build-type:          Simple
+Stability:           alpha
+Bug-reports:         https://github.com/ixmatus/snaplet-amqp/issues
+Package-url:         http://hackage.haskell.org/package/snaplet-amqp
+Tested-with:         GHC == 7.6.3
+Cabal-version:       >=1.14.0
+
+description:
+  `snaplet-amqp` is a snaplet for the Snap web framework providing
+  convenience functions and state management for the Haskell AMQP
+  package.
+  .
+  Below is an incomplete example.
+  .
+  @
+  import           Control.Lens
+  import           Snap
+  import           Snap.Snaplet
+  import           Snap.Snaplet.AMQP
+
+  data App = App
+      { _amqp    :: Snaplet AmqpState }
+
+  makeLenses ''App
+
+  instance HasAmqpConn (Handler b App) where
+      getAmqpConn = with amqp getAmqpConn
+
+  app :: SnapletInit App App
+  app = makeSnaplet "app" "An snaplet example application." Nothing $ do
+      a <- nestSnaplet "amqp" amqp initAMQP
+      addRoutes appRoutes -- Your routes, I haven't defined any here
+      return $ App a
+
+Extra-source-files:
+    LICENSE
+    README.org
+
+Library
+  Default-Language:     Haskell2010
+  HS-Source-Dirs:       src
+  GHC-Options:          -Wall
+
+  Exposed-Modules:
+    Snap.Snaplet.AMQP
+
+  Other-Modules:
+    Paths_snaplet_amqp
+
+  Build-Depends:
+    base                >= 4.4     && < 5,
+    snap                >= 0.13    && < 0.14,
+    amqp                >= 0.10    && < 0.11,
+    transformers        >= 0.4     && < 0.5,
+    configurator        >= 0.3     && < 0.4,
+    network             >= 2.5     && < 2.6,
+    mtl                 >= 2       && < 3
+
+Source-Repository head
+  Type:                 git
+  Location:             https://github.com/ixmatus/snaplet-amqp
diff --git a/src/Snap/Snaplet/AMQP.hs b/src/Snap/Snaplet/AMQP.hs
new file mode 100644
--- /dev/null
+++ b/src/Snap/Snaplet/AMQP.hs
@@ -0,0 +1,74 @@
+{-# LANGUAGE ConstraintKinds   #-}
+{-# LANGUAGE FlexibleContexts  #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE TypeFamilies      #-}
+
+module Snap.Snaplet.AMQP
+  ( initAMQP
+  , runAmqp
+  , mkAmqpConn
+  , AmqpState   (..)
+  , HasAmqpConn (..)
+  ) where
+
+import           Control.Monad.State
+import           Control.Monad.Trans.Reader
+import           Data.Configurator
+import           Data.Configurator.Types
+import           Network.AMQP               (Channel, Connection, openChannel,
+                                             openConnection')
+import           Network.Socket             (PortNumber (..))
+import           Paths_snaplet_amqp
+import           Snap.Snaplet
+
+-------------------------------------------------------------------------------
+type AmqpC = (Connection, Channel)
+
+newtype AmqpState = AmqpState { amqpConn :: AmqpC }
+
+-------------------------------------------------------------------------------
+class MonadIO m => HasAmqpConn m where
+    getAmqpConn :: m AmqpC
+
+instance HasAmqpConn (Handler b AmqpState) where
+    getAmqpConn = gets amqpConn
+
+instance MonadIO m => HasAmqpConn (ReaderT AmqpC m) where
+    getAmqpConn = ask
+
+-- | Initialize the AMQP Snaplet.
+initAMQP :: SnapletInit b AmqpState
+initAMQP = makeSnaplet "persist" description datadir $ do
+    c <- mkSnapletAmqpConn
+    return $ AmqpState c
+  where
+    description = "Snaplet for AMQP library"
+    datadir = Just $ liftM (++"/resources/amqp") getDataDir
+
+-------------------------------------------------------------------------------
+-- | Constructs a connection in a snaplet context.
+mkSnapletAmqpConn :: (MonadIO (m b v), MonadSnaplet m) => m b v AmqpC
+mkSnapletAmqpConn = do
+  conf <- getSnapletUserConfig
+  mkAmqpConn conf
+
+-------------------------------------------------------------------------------
+-- | Constructs a connect from Config.
+mkAmqpConn :: MonadIO m => Config -> m AmqpC
+mkAmqpConn conf = do
+  host  <- liftIO $ require conf "host"
+  port  <- liftIO $ require conf "port"
+  vhost <- liftIO $ require conf "vhost"
+  login <- liftIO $ require conf "login"
+  pass  <- liftIO $ require conf "password"
+
+  conn  <- liftIO $ openConnection' host (PortNum port) vhost login pass
+  chan  <- liftIO $ openChannel conn
+
+  return (conn, chan)
+
+-------------------------------------------------------------------------------
+-- | Runs an AMQP action in any monad with a HasAmqpConn instance.
+runAmqp :: (HasAmqpConn m) => (AmqpC -> b) -> m b
+runAmqp action = getAmqpConn >>= return . action
