diff --git a/hpack.cabal b/hpack.cabal
--- a/hpack.cabal
+++ b/hpack.cabal
@@ -3,7 +3,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           hpack
-version:        0.7.1
+version:        0.8.0
 synopsis:       An alternative format for Haskell packages
 category:       Development
 homepage:       https://github.com/sol/hpack#readme
diff --git a/src/Hpack/Config.hs b/src/Hpack/Config.hs
--- a/src/Hpack/Config.hs
+++ b/src/Hpack/Config.hs
@@ -15,7 +15,9 @@
 , section
 , Package(..)
 , Dependency(..)
-, GitRef(..)
+, AddSource(..)
+, GitUrl
+, GitRef
 , packageDependencies
 , GhcOption
 , Section(..)
@@ -68,7 +70,13 @@
     name = typeName (Proxy :: Proxy a)
 
 hyphenize :: String -> String -> String
-hyphenize name = camelTo '-' . drop (length name)
+hyphenize name =
+#if MIN_VERSION_aeson(0,10,0)
+  camelTo2
+#else
+  camelTo
+#endif
+  '-' . drop (length name)
 
 class HasFieldNames a where
   fieldNames :: Proxy a -> [String]
@@ -185,7 +193,7 @@
 
 data Dependency = Dependency {
   dependencyName :: String
-, dependencyGitRef :: Maybe GitRef
+, dependencyGitRef :: Maybe AddSource
 } deriving (Eq, Show, Ord, Generic)
 
 instance IsString Dependency where
@@ -194,17 +202,20 @@
 instance FromJSON Dependency where
   parseJSON v = case v of
     String _ -> fromString <$> parseJSON v
-    Object o -> gitDependency o
+    Object o -> addSourceDependency o
     _ -> typeMismatch "String or an Object" v
     where
-      gitDependency o = Dependency <$> name <*> (Just <$> git)
+      addSourceDependency o = Dependency <$> name <*> (Just <$> (local <|> git))
         where
           name :: Parser String
           name = o .: "name"
 
-          git :: Parser GitRef
+          git :: Parser AddSource
           git = GitRef <$> url <*> ref
 
+          local :: Parser AddSource
+          local = Local <$> o .: "path"
+
           url :: Parser String
           url =
                 ((githubBaseUrl ++) <$> o .: "github")
@@ -214,10 +225,11 @@
           ref :: Parser String
           ref = o .: "ref"
 
-data GitRef = GitRef {
-  gitRefUrl :: String
-, gitRefRef :: String
-} deriving (Eq, Show, Ord, Generic)
+data AddSource = GitRef GitUrl GitRef | Local FilePath
+  deriving (Eq, Show, Ord)
+
+type GitUrl = String
+type GitRef = String
 
 data Package = Package {
   packageName :: String
diff --git a/test/Hpack/ConfigSpec.hs b/test/Hpack/ConfigSpec.hs
--- a/test/Hpack/ConfigSpec.hs
+++ b/test/Hpack/ConfigSpec.hs
@@ -40,8 +40,8 @@
               git: "https://github.com/sol/hpack",
               ref: "master"
             }|]
-            git = GitRef "https://github.com/sol/hpack" "master"
-        parseEither parseJSON value `shouldBe` Right (Dependency "hpack" (Just git))
+            source = GitRef "https://github.com/sol/hpack" "master"
+        parseEither parseJSON value `shouldBe` Right (Dependency "hpack" (Just source))
 
       it "accepts github dependencies" $ do
         let value = [aesonQQ|{
@@ -49,13 +49,21 @@
               github: "sol/hpack",
               ref: "master"
             }|]
-            git = GitRef "https://github.com/sol/hpack" "master"
-        parseEither parseJSON value `shouldBe` Right (Dependency "hpack" (Just git))
+            source = GitRef "https://github.com/sol/hpack" "master"
+        parseEither parseJSON value `shouldBe` Right (Dependency "hpack" (Just source))
 
+      it "accepts local dependencies" $ do
+        let value = [aesonQQ|{
+              name: "hpack",
+              path: "../hpack"
+            }|]
+            source = Local "../hpack"
+        parseEither parseJSON value `shouldBe` Right (Dependency "hpack" (Just source))
+
       context "when parsing fails" $ do
         it "returns an error message" $ do
           let value = Number 23
-          parseEither parseJSON value `shouldBe` (Left "when expecting a String or an Object, encountered Number instead" :: Either String Dependency)
+          parseEither parseJSON value `shouldBe` (Left "Error in $: expected String or an Object, encountered Number" :: Either String Dependency)
 
         context "when ref is missing" $ do
           it "produces accurate error messages" $ do
@@ -64,7 +72,7 @@
                   git: "sol/hpack",
                   ef: "master"
                 }|]
-            parseEither parseJSON value `shouldBe` (Left "key \"ref\" not present" :: Either String Dependency)
+            parseEither parseJSON value `shouldBe` (Left "Error in $: key \"ref\" not present" :: Either String Dependency)
 
         context "when both git and github are missing" $ do
           it "produces accurate error messages" $ do
@@ -73,7 +81,7 @@
                   gi: "sol/hpack",
                   ref: "master"
                 }|]
-            parseEither parseJSON value `shouldBe` (Left "neither key \"git\" nor key \"github\" present" :: Either String Dependency)
+            parseEither parseJSON value `shouldBe` (Left "Error in $: neither key \"git\" nor key \"github\" present" :: Either String Dependency)
 
   describe "getModules" $ around_ inTempDirectory $ do
     it "returns Haskell modules in specified source directory" $ do
@@ -638,7 +646,7 @@
             foo:
               ain: driver/Main.hs
           |]
-        readPackageConfig "package.yaml" `shouldReturn` Left "package.yaml: The key \"main\" was not found"
+        readPackageConfig "package.yaml" `shouldReturn` Left "package.yaml: Error in $.executables.foo: failed to parse field executables: The key \"main\" was not found"
 
     context "when package.yaml does not exist" $ do
       it "returns an error" $
diff --git a/test/Hpack/UtilSpec.hs b/test/Hpack/UtilSpec.hs
--- a/test/Hpack/UtilSpec.hs
+++ b/test/Hpack/UtilSpec.hs
@@ -62,21 +62,21 @@
           gi: "sol/hpack",
           ref: "master"
         }|]
-        parseError :: Either String (List Dependency)
-        parseError = Left "neither key \"git\" nor key \"github\" present"
+        parseError :: String -> Either String (List Dependency)
+        parseError prefix = Left (prefix ++ ": neither key \"git\" nor key \"github\" present")
     context "when parsing single values" $ do
       it "returns the value in a singleton list" $ do
         fromJSON (toJSON $ Number 23) `shouldBe` Success (List [23 :: Int])
 
       it "returns error messages from element parsing" $ do
-        parseEither parseJSON invalid `shouldBe` parseError
+        parseEither parseJSON invalid `shouldBe` parseError "Error in $"
 
     context "when parsing a list of values" $ do
       it "returns the list" $ do
         fromJSON (toJSON [Number 23, Number 42]) `shouldBe` Success (List [23, 42 :: Int])
 
       it "propagates parse error messages of invalid elements" $ do
-        parseEither parseJSON (toJSON [String "foo", invalid]) `shouldBe` parseError
+        parseEither parseJSON (toJSON [String "foo", invalid]) `shouldBe` parseError "Error in $[1]"
 
   describe "tryReadFile" $ do
     it "reads file" $ do
