diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+## 0.4.1
+
+* Do not filter dependencies based on `buildable` field in Cabal file, it's unreliable.
+* Support `cabal-install-3.18`.
+
 ## 0.4
 
 * Yet another API overhaul, extending it with `ExtractDependenciesMode` argument.
diff --git a/app/History.hs b/app/History.hs
--- a/app/History.hs
+++ b/app/History.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE ApplicativeDo #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE RecordWildCards #-}
 
 module Main (
@@ -21,6 +22,7 @@
 import Distribution.Parsec (simpleParsec)
 import Distribution.Simple.Flag (fromFlag)
 import Distribution.Types.PackageName (PackageName, mkPackageName, unPackageName)
+import Distribution.Verbosity qualified as Verbosity
 import Granite (defPlot, lineGraph, widthChars, xFormatter, yBounds, yFormatter)
 import Hackage.RevDeps (ExtractDependenciesMode (..), getReverseDependencies, getTransitiveReverseDependencies)
 import Options.Applicative (Parser, argument, auto, execParser, fullDesc, help, helper, info, long, maybeReader, metavar, option, progDesc, showDefault, switch, value)
@@ -59,16 +61,23 @@
         <> value 1000
         <> showDefault
   cnfPackageNames <-
-    some1 $
-      argument (maybeReader simpleParsec) $
-        metavar "PKGS"
-          <> help "Package names to scan Hackage for their reverse dependencies"
+    some1
+      $ argument (maybeReader simpleParsec)
+      $ metavar "PKGS"
+        <> help "Package names to scan Hackage for their reverse dependencies"
   cnfTransitive <-
     switch $
       long "transitive"
         <> help "Count transitive (both direct and indirect) dependencies. This mode is imprecise when passing multiple package names at once. Also in this mode we follow only dependencies of the main library"
   pure Config {..}
 
+silentVerbosity :: Verbosity.Verbosity
+#if MIN_VERSION_Cabal(3,18,0)
+silentVerbosity = Verbosity.mkVerbosity Verbosity.defaultVerbosityHandles Verbosity.silent
+#else
+silentVerbosity = Verbosity.silent
+#endif
+
 main :: IO ()
 main = do
   let desc = "Count Hackage reverse dependencies for given dates, using local package index. Consider running 'cabal update' beforehand."
@@ -80,7 +89,7 @@
       dates = L.nub $ [cnfStart, addDays (fromIntegral cnfStep) cnfStart .. cnfFinish] ++ [cnfFinish]
   supportsAnsi <- hSupportsANSI stdout
 
-  cnf <- loadConfig minBound mempty
+  cnf <- loadConfig silentVerbosity mempty
   let cacheDir = fromFlag $ globalCacheDir $ savedGlobalFlags cnf
       idx = cacheDir </> hackageHaskellOrg </> "01-index.tar"
   putStrLn $ unwords $ "Date      " : map (showPackage supportsAnsi) args
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE ApplicativeDo #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE RecordWildCards #-}
 
 module Main (
@@ -22,6 +23,7 @@
 import Distribution.Types.LibraryName (LibraryName (..))
 import Distribution.Types.PackageName (PackageName, mkPackageName, unPackageName)
 import Distribution.Types.VersionRange (VersionRange)
+import Distribution.Verbosity qualified as Verbosity
 import Hackage.RevDeps (ExtractDependenciesMode (..), getReverseDependencies, getTransitiveReverseDependencies)
 import Options.Applicative (Parser, ReadM, argument, auto, execParser, fullDesc, help, helper, info, long, maybeReader, metavar, option, optional, progDesc, switch)
 import Options.Applicative.NonEmpty (some1)
@@ -38,21 +40,28 @@
 parseArgs :: Parser Config
 parseArgs = do
   cnfIndexState <-
-    optional $
-      option (fmap (`UTCTime` 0) (auto :: ReadM Day)) $
-        long "index-state"
-          <> help "Timestamp of index state at which to stop scanning, YYYY-MM-DD"
+    optional
+      $ option (fmap (`UTCTime` 0) (auto :: ReadM Day))
+      $ long "index-state"
+        <> help "Timestamp of index state at which to stop scanning, YYYY-MM-DD"
   cnfPackageNames <-
-    some1 $
-      argument (maybeReader simpleParsec) $
-        metavar "PKGS"
-          <> help "Package names to scan Hackage for their reverse dependencies"
+    some1
+      $ argument (maybeReader simpleParsec)
+      $ metavar "PKGS"
+        <> help "Package names to scan Hackage for their reverse dependencies"
   cnfTransitive <-
     switch $
       long "transitive"
         <> help "Count transitive (both direct and indirect) dependencies. This mode is imprecise when passing multiple package names at once. Also in this mode we follow only dependencies of the main library"
   pure Config {..}
 
+silentVerbosity :: Verbosity.Verbosity
+#if MIN_VERSION_Cabal(3,18,0)
+silentVerbosity = Verbosity.mkVerbosity Verbosity.defaultVerbosityHandles Verbosity.silent
+#else
+silentVerbosity = Verbosity.silent
+#endif
+
 main :: IO ()
 main = do
   let desc = "List Hackage reverse dependencies, using local package index. Consider running 'cabal update' beforehand."
@@ -61,7 +70,7 @@
       info (helper <*> parseArgs) (fullDesc <> progDesc desc)
   let args = S.fromList $ NE.toList cnfPackageNames
 
-  cnf <- loadConfig minBound mempty
+  cnf <- loadConfig silentVerbosity mempty
   let cacheDir = fromFlag $ globalCacheDir $ savedGlobalFlags cnf
       idx = cacheDir </> hackageHaskellOrg </> "01-index.tar"
       func = if cnfTransitive then getTransitiveReverseDependencies OnlyMainLib else getReverseDependencies AllComponents
@@ -79,9 +88,9 @@
       reportTable supportsAnsi pkgs'
       putStrLn "Total count:"
       let counters =
-            flip M.restrictKeys args $
-              M.unionsWith (+) $
-                fmap (fmap (const (1 :: Int))) pkgs
+            flip M.restrictKeys args
+              $ M.unionsWith (+)
+              $ fmap (fmap (const (1 :: Int))) pkgs
       reportTable supportsAnsi counters
 
 reportTable :: Show v => Bool -> Map PackageName v -> IO ()
diff --git a/hackage-revdeps.cabal b/hackage-revdeps.cabal
--- a/hackage-revdeps.cabal
+++ b/hackage-revdeps.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.2
 name:            hackage-revdeps
-version:         0.4
+version:         0.4.1
 license:         BSD-3-Clause
 license-file:    LICENSE
 maintainer:      andrew.lelechenko@gmail.com
@@ -37,8 +37,8 @@
         alfred-margaret >=2.0 && <2.2,
         base >=4.17 && <5,
         bytestring <0.13,
-        Cabal >=3.8 && <3.17,
-        Cabal-syntax >=3.8 && <3.17,
+        Cabal >=3.8 && <3.19,
+        Cabal-syntax >=3.8 && <3.19,
         containers >=0.5.8 && <0.9,
         filepath <1.6,
         tar <0.8,
@@ -54,9 +54,9 @@
     build-depends:
         ansi-terminal >=0.11.3 && <1.2,
         base,
-        Cabal >=3.8 && <3.17,
-        cabal-install >=3.8 && <3.17,
-        Cabal-syntax >=3.8 && <3.17,
+        Cabal,
+        cabal-install >=3.8 && <3.19,
+        Cabal-syntax,
         containers,
         filepath,
         hackage-revdeps,
@@ -71,9 +71,9 @@
     build-depends:
         ansi-terminal >=0.11.3 && <1.2,
         base,
-        Cabal >=3.8 && <3.17,
-        cabal-install >=3.8 && <3.17,
-        Cabal-syntax >=3.8 && <3.17,
+        Cabal,
+        cabal-install >=3.8 && <3.19,
+        Cabal-syntax,
         containers,
         filepath,
         granite >=0.7 && <0.8,
diff --git a/src/Hackage/RevDeps.hs b/src/Hackage/RevDeps.hs
--- a/src/Hackage/RevDeps.hs
+++ b/src/Hackage/RevDeps.hs
@@ -37,7 +37,7 @@
 import Distribution.PackageDescription.Configuration (flattenPackageDescription)
 import Distribution.PackageDescription.Parsec (parseGenericPackageDescriptionMaybe)
 import Distribution.Simple.BuildToolDepends (getAllToolDependencies)
-import Distribution.Types.BuildInfo (BuildInfo, buildable, targetBuildDepends)
+import Distribution.Types.BuildInfo (BuildInfo, targetBuildDepends)
 import Distribution.Types.BuildInfo.Lens qualified as Lens
 import Distribution.Types.Dependency (Dependency (..))
 import Distribution.Types.ExeDependency (ExeDependency (..))
@@ -213,7 +213,7 @@
 --
 -- @since 0.4
 data ExtractDependenciesMode
-  = -- | All buildable components, including tests, benchmarks, sublibraries.
+  = -- | All components, including tests, benchmarks, sublibraries.
     AllComponents
   | -- | Only the main library if any.
     OnlyMainLib
@@ -230,13 +230,11 @@
         OnlyMainLib -> maybeToList (fmap libBuildInfo (library flatDescr))
 
 extractDepsFromBuildInfo :: (BuildInfo -> [ExeDependency]) -> BuildInfo -> [Dependency]
-extractDepsFromBuildInfo getToolDeps bi
-  | buildable bi =
-      targetBuildDepends bi
-        <> map
-          (\(ExeDependency pkg _ ver) -> Dependency pkg ver (NES.singleton LMainLibName))
-          (getToolDeps bi)
-  | otherwise = []
+extractDepsFromBuildInfo getToolDeps bi =
+  targetBuildDepends bi
+    <> map
+      (\(ExeDependency pkg _ ver) -> Dependency pkg ver (NES.singleton LMainLibName))
+      (getToolDeps bi)
 
 relevantDeps :: (PackageName -> Bool) -> [Dependency] -> Map PackageName VersionRange
 relevantDeps predicate =
@@ -276,11 +274,12 @@
   -> Map PackageName [Dependency]
   -> Map PackageName (Map PackageName VersionRange)
 extractDependencies' args releases =
-  M.filter (not . null) $
+  M.filter (not . null)
+    $
     -- Most of packages trivially depend on themselves
     -- (e. g., test suite depends on a library); skip it.
-    M.mapWithKey M.delete $
-      fmap (relevantDeps (`S.member` args)) releases
+    M.mapWithKey M.delete
+    $ fmap (relevantDeps (`S.member` args)) releases
 
 -- | Same as 'getReverseDependencies', but
 -- returns not only direct, but also indirect reverse dependencies.
