diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for json-query
 
+## 0.3.0.0 -- 2025-07-14
+
+* Update to work with json-syntax
+
 ## 0.2.3.1 -- 2024-01-29
 
 * Update package metadata.
diff --git a/Setup.hs b/Setup.hs
deleted file mode 100644
--- a/Setup.hs
+++ /dev/null
@@ -1,2 +0,0 @@
-import Distribution.Simple
-main = defaultMain
diff --git a/json-query.cabal b/json-query.cabal
--- a/json-query.cabal
+++ b/json-query.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.4
 name:            json-query
-version:         0.2.3.1
+version:         0.3.0.0
 synopsis:        Kitchen sink for querying JSON
 description:
   The library complements json-syntax by making available several
@@ -8,7 +8,7 @@
   only query JSON. They do not update it.
 
 homepage:        https://github.com/byteverse/json-query
-bug-reports:     https://github.com/byteverse/json-query
+bug-reports:     https://github.com/byteverse/json-query/issues
 license:         BSD-3-Clause
 license-file:    LICENSE
 author:          Andrew Martin
@@ -17,8 +17,14 @@
 category:        Data
 build-type:      Simple
 extra-doc-files: CHANGELOG.md
+tested-with:     GHC ==9.6.3 || ==9.8.1
 
+common build-settings
+  default-language: Haskell2010
+  ghc-options:      -Wall -Wunused-packages
+
 library
+  import:          build-settings
   exposed-modules:
     Json.Arrow
     Json.Context
@@ -28,38 +34,34 @@
     Json.Path
 
   build-depends:
-    , array-chunks         >=0.1.2 && <0.2
     , base                 >=4.12  && <5
     , bytebuild            >=0.3.5 && <0.4
     , bytestring           >=0.10  && <0.12
     , contiguous           >=0.6.4 && <0.7
-    , json-syntax          >=0.2.2 && <0.3
+    , json-syntax          >=0.3   && <0.4
     , primitive            >=0.7   && <0.10
-    , primitive-unlifted   >=0.1.3 && <2.2
+    , primitive-unlifted   >=0.1.3 && <2.3
     , profunctors          >=5.6.2 && <5.7
     , scientific-notation  >=0.1.5 && <0.2
-    , text-short           >=0.1.3 && <0.2
+    , text                 >=2.1.2
+    , text-short           >=0.1.5
     , transformers         >=0.5.6 && <0.7
 
-  hs-source-dirs:   src
-  default-language: Haskell2010
-  ghc-options:      -Wall -O2
+  hs-source-dirs:  src
+  ghc-options:     -O2
 
 test-suite test
-  default-language: Haskell2010
-  type:             exitcode-stdio-1.0
-  hs-source-dirs:   test
-  main-is:          Main.hs
+  import:         build-settings
+  type:           exitcode-stdio-1.0
+  hs-source-dirs: test
+  main-is:        Main.hs
   other-modules:
     Arrowy
     DogHouse
     Monadic
 
-  ghc-options:      -Wall -O2
   build-depends:
-    , array-chunks
     , base                 >=4.12.0.0 && <5
-    , bytebuild
     , byteslice            >=0.1.3
     , bytestring
     , hspec                >=2.11.7
@@ -72,7 +74,6 @@
     , tasty-hspec          >=1.2.0.4
     , tasty-hunit          >=0.10.0.2
     , text                 >=1.2
-    , text-short
 
 source-repository head
   type:     git
diff --git a/src/Json/Arrow.hs b/src/Json/Arrow.hs
--- a/src/Json/Arrow.hs
+++ b/src/Json/Arrow.hs
@@ -59,6 +59,7 @@
 import Data.Primitive (SmallArray)
 import Data.Primitive.Unlifted.Array (UnliftedArray)
 import Data.Profunctor (Profunctor (..))
+import Data.Text (Text)
 import Data.Text.Short (ShortText)
 import Data.Word (Word16, Word64)
 import Json (Member (Member), Value (Array, Number, Object, String))
@@ -94,7 +95,7 @@
   Array membs -> Right (ctx, Elements membs)
   _ -> Left (Errors.singleton (Error "expected array" ctx))
 
-string :: Value ~> ShortText
+string :: Value ~> Text
 string = P $ \ctx v -> case v of
   String str -> Right (ctx, str)
   _ -> Left (Errors.singleton (Error "expected string" ctx))
@@ -106,7 +107,7 @@
 Failure context includes the index of non-string value if any values in
 the array are not strings.
 -}
-strings :: Value ~> UnliftedArray ShortText
+strings :: Value ~> SmallArray Text
 strings = P $ \ctx v -> case v of
   Array membs -> runST $ runExceptT $ do
     xs <-
@@ -137,7 +138,7 @@
 
 newtype Members = Members {unMembers :: SmallArray Member}
 
-member :: ShortText -> Members ~> Value
+member :: Text -> Members ~> Value
 member k = P $ \ctx xs -> case find keyEq (unMembers xs) of
   Just Member {value} -> Right (Key k ctx, value)
   Nothing -> Left (Errors.singleton (Error ("key not found: " <> k) ctx))
@@ -145,7 +146,7 @@
   keyEq Member {key} = k == key
 
 -- | An optional member. Returns Nothing if the value is missing.
-memberOpt :: ShortText -> Members ~> Maybe Value
+memberOpt :: Text -> Members ~> Maybe Value
 memberOpt k = P $ \ctx xs -> case find keyEq (unMembers xs) of
   Just Member {value} -> Right (Key k ctx, Just value)
   Nothing -> Right (ctx, Nothing)
@@ -248,7 +249,7 @@
 instance ArrowApply Parser where
   app = P $ \ctx (p, x) -> unParser p ctx x
 
-fail :: ShortText -> a ~> b
+fail :: Text -> a ~> b
 fail msg = P $ \ctx _ -> Left (Errors.singleton (Error msg ctx))
 
 failZero :: a ~> b
@@ -256,7 +257,7 @@
 
 liftMaybe ::
   -- | Message to display on decode error
-  ShortText ->
+  Text ->
   -- | Decode function
   (a -> Maybe b) ->
   a ~> b
diff --git a/src/Json/Context.hs b/src/Json/Context.hs
--- a/src/Json/Context.hs
+++ b/src/Json/Context.hs
@@ -11,6 +11,7 @@
   ) where
 
 import Data.Bytes.Builder (Builder)
+import Data.Text (Text)
 import Data.Text.Short (ShortText)
 import Json.Path (Path)
 
@@ -26,7 +27,7 @@
 -}
 data Context
   = Top
-  | Key !ShortText !Context
+  | Key {-# UNPACK #-} !Text !Context
   | Index !Int !Context
   deriving (Eq, Show)
 
diff --git a/src/Json/Error.hs b/src/Json/Error.hs
--- a/src/Json/Error.hs
+++ b/src/Json/Error.hs
@@ -13,6 +13,7 @@
 import Data.ByteString.Short.Internal (ShortByteString (SBS))
 import Data.Bytes.Builder (Builder)
 import Data.Text.Short (ShortText)
+import Data.Text (Text)
 import Json.Context (Context (..))
 
 import qualified Data.Bytes.Builder as Builder
@@ -23,7 +24,7 @@
 
 -- | A single error message.
 data Error = Error
-  { message :: !ShortText
+  { message :: {-# UNPACK #-} !Text
   , context :: !Context
   }
   deriving (Eq, Show)
@@ -39,4 +40,4 @@
 builderUtf8 Error {message, context} =
   Context.builderUtf8 context
     <> Builder.ascii2 ':' ' '
-    <> Builder.shortTextUtf8 message
+    <> Builder.textUtf8 message
diff --git a/src/Json/Parser.hs b/src/Json/Parser.hs
--- a/src/Json/Parser.hs
+++ b/src/Json/Parser.hs
@@ -58,7 +58,7 @@
 import Data.List (find)
 import Data.Number.Scientific (Scientific)
 import Data.Primitive (SmallArray)
-import Data.Text.Short (ShortText)
+import Data.Text (Text)
 import Data.Word (Word16, Word32, Word64)
 import Json (Member (Member), Value (Array, Number, Object))
 
@@ -127,7 +127,7 @@
   Right a -> Right a
   Left e -> Left e
 
-fail :: ShortText -> Parser a
+fail :: Text -> Parser a
 fail !msg = Parser (\e -> Left (Errors.singleton Error {context = e, message = msg}))
 
 object :: Value -> Parser (SmallArray Member)
@@ -148,7 +148,7 @@
   Number n -> pure n
   _ -> fail "expected number"
 
-string :: Value -> Parser ShortText
+string :: Value -> Parser Text
 string = \case
   Json.String n -> pure n
   _ -> fail "expected string"
@@ -187,7 +187,7 @@
 -- members :: Parser Value (Chunks Member)
 -- members = _
 
-key :: ShortText -> (Value -> Parser a) -> MemberParser a
+key :: Text -> (Value -> Parser a) -> MemberParser a
 key !name f = MemberParser $ \p mbrs ->
   let !p' = Key name p
    in case find (\Member {key = k} -> k == name) mbrs of
@@ -199,7 +199,7 @@
 that there is no distinction between @null@ and an absent value in
 the encoding scheme.
 -}
-keyOptNull :: ShortText -> (Value -> Parser a) -> MemberParser a
+keyOptNull :: Text -> (Value -> Parser a) -> MemberParser a
 keyOptNull !name f = MemberParser $ \p mbrs ->
   let !p' = Key name p
       val = case find (\Member {key = k} -> k == name) mbrs of
diff --git a/src/Json/Path.hs b/src/Json/Path.hs
--- a/src/Json/Path.hs
+++ b/src/Json/Path.hs
@@ -23,6 +23,7 @@
 import Data.Bytes.Builder (Builder)
 import Data.Primitive (ByteArray (ByteArray))
 import Data.Text.Short (ShortText)
+import Data.Text (Text)
 import Json (Member (Member), Value (Array, Null, Object))
 
 import qualified Data.Bytes.Builder as Builder
@@ -33,7 +34,7 @@
 -- | A path to an object.
 data Path
   = -- | JSON path element of a key into an object, \"object.key\".
-    Key {-# UNPACK #-} !ShortText !Path
+    Key {-# UNPACK #-} !Text !Path
   | -- | JSON path element of an index into an array, \"array[index]\".
     -- Negative numbers result in undefined behavior.
     Index {-# UNPACK #-} !Int !Path
@@ -51,7 +52,7 @@
 builderUtf8 p0 = Builder.ascii '$' <> go p0
  where
   go Nil = mempty
-  go (Key k p) = Builder.ascii '.' <> Builder.shortTextUtf8 k <> go p
+  go (Key k p) = Builder.ascii '.' <> Builder.textUtf8 k <> go p
   go (Index i p) =
     Builder.ascii '['
       <> Builder.wordDec (fromIntegral i)
diff --git a/test/DogHouse.hs b/test/DogHouse.hs
--- a/test/DogHouse.hs
+++ b/test/DogHouse.hs
@@ -15,7 +15,7 @@
 import Data.Bytes (Bytes)
 import Data.Primitive (ByteArray, SmallArray)
 import Data.Text.Encoding (encodeUtf8)
-import Data.Text.Short (ShortText)
+import Data.Text (Text)
 import NeatInterpolation (text)
 
 import qualified Data.ByteString.Short as SBS
@@ -24,13 +24,13 @@
 import qualified GHC.Exts as Exts
 
 data House = House
-  { address :: !ShortText
+  { address :: {-# UNPACK #-} !Text
   , dogs :: !(SmallArray Dog)
   }
   deriving (Eq, Show)
 
 data Dog = Dog
-  { name :: !ShortText
+  { name :: {-# UNPACK #-} !Text
   , age :: !Int
   , alive :: !Bool
   }
