diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7e85573097808b272aea5072a448281d4a08ae6b..5600cc9d19af375d545283a115a888c7162c3222 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,8 @@
 # Revision history for gbs-downloader
 
-## 0.1.0.0 -- YYYY-mm-dd
+## 0.1.0.0 -- 2023-08-17
 
 * First version. Released on an unsuspecting world.
+* Basic support for loading storage service announcements for server discovery.
+* Basic support for downloading the contents associated with a CHK or SDMF read capability.
+  * CHK and SDMF directories are also supported.
diff --git a/LICENSE b/LICENSE
index 9a028081e58c3957bd860847a8888caefde80a3a..b743e063910093462813b4f354369cefccd16ad7 100644
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,6 @@
-Copyright (c) 2023, Least Authority TFA GmbH
+Copyright 2023
+Jean-Paul Calderone
+Shae Erisson
 
 All rights reserved.
 
diff --git a/README.md b/README.md
index b125ead62c5b1422eea5065034692bb6f03377eb..56fb22350bd927d34024a37b78004851baa5ad4b 100644
--- a/README.md
+++ b/README.md
@@ -8,6 +8,7 @@ It aims for bit-for-bit compatibility with the original Python implementation.
 ### What is the current state?
 
 * It can download immutable and mutable shares from Great Black Swamp storage servers.
+  * It *does not* cryptographically verify the identity of servers it communicates with.
 * It can interpret, decode, and decrypt the data for CHK- and SDMF-encoded shares to recover the plaintext.
 
 ## Why does it exist?
diff --git a/cabal.project.freeze b/cabal.project.freeze
deleted file mode 100644
index 42ccbae539f77b5a5dae4f890576a5465e552e01..0000000000000000000000000000000000000000
--- a/cabal.project.freeze
+++ /dev/null
@@ -1,297 +0,0 @@
-active-repositories: hackage.haskell.org:merge
-constraints: any.Cabal ==3.2.1.0,
-             any.HUnit ==1.6.2.0,
-             any.OneTuple ==0.3.1,
-             any.QuickCheck ==2.14.3,
-             QuickCheck -old-random +templatehaskell,
-             any.StateVar ==1.2.2,
-             any.adjunctions ==4.4.2,
-             any.aeson ==2.1.2.1,
-             aeson -cffi +ordered-keymap,
-             any.aeson-pretty ==0.8.9,
-             aeson-pretty -lib-only,
-             any.ansi-terminal ==0.11.5,
-             ansi-terminal -example +win32-2-13-1,
-             any.ansi-terminal-types ==0.11.5,
-             any.ansi-wl-pprint ==1.0.2,
-             ansi-wl-pprint -example,
-             any.appar ==0.1.8,
-             any.array ==0.5.4.0,
-             any.asn1-encoding ==0.9.6,
-             any.asn1-parse ==0.9.5,
-             any.asn1-types ==0.3.4,
-             any.assoc ==1.1,
-             assoc +tagged,
-             any.async ==2.2.4,
-             async -bench,
-             any.atomic-primops ==0.8.4,
-             atomic-primops -debug,
-             any.attoparsec ==0.14.4,
-             attoparsec -developer,
-             any.attoparsec-iso8601 ==1.1.0.0,
-             any.auto-update ==0.1.6,
-             any.barbies ==2.0.4.0,
-             any.base ==4.14.3.0,
-             any.base-compat ==0.12.2,
-             any.base-compat-batteries ==0.12.2,
-             any.base-orphans ==0.9.0,
-             any.base32 ==0.2.2.0,
-             any.base64-bytestring ==1.2.1.0,
-             any.basement ==0.0.15,
-             any.bifunctors ==5.5.15,
-             bifunctors +semigroups +tagged,
-             any.binary ==0.8.8.0,
-             any.bitvec ==1.1.4.0,
-             bitvec -libgmp,
-             any.blaze-builder ==0.4.2.2,
-             any.blaze-html ==0.9.1.2,
-             any.blaze-markup ==0.8.2.8,
-             any.boring ==0.2.1,
-             boring +tagged,
-             any.bsb-http-chunked ==0.0.0.4,
-             any.byteorder ==1.0.4,
-             any.bytestring ==0.10.12.0,
-             any.bytestring-builder ==0.10.8.2.0,
-             bytestring-builder +bytestring_has_builder,
-             any.cabal-doctest ==1.0.9,
-             any.call-stack ==0.4.0,
-             any.case-insensitive ==1.2.1.0,
-             any.cborg ==0.2.9.0,
-             cborg +optimize-gmp,
-             any.cborg-json ==0.2.5.0,
-             any.cereal ==0.5.8.3,
-             cereal -bytestring-builder,
-             any.charset ==0.3.9,
-             any.cipher-aes128 ==0.7.0.6,
-             cipher-aes128 -test,
-             any.clock ==0.8.3,
-             clock -llvm,
-             any.cmdargs ==0.10.22,
-             cmdargs +quotation -testprog,
-             any.colour ==2.3.6,
-             any.comonad ==5.0.8,
-             comonad +containers +distributive +indexed-traversable,
-             any.concurrency ==1.11.0.2,
-             any.concurrent-output ==1.10.18,
-             any.conduit ==1.3.5,
-             any.connection ==0.3.1,
-             any.constraints ==0.13.4,
-             any.containers ==0.6.5.1,
-             any.contravariant ==1.5.5,
-             contravariant +semigroups +statevar +tagged,
-             any.cookie ==0.4.6,
-             any.crypto-api ==0.13.3,
-             crypto-api -all_cpolys,
-             any.cryptonite ==0.30,
-             cryptonite -check_alignment +integer-gmp -old_toolchain_inliner +support_aesni +support_deepseq -support_pclmuldq +support_rdrand -support_sse +use_target_attributes,
-             any.data-array-byte ==0.1.0.1,
-             any.data-default-class ==0.1.2.0,
-             any.data-fix ==0.3.2,
-             any.dec ==0.0.5,
-             any.deepseq ==1.4.4.0,
-             any.deriving-aeson ==0.2.9,
-             any.directory ==1.3.6.0,
-             any.distributive ==0.6.2.1,
-             distributive +semigroups +tagged,
-             any.dlist ==1.0,
-             dlist -werror,
-             any.easy-file ==0.2.5,
-             any.entropy ==0.4.1.10,
-             entropy -donotgetentropy,
-             any.erf ==2.0.0.0,
-             any.exceptions ==0.10.4,
-             any.extra ==1.7.13,
-             any.fast-logger ==3.2.1,
-             any.fec ==0.1.1,
-             any.file-embed ==0.0.15.0,
-             any.filepath ==1.4.2.1,
-             any.foldable1-classes-compat ==0.1,
-             foldable1-classes-compat +tagged,
-             any.foldl ==1.4.14,
-             any.free ==5.1.10,
-             any.generically ==0.1.1,
-             any.ghc-boot-th ==8.10.7,
-             any.ghc-prim ==0.6.1,
-             any.half ==0.3.1,
-             any.happy ==1.20.1.1,
-             any.hashable ==1.4.2.0,
-             hashable +integer-gmp -random-initial-seed,
-             any.haskell-lexer ==1.1.1,
-             any.hedgehog ==1.2,
-             any.hourglass ==0.2.12,
-             any.hsc2hs ==0.68.9,
-             hsc2hs -in-ghc-tree,
-             any.http-api-data ==0.5,
-             http-api-data -use-text-show,
-             any.http-client ==0.7.13.1,
-             http-client +network-uri,
-             any.http-client-tls ==0.3.6.1,
-             any.http-date ==0.0.11,
-             any.http-media ==0.8.0.0,
-             any.http-types ==0.12.3,
-             any.http2 ==4.1.2,
-             http2 -devel -h2spec,
-             any.indexed-traversable ==0.1.2.1,
-             any.indexed-traversable-instances ==0.1.1.2,
-             any.integer-gmp ==1.0.3.0,
-             any.integer-logarithms ==1.0.3.1,
-             integer-logarithms -check-bounds +integer-gmp,
-             any.invariant ==0.6.1,
-             any.iproute ==1.7.12,
-             any.kan-extensions ==5.2.5,
-             any.lens ==5.2.2,
-             lens -benchmark-uniplate -dump-splices +inlining -j +test-hunit +test-properties +test-templates +trustworthy,
-             any.libyaml ==0.1.2,
-             libyaml -no-unicode -system-libyaml,
-             any.lifted-async ==0.10.2.4,
-             any.lifted-base ==0.2.3.12,
-             any.megaparsec ==9.2.1,
-             megaparsec -dev,
-             any.memory ==0.18.0,
-             memory +support_bytestring +support_deepseq,
-             any.mime-types ==0.1.1.0,
-             any.mmorph ==1.2.0,
-             any.monad-control ==1.0.3.1,
-             any.monad-loops ==0.4.3,
-             monad-loops +base4,
-             any.mono-traversable ==1.0.15.3,
-             any.mtl ==2.2.2,
-             any.network ==3.1.4.0,
-             network -devel,
-             any.network-byte-order ==0.1.6,
-             any.network-uri ==2.6.4.2,
-             any.old-locale ==1.0.0.7,
-             any.old-time ==1.1.0.3,
-             any.optparse-applicative ==0.18.1.0,
-             optparse-applicative +process,
-             any.parallel ==3.2.2.0,
-             any.parsec ==3.1.14.0,
-             any.parser-combinators ==1.3.0,
-             parser-combinators -dev,
-             any.parsers ==0.12.11,
-             parsers +attoparsec +binary +parsec,
-             any.pem ==0.2.4,
-             any.pretty ==1.1.3.6,
-             any.pretty-show ==1.10,
-             any.prettyprinter ==1.7.1,
-             prettyprinter -buildreadme +text,
-             any.prettyprinter-ansi-terminal ==1.1.3,
-             any.prettyprinter-compat-ansi-wl-pprint ==1.0.2,
-             any.primitive ==0.8.0.0,
-             any.process ==1.6.13.2,
-             any.profunctors ==5.6.2,
-             any.psqueues ==0.2.7.3,
-             any.random ==1.2.1.1,
-             any.recv ==0.1.0,
-             any.reflection ==2.1.7,
-             reflection -slow +template-haskell,
-             any.resourcet ==1.2.6,
-             any.rts ==1.0.1,
-             any.safe ==0.3.19,
-             any.safe-exceptions ==0.1.7.3,
-             any.scientific ==0.3.7.0,
-             scientific -bytestring-builder -integer-simple,
-             any.semialign ==1.3,
-             semialign +semigroupoids,
-             any.semigroupoids ==5.3.7,
-             semigroupoids +comonad +containers +contravariant +distributive +tagged +unordered-containers,
-             any.semigroups ==0.20,
-             semigroups +binary +bytestring -bytestring-builder +containers +deepseq +hashable +tagged +template-haskell +text +transformers +unordered-containers,
-             any.serialise ==0.2.6.0,
-             serialise +newtime15,
-             any.servant ==0.19.1,
-             any.servant-client ==0.19,
-             any.servant-client-core ==0.19,
-             any.servant-docs ==0.12,
-             any.servant-foreign ==0.15.4,
-             any.servant-js ==0.9.4.2,
-             servant-js -example,
-             any.servant-server ==0.19.2,
-             any.simple-sendfile ==0.2.31,
-             simple-sendfile +allow-bsd -fallback,
-             any.singleton-bool ==0.1.6,
-             any.socks ==0.6.1,
-             any.some ==1.0.5,
-             some +newtype-unsafe,
-             any.sop-core ==0.5.0.2,
-             any.split ==0.2.3.5,
-             any.splitmix ==0.1.0.4,
-             splitmix -optimised-mixer,
-             any.stm ==2.5.0.1,
-             any.streaming-commons ==0.2.2.6,
-             streaming-commons -use-bytestring-builder,
-             any.strict ==0.5,
-             any.string-conversions ==0.4.0.1,
-             any.tagged ==0.8.7,
-             tagged +deepseq +transformers,
-             any.tahoe-chk ==0.1.0.1,
-             any.tahoe-great-black-swamp ==0.3.0.0,
-             any.tahoe-ssk ==0.2.0.0,
-             any.tasty ==1.4.3,
-             tasty +unix,
-             any.tasty-hedgehog ==1.4.0.1,
-             any.tasty-hunit ==0.10.0.3,
-             any.template-haskell ==2.16.0.0,
-             any.terminal-size ==0.3.4,
-             any.text ==1.2.4.1,
-             any.text-short ==0.1.5,
-             text-short -asserts,
-             any.th-abstraction ==0.5.0.0,
-             any.th-compat ==0.1.4,
-             any.these ==1.2,
-             any.time ==1.9.3,
-             any.time-compat ==1.9.6.1,
-             time-compat -old-locale,
-             any.time-manager ==0.0.0,
-             any.tls ==1.6.0,
-             tls +compat -hans +network,
-             any.tls-session-manager ==0.0.4,
-             any.transformers ==0.5.6.2,
-             any.transformers-base ==0.4.6,
-             transformers-base +orphaninstances,
-             any.transformers-compat ==0.7.2,
-             transformers-compat -five +five-three -four +generic-deriving +mtl -three -two,
-             any.tree-diff ==0.3.0.1,
-             any.type-equality ==1,
-             any.universe-base ==1.1.3.1,
-             any.unix ==2.7.2.2,
-             any.unix-compat ==0.7,
-             unix-compat -old-time,
-             any.unix-time ==0.4.9,
-             any.unliftio ==0.2.24.0,
-             any.unliftio-core ==0.2.1.0,
-             any.unordered-containers ==0.2.19.1,
-             unordered-containers -debug,
-             any.utf8-string ==1.0.2,
-             any.utility-ht ==0.0.17,
-             any.uuid-types ==1.0.5,
-             any.vault ==0.3.1.5,
-             vault +useghc,
-             any.vector ==0.13.0.0,
-             vector +boundschecks -internalchecks -unsafechecks -wall,
-             any.vector-algorithms ==0.9.0.1,
-             vector-algorithms +bench +boundschecks -internalchecks -llvm +properties -unsafechecks,
-             any.vector-stream ==0.1.0.0,
-             any.void ==0.7.3,
-             void -safe,
-             any.wai ==3.2.3,
-             any.wai-app-static ==3.1.7.4,
-             wai-app-static +cryptonite -print,
-             any.wai-extra ==3.1.13.0,
-             wai-extra -build-example,
-             any.wai-logger ==2.4.0,
-             any.warp ==3.3.25,
-             warp +allow-sendfilefd -network-bytestring -warp-debug +x509,
-             any.warp-tls ==3.3.6,
-             any.witherable ==0.4.2,
-             any.wl-pprint-annotated ==0.1.0.1,
-             any.word8 ==0.1.3,
-             any.x509 ==1.7.7,
-             any.x509-store ==1.6.9,
-             any.x509-system ==1.6.7,
-             any.x509-validation ==1.6.12,
-             any.yaml ==0.11.11.0,
-             yaml +no-examples +no-exe,
-             any.zlib ==0.6.3.0,
-             zlib -bundled-c-zlib -non-blocking-ffi +pkg-config
-index-state: hackage.haskell.org 2023-06-02T14:54:08Z
diff --git a/flake.lock b/flake.lock
index fd61df1d75d973817a19262dd262a546159899f1..39fc93c0c8f78ccc7a8f949aca810a342d90b372 100644
--- a/flake.lock
+++ b/flake.lock
@@ -500,11 +500,11 @@
         "pre-commit-hooks": "pre-commit-hooks"
       },
       "locked": {
-        "lastModified": 1686149618,
-        "narHash": "sha256-/IHWacNutk3tklouWOgClp7FnOH+Yk6If13kKJMSEi8=",
+        "lastModified": 1692187439,
+        "narHash": "sha256-m7c4EPFWmB1OmV3dSYQk2qtXR53xOjZdLCjMtzHSK34=",
         "ref": "main",
-        "rev": "49696f704eb965f57d729871c6d450ac0aff2b68",
-        "revCount": 12,
+        "rev": "408f3deab2e2f6ae60349776dde02c44f71fb386",
+        "revCount": 16,
         "type": "git",
         "url": "https://whetstone.private.storage/jcalderone/hs-flake-utils.git"
       },
@@ -1147,15 +1147,16 @@
         ]
       },
       "locked": {
-        "lastModified": 1686164259,
-        "narHash": "sha256-T0U5B/DH+XDEXfBG7cHlTcMec4aUTDd+HH8Bsv0C71Y=",
-        "ref": "refs/heads/main",
-        "rev": "f0a11218007f6c2fe0f6b5e09e0993fe253f6e23",
-        "revCount": 9,
+        "lastModified": 1692123220,
+        "narHash": "sha256-XRR4oGgBc6O4DMM0DyS5STMYZPR6xjEBKAQ+N+0DzZ4=",
+        "ref": "refs/tags/0.1.0.0",
+        "rev": "21c23b269e88fe77c116451167b0d2027fdca4b3",
+        "revCount": 22,
         "type": "git",
         "url": "https://whetstone.private.storage/PrivateStorage/tahoe-capabilities"
       },
       "original": {
+        "ref": "refs/tags/0.1.0.0",
         "type": "git",
         "url": "https://whetstone.private.storage/PrivateStorage/tahoe-capabilities"
       }
@@ -1223,15 +1224,16 @@
         "tahoe-ssk": "tahoe-ssk"
       },
       "locked": {
-        "lastModified": 1686169487,
-        "narHash": "sha256-dXtryScMhtz9N3hu0U+kCIGtRo58BHdP2F8PFqHjmao=",
-        "ref": "refs/heads/main",
-        "rev": "87c750f2c16a290c0fcedef65d2dbebf6a877965",
-        "revCount": 14,
+        "lastModified": 1692283409,
+        "narHash": "sha256-bEWf+jzyF7FOG1W8INiIzWIyS86ywaYGFFoCoh+1qWI=",
+        "ref": "refs/tags/0.1.0.0",
+        "rev": "f57d71df59d9d7fa4f72dfecd3ce39631a05c905",
+        "revCount": 26,
         "type": "git",
         "url": "https://whetstone.private.storage/PrivateStorage/tahoe-directory.git"
       },
       "original": {
+        "ref": "refs/tags/0.1.0.0",
         "type": "git",
         "url": "https://whetstone.private.storage/PrivateStorage/tahoe-directory.git"
       }
@@ -1279,17 +1281,18 @@
         ]
       },
       "locked": {
-        "lastModified": 1686166709,
-        "narHash": "sha256-z+QzmnfmLuqqNFWvlYAVZoS7jBHEj54OZest/sKgDqk=",
-        "ref": "refs/heads/main",
-        "rev": "8f73a87054546c875c3b0284ee4d2f3e0483d963",
-        "revCount": 93,
+        "lastModified": 1692193506,
+        "narHash": "sha256-0UDrh4ZcBHU+4yrLfVe+9wkYF4K1QJoecdOI083Gu5w=",
+        "ref": "refs/tags/0.2.1.0",
+        "rev": "96941786b56e9fb949d62a14bacd5ed2c81cd7ab",
+        "revCount": 112,
         "type": "git",
-        "url": "https://whetstone.private.storage/PrivateStorage/tahoe-ssk.git"
+        "url": "https://whetstone.private.storage/PrivateStorage/tahoe-ssk"
       },
       "original": {
+        "ref": "refs/tags/0.2.1.0",
         "type": "git",
-        "url": "https://whetstone.private.storage/PrivateStorage/tahoe-ssk.git"
+        "url": "https://whetstone.private.storage/PrivateStorage/tahoe-ssk"
       }
     }
   },
diff --git a/flake.nix b/flake.nix
index 794d0ed80816433cedeb9d0b4034541352fcf06b..906f465e385912d2d41b42dcd25839467c1e02d3 100644
--- a/flake.nix
+++ b/flake.nix
@@ -8,7 +8,7 @@
     hs-flake-utils.url = "git+https://whetstone.private.storage/jcalderone/hs-flake-utils.git?ref=main";
 
     tahoe-directory = {
-      url = "git+https://whetstone.private.storage/PrivateStorage/tahoe-directory.git";
+      url = "git+https://whetstone.private.storage/PrivateStorage/tahoe-directory.git?ref=refs/tags/0.1.0.0";
       inputs.nixpkgs.follows = "hs-flake-utils/nixpkgs";
     };
 
@@ -87,19 +87,12 @@
               cat >cabal.project.local <<EOF
               -- This file is auto-generated by the flake devShell's shellHook.  Do
               -- not edit this file.  Make changes in flake.nix.
-              packages:
-                -- These aren't released on hackage yet so we have to get them
-                -- another way.  Here, we get them from the Nix store.
-                -- tahoe-chk
-                ${tahoe-chk}
-                -- tahoe-ssk
-                ${tahoe-ssk}
-                -- tahoe-capabilities
-                ${tahoe-capabilities}
-                -- tahoe-directory
-                ${tahoe-directory}
-                -- tahoe-great-black-swamp
-                ${tahoe-great-black-swamp}
+              package zlib
+                -- by default the cabal build won't use pkg-config to find the
+                -- underlying zlib c library.  this will most likely cause
+                -- "cabal build" to fail (unless other steps are taken).  turn
+                -- on pkg-config so that the cabal-test app below can succeed.
+                flags: -bundled-c-zlib -non-blocking-ffi +pkg-config
               EOF
             '';
           }
@@ -124,40 +117,20 @@
         }/bin/entr-test";
       };
 
+      apps.release = hslib.apps.release {};
+
       # Using the working directory of `nix run`, do a build with cabal and
       # then run the test suite.
-      apps.cabal-test = {
-        type = "app";
-        program = "${
-          pkgs.writeShellApplication {
-            name = "cabal-build-and-test";
-            # Only put packages with things that need to be on PATH here
-            # because that's all that runtimeInputs buys us.  Packages with
-            # different requirements need to be handled differently.
-            runtimeInputs = with pkgs; [
-              pkg-config
-              haskell.compiler.${ghcVersion}
-              cabal-install
-            ];
-
-            text = ''
-              nix run .#generate-cabal-project
-
-              # Here we make zlib discoverable by pkg-config so cabal can find
-              # headers and stuff.
-              export PKG_CONFIG_PATH=${pkgs.lib.makeSearchPath "lib/pkgconfig" [pkgs.zlib.dev]}
-
-              # Get (or update if we have one) a package database so cabal can
-              # solve our dependencies.
-              cabal update hackage.haskell.org
+      apps.cabal-test = hslib.apps.cabal-test {
+        preBuild = ''
+          # Refresh the cabal.project.local file to point to the correct
+          # dependencies, if necessary.
+          nix run .#generate-cabal-project
 
-              # Run the default test suite.  The local cabal project file
-              # written above should have enabled tests so the build plan will
-              # support them.
-              cabal run tests
-            '';
-          }
-        }/bin/cabal-build-and-test";
+          # Here we make zlib discoverable by pkg-config so cabal can find
+          # headers and stuff.
+          export PKG_CONFIG_PATH=${pkgs.lib.makeSearchPath "lib/pkgconfig" [pkgs.zlib.dev]}
+        '';
       };
     });
 }
diff --git a/gbs-downloader.cabal b/gbs-downloader.cabal
index 558340f6028dbd9519f9afddb04fae604c2ef7a8..46c02301ab586cc73ff769a434a9d3f73789ebb1 100644
--- a/gbs-downloader.cabal
+++ b/gbs-downloader.cabal
@@ -28,7 +28,9 @@ synopsis:
   A library for downloading data from a Great Black Swamp server
 
 -- A longer description of the package.
--- description:
+description:
+  Integrate tahoe-ssk, tahoe-chk, and tahoe-directory to provide a high-level
+  API for downloading immutable and mutable files and directories.
 
 -- URL for the project homepage or repository.
 homepage:
@@ -41,24 +43,31 @@ license:         BSD-3-Clause
 license-file:    LICENSE
 
 -- The package author(s).
-author:          Least Authority TFA GmbH
+author:          Jean-Paul Calderone and others
 
 -- An email address to which users can send suggestions, bug reports, and patches.
-maintainer:      jean-paul@leastauthority.com
+maintainer:      exarkun@twistedmatrix.com
 
 -- A copyright notice.
--- copyright:
+copyright:       2023 The Authors
 category:        Network
 build-type:      Simple
 
 -- Extra doc files to be distributed with the package, such as a CHANGELOG or a README.
-extra-doc-files: CHANGELOG.md
+extra-doc-files:
+  CHANGELOG.md
+  README.md
 
 -- Extra source files to be distributed with the package, such as examples, or a tutorial module.
 -- extra-source-files:
 
+source-repository head
+  type:     git
+  location:
+    https://whetstone.private.storage/PrivateStorage/gbs-downloader.git
+
 common warnings
-  ghc-options: -Wall -Werror
+  ghc-options: -Wall
 
 common language
   -- LANGUAGE extensions used by modules in all targets.
@@ -94,29 +103,29 @@ library
 
   -- Other library packages from which modules are imported.
   build-depends:
-    , aeson
-    , async
-    , base
-    , base32
-    , base64-bytestring
-    , binary
-    , bytestring
-    , connection
-    , containers
-    , data-default-class
-    , exceptions
-    , http-client
-    , http-client-tls
-    , http-types
-    , network-uri
-    , servant-client
-    , servant-client-core
-    , tahoe-chk
-    , tahoe-directory
-    , tahoe-great-black-swamp  >=0.3 && <0.4
-    , tahoe-ssk                >=0.2 && <0.3
-    , text
-    , yaml
+    , aeson                    >=1.4.7    && <2.2
+    , async                    >=2.2.2    && <2.3
+    , base                     >=4.7      && <5
+    , base32                   >=0.2.1    && <0.3
+    , base64-bytestring        >=1.0.0.3  && <1.3
+    , binary                   >=0.8.6    && <0.9
+    , bytestring               >=0.10.8.2 && <0.11
+    , connection               >=0.3.1    && <0.4
+    , containers               >=0.6.0.1  && <0.7
+    , data-default-class       >=0.1.2    && <0.2
+    , exceptions               >=0.10.4   && <0.11
+    , http-client              >=0.6.4.1  && <0.8
+    , http-client-tls          >=0.3.5.3  && <0.4
+    , http-types               >=0.12.3   && <0.13
+    , network-uri              >=2.6.3    && <2.7
+    , servant-client           >=0.16.0.1 && <0.21
+    , servant-client-core      >=0.16     && <0.21
+    , tahoe-chk                >=0.1      && <0.2
+    , tahoe-directory          >=0.1      && <0.2
+    , tahoe-great-black-swamp  >=0.3      && <0.4
+    , tahoe-ssk                >=0.2      && <0.3
+    , text                     >=1.2.3.1  && <1.3
+    , yaml                     >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12
 
   -- Directories containing source files.
   hs-source-dirs:   src
@@ -141,15 +150,15 @@ executable download-chk
 
   -- Other library packages from which modules are imported.
   build-depends:
-    , aeson
-    , base
-    , bytestring
-    , containers
+    , aeson           >=1.4.7    && <2.2
+    , base            >=4.7      && <5
+    , bytestring      >=0.10.8.2 && <0.11
+    , containers      >=0.6.0.1  && <0.7
     , gbs-downloader
-    , megaparsec
-    , tahoe-chk
-    , text
-    , yaml
+    , megaparsec      >=8.0      && <9.3
+    , tahoe-chk       >=0.1      && <0.2
+    , text            >=1.2.3.1  && <1.3
+    , yaml            >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12
 
   -- Directories containing source files.
   hs-source-dirs:   app
@@ -164,15 +173,15 @@ executable download-sdmf
 
   main-is:          Main.hs
   build-depends:
-    , aeson
-    , base
-    , bytestring
-    , containers
+    , aeson           >=1.4.7    && <2.2
+    , base            >=4.7      && <5
+    , bytestring      >=0.10.8.2 && <0.11
+    , containers      >=0.6.0.1  && <0.7
     , gbs-downloader
-    , megaparsec
-    , tahoe-ssk       >=0.2 && <0.3
-    , text
-    , yaml
+    , megaparsec      >=8.0      && <9.3
+    , tahoe-ssk       >=0.2      && <0.3
+    , text            >=1.2.3.1  && <1.3
+    , yaml            >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12
 
   hs-source-dirs:   download-sdmf
   default-language: Haskell2010
@@ -184,17 +193,17 @@ executable list-dircap
 
   main-is:          Main.hs
   build-depends:
-    , aeson
-    , base
-    , bytestring
-    , containers
+    , aeson            >=1.4.7    && <2.2
+    , base             >=4.7      && <5
+    , bytestring       >=0.10.8.2 && <0.11
+    , containers       >=0.6.0.1  && <0.7
     , gbs-downloader
-    , megaparsec
-    , tahoe-chk
-    , tahoe-directory
-    , tahoe-ssk        >=0.2 && <0.3
-    , text
-    , yaml
+    , megaparsec       >=8.0      && <9.3
+    , tahoe-chk        >=0.1      && <0.2
+    , tahoe-directory  >=0.1      && <0.2
+    , tahoe-ssk        >=0.2      && <0.3
+    , text             >=1.2.3.1  && <1.3
+    , yaml             >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12
 
   hs-source-dirs:   list-dircap
   default-language: Haskell2010
@@ -223,28 +232,28 @@ test-suite gbs-downloader-test
 
   -- Test dependencies.
   build-depends:
-    , asn1-encoding
-    , asn1-types
-    , base
-    , base32
-    , binary
-    , bytestring
-    , containers
-    , crypto-api
-    , cryptonite
-    , data-default-class
+    , asn1-encoding        >=0.9.6    && <0.10
+    , asn1-types           >=0.3.4    && <0.4
+    , base                 >=4.7      && <5
+    , base32               >=0.2.1    && <0.3
+    , binary               >=0.8.6    && <0.9
+    , bytestring           >=0.10.8.2 && <0.11
+    , containers           >=0.6.0.1  && <0.7
+    , crypto-api           >=0.13.3   && <0.14
+    , cryptonite           >=0.27     && <0.31
+    , data-default-class   >=0.1.2    && <0.2
     , gbs-downloader
-    , hedgehog
-    , http-client
-    , http-types
-    , memory
-    , servant-client
-    , servant-client-core
-    , tahoe-chk
-    , tahoe-ssk            >=0.2 && <0.3
-    , tasty
-    , tasty-hedgehog
-    , tasty-hunit
-    , text
-    , x509
-    , yaml
+    , hedgehog             >=1.0.3    && <1.1
+    , http-client          >=0.6.4.1  && <0.8
+    , http-types           >=0.12.3   && <0.13
+    , memory               >=0.15     && <0.17
+    , servant-client       >=0.16.0.1 && <0.21
+    , servant-client-core  >=0.16     && <0.21
+    , tahoe-chk            >=0.1      && <0.2
+    , tahoe-ssk            >=0.2      && <0.3
+    , tasty                >=1.2.3    && <1.5
+    , tasty-hedgehog       >=1.0.0.2  && <1.2
+    , tasty-hunit          >=0.10.0.2 && <0.11
+    , text                 >=1.2.3.1  && <1.3
+    , x509                 >=1.7.5    && <1.8
+    , yaml                 >=0.11.5.0 && <0.11.9.0 || >=0.11.9.0.0 && <0.12