diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,13 @@
 # Revision history for hnix-store-remote
 
+## [next](https://github.com/haskell-nix/hnix-store/compare/0.4.0.0...master) 2021-MM-DD
+
+* No changes yet
+
+## [0.4.0.0](https://github.com/haskell-nix/hnix-store/compare/0.3.0.0...0.4.0.0) 2020-12-30
+
+* `hnix-store-core` compatibility
+
 ## 0.3.0.0 -- 2020-11-29
 
 * Restored most store API functions except `addToStoreNar`
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,8 +1,9 @@
-hnix-store-remote
-=================
+# hnix-store-remote
 
-Nix worker protocol implementation for interacting with remote Nix store
+[Nix] worker protocol implementation for interacting with remote Nix store
 via `nix-daemon`.
+
+[Nix]: https://nixos.org/nix
 
 ## API
 
diff --git a/hnix-store-remote.cabal b/hnix-store-remote.cabal
--- a/hnix-store-remote.cabal
+++ b/hnix-store-remote.cabal
@@ -1,5 +1,5 @@
 name:                hnix-store-remote
-version:             0.3.0.0
+version:             0.4.0.0
 synopsis:            Remote hnix store
 description:         Implementation of the nix store using the daemon protocol.
 homepage:            https://github.com/haskell-nix/hnix-store
@@ -45,7 +45,7 @@
                      , unordered-containers
                      , filepath
                      , time
-                     , hnix-store-core
+                     , hnix-store-core >= 0.4 && <0.5
                      , vector
   hs-source-dirs:      src
   default-language:    Haskell2010
diff --git a/src/System/Nix/Store/Remote.hs b/src/System/Nix/Store/Remote.hs
--- a/src/System/Nix/Store/Remote.hs
+++ b/src/System/Nix/Store/Remote.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE AllowAmbiguousTypes #-}
-{-# LANGUAGE DataKinds           #-}
 {-# LANGUAGE KindSignatures      #-}
 {-# LANGUAGE OverloadedStrings   #-}
 {-# LANGUAGE RankNTypes          #-}
@@ -43,22 +42,19 @@
 
 import Nix.Derivation (Derivation)
 import System.Nix.Build (BuildMode, BuildResult)
-import System.Nix.Hash (Digest, NamedAlgo, ValidAlgo, SomeNamedDigest(..))
+import System.Nix.Hash (Digest, NamedAlgo, ValidAlgo, SomeNamedDigest(..), BaseEncoding(Base32))
 import System.Nix.StorePath (StorePath, StorePathName, StorePathSet, StorePathHashAlgo)
 import System.Nix.StorePathMetadata (StorePathMetadata(..), StorePathTrust(..))
 
-import qualified Control.Monad.IO.Class
 import qualified Data.Binary.Put
 import qualified Data.ByteString.Lazy
 import qualified Data.Map.Strict
 import qualified Data.Set
 import qualified Data.Text.Encoding
-import qualified Data.Text.Lazy
 
 import qualified System.Nix.Nar
 import qualified System.Nix.Hash
 import qualified System.Nix.StorePath
-import qualified System.Nix.Store.Remote.Builders
 import qualified System.Nix.Store.Remote.Parsers
 
 import           System.Nix.Store.Remote.Binary
@@ -222,7 +218,7 @@
   deriverPath <- sockGetPathMay
 
   narHashText <- Data.Text.Encoding.decodeUtf8 <$> sockGetStr
-  let narHash = case System.Nix.Hash.decodeBase32 @'System.Nix.Hash.SHA256 narHashText of
+  let narHash = case System.Nix.Hash.decodeBase @'System.Nix.Hash.SHA256 Base32 narHashText of
         Left e -> error e
         Right x -> SomeDigest x
 
@@ -278,7 +274,7 @@
     putByteStringLen
       $ Data.ByteString.Lazy.fromStrict
       $ Data.Text.Encoding.encodeUtf8
-      $ System.Nix.Hash.encodeBase32 storePathHash
+      $ System.Nix.Hash.encodeInBase Base32 storePathHash
   sockGetPath
 
 queryMissing :: StorePathSet
diff --git a/src/System/Nix/Store/Remote/Builders.hs b/src/System/Nix/Store/Remote/Builders.hs
--- a/src/System/Nix/Store/Remote/Builders.hs
+++ b/src/System/Nix/Store/Remote/Builders.hs
@@ -9,7 +9,10 @@
   ) where
 
 import Data.Text.Lazy (Text)
-import System.Nix.Hash (Digest, SomeNamedDigest(SomeDigest))
+import System.Nix.Hash ( Digest
+                       , SomeNamedDigest(SomeDigest)
+                       , BaseEncoding(Base32)
+                       )
 import System.Nix.StorePath (ContentAddressableAddress(..))
 
 import Data.Text.Lazy.Builder (Builder)
@@ -39,4 +42,4 @@
 digestBuilder :: Digest a -> Builder
 digestBuilder =
     Data.Text.Lazy.Builder.fromText
-  . System.Nix.Hash.encodeBase32
+  . System.Nix.Hash.encodeInBase Base32
diff --git a/src/System/Nix/Store/Remote/Parsers.hs b/src/System/Nix/Store/Remote/Parsers.hs
--- a/src/System/Nix/Store/Remote/Parsers.hs
+++ b/src/System/Nix/Store/Remote/Parsers.hs
@@ -13,7 +13,7 @@
 import           Control.Applicative            ( (<|>) )
 import           Data.Attoparsec.ByteString.Char8
 import           Data.ByteString.Char8
-import qualified Data.Text
+import           Data.Text                      (Text)
 import           Data.Text.Encoding             ( decodeUtf8 )
 import           System.Nix.Hash
 import           System.Nix.StorePath           ( ContentAddressableAddress(..)
@@ -34,7 +34,7 @@
 caText :: Parser ContentAddressableAddress
 caText = do
   _      <- "text:sha256:"
-  digest <- decodeBase32 @'SHA256 <$> parseHash
+  digest <- decodeBase @'SHA256 Base32 <$> parseHash
   either fail return $ Text <$> digest
 
 -- | Parser for @fixed:<r?>:<ht>:<h>@
@@ -48,8 +48,8 @@
 parseTypedDigest :: Parser (Either String SomeNamedDigest)
 parseTypedDigest = mkNamedDigest <$> parseHashType <*> parseHash
 
-parseHashType :: Parser Data.Text.Text
+parseHashType :: Parser Text
 parseHashType = decodeUtf8 <$> ("sha256" <|> "sha512" <|> "sha1" <|> "md5") <* (":" <|> "-")
 
-parseHash :: Parser Data.Text.Text
+parseHash :: Parser Text
 parseHash = decodeUtf8 <$> takeWhile1 (/= ':')
diff --git a/src/System/Nix/Store/Remote/Util.hs b/src/System/Nix/Store/Remote/Util.hs
--- a/src/System/Nix/Store/Remote/Util.hs
+++ b/src/System/Nix/Store/Remote/Util.hs
@@ -1,5 +1,4 @@
 {-# LANGUAGE OverloadedStrings   #-}
-{-# LANGUAGE TypeApplications    #-}
 {-# LANGUAGE RecordWildCards     #-}
 module System.Nix.Store.Remote.Util where
 
@@ -10,7 +9,6 @@
 import           Data.Binary.Get
 import           Data.Binary.Put
 import           Data.Text                 (Text)
-import qualified Data.Text                 as T
 import qualified Data.Text.Encoding        as T
 import qualified Data.Text.Lazy            as TL
 import qualified Data.Text.Lazy.Encoding   as TL
@@ -49,12 +47,12 @@
   where
     sockGet8 :: MonadStore (Maybe BSC.ByteString)
     sockGet8 = do
-      soc <- storeSocket <$> ask
+      soc <- asks storeSocket
       liftIO $ Just <$> recv soc 8
 
 sockPut :: Put -> MonadStore ()
 sockPut p = do
-  soc <- storeSocket <$> ask
+  soc <- asks storeSocket
   liftIO $ sendAll soc $ BSL.toStrict $ runPut p
 
 sockGet :: Get a -> MonadStore a
@@ -109,7 +107,7 @@
 putText = putByteStringLen . textToBSL
 
 putTexts :: [Text] -> Put
-putTexts = putByteStrings . (map textToBSL)
+putTexts = putByteStrings . map textToBSL
 
 getPath :: FilePath -> Get (Either String StorePath)
 getPath sd = parsePath sd <$> getByteStringLen
