diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Changelog
 
+## 1.4.0.1
+
+- Relax the `aeson` upper bound to allow 2.3.x.
+
 ## 1.4.0.0
 
 - Add `JsonDict` for JSON objects with arbitrary string keys and values that
diff --git a/json-spec.cabal b/json-spec.cabal
--- a/json-spec.cabal
+++ b/json-spec.cabal
@@ -1,6 +1,6 @@
 cabal-version:       3.0
 name:                json-spec
-version:             1.4.0.0
+version:             1.4.0.1
 synopsis:            Type-level JSON specification
 maintainer:          rick@owensmurray.com
 description:         See the README at: https://github.com/owensmurray/json-spec#json-spec
@@ -18,7 +18,7 @@
 
 common dependencies
   build-depends:
-    , aeson      >= 2.2.1.0  && < 2.3
+    , aeson      >= 2.2.1.0  && < 2.4
     , base       >= 4.19.0.0 && < 4.23
     , containers >= 0.6.8    && < 0.9
     , scientific >= 0.3.7.0  && < 0.4
diff --git a/src/Data/JsonSpec.hs b/src/Data/JsonSpec.hs
--- a/src/Data/JsonSpec.hs
+++ b/src/Data/JsonSpec.hs
@@ -98,7 +98,6 @@
   StructureToJSON,
 ) where
 
-
 import Data.Aeson (FromJSON(parseJSON), ToJSON(toJSON))
 import Data.JsonSpec.Decode
   ( HasJsonDecodingSpec(DecodingSpec, fromJSONStructure)
@@ -118,7 +117,6 @@
   , Tag(Tag), (:::), (::?), JSONStructure, unField
   )
 import Prelude ((.), (<$>), (=<<))
-
 
 {- |
   Helper for defining 'ToJSON' and 'FromJSON' instances based on
diff --git a/src/Data/JsonSpec/Decode.hs b/src/Data/JsonSpec/Decode.hs
--- a/src/Data/JsonSpec/Decode.hs
+++ b/src/Data/JsonSpec/Decode.hs
@@ -14,7 +14,6 @@
   eitherDecode,
 ) where
 
-
 import Control.Applicative (Alternative((<|>)))
 import Data.Aeson.Types
   ( FromJSON(parseJSON), Value(Null, Object), Parser, parseEither, withArray
@@ -38,7 +37,6 @@
 import qualified Data.Aeson.KeyMap as KM
 import qualified Data.Map as Map
 import qualified Data.Vector as Vector
-
 
 {- |
   Types of this class can be JSON decoded according to a type-level
diff --git a/src/Data/JsonSpec/Encode.hs b/src/Data/JsonSpec/Encode.hs
--- a/src/Data/JsonSpec/Encode.hs
+++ b/src/Data/JsonSpec/Encode.hs
@@ -14,13 +14,12 @@
   encode,
 ) where
 
-
 import Data.Aeson (ToJSON(toJSON), Value)
-import Data.Map (Map)
 import Data.JsonSpec.Spec
   ( Field(Field), Ref(unRef), Specification(JsonArray), JSONStructure, JStruct
   , Tag, sym
   )
+import Data.Map (Map)
 import Data.Proxy (Proxy(Proxy))
 import Data.Scientific (Scientific)
 import Data.Set (Set)
@@ -36,7 +35,6 @@
 import qualified Data.Aeson.KeyMap as KM
 import qualified Data.Map as Map
 import qualified Data.Set as Set
-
 
 {- |
   Types of this class can be encoded to JSON according to a type-level
diff --git a/src/Data/JsonSpec/Spec.hs b/src/Data/JsonSpec/Spec.hs
--- a/src/Data/JsonSpec/Spec.hs
+++ b/src/Data/JsonSpec/Spec.hs
@@ -23,7 +23,6 @@
   (::?),
 ) where
 
-
 import Data.Aeson (Value)
 import Data.Kind (Type)
 import Data.Map (Map)
@@ -34,9 +33,8 @@
 import Data.Time (UTCTime)
 import GHC.Records (HasField(getField))
 import GHC.TypeLits (KnownSymbol, Symbol, symbolVal)
+import Prelude (Maybe(Just, Nothing), ($), Bool, Either, Eq, Int, Show)
 import qualified GHC.TypeError as GE
-import Prelude (Either, Maybe(Just, Nothing), ($), Bool, Eq, Int, Show)
-
 
 {-|
   Simple DSL for defining type level "specifications" for JSON
diff --git a/test/jsonspec.hs b/test/jsonspec.hs
--- a/test/jsonspec.hs
+++ b/test/jsonspec.hs
@@ -37,8 +37,7 @@
     , JsonInt, JsonLet, JsonNullable, JsonNum, JsonObject, JsonRaw, JsonRef
     , JsonString, JsonTag
     )
-  , Tag(Tag), (:::), (::?), eitherDecode
-  , encode, unField
+  , Tag(Tag), (:::), (::?), eitherDecode, encode, unField
   )
 import Data.Map (Map)
 import Data.Proxy (Proxy(Proxy))
@@ -54,7 +53,6 @@
 import Test.Hspec (describe, hspec, it, shouldBe, shouldSatisfy)
 import qualified Data.Aeson as A
 import qualified Data.Map as Map
-
 
 main :: IO ()
 main =
diff --git a/test/stable-environment.hs b/test/stable-environment.hs
--- a/test/stable-environment.hs
+++ b/test/stable-environment.hs
@@ -23,7 +23,6 @@
 import Data.Text (Text)
 import Prelude (Applicative(pure), ($), (.), Eq, IO, Ord)
 
-
 main :: IO ()
 main =
   {-
