diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,8 +1,12 @@
+## [0.2.1] - 2022-11-05
+
+- Add `String.ANSI` module
+
 ## [0.2.0] - 2022-10-28
 
 - Drop the `Data` prefix from `Data.Text.ANSI` and `Data.Text.Builder.ANSI` modules
 - Rename `Text.Builder.ANSI` to `Text.Lazy.Builder.ANSI`
-- Add `Text.Builder.ANSI` back, but based on `text-builder`'s builder instead of `text`'s builder.
+- Add `Text.Builder.ANSI` back, but based on `text-builder`'s builder instead of `text`'s builder
 
 ## [0.1.1] - 2021-01-07
 
diff --git a/src/String/ANSI.hs b/src/String/ANSI.hs
new file mode 100644
--- /dev/null
+++ b/src/String/ANSI.hs
@@ -0,0 +1,345 @@
+module String.ANSI
+  ( -- $intro
+
+    -- * Foreground color
+    black,
+    red,
+    green,
+    yellow,
+    blue,
+    magenta,
+    cyan,
+    white,
+    brightBlack,
+    brightRed,
+    brightGreen,
+    brightYellow,
+    brightBlue,
+    brightMagenta,
+    brightCyan,
+    brightWhite,
+    rgb,
+
+    -- * Background color
+    blackBg,
+    redBg,
+    greenBg,
+    yellowBg,
+    blueBg,
+    magentaBg,
+    cyanBg,
+    whiteBg,
+    brightBlackBg,
+    brightRedBg,
+    brightGreenBg,
+    brightYellowBg,
+    brightBlueBg,
+    brightMagentaBg,
+    brightCyanBg,
+    brightWhiteBg,
+    rgbBg,
+
+    -- * Style
+    bold,
+    faint,
+    italic,
+    underline,
+    doubleUnderline,
+    strikethrough,
+    frame,
+    encircle,
+    overline,
+  )
+where
+
+import qualified Data.Text as Text
+import Data.Word (Word8)
+import Text.Builder (Builder)
+import qualified Text.Builder as Builder
+import qualified Text.Builder.ANSI as Builder.ANSI
+
+-- $intro
+--
+-- Text styling for ANSI terminals using SGR codes, as defined by the
+-- <https://www.ecma-international.org/publications/files/ECMA-ST/Ecma-048.pdf ECMA-48>
+-- standard.
+--
+-- Supports foreground\/background color, bold\/faint intensity, italic,
+-- single\/double underline, strikethrough, frame, encircle, and overline escape
+-- sequences. Some styles may not work on your terminal.
+--
+-- Also features terminal detection, so redirecting styled output to a file will
+-- automatically strip the ANSI escape sequences.
+
+-- | Black foreground.
+black :: String -> String
+black =
+  lift Builder.ANSI.black
+{-# INLINE black #-}
+
+-- | Red foreground.
+red :: String -> String
+red =
+  lift Builder.ANSI.red
+{-# INLINE red #-}
+
+-- | Green foreground.
+green :: String -> String
+green =
+  lift Builder.ANSI.green
+{-# INLINE green #-}
+
+-- | Yellow foreground.
+yellow :: String -> String
+yellow =
+  lift Builder.ANSI.yellow
+{-# INLINE yellow #-}
+
+-- | Blue foreground.
+blue :: String -> String
+blue =
+  lift Builder.ANSI.blue
+{-# INLINE blue #-}
+
+-- | Magenta foreground.
+magenta :: String -> String
+magenta =
+  lift Builder.ANSI.magenta
+{-# INLINE magenta #-}
+
+-- | Cyan foreground.
+cyan :: String -> String
+cyan =
+  lift Builder.ANSI.cyan
+{-# INLINE cyan #-}
+
+-- | White foreground.
+white :: String -> String
+white =
+  lift Builder.ANSI.white
+{-# INLINE white #-}
+
+-- | Bright black foreground.
+brightBlack :: String -> String
+brightBlack =
+  lift Builder.ANSI.brightBlack
+{-# INLINE brightBlack #-}
+
+-- | Bright red foreground.
+brightRed :: String -> String
+brightRed =
+  lift Builder.ANSI.brightRed
+{-# INLINE brightRed #-}
+
+-- | Bright green foreground.
+brightGreen :: String -> String
+brightGreen =
+  lift Builder.ANSI.brightGreen
+{-# INLINE brightGreen #-}
+
+-- | Bright yellow foreground.
+brightYellow :: String -> String
+brightYellow =
+  lift Builder.ANSI.brightYellow
+{-# INLINE brightYellow #-}
+
+-- | Bright blue foreground.
+brightBlue :: String -> String
+brightBlue =
+  lift Builder.ANSI.brightBlue
+{-# INLINE brightBlue #-}
+
+-- | Bright magenta foreground.
+brightMagenta :: String -> String
+brightMagenta =
+  lift Builder.ANSI.brightMagenta
+{-# INLINE brightMagenta #-}
+
+-- | Bright cyan foreground.
+brightCyan :: String -> String
+brightCyan =
+  lift Builder.ANSI.brightCyan
+{-# INLINE brightCyan #-}
+
+-- | Bright white foreground.
+brightWhite :: String -> String
+brightWhite =
+  lift Builder.ANSI.brightWhite
+{-# INLINE brightWhite #-}
+
+-- | RGB foreground.
+rgb :: Word8 -> Word8 -> Word8 -> String -> String
+rgb r g b =
+  lift (Builder.ANSI.rgb r g b)
+{-# INLINE rgb #-}
+
+-- | Black background.
+blackBg :: String -> String
+blackBg =
+  lift Builder.ANSI.blackBg
+{-# INLINE blackBg #-}
+
+-- | Red background.
+redBg :: String -> String
+redBg =
+  lift Builder.ANSI.redBg
+{-# INLINE redBg #-}
+
+-- | Green background.
+greenBg :: String -> String
+greenBg =
+  lift Builder.ANSI.greenBg
+{-# INLINE greenBg #-}
+
+-- | Yellow background.
+yellowBg :: String -> String
+yellowBg =
+  lift Builder.ANSI.yellowBg
+{-# INLINE yellowBg #-}
+
+-- | Blue background.
+blueBg :: String -> String
+blueBg =
+  lift Builder.ANSI.blueBg
+{-# INLINE blueBg #-}
+
+-- | Magenta background.
+magentaBg :: String -> String
+magentaBg =
+  lift Builder.ANSI.magentaBg
+{-# INLINE magentaBg #-}
+
+-- | Cyan background.
+cyanBg :: String -> String
+cyanBg =
+  lift Builder.ANSI.cyanBg
+{-# INLINE cyanBg #-}
+
+-- | White background.
+whiteBg :: String -> String
+whiteBg =
+  lift Builder.ANSI.whiteBg
+{-# INLINE whiteBg #-}
+
+-- | Bright black background.
+brightBlackBg :: String -> String
+brightBlackBg =
+  lift Builder.ANSI.brightBlackBg
+{-# INLINE brightBlackBg #-}
+
+-- | Bright red background.
+brightRedBg :: String -> String
+brightRedBg =
+  lift Builder.ANSI.brightRedBg
+{-# INLINE brightRedBg #-}
+
+-- | Bright green background.
+brightGreenBg :: String -> String
+brightGreenBg =
+  lift Builder.ANSI.brightGreenBg
+{-# INLINE brightGreenBg #-}
+
+-- | Bright yellow background.
+brightYellowBg :: String -> String
+brightYellowBg =
+  lift Builder.ANSI.brightYellowBg
+{-# INLINE brightYellowBg #-}
+
+-- | Bright blue background.
+brightBlueBg :: String -> String
+brightBlueBg =
+  lift Builder.ANSI.brightBlueBg
+{-# INLINE brightBlueBg #-}
+
+-- | Bright magenta background.
+brightMagentaBg :: String -> String
+brightMagentaBg =
+  lift Builder.ANSI.brightMagentaBg
+{-# INLINE brightMagentaBg #-}
+
+-- | Bright cyan background.
+brightCyanBg :: String -> String
+brightCyanBg =
+  lift Builder.ANSI.brightCyanBg
+{-# INLINE brightCyanBg #-}
+
+-- | Bright white background.
+brightWhiteBg :: String -> String
+brightWhiteBg =
+  lift Builder.ANSI.brightWhiteBg
+{-# INLINE brightWhiteBg #-}
+
+-- | RGB background.
+rgbBg :: Word8 -> Word8 -> Word8 -> String -> String
+rgbBg r g b =
+  lift (Builder.ANSI.rgbBg r g b)
+{-# INLINE rgbBg #-}
+
+-- | __Bold__ style (high intensity).
+bold :: String -> String
+bold =
+  lift Builder.ANSI.bold
+{-# INLINE bold #-}
+
+-- | Faint style (low intensity).
+faint :: String -> String
+faint =
+  lift Builder.ANSI.faint
+{-# INLINE faint #-}
+
+-- | /Italic/ style.
+italic :: String -> String
+italic =
+  lift Builder.ANSI.italic
+{-# INLINE italic #-}
+
+-- | U̲n̲d̲e̲r̲l̲i̲n̲e̲ style.
+underline :: String -> String
+underline =
+  lift Builder.ANSI.underline
+{-# INLINE underline #-}
+
+-- | D̳o̳u̳b̳l̳e̳ ̳u̳n̳d̳e̳r̳l̳i̳n̳e̳ style.
+doubleUnderline :: String -> String
+doubleUnderline =
+  lift Builder.ANSI.doubleUnderline
+{-# INLINE doubleUnderline #-}
+
+-- | S̶t̶r̶i̶k̶e̶t̶h̶r̶o̶u̶g̶h̶ style.
+strikethrough :: String -> String
+strikethrough =
+  lift Builder.ANSI.strikethrough
+{-# INLINE strikethrough #-}
+
+-- | Frame style.
+frame :: String -> String
+frame =
+  lift Builder.ANSI.frame
+{-# INLINE frame #-}
+
+-- | Encircle style.
+encircle :: String -> String
+encircle =
+  lift Builder.ANSI.encircle
+{-# INLINE encircle #-}
+
+-- | O̅v̅e̅r̅l̅i̅n̅e̅ style.
+overline :: String -> String
+overline =
+  lift Builder.ANSI.overline
+{-# INLINE overline #-}
+
+--
+
+lift :: (Builder -> Builder) -> String -> String
+lift f =
+  Text.unpack . Builder.run . f . Builder.string
+-- Don't inline before phase 2
+{-# NOINLINE [2] lift #-}
+
+-- Collapse lift/lift to a single lift before phase 2
+{-# RULES
+"lift/lift" [~2] forall f g s.
+  lift f (lift g s) =
+    lift (f . g) s
+  #-}
diff --git a/text-ansi.cabal b/text-ansi.cabal
--- a/text-ansi.cabal
+++ b/text-ansi.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name: text-ansi
-version: 0.2.0
+version: 0.2.1
 category: Data
 synopsis: Text styling for ANSI terminals.
 description:
@@ -41,6 +41,7 @@
   default-language:
     Haskell2010
   exposed-modules:
+    String.ANSI
     Text.ANSI
     Text.Builder.ANSI
     Text.Lazy.Builder.ANSI
