diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,11 @@
 `small-bytearray-builder` is now just a compatibility shim
 to ease the migration process.
 
+## 0.3.17.0 -- 2025-11-17
+
+* Add `hPut` to help with common case of pushing logs to stderr.
+* Add `ToBuilder` for `CInt`
+
 ## 0.3.16.3
 
 * Add support for building with GHC 9.10
diff --git a/bytebuild.cabal b/bytebuild.cabal
--- a/bytebuild.cabal
+++ b/bytebuild.cabal
@@ -1,6 +1,6 @@
 cabal-version:   2.2
 name:            bytebuild
-version:         0.3.16.3
+version:         0.3.17.0
 synopsis:        Build byte arrays
 description:
   This is similar to the builder facilities provided by
@@ -28,7 +28,7 @@
 copyright:       2019 Andrew Martin
 category:        Data
 extra-doc-files: CHANGELOG.md
-tested-with:     GHC ==9.4.8 || ==9.6.5 || ==9.8.2 || ==9.10.1
+tested-with:     GHC ==9.6.7 || ==9.8.4 || ==9.10.2 || ==9.12.1
 
 common build-settings
   default-language: Haskell2010
@@ -57,7 +57,7 @@
 
   reexported-modules: Data.Bytes.Chunks
   build-depends:
-    , base                >=4.17.0.0 && <4.21
+    , base                >=4.17.0.0 && <4.22
     , byteslice           >=0.2.6    && <0.3
     , bytestring          >=0.10.8.2 && <0.13
     , haskell-src-meta    >=0.8.13
diff --git a/src/Data/Bytes/Builder.hs b/src/Data/Bytes/Builder.hs
--- a/src/Data/Bytes/Builder.hs
+++ b/src/Data/Bytes/Builder.hs
@@ -167,6 +167,9 @@
 
     -- * Rebuild
   , rebuild
+    
+    -- * IO
+  , hPut
   ) where
 
 import Prelude hiding (replicate)
@@ -209,6 +212,7 @@
 import GHC.ST (ST (ST))
 import GHC.Word (Word (W#), Word8 (W8#))
 import Numeric.Natural (Natural)
+import System.IO (Handle)
 
 import qualified Compat as C
 
@@ -217,6 +221,7 @@
 import qualified Data.Bytes as Bytes
 import qualified Data.Bytes.Builder.Bounded as Bounded
 import qualified Data.Bytes.Builder.Bounded.Unsafe as UnsafeBounded
+import qualified Data.Bytes.Chunks as Chunks
 import qualified Data.Primitive as PM
 import qualified Data.Text.Short as TS
 import qualified GHC.Exts as Exts
@@ -1557,3 +1562,7 @@
 {-# INLINE rebuild #-}
 rebuild (Builder f) = Builder $ oneShot $ \a -> oneShot $ \b -> oneShot $ \c -> oneShot $ \d -> oneShot $ \e ->
   f a b c d e
+
+hPut :: Handle -> Builder -> IO ()
+{-# NOINLINE hPut #-}
+hPut h = Chunks.hPut h . run 256
diff --git a/src/Data/Bytes/Builder/Class.hs b/src/Data/Bytes/Builder/Class.hs
--- a/src/Data/Bytes/Builder/Class.hs
+++ b/src/Data/Bytes/Builder/Class.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE FlexibleInstances #-}
+{-# LANGUAGE TypeApplications #-}
 
 module Data.Bytes.Builder.Class
   ( ToBuilder (..)
@@ -11,6 +12,7 @@
 import Data.Primitive.ByteArray (ByteArray)
 import Data.Text.Short (ShortText)
 import Data.Word
+import Foreign.C.Types (CInt)
 
 import qualified Data.Bytes.Builder as Builder
 
@@ -93,3 +95,6 @@
 -- | uses @doubleDec@
 instance ToBuilder Double where
   toBuilder = Builder.doubleDec
+
+instance ToBuilder CInt where
+  toBuilder = Builder.int64Dec . fromIntegral @CInt @Int64
