diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,21 @@
+The MIT License (MIT)
+
+Copyright (c) 2014 Athan Clark
+
+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/src/UrlPath.hs b/src/UrlPath.hs
new file mode 100644
--- /dev/null
+++ b/src/UrlPath.hs
@@ -0,0 +1,100 @@
+{-# LANGUAGE OverloadedStrings #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+{-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE KindSignatures #-}
+{-# LANGUAGE InstanceSigs #-}
+{-# LANGUAGE TypeFamilies #-}
+
+
+module UrlPath
+    ( UrlReader (..)
+    , Url (..)
+    , module UrlPath.Types ) where
+
+import UrlPath.Types
+
+import qualified Data.Text as T
+
+import Control.Monad.Trans
+import Control.Monad.Reader.Class
+
+import Data.Monoid
+import Control.Applicative
+import Control.Monad
+import Data.Functor.Identity
+
+
+-- | Convenience typeclass for a uniform interface into pure @Reader@-like 
+-- monads.
+class MonadReader T.Text m => UrlReader (m :: * -> *) where
+  runUrlReader :: m a -- ^ Monadic reader-like computation
+               -> T.Text -- ^ @T.Text@ index
+               -> a -- ^ Result
+
+instance MonadReader T.Text Identity where
+  ask = return ""
+
+instance UrlReader Identity where
+  runUrlReader x _ = runIdentity x
+
+instance UrlReader AbsoluteUrl where
+  runUrlReader = runAbsoluteUrl
+
+instance UrlReader RelativeUrl where
+  runUrlReader = runRelativeUrl
+
+instance UrlReader GroundedUrl where
+  runUrlReader = runGroundedUrl
+
+-- | @Url@ takes an input type @a@, and returns a modality @f@ around @T.Text@.
+class Monad m => Url a m where
+  renderUrl :: a -- ^ Url-like type (@UrlString@ or @T.Text@).
+            -> m T.Text -- ^ Rendered Url in some context @f@
+
+instance Url T.Text Identity where
+  renderUrl = Identity
+
+instance Url UrlString RelativeUrl where
+  renderUrl x = RelativeUrl $ \_ -> expandRelative x
+
+instance Url UrlString GroundedUrl where
+  renderUrl x = GroundedUrl $ \_ -> expandGrounded x
+
+instance Url UrlString AbsoluteUrl where
+  renderUrl = expandAbsolute
+
+instance Monad m => Url UrlString (RelativeUrlT m) where
+  renderUrl x = RelativeUrlT $ \_ -> return $ expandRelative x
+
+instance Monad m => Url UrlString (GroundedUrlT m) where
+  renderUrl x = GroundedUrlT $ \_ -> return $ expandGrounded x
+
+instance Monad m => Url UrlString (AbsoluteUrlT m) where
+  renderUrl = expandAbsolute
+
+
+-- * Example
+--
+-- | Here is an example:
+--
+-- > {-# LANGUAGE OverloadedStrings #-}
+-- > {-# LANGUAGE ExtendedDefaultRules #-}
+-- >
+-- > import Lucid
+-- > import Lucid.Path
+-- > import qualified Data.Text as T
+-- > import qualified Data.Text.Lazy as LT
+-- >
+-- > foo :: LT.Text
+-- > foo = (runUrlReader $ renderTextT bar) "example.com"
+-- >
+-- > bar :: HtmlT AbsoluteUrl ()
+-- > bar = do
+-- >   url <- lift $ renderUrl $ "foo.php" <?> ("bar","baz")
+-- >   script_ [src_ url] ""
+--
+-- Where @foo@ is now
+--
+-- > Lucid> foo
+-- > "<script src=\"example.com/foo.php?bar=baz\"></script>"
diff --git a/urlpath.cabal b/urlpath.cabal
new file mode 100644
--- /dev/null
+++ b/urlpath.cabal
@@ -0,0 +1,73 @@
+Name:                   urlpath
+Version:                0.0.1
+Author:                 Athan Clark <athan.clark@gmail.com>
+Maintainer:             Athan Clark <athan.clark@gmail.com>
+License:                BSD3
+License-File:           LICENSE
+Category:               Web
+Synopsis:               Painfully simple URL writing combinators
+Description:
+  Simple URL DSL for Haskell.
+  .
+  Use raw combinators (kinda useless) ...
+  .
+  >  render $ "foo.php" <?> ("key1","bar") <&> ("key2","baz")
+  >
+  >  ↪ "foo.php?key1=bar&key2=baz"
+  .
+  ... or use the MonadReader instance for a configurable root ...
+  .
+  >  let url = runReader $ expandAbsolute $ "foo.php" <?> ("key1","bar") <&> ("key2","baz")
+  >  url "example.com"
+  >
+  >  ↪ "example.com/foo.php?key1=bar&key2=baz"
+  .
+  ... in Lucid ...
+  .
+  >  (runReader $ renderTextT $
+  >    (\a -> do
+  >      foo <- lift $ expandAbsolute a
+  >      script_ [src_ foo] "" )
+  >    ("foo" <?> ("bar","baz"))
+  >  ) "example.com"
+  >
+  >  ↪ "<script src=\"example.com/foo?bar=baz\"></script>"
+  .
+  ... and in Scotty ...
+  .
+  >  main :: IO ()
+  >  main = scottyT 3000
+  >      rootConf
+  >      rootConf
+  >      run
+  >  
+  >    where
+  >      rootConf = flip runReaderT "http://example.com"
+  >  
+  >      run :: ( MonadIO m
+  >             , MonadReader T.Text m ) =>
+  >             ScottyT LT.Text m ()
+  >      run = get "/" $ do
+  >        path <- lift $ expandAbsolute $ "foo" <?> ("bar","baz")
+  >        text $ LT.fromStrict path
+  >
+  >  λ> curl localhost:3000/
+  >  ↪ "http://example.com/foo?bar=baz"
+  
+
+Cabal-Version:          >= 1.10
+Build-Type:             Simple
+
+Library
+  Default-Language:     Haskell2010
+  HS-Source-Dirs:       src
+  GHC-Options:          -Wall
+  Exposed-Modules:      UrlPath
+  Build-Depends:        base >= 4 && < 5
+                      , mtl
+                      , text
+                      , transformers
+
+Source-Repository head
+  Type:                 git
+  Location:             https://github.com/athanclark/urlpath.git
