diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,24 @@
+This is free and unencumbered software released into the public domain.
+
+Anyone is free to copy, modify, publish, use, compile, sell, or
+distribute this software, either in source code form or as a compiled
+binary, for any purpose, commercial or non-commercial, and by any
+means.
+
+In jurisdictions that recognize copyright laws, the author or authors
+of this software dedicate any and all copyright interest in the
+software to the public domain. We make this dedication for the benefit
+of the public at large and to the detriment of our heirs and
+successors. We intend this dedication to be an overt act of
+relinquishment in perpetuity of all present and future rights to this
+software under copyright law.
+
+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 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.
+
+For more information, please refer to <http://unlicense.org/>
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/heredoc.cabal b/heredoc.cabal
new file mode 100644
--- /dev/null
+++ b/heredoc.cabal
@@ -0,0 +1,21 @@
+name:                heredoc
+version:             0.1.0.0
+synopsis:            multi-line string / here document using QuasiQuotes
+
+license:             PublicDomain
+license-file:        LICENSE.txt
+
+author:              James H. Fisher
+maintainer:          jameshfisher@gmail.com
+
+category:            Text
+
+build-type:          Simple
+cabal-version:       >=1.8
+
+library
+  exposed-modules:   Text.Here
+  build-depends:
+    base >= 4 && < 5,
+    template-haskell >= 2.5
+  hs-source-dirs:    src
diff --git a/src/Text/Here.hs b/src/Text/Here.hs
new file mode 100644
--- /dev/null
+++ b/src/Text/Here.hs
@@ -0,0 +1,36 @@
+module Text.Here (here, there) where
+
+import Language.Haskell.TH
+  ( litE
+  , stringL
+  )
+
+import Language.Haskell.TH.Quote
+  ( QuasiQuoter
+    ( QuasiQuoter
+    , quoteExp
+    , quotePat
+    , quoteType
+    , quoteDec
+    )
+  , quoteFile
+  )
+
+err :: String -> String
+err ctx =
+  "You have used the `here` QuasiQuoter in a " ++ ctx ++ " context; " ++
+  "you must only use it as a string literal expression"
+
+-- | Create a string-literal expression from the string being quoted.
+here :: QuasiQuoter
+here = QuasiQuoter
+  { quoteExp  = litE . stringL
+  , quotePat  = const $ error $ err "pattern"
+  , quoteType = const $ error $ err "type"
+  , quoteDec  = const $ error $ err "declaration"
+  }
+
+-- | Create a string-literal expression from
+-- the contents of the file at the filepath being quoted.
+there :: QuasiQuoter
+there = quoteFile here
