diff --git a/shell-conduit.cabal b/shell-conduit.cabal
--- a/shell-conduit.cabal
+++ b/shell-conduit.cabal
@@ -1,5 +1,5 @@
 name:                shell-conduit
-version:             4.3
+version:             4.4
 synopsis:            Write shell scripts with Conduit
 description:         Write shell scripts with Conduit. See "Data.Conduit.Shell" for documentation.
 license:             BSD3
diff --git a/src/Data/Conduit/Shell.hs b/src/Data/Conduit/Shell.hs
--- a/src/Data/Conduit/Shell.hs
+++ b/src/Data/Conduit/Shell.hs
@@ -97,6 +97,8 @@
   ,shell
   ,proc
   ,conduit
+  ,text
+  ,bytes
   -- * Composition of segments
   ,($|)
   ,Segment
@@ -114,7 +116,6 @@
 import Data.Conduit.Shell.Process
 import Data.Conduit.Shell.Types
 import Data.Conduit.Shell.Variadic
-import qualified Data.Text.Encoding as T
 
 -- $exports
 --
diff --git a/src/Data/Conduit/Shell/Process.hs b/src/Data/Conduit/Shell/Process.hs
--- a/src/Data/Conduit/Shell/Process.hs
+++ b/src/Data/Conduit/Shell/Process.hs
@@ -9,9 +9,13 @@
 module Data.Conduit.Shell.Process
   (-- * Running scripts
    run
-   -- * Running processes
+   -- * Conduit types
+  ,text
+  ,bytes
+  -- * General conduits
   ,conduit
   ,conduitEither
+  -- * Running processes
   ,Data.Conduit.Shell.Process.shell
   ,Data.Conduit.Shell.Process.proc
   ,($|)
@@ -27,11 +31,15 @@
 import           Control.Exception
 import           Control.Monad
 import           Control.Monad.IO.Class
+import           Control.Monad.Trans.Resource
 import           Data.ByteString (ByteString)
 import qualified Data.ByteString as S
 import           Data.Conduit
 import           Data.Conduit.Binary
 import qualified Data.Conduit.List as CL
+import           Data.Conduit.Text (Codec)
+import qualified Data.Conduit.Text as T
+import           Data.Text (Text)
 import           Data.Typeable
 import           System.Exit
 import           System.IO
@@ -155,6 +163,14 @@
 ($|) :: Segment () -> Segment b -> Segment b
 x $| y = x `fuseSegment` y
 infixl 0 $|
+
+-- | Work on the stream as 'Text' values from UTF-8.
+text :: (r ~ (),m ~ IO) => ConduitM Text Text m r -> Segment r
+text conduit = bytes (T.decodeUtf8 $= conduit $= T.encodeUtf8)
+
+-- | Lift a conduit into a segment.
+bytes :: (a ~ ByteString,m ~ IO) => ConduitM a ByteString m r -> Segment r
+bytes f = SegmentConduit (f `fuseUpstream` CL.map toChunk)
 
 -- | Lift a conduit into a segment.
 conduit :: (a ~ ByteString,m ~ IO) => ConduitM a ByteString m r -> Segment r
