diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,12 @@
 # Changelog
 
+## [0.11.0.0] - 2022-06-28
+
+### Changed
+
+* `printOutputSpecForest` now uses `Data.Text.Lazy.IO` to output the report, so it will try to respect the system's locale.
+* `renderResultReport` now outputs a `Text.Builder` instead of a `ByteString.Builder` and a newline at the end.
+
 ## [0.10.1.0] - 2022-06-04
 
 ### Changed
diff --git a/output-test/Spec.hs b/output-test/Spec.hs
--- a/output-test/Spec.hs
+++ b/output-test/Spec.hs
@@ -9,10 +9,10 @@
 import Control.Exception
 import Control.Monad
 import Data.ByteString (ByteString)
-import qualified Data.ByteString.Builder as SBB
-import qualified Data.ByteString.Lazy as LB
 import Data.List
 import Data.Text (Text)
+import qualified Data.Text.Lazy as LT
+import qualified Data.Text.Lazy.Builder as TLB
 import System.Exit
 import System.Random
 import Test.QuickCheck
@@ -144,9 +144,9 @@
 
     describe "outputResultForest" $ do
       it "outputs the same as last time" $ do
-        pureGoldenByteStringFile
+        pureGoldenTextFile
           "test_resources/output.golden"
-          (LB.toStrict $ SBB.toLazyByteString $ renderResultReport defaultSettings With24BitColours (Timed [] 0))
+          (LT.toStrict $ TLB.toLazyText $ renderResultReport defaultSettings With24BitColours (Timed [] 0))
 
   doNotRandomiseExecutionOrder $
     describe "Around" $
diff --git a/src/Test/Syd/OptParse.hs b/src/Test/Syd/OptParse.hs
--- a/src/Test/Syd/OptParse.hs
+++ b/src/Test/Syd/OptParse.hs
@@ -14,7 +14,6 @@
 import Data.Maybe
 import Data.Text (Text)
 import qualified Data.Text as T
-import qualified Data.Text.Encoding as TE
 import qualified Env
 import GHC.Generics (Generic)
 import Options.Applicative as OptParse
@@ -410,7 +409,7 @@
         [ Env.helpDoc environmentParser,
           "",
           "Configuration file format:",
-          T.unpack (TE.decodeUtf8 (renderColouredSchemaViaCodec @Configuration))
+          T.unpack (renderColouredSchemaViaCodec @Configuration)
         ]
 
 -- | The flags that are common across commands.
diff --git a/src/Test/Syd/Output.hs b/src/Test/Syd/Output.hs
--- a/src/Test/Syd/Output.hs
+++ b/src/Test/Syd/Output.hs
@@ -8,11 +8,7 @@
 module Test.Syd.Output where
 
 import Control.Exception
-import Control.Monad.Reader
 import Data.Algorithm.Diff
-import Data.ByteString.Builder (Builder)
-import qualified Data.ByteString.Builder as SBB
-import qualified Data.ByteString.Char8 as SB8
 import qualified Data.List as L
 import Data.List.Split (splitWhen)
 import Data.Map (Map)
@@ -20,6 +16,9 @@
 import Data.Maybe
 import Data.Text (Text)
 import qualified Data.Text as T
+import qualified Data.Text.Lazy.Builder as LTB
+import qualified Data.Text.Lazy.Builder as Text
+import qualified Data.Text.Lazy.IO as LTIO
 import Data.Word
 import GHC.Stack
 import Safe
@@ -34,16 +33,12 @@
 printOutputSpecForest :: Settings -> Timed ResultForest -> IO ()
 printOutputSpecForest settings results = do
   tc <- deriveTerminalCapababilities settings
-
-  forM_ (outputResultReport settings results) $ \chunks -> do
-    putChunksWith tc chunks
-    SB8.putStrLn ""
+  LTIO.putStr $ LTB.toLazyText $ renderResultReport settings tc results
 
-renderResultReport :: Settings -> TerminalCapabilities -> Timed ResultForest -> Builder
+renderResultReport :: Settings -> TerminalCapabilities -> Timed ResultForest -> Text.Builder
 renderResultReport settings tc rf =
   mconcat $
-    L.intersperse (SBB.char7 '\n') $
-      map (renderChunks tc) (outputResultReport settings rf)
+    map (\line -> renderChunksBuilder tc line <> "\n") (outputResultReport settings rf)
 
 outputResultReport :: Settings -> Timed ResultForest -> [[Chunk]]
 outputResultReport settings trf@(Timed rf _) =
diff --git a/src/Test/Syd/Runner.hs b/src/Test/Syd/Runner.hs
--- a/src/Test/Syd/Runner.hs
+++ b/src/Test/Syd/Runner.hs
@@ -15,7 +15,7 @@
 import Control.Concurrent (getNumCapabilities)
 import Control.Monad
 import Control.Monad.IO.Class
-import qualified Data.ByteString.Char8 as SB8
+import qualified Data.Text.IO as TIO
 import System.Environment
 import System.Mem (performGC)
 import Test.Syd.Def
@@ -50,8 +50,8 @@
       when (i == 1) $ do
         let outputLine :: [Chunk] -> IO ()
             outputLine lineChunks = liftIO $ do
-              putChunksWith tc lineChunks
-              SB8.putStrLn ""
+              putChunksLocaleWith tc lineChunks
+              TIO.putStrLn ""
         mapM_
           ( outputLine
               . (: [])
diff --git a/src/Test/Syd/Runner/Asynchronous.hs b/src/Test/Syd/Runner/Asynchronous.hs
--- a/src/Test/Syd/Runner/Asynchronous.hs
+++ b/src/Test/Syd/Runner/Asynchronous.hs
@@ -12,12 +12,12 @@
 import Control.Concurrent.Async
 import Control.Exception
 import Control.Monad.Reader
-import qualified Data.ByteString.Char8 as SB8
 import Data.IORef
 import Data.Maybe
 import Data.Set (Set)
 import qualified Data.Set as S
 import qualified Data.Text as T
+import qualified Data.Text.IO as TIO
 import Test.QuickCheck.IO ()
 import Test.Syd.HList
 import Test.Syd.OptParse
@@ -116,8 +116,8 @@
 
   let outputLine :: [Chunk] -> IO ()
       outputLine lineChunks = liftIO $ do
-        putChunksWith tc lineChunks
-        SB8.putStrLn ""
+        putChunksLocaleWith tc lineChunks
+        TIO.putStrLn ""
 
       treeWidth :: Int
       treeWidth = specForestWidth handleForest
diff --git a/src/Test/Syd/Runner/Synchronous.hs b/src/Test/Syd/Runner/Synchronous.hs
--- a/src/Test/Syd/Runner/Synchronous.hs
+++ b/src/Test/Syd/Runner/Synchronous.hs
@@ -10,8 +10,8 @@
 
 import Control.Exception
 import Control.Monad.IO.Class
-import qualified Data.ByteString.Char8 as SB8
 import qualified Data.Text as T
+import qualified Data.Text.IO as TIO
 import Test.Syd.HList
 import Test.Syd.OptParse
 import Test.Syd.Output
@@ -64,8 +64,8 @@
   tc <- deriveTerminalCapababilities settings
   let outputLine :: [Chunk] -> IO ()
       outputLine lineChunks = liftIO $ do
-        putChunksWith tc lineChunks
-        SB8.putStrLn ""
+        putChunksLocaleWith tc lineChunks
+        TIO.putStrLn ""
       treeWidth :: Int
       treeWidth = specForestWidth testForest
   let pad :: Int -> [Chunk] -> [Chunk]
diff --git a/sydtest.cabal b/sydtest.cabal
--- a/sydtest.cabal
+++ b/sydtest.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           sydtest
-version:        0.10.1.0
+version:        0.11.0.0
 synopsis:       A modern testing framework for Haskell with good defaults and advanced testing features.
 description:    A modern testing framework for Haskell with good defaults and advanced testing features. Sydtest aims to make the common easy and the hard possible. See https://github.com/NorfairKing/sydtest#readme for more information.
 category:       Testing
@@ -67,7 +67,7 @@
     , QuickCheck
     , async
     , autodocodec
-    , autodocodec-yaml
+    , autodocodec-yaml >=0.2.0.0
     , base >=4.7 && <5
     , bytestring
     , containers
@@ -148,4 +148,5 @@
     , safe-coloured-text
     , stm
     , sydtest
+    , text
   default-language: Haskell2010
diff --git a/test/Test/Syd/GoldenSpec.hs b/test/Test/Syd/GoldenSpec.hs
--- a/test/Test/Syd/GoldenSpec.hs
+++ b/test/Test/Syd/GoldenSpec.hs
@@ -2,8 +2,8 @@
 
 module Test.Syd.GoldenSpec (spec) where
 
-import qualified Data.ByteString.Builder as SBB
-import qualified Data.ByteString.Lazy as LB
+import qualified Data.Text.Lazy as LT
+import qualified Data.Text.Lazy.Builder as LTB
 import Test.Syd
 import Test.Syd.OptParse
 import Text.Colour
@@ -12,8 +12,8 @@
 spec = do
   describe "outputResultForest" $ do
     it "outputs the same as last time" $ do
-      pureGoldenByteStringFile
+      pureGoldenTextFile
         "test_resources/output.golden"
-        (LB.toStrict $ SBB.toLazyByteString $ renderResultReport defaultSettings With24BitColours (Timed [] 0))
+        (LT.toStrict $ LTB.toLazyText $ renderResultReport defaultSettings With24BitColours (Timed [] 0))
   describe "defaultSettings" $ do
     it "is the same thing as last time" $ goldenPrettyShowInstance "test_resources/defaultSettings-show.golden" defaultSettings
diff --git a/test_resources/output.golden b/test_resources/output.golden
--- a/test_resources/output.golden
+++ b/test_resources/output.golden
@@ -7,3 +7,4 @@
   Failed:                       [32m0[m
   Sum of test runtimes:[33m         0.00 seconds[m
   Test suite took:     [33m         0.00 seconds[m
+
