diff --git a/CHANGELOG.markdown b/CHANGELOG.markdown
deleted file mode 100644
--- a/CHANGELOG.markdown
+++ /dev/null
@@ -1,4 +0,0 @@
-# Change log
-
-GitHub Release follows the [Package Versioning Policy](https://pvp.haskell.org).
-You can find release notes [on GitHub](https://github.com/tfausak/github-release/releases).
diff --git a/CHANGELOG.md b/CHANGELOG.md
new file mode 100644
--- /dev/null
+++ b/CHANGELOG.md
@@ -0,0 +1,4 @@
+# Change log
+
+GitHub Release follows the [Package Versioning Policy](https://pvp.haskell.org).
+You can find release notes [on GitHub](https://github.com/tfausak/github-release/releases).
diff --git a/LICENSE.markdown b/LICENSE.markdown
deleted file mode 100644
--- a/LICENSE.markdown
+++ /dev/null
@@ -1,21 +0,0 @@
-MIT License
-
-Copyright (c) 2023 Taylor Fausak
-
-Permission is hereby granted, free of charge, to any person obtaining a copy
-of this software and associated documentation files (the "Software"), to deal
-in the Software without restriction, including without limitation the rights
-to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-copies of the Software, and to permit persons to whom the Software is
-furnished to do so, subject to the following conditions:
-
-The above copyright notice and this permission notice shall be included in all
-copies or substantial portions of the Software.
-
-THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-SOFTWARE.
diff --git a/LICENSE.txt b/LICENSE.txt
new file mode 100644
--- /dev/null
+++ b/LICENSE.txt
@@ -0,0 +1,21 @@
+MIT License
+
+Copyright (c) 2024 Taylor Fausak
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
diff --git a/README.markdown b/README.markdown
deleted file mode 100644
--- a/README.markdown
+++ /dev/null
@@ -1,54 +0,0 @@
-# [GitHub Release][]
-
-[![Workflow](https://github.com/tfausak/github-release/actions/workflows/workflow.yaml/badge.svg)](https://github.com/tfausak/github-release/actions/workflows/workflow.yaml)
-[![Hackage](https://img.shields.io/hackage/v/github-release)](https://hackage.haskell.org/package/github-release)
-[![Stackage](https://www.stackage.org/package/github-release/badge/nightly?label=stackage)](https://www.stackage.org/package/github-release)
-
-GitHub Release is a command-line utility for uploading files to GitHub
-releases.
-
-Once you've got it, run it like so:
-
-``` sh
-github-release upload \
-  --token '...' \
-  --owner 'someone' \
-  --repo 'something' \
-  --tag 'v1.2.3' \
-  --file 'path/to/example.tgz' \
-  --name 'example-1.2.3.tgz'
-```
-
-You can generate a token on the [personal access tokens][] page of your
-personal settings. The `file` option is the path to the local file you want to
-upload. The `name` option is what the file should be called on the GitHub
-release.
-
-GitHub Release is written in Haskell. If you want to build it yourself or use
-it in your project, you'll want to get [Stack][]. Once you've done that, you
-can install and use it from the command line.
-
-``` sh
-stack --resolver nightly install github-release
-stack exec -- github-release upload # as above ...
-```
-
-Or you can use it from Haskell.
-
-``` hs
-import qualified GitHubRelease
-GitHubRelease.upload
-    "..."                 -- token
-    "someone"             -- owner
-    "something"           -- repo
-    "1.2.3"               -- tag
-    "path/to/example.tgz" -- file
-    "example-1.2.3.tgz"   -- name
-```
-
-Inspired by <https://github.com/aktau/github-release>.
-
-[GitHub Release]: https://github.com/tfausak/github-release
-[the latest release]: https://github.com/tfausak/github-release/releases/latest
-[personal access tokens]: https://github.com/settings/tokens
-[Stack]: http://docs.haskellstack.org/en/stable/README/
diff --git a/README.md b/README.md
new file mode 100644
--- /dev/null
+++ b/README.md
@@ -0,0 +1,53 @@
+# [GitHub Release][]
+
+[![CI](https://github.com/tfausak/github-release/actions/workflows/ci.yml/badge.svg)](https://github.com/tfausak/github-release/actions/workflows/ci.yml)
+[![Hackage](https://badgen.net/hackage/v/github-release)](https://hackage.haskell.org/package/github-release)
+
+GitHub Release is a command-line utility for uploading files to GitHub
+releases.
+
+Once you've got it, run it like so:
+
+``` sh
+github-release upload \
+  --token '...' \
+  --owner 'someone' \
+  --repo 'something' \
+  --tag 'v1.2.3' \
+  --file 'path/to/example.tgz' \
+  --name 'example-1.2.3.tgz'
+```
+
+You can generate a token on the [personal access tokens][] page of your
+personal settings. The `file` option is the path to the local file you want to
+upload. The `name` option is what the file should be called on the GitHub
+release.
+
+GitHub Release is written in Haskell. If you want to build it yourself or use
+it in your project, you'll want to get [Stack][]. Once you've done that, you
+can install and use it from the command line.
+
+``` sh
+stack --resolver nightly install github-release
+stack exec -- github-release upload # as above ...
+```
+
+Or you can use it from Haskell.
+
+``` hs
+import qualified GitHubRelease
+GitHubRelease.upload
+    "..."                 -- token
+    "someone"             -- owner
+    "something"           -- repo
+    "1.2.3"               -- tag
+    "path/to/example.tgz" -- file
+    "example-1.2.3.tgz"   -- name
+```
+
+Inspired by <https://github.com/aktau/github-release>.
+
+[GitHub Release]: https://github.com/tfausak/github-release
+[the latest release]: https://github.com/tfausak/github-release/releases/latest
+[personal access tokens]: https://github.com/settings/tokens
+[Stack]: http://docs.haskellstack.org/en/stable/README/
diff --git a/github-release.cabal b/github-release.cabal
--- a/github-release.cabal
+++ b/github-release.cabal
@@ -1,15 +1,15 @@
 cabal-version: 2.2
-
 name: github-release
-version: 2.0.0.10
-
+version: 2.0.0.11
 synopsis: Upload files to GitHub releases.
 description: GitHub Release uploads files to GitHub releases.
-
 build-type: Simple
 category: Utility
-extra-source-files: CHANGELOG.markdown README.markdown
-license-file: LICENSE.markdown
+extra-doc-files:
+  CHANGELOG.md
+  README.md
+
+license-file: LICENSE.txt
 license: MIT
 maintainer: Taylor Fausak
 
@@ -23,18 +23,7 @@
   manual: True
 
 common library
-  build-depends:
-    , aeson >= 2.0.3 && < 2.3
-    , base >= 4.16.0 && < 4.20
-    , burrito >= 1.2.0 && < 1.3 || >= 2.0.0 && < 2.1
-    , bytestring >= 0.11.3 && < 0.13
-    , http-client >= 0.7.13 && < 0.8
-    , http-client-tls >= 0.3.6 && < 0.4
-    , http-types >= 0.12.3 && < 0.13
-    , mime-types >= 0.1.0 && < 0.2
-    , optparse-generic >= 1.4.8 && < 1.6
-    , text >= 1.2.5 && < 1.3 || >= 2.0 && < 2.2
-    , unordered-containers >= 0.2.17 && < 0.3
+  build-depends: base ^>=4.18.0.0 || ^>=4.19.0.0 || ^>=4.20.0.0
   default-language: Haskell2010
   ghc-options:
     -Weverything
@@ -54,23 +43,31 @@
 
 common executable
   import: library
-
   build-depends: github-release
   ghc-options:
     -rtsopts
     -threaded
-    -Wno-unused-packages
 
 library
   import: library
-
   autogen-modules: Paths_github_release
+  build-depends:
+    aeson ^>=2.1.2.1 || ^>=2.2.2.0,
+    burrito ^>=2.0.1.9,
+    bytestring ^>=0.11.4.0 || ^>=0.12.0.2,
+    http-client ^>=0.7.17,
+    http-client-tls ^>=0.3.6.3,
+    http-types ^>=0.12.4,
+    mime-types ^>=0.1.2.0,
+    optparse-generic ^>=1.5.2,
+    text ^>=2.0.2 || ^>=2.1,
+    unordered-containers ^>=0.2.20,
+
   exposed-modules: GitHubRelease
   hs-source-dirs: source/library
   other-modules: Paths_github_release
 
 executable github-release
   import: executable
-
   hs-source-dirs: source/executable
   main-is: Main.hs
