diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+## Changes in 0.34.2
+  - Accept subcomponents as dependencies (close #382)
+
 ## Changes in 0.34.1
   - Fix a bug in `github: ...` introduced with `0.34.0`
     (f63eb19b956517b4dd8e28dc5785be5889a99298)
diff --git a/hpack.cabal b/hpack.cabal
--- a/hpack.cabal
+++ b/hpack.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.1.
+-- This file has been generated from package.yaml by hpack version 0.34.2.
 --
 -- see: https://github.com/sol/hpack
 
 name:           hpack
-version:        0.34.1
+version:        0.34.2
 synopsis:       A modern format for Haskell packages
 description:    See README at <https://github.com/sol/hpack#readme>
 category:       Development
@@ -27,7 +27,7 @@
       src
   ghc-options: -Wall
   build-depends:
-      Cabal >=2.2
+      Cabal >=3.0.0.0
     , Glob >=0.9.0
     , aeson >=1.4.3.0
     , base >=4.9 && <5
@@ -83,7 +83,7 @@
       driver
   ghc-options: -Wall
   build-depends:
-      Cabal >=2.2
+      Cabal >=3.0.0.0
     , Glob >=0.9.0
     , aeson >=1.4.3.0
     , base >=4.9 && <5
@@ -119,7 +119,7 @@
   ghc-options: -Wall
   cpp-options: -DTEST
   build-depends:
-      Cabal >=2.2
+      Cabal >=3.0.0.0
     , Glob >=0.9.0
     , HUnit >=1.6.0.0
     , QuickCheck
diff --git a/src/Hpack/Config.hs b/src/Hpack/Config.hs
--- a/src/Hpack/Config.hs
+++ b/src/Hpack/Config.hs
@@ -739,6 +739,7 @@
         makeVersion [2,2] <$ guard (sectionSatisfies (not . null . sectionCxxSources) sect)
       , makeVersion [2,2] <$ guard (sectionSatisfies (not . null . sectionCxxOptions) sect)
       , makeVersion [2,0] <$ guard (sectionSatisfies (any hasMixins . unDependencies . sectionDependencies) sect)
+      , makeVersion [3,0] <$ guard (sectionSatisfies (any hasSubcomponents . Map.keys . unDependencies . sectionDependencies) sect)
       ] ++ map versionFromSystemBuildTool systemBuildTools
       where
         versionFromSystemBuildTool name
@@ -797,6 +798,9 @@
 
     hasMixins :: DependencyInfo -> Bool
     hasMixins (DependencyInfo mixins _) = not (null mixins)
+
+    hasSubcomponents :: String -> Bool
+    hasSubcomponents = elem ':'
 
 decodeValue :: FromValue a => ProgramName -> FilePath -> Value -> Warnings (Errors IO) a
 decodeValue (ProgramName programName) file value = do
diff --git a/src/Hpack/License.hs b/src/Hpack/License.hs
--- a/src/Hpack/License.hs
+++ b/src/Hpack/License.hs
@@ -10,11 +10,7 @@
 import           Distribution.Version (mkVersion)
 import qualified Distribution.License as Cabal
 import qualified Distribution.SPDX.License as SPDX
-#if MIN_VERSION_Cabal(3,0,0)
 import           Distribution.Parsec (eitherParsec)
-#else
-import           Distribution.Parsec.Class (eitherParsec)
-#endif
 
 import qualified Data.License.Infer as Infer
 
diff --git a/src/Hpack/Syntax/Dependencies.hs b/src/Hpack/Syntax/Dependencies.hs
--- a/src/Hpack/Syntax/Dependencies.hs
+++ b/src/Hpack/Syntax/Dependencies.hs
@@ -9,9 +9,12 @@
 
 import qualified Control.Monad.Fail as Fail
 import           Data.Text (Text)
+import           Data.List
 import qualified Data.Text as T
 import           Data.Semigroup (Semigroup(..))
 import qualified Distribution.Package as D
+import qualified Distribution.Types.LibraryName as D
+import           Distribution.Pretty (prettyShow)
 import           Data.Map.Lazy (Map)
 import qualified Data.Map.Lazy as Map
 import           GHC.Exts
@@ -64,4 +67,10 @@
 parseDependency subject = fmap fromCabal . cabalParse subject . T.unpack
   where
     fromCabal :: D.Dependency -> (String, DependencyVersion)
-    fromCabal d = (D.unPackageName $ D.depPkgName d, DependencyVersion Nothing . versionConstraintFromCabal $ D.depVerRange d)
+    fromCabal d = (toName (D.depPkgName d) (toList $ D.depLibraries d), DependencyVersion Nothing . versionConstraintFromCabal $ D.depVerRange d)
+
+    toName :: D.PackageName -> [D.LibraryName] -> String
+    toName package components = prettyShow package <> case components of
+      [D.LMainLibName] -> ""
+      [D.LSubLibName lib] -> ":" <> prettyShow lib
+      xs -> ":{" <> (intercalate "," $ map prettyShow [name | D.LSubLibName name <- xs]) <> "}"
diff --git a/src/Hpack/Syntax/DependencyVersion.hs b/src/Hpack/Syntax/DependencyVersion.hs
--- a/src/Hpack/Syntax/DependencyVersion.hs
+++ b/src/Hpack/Syntax/DependencyVersion.hs
@@ -36,13 +36,8 @@
 import           Distribution.Version (VersionRangeF(..))
 import qualified Distribution.Version as D
 
-#if MIN_VERSION_Cabal(3,0,0)
 import qualified Distribution.Parsec as D
 import qualified Distribution.Pretty as D
-#else
-import qualified Distribution.Parsec.Class as D
-import qualified Distribution.Text as D
-#endif
 
 import           Data.Aeson.Config.FromValue
 
@@ -156,11 +151,7 @@
 versionConstraintFromCabal range
   | D.isAnyVersion range = AnyVersion
   | otherwise = VersionRange . renderStyle style .
-#if MIN_VERSION_Cabal(3,0,0)
       D.pretty
-#else
-      D.disp
-#endif
       $ toPreCabal2VersionRange range
   where
     style = Style OneLineMode 0 0
diff --git a/test/EndToEndSpec.hs b/test/EndToEndSpec.hs
--- a/test/EndToEndSpec.hs
+++ b/test/EndToEndSpec.hs
@@ -63,7 +63,6 @@
       it "fails on unsupported spec-version" $ do
         [i|
         spec-version: 25.0
-        dependencies: foo == bar
         |] `shouldFailWith` ("The file package.yaml requires version 25.0 of the Hpack package specification, however this version of hpack only supports versions up to " ++ showVersion Hpack.version ++ ". Upgrading to the latest version of hpack may resolve this issue.")
 
       it "fails on unsupported spec-version from defaults" $ do
@@ -610,6 +609,15 @@
         build-depends:
             base
         |]
+
+      it "accepts dependencies with subcomponents" $ do
+        [i|
+        executable:
+          dependencies: foo:bar
+        |] `shouldRenderTo` (executable_ "foo" [i|
+        build-depends:
+            foo:bar
+        |]) {packageCabalVersion = "3.0"}
 
       it "accepts list of dependencies" $ do
         [i|
diff --git a/test/Hpack/LicenseSpec.hs b/test/Hpack/LicenseSpec.hs
--- a/test/Hpack/LicenseSpec.hs
+++ b/test/Hpack/LicenseSpec.hs
@@ -7,11 +7,7 @@
 import           Data.String.Interpolate
 
 import           Distribution.Pretty (prettyShow)
-#if MIN_VERSION_Cabal(3,0,0)
 import           Distribution.Parsec (simpleParsec)
-#else
-import           Distribution.Parsec.Class (simpleParsec)
-#endif
 import qualified Distribution.License as Cabal
 
 import           Hpack.License
diff --git a/test/Hpack/Syntax/DependenciesSpec.hs b/test/Hpack/Syntax/DependenciesSpec.hs
--- a/test/Hpack/Syntax/DependenciesSpec.hs
+++ b/test/Hpack/Syntax/DependenciesSpec.hs
@@ -1,5 +1,6 @@
 {-# LANGUAGE QuasiQuotes #-}
 {-# LANGUAGE OverloadedLists #-}
+{-# LANGUAGE OverloadedStrings #-}
 module Hpack.Syntax.DependenciesSpec (spec) where
 
 import           Helper
@@ -18,6 +19,16 @@
 
 spec :: Spec
 spec = do
+  describe "parseDependency" $ do
+    it "accepts dependencies" $ do
+      parseDependency "dependency" "foo" `shouldReturn` ("foo", DependencyVersion Nothing AnyVersion)
+
+    it "accepts dependencies with a subcomponent" $ do
+      parseDependency "dependency" "foo:bar" `shouldReturn` ("foo:bar", DependencyVersion Nothing AnyVersion)
+
+    it "accepts dependencies with multiple subcomponents" $ do
+      parseDependency "dependency" "foo:{bar,baz}" `shouldReturn` ("foo:{bar,baz}", DependencyVersion Nothing AnyVersion)
+
   describe "fromValue" $ do
     context "when parsing Dependencies" $ do
       context "with a scalar" $ do
