diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,11 @@
 # ChangeLog
 
+## 0.7.8
+
+* Adds a `Store` instance for `Natural`. See [#154][].
+
+[#154]: https://github.com/mgsloan/store/issues/154
+
 ## 0.7.7
 
 * Test now compiles with `smallcheck >= 1.2` and `base >= 4.14`.
diff --git a/src/Data/Store/Internal.hs b/src/Data/Store/Internal.hs
--- a/src/Data/Store/Internal.hs
+++ b/src/Data/Store/Internal.hs
@@ -135,6 +135,7 @@
 import           Language.Haskell.TH.ReifyMany
 import           Language.Haskell.TH.Syntax
 import           Network.Socket (AddrInfo)
+import           Numeric.Natural (Natural)
 import           Prelude
 import           TH.Derive
 
@@ -711,6 +712,17 @@
   where go !acc I.None = acc
         go !acc (I.Some _ ds) = go (acc + 1) ds
 #endif
+
+-- Piggybacks off of the Integer instance
+
+instance Store Natural where
+  size = contramap fromIntegral (size :: Size Integer)
+  poke = poke . toInteger
+  peek = do
+      x <- peek :: Peek Integer
+      if x < 0
+          then peekException "Encountered negative integer when expecting a Natural"
+          else return $ fromIntegral x
 
 -- instance Store GHC.Fingerprint.Types.Fingerprint where
 
diff --git a/store.cabal b/store.cabal
--- a/store.cabal
+++ b/store.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 0d992daa83559baa310905729749defd6734060ce7c1b6bdcebee8b782a81f0d
+-- hash: 15f2b9eaacfa66b2ffec07be091687b82f176b78e38bfd203f2e3e38d02bfa33
 
 name:           store
-version:        0.7.7
+version:        0.7.8
 synopsis:       Fast binary serialization
 category:       Serialization, Data
 homepage:       https://github.com/fpco/store#readme
diff --git a/test/Data/StoreSpec.hs b/test/Data/StoreSpec.hs
--- a/test/Data/StoreSpec.hs
+++ b/test/Data/StoreSpec.hs
@@ -64,6 +64,7 @@
 import           Language.Haskell.TH
 import           Language.Haskell.TH.Syntax
 import           Network.Socket
+import           Numeric.Natural (Natural)
 import           Prelude
 import           System.Clock (TimeSpec)
 import           System.Posix.Types
@@ -139,11 +140,13 @@
               ,  ''CSUSeconds, ''CFloat, ''CDouble
               ] ++
 #endif
-#ifdef mingw32_HOST_OS
-              []
-#else
-              [ ''CSpeed, ''CCc ]
+#if !MIN_VERSION_smallcheck(1,1,3)
+              [ ''Natural ] ++
 #endif
+#ifndef mingw32_HOST_OS
+              [ ''CSpeed, ''CCc ] ++
+#endif
+              []
          f n = [d| instance Monad m => Serial m $(conT n) where
                       series = generate (\_ -> [0, 1]) |]
      concat <$> mapM f ns)
@@ -456,7 +459,11 @@
         (decodeEx bs :: HashMap Int ()) `shouldBe` m
         evaluate (decodeEx bs :: Map Int ()) `shouldThrow` isUnexpectedMarkerException
         evaluate (decodeEx bs :: IntMap ()) `shouldThrow` isUnexpectedMarkerException
+    it "Expects decode of negative integer as a natural to throw PeekException" $ do
+        evaluate (decodeEx (encode ((-5) :: Integer)) :: Natural)
+            `shouldThrow` isNegativeNaturalException
 
+
 isPokeException :: Test.Hspec.Selector PokeException
 isPokeException = const True
 
@@ -469,3 +476,7 @@
 isUnexpectedMarkerException :: Test.Hspec.Selector PeekException
 isUnexpectedMarkerException (PeekException _ t) =
     "Expected marker for ascending Map / IntMap: " `T.isPrefixOf` t
+
+isNegativeNaturalException :: Test.Hspec.Selector PeekException
+isNegativeNaturalException (PeekException _ t) =
+    "Encountered negative integer when expecting a Natural" `T.isPrefixOf` t
