diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,25 @@
+Copyright (c) 2015, Bardur Arantsson
+All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions are
+met:
+
+1. Redistributions of source code must retain the above copyright
+notice, this list of conditions and the following disclaimer.
+
+2. 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.
+
+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/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/pg-harness-client.cabal b/pg-harness-client.cabal
new file mode 100644
--- /dev/null
+++ b/pg-harness-client.cabal
@@ -0,0 +1,28 @@
+Name:                pg-harness-client
+Version:             0.3.0
+Synopsis:            Client library for pg-harness-server
+Description:
+  Client library for <https://hackage.haskell.org/package/pg-harness-server pg-harness-server>
+  for conveniently creating temporary PostgreSQL databases for use in tests.
+License:             BSD2
+License-file:        LICENSE.txt
+Author:              Bardur Arantsson
+Homepage:            https://github.com/BardurArantsson/pg-harness
+Maintainer:          bardur@scientician.net
+Copyright:           Copyright (c) 2014, 2015 Bardur Arantsson
+Category:            Database Testing Web
+Build-type:          Simple
+Cabal-version:       >=1.10
+
+Source-repository head
+  type: git
+  location: https://github.com/BardurArantsson/pg-harness.git
+
+Library
+  Build-depends:      base == 4.*
+                    , bytestring >= 0.9.0.1
+                    , HTTP >= 4000.2.17 && < 4001
+  Default-language:   Haskell2010
+  Ghc-options:        -Wall
+  Hs-source-dirs:     src
+  Exposed-modules:    Data.PostgreSQL.Harness.Client
diff --git a/src/Data/PostgreSQL/Harness/Client.hs b/src/Data/PostgreSQL/Harness/Client.hs
new file mode 100644
--- /dev/null
+++ b/src/Data/PostgreSQL/Harness/Client.hs
@@ -0,0 +1,81 @@
+{-
+    Copyright (c) 2015, Bardur Arantsson
+    All rights reserved.
+
+    Redistribution and use in source and binary forms, with or without
+    modification, are permitted provided that the following conditions are
+    met:
+
+    1. Redistributions of source code must retain the above copyright
+    notice, this list of conditions and the following disclaimer.
+
+    2. 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.
+
+    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.
+-}
+{-|
+
+  Client library for <https://hackage.haskell.org/package/pg-harness-server pg-harness-server>.
+
+  Use the 'createTemporaryDatabase' function to create databases.
+
+-}
+module Data.PostgreSQL.Harness.Client
+    ( ConnectionInformation(..)
+    , createTemporaryDatabase
+    , toConnectionString
+    ) where
+
+import           Data.ByteString (ByteString)
+import qualified Data.ByteString.Char8 as B8
+import           Network.HTTP (simpleHTTP, postRequest, getResponseBody)
+
+-- | Connection information to use for connecting to a database.
+data ConnectionInformation = ConnectionInformation
+    { ciHost :: String
+    , ciPort :: String
+    , ciDatabaseName :: String
+    , ciUser :: String
+    , ciPassword :: String
+    }
+
+-- | Create temporary database using the given URL to a
+-- running @pg-harness-server@ REST service. Returns the connection
+-- information for connecting to the newly created temporary
+-- database.
+createTemporaryDatabase :: String -> IO ConnectionInformation
+createTemporaryDatabase url = do
+  rsp <- simpleHTTP (postRequest url)
+  body <- getResponseBody rsp
+  return $ parse body
+  where
+    parse :: String -> ConnectionInformation
+    parse s =
+      let (userPass, (_:hostPortDatabase)) = break ((==) '@') s in
+      let (user, (_:password)) = break ((==) ':') userPass in
+      let (hostPort, (_:databaseName)) = break ((==) '/') hostPortDatabase in
+      let (host, (_:port)) = break ((==) ':') hostPort in
+        ConnectionInformation host port databaseName user password
+
+-- | Convert connection information to a @libpq@ or
+-- @postgresql-simple@ compatible connection string.
+toConnectionString :: ConnectionInformation -> ByteString
+toConnectionString (ConnectionInformation host port databaseName user password) =
+  B8.pack $
+    "host=" ++ host ++ " " ++
+    "port=" ++ port ++ " " ++
+    "dbname=" ++ databaseName ++ " " ++
+    "user=" ++ user ++ " " ++
+    "password=" ++ password
