diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,7 +1,9 @@
 # Revision history for cabal-file
 
-## 0.1.0 -- 2020-05-24
+## 0.1.1 -- 2020-11-13
+- diff: ignore whitespace by default
 
+## 0.1.0 -- 2020-05-24
 - initial release
 - cblfile commands: diff (second), list, latest, files, get, date, show,
                     metadata, preferred, depends (oldest code)
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -8,6 +8,12 @@
 the local Hackage repo cache index tar archive under ~/.cabal/ it is quite fast.
 
 ## Usage
+List all Hackage packages:
+```
+$ cblfile list | grep ghcide
+ghcide
+```
+
 List versions of a package:
 ```
 $ cblfile list pandoc
@@ -63,7 +69,17 @@
 ## Library
 For library documentation see the [Hackage.Index](https://hackage.haskell.org/package/cabal-file/docs/Hackage-Index.html) documentation.
 
-For example usage see `app/Cmds.hs`.
+For example usage see [`app/Cmds.hs`](https://hackage.haskell.org/package/cabal-file/src/app/Cmds.hs).
+
+## Motivation
+I originally wrote the `depends` command for displaying dependency information
+about packages in a more friendly way.
+
+Later, since [hdiff](http://hdiff.luite.com/) is out of sync for some packages,
+and I use it particularly for comparing versions of .cabal files,
+I decided to create the `diff` command.
+Realising I could pull .cabal files direct from the cabal index cache,
+the rest of cabal-file flowed on from there.
 
 ## Related
 If you want full diffs of Hackage sources you can try out cabal-diff from
diff --git a/app/Cmds.hs b/app/Cmds.hs
--- a/app/Cmds.hs
+++ b/app/Cmds.hs
@@ -13,7 +13,7 @@
 import Control.Monad
 import Control.Monad.Extra
 import qualified Data.ByteString.Lazy.Char8 as BL
-import Data.List
+import qualified Data.List as L
 import Distribution.Version (Version)
 import SimpleCabal
 import SimpleCmd
@@ -25,14 +25,14 @@
 
 -- FIXME structural diff of PackageDescription
 -- FIXME revisions?
-diffCmd :: String -> Version -> Version -> IO ()
-diffCmd pkg v1 v2 =
+diffCmd :: Bool -> String -> Version -> Version -> IO ()
+diffCmd whitespace pkg v1 v2 =
   withTempDir $ \ tmpdir -> do
     setCurrentDirectory tmpdir
     let pkgid1 = PackageIdentifier (mkPackageName pkg) v1
         pkgid2 = PackageIdentifier (mkPackageName pkg) v2
     saveCabals pkgid1 pkgid2
-    void $ cmdBool "diff" ["-u", showPkgId pkgid1 <.> "cabal", showPkgId pkgid2 <.> "cabal"]
+    void $ cmdBool "diff" $ ["-w" | not whitespace] ++ ["-u", showPkgId pkgid1 <.> "cabal", showPkgId pkgid2 <.> "cabal"]
 
 --  pkgdesc <- finalPackageDescription [] cabal
   where
@@ -46,7 +46,7 @@
 listPkg (Just pkgname) = do
   versions <- packageVersions pkgname
   mapM_ (putStrLn . showVersion) versions
-listPkg Nothing = fmap sort listPackages >>= mapM_ putStrLn
+listPkg Nothing = listPackages >>= mapM_ putStrLn . L.sort
 
 saveCabal :: PackageIdentifier -> IO ()
 saveCabal pkgid = do
diff --git a/app/Depends.hs b/app/Depends.hs
--- a/app/Depends.hs
+++ b/app/Depends.hs
@@ -1,3 +1,5 @@
+{-# LANGUAGE CPP #-}
+
 module Depends (
   Deps(..),
   Details(..),
@@ -23,7 +25,7 @@
                     pkgcfgDepName, pkgconfigDepends, pkgName,
                     setupBuildInfo, setupDependencies)
 
-import Hackage.Index (withCabalFile)
+import Hackage.Index (packageIdOrLatest, withCabalFile)
 
 data Deps = Build | Setup | Tool | Legacy | CLib | PkgConfig | NotBuild
   deriving (Eq, Show)
@@ -49,7 +51,9 @@
         else
           case simpleParse path of
             Nothing -> error $ path ++ " not a package identifier"
-            Just pkgid -> withCabalFile pkgid displayDepends
+            Just pkgid -> do
+              pkgver <- packageIdOrLatest pkgid
+              withCabalFile pkgver displayDepends
   where
     displayDepends :: FilePath -> IO ()
     displayDepends cabal = do
@@ -137,3 +141,9 @@
 
 exeDepPkgName :: ExeDependency -> PackageName
 exeDepPkgName (ExeDependency n _ _) = n
+
+#if !MIN_VERSION_filepath(1,4,2)
+isExtensionOf :: String -> FilePath -> Bool
+isExtensionOf ext@('.':_) = isSuffixOf ext . takeExtensions
+isExtensionOf ext         = isSuffixOf ('.':ext) . takeExtensions
+#endif
diff --git a/app/Main.hs b/app/Main.hs
--- a/app/Main.hs
+++ b/app/Main.hs
@@ -19,7 +19,7 @@
     "cabal-file can access and compare .cabal files from the cache" $
     subcommands
     [ Subcommand "diff" "Diff .cabal files of package versions" $
-      diffCmd <$> strArg "PKG" <*> versionArg <*> versionArg
+      diffCmd <$> switchWith 'W' "whitespace" "Show whitespace changes" <*> strArg "PKG" <*> versionArg <*> versionArg
     , Subcommand "list" "List package versions" $
       listPkg <$> optional pkgArg
     , Subcommand "latest" "Latest package version" $
diff --git a/cabal-file.cabal b/cabal-file.cabal
--- a/cabal-file.cabal
+++ b/cabal-file.cabal
@@ -1,5 +1,5 @@
 name:                cabal-file
-version:             0.1.0
+version:             0.1.1
 synopsis:            Cabal file access
 description:
         cabal-file is a small library on top of the 'hackage-security' library
@@ -17,6 +17,7 @@
 extra-doc-files:     README.md
                    , ChangeLog.md
 cabal-version:       1.18
+tested-with:         GHC == 8.4.4, GHC == 8.6.5,  GHC == 8.8.4, GHC == 8.10.2
 
 source-repository head
   type:                git
@@ -29,7 +30,7 @@
   hs-source-dirs:      app
   build-depends:       base < 5
                      , bytestring
-                     , Cabal > 2.2
+                     , Cabal >= 2.2
                      , cabal-file
                      , directory
                      , extra
@@ -55,7 +56,7 @@
 library
   build-depends:       base < 5
                      , bytestring
-                     , Cabal > 2.2
+                     , Cabal >= 2.2
                      , directory
                      , extra
                      , filepath
diff --git a/src/Hackage/Index.hs b/src/Hackage/Index.hs
--- a/src/Hackage/Index.hs
+++ b/src/Hackage/Index.hs
@@ -23,7 +23,7 @@
   ) where
 
 import qualified Data.ByteString.Lazy.Char8 as BL
-import Data.List
+import qualified Data.List as L
 import Data.Maybe
 import Data.Time.Clock
 import Data.Time.Clock.POSIX
@@ -123,7 +123,7 @@
   withLocalRepo $ \rep -> uncheckClientErrors $ do
     dir <- getDirectory rep
     let pkg = unPackageName pkgname
-    return $ sort . mapMaybe (extractPkgVersion pkg . second) $ directoryEntries dir
+    return $ L.sort . mapMaybe (extractPkgVersion pkg . second) $ directoryEntries dir
   where
     second (_,b,_) = b
 
@@ -186,7 +186,7 @@
 listPackages =
   withLocalRepo $ \rep -> uncheckClientErrors $ do
     dir <- getDirectory rep
-    return $ nub $ mapMaybe (extractPkg . second) (directoryEntries dir)
+    return $ L.nub $ mapMaybe (extractPkg . second) (directoryEntries dir)
   where
     extractPkg path =
       if Path.takeExtension path == ".cabal" then
