diff --git a/pa-json.cabal b/pa-json.cabal
--- a/pa-json.cabal
+++ b/pa-json.cabal
@@ -1,7 +1,7 @@
 cabal-version:      3.0
 -- !!! ATTN: file autogenerated from pa-template.cabal.mustache on toplevel !!!
 name:               pa-json
-version:            0.1.0.0
+version:            0.1.1.0
 synopsis:           Our JSON parsers/encoders
 description:        The interface of `aeson` is unfortunately extremely … suboptimal. Here’s some wrappers trying to improve the situation, which we use internally.
 license:            BSD-3-Clause
@@ -77,7 +77,9 @@
       pa-label,
       pa-error-tree,
       aeson,
+      aeson-pretty,
       aeson-better-errors,
+      bytestring,
       containers,
       scientific,
       time,
diff --git a/src/Json/Enc.hs b/src/Json/Enc.hs
--- a/src/Json/Enc.hs
+++ b/src/Json/Enc.hs
@@ -4,15 +4,21 @@
 module Json.Enc where
 
 import Data.Aeson (Encoding, Value (..))
+import Data.Aeson qualified as Json
+import Data.Aeson.Encode.Pretty qualified as Aeson.Pretty
 import Data.Aeson.Encoding qualified as AesonEnc
+import Data.Aeson.Encoding qualified as Json.Enc
+import Data.Aeson.Encoding qualified as Json.Encoding
 import Data.Aeson.Key qualified as Key
 import Data.Aeson.KeyMap (KeyMap)
 import Data.Aeson.KeyMap qualified as KeyMap
+import Data.ByteString.Lazy qualified as LazyBytes
 import Data.Int (Int64)
 import Data.Map.Strict qualified as Map
 import Data.Scientific
 import Data.String (IsString (fromString))
 import Data.Text.Lazy qualified as Lazy
+import Data.Text.Lazy.Builder qualified as Text.Builder
 import Data.Time qualified as Time
 import Data.Time.Format.ISO8601 qualified as ISO8601
 import GHC.TypeLits
@@ -25,6 +31,9 @@
 newtype Enc = Enc {unEnc :: Encoding}
   deriving (Num, Fractional) via (NumLiteralOnly "Enc" Enc)
 
+instance Show Enc where
+  show e = e.unEnc & Json.Encoding.encodingToLazyByteString & bytesToTextUtf8UnsafeLazy & show
+
 -- | You can create an @Enc any@ that renders an 'Aeson.String' value with @OverloadedStrings@.
 instance IsString Enc where
   fromString = Enc . AesonEnc.string
@@ -39,6 +48,34 @@
 instance RationalLiteral Enc where
   rationalLiteral r = Enc $ AesonEnc.scientific (r & fromRational @Scientific)
 
+-- | Convert an 'Enc' to a strict UTF8-bytestring which is valid JSON (minified).
+encToBytesUtf8 :: Enc -> ByteString
+encToBytesUtf8 enc = enc & encToBytesUtf8Lazy & toStrictBytes
+
+-- | Convert an 'Enc' to a lazy UTF8-bytestring which is valid JSON (minified).
+encToBytesUtf8Lazy :: Enc -> LazyBytes.ByteString
+encToBytesUtf8Lazy enc = enc.unEnc & Json.Enc.encodingToLazyByteString
+
+-- | Convert an 'Enc' to a strict Text which is valid JSON (prettyfied).
+encToTextPretty :: Enc -> Text
+encToTextPretty enc =
+  enc
+    & encToTextPrettyLazy
+    & toStrict
+
+-- | Convert an 'Enc' to a lazy Text which is valid JSON (prettyfied).
+encToTextPrettyLazy :: Enc -> Lazy.Text
+encToTextPrettyLazy enc =
+  enc
+    & encToBytesUtf8Lazy
+    & Json.decode @Json.Value
+    & annotate "the json parser can’t parse json encodings??"
+    & unwrapError
+    & Aeson.Pretty.encodePrettyToTextBuilder
+    & Text.Builder.toLazyText
+
+-- | * Encoders
+
 -- | Embed an 'Encoding' verbatim (it’s a valid JSON value)
 encoding :: Encoding -> Enc
 encoding = Enc
@@ -184,6 +221,8 @@
 utcTime :: Time.UTCTime -> Enc
 utcTime =
   text . stringToText . ISO8601.iso8601Show @Time.UTCTime
+
+-- | * Helpers
 
 -- | Implement this class if you want your type to only implement the part of 'Num'
 -- that allows creating them from Integer-literals, then derive Num via 'NumLiteralOnly':
