diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,13 @@
+## 0.0.14.0
+
+* Add `hGetLine` and `hIsEOF` to `Bluefin.System.IO`
+
+* Add `Bluefin.HandleReader`
+
+## 0.0.13.0
+
+* No release
+
 ## 0.0.12.0
 
 * Add `asks` and `local` to `Bluefin.Reader`
diff --git a/bluefin.cabal b/bluefin.cabal
--- a/bluefin.cabal
+++ b/bluefin.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               bluefin
-version:            0.0.12.1
+version:            0.0.14.0
 license:            MIT
 license-file:       LICENSE
 author:             Tom Ellis
@@ -27,6 +27,7 @@
       Bluefin.EarlyReturn,
       Bluefin.Eff,
       Bluefin.Exception,
+      Bluefin.HandleReader,
       Bluefin.IO,
       Bluefin.Jump,
       Bluefin.Pipes,
@@ -38,6 +39,6 @@
       Bluefin.System.IO,
       Bluefin.Writer,
     build-depends:
-      bluefin-internal >= 0.0.12.0 && < 0.1
+      bluefin-internal >= 0.0.13.0 && < 0.1
     hs-source-dirs:   src
     default-language: Haskell2010
diff --git a/src/Bluefin/HandleReader.hs b/src/Bluefin/HandleReader.hs
new file mode 100644
--- /dev/null
+++ b/src/Bluefin/HandleReader.hs
@@ -0,0 +1,12 @@
+module Bluefin.HandleReader
+  (-- * Handle
+   HandleReader,
+   -- * Handlers
+   runHandleReader,
+   -- * Effectful operations
+   askHandle,
+   localHandle,
+  )
+  where
+
+import Bluefin.Internal
diff --git a/src/Bluefin/System/IO.hs b/src/Bluefin/System/IO.hs
--- a/src/Bluefin/System/IO.hs
+++ b/src/Bluefin/System/IO.hs
@@ -1,4 +1,4 @@
--- | A safer interface to "System.IO.Handle"
+-- | A safer interface to @System.IO.'System.IO.Handle'@
 
 module Bluefin.System.IO
   ( -- * Handle
@@ -11,6 +11,8 @@
     hPutChar,
     hPutStr,
     hPutStrLn,
+    hGetLine,
+    hIsEOF,
     hFlush,
 
     -- * Unsafe
