diff --git a/LICENSE b/LICENSE
new file mode 100644
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,22 @@
+Copyright (c) 2025, Nikita Volkov
+
+Permission is hereby granted, free of charge, to any person
+obtaining a copy of this software and associated documentation
+files (the "Software"), to deal in the Software without
+restriction, including without limitation the rights to use,
+copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the
+Software is furnished to do so, subject to the following
+conditions:
+
+The above copyright notice and this permission notice shall be
+included in all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
+NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+OTHER DEALINGS IN THE SOFTWARE.
diff --git a/src/hspec/Main.hs b/src/hspec/Main.hs
new file mode 100644
--- /dev/null
+++ b/src/hspec/Main.hs
@@ -0,0 +1,37 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module Main (main) where
+
+import Data.Proxy (Proxy (..))
+import qualified Data.Text
+import qualified Data.Text.Lazy
+import qualified Data.Text.Lazy.Builder
+import qualified Main.Conversions.StrictBuilder
+import qualified Main.Conversions.StrictTextBuilder
+import Main.LawfulConversionsHspec
+import Test.Hspec
+import Test.QuickCheck.Arbitrary
+import Test.QuickCheck.Instances ()
+import TextBuilder (TextBuilder)
+import TextBuilderLawfulConversions ()
+import Prelude
+
+main :: IO ()
+main = hspec do
+  describe "Data.Text.Text" do
+    allIs (Proxy @Data.Text.Text) (Proxy @TextBuilder)
+
+  describe "Data.Text.Lazy.Text" do
+    allIs (Proxy @Data.Text.Lazy.Text) (Proxy @TextBuilder)
+
+  describe "Data.Text.Lazy.Builder.Builder" do
+    allIs (Proxy @Data.Text.Lazy.Builder.Builder) (Proxy @TextBuilder)
+
+  describe "Data.Text.Encoding.StrictBuilder" do
+    Main.Conversions.StrictBuilder.spec
+
+  describe "Data.Text.Encoding.StrictTextBuilder" do
+    Main.Conversions.StrictTextBuilder.spec
+
+instance Arbitrary Data.Text.Lazy.Builder.Builder where
+  arbitrary = Data.Text.Lazy.Builder.fromText <$> arbitrary
diff --git a/src/hspec/Main/Conversions/StrictBuilder.hs b/src/hspec/Main/Conversions/StrictBuilder.hs
new file mode 100644
--- /dev/null
+++ b/src/hspec/Main/Conversions/StrictBuilder.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module Main.Conversions.StrictBuilder (spec) where
+
+#if MIN_VERSION_text(2,0,2) && !MIN_VERSION_text(2,1,2)
+
+import Data.Function
+import Data.Proxy
+import qualified Data.Text.Encoding as TextEncoding
+import Main.LawfulConversionsHspec
+import Test.Hspec
+import Test.QuickCheck.Arbitrary
+import TextBuilder (TextBuilder)
+import Prelude
+
+spec :: Spec
+spec = allIs (Proxy @TextBuilder) (Proxy @TextEncoding.StrictBuilder)
+
+instance Eq TextEncoding.StrictBuilder where
+  a == b =
+    on (==) TextEncoding.strictBuilderToText a b
+
+instance Show TextEncoding.StrictBuilder where
+  showsPrec d =
+    showsPrec d . TextEncoding.strictBuilderToText
+
+instance Arbitrary TextEncoding.StrictBuilder where
+  arbitrary =
+    TextEncoding.textToStrictBuilder <$> arbitrary
+
+#else
+
+import Test.Hspec
+import Prelude
+
+spec :: Spec
+spec = pure ()
+
+#endif
diff --git a/src/hspec/Main/Conversions/StrictTextBuilder.hs b/src/hspec/Main/Conversions/StrictTextBuilder.hs
new file mode 100644
--- /dev/null
+++ b/src/hspec/Main/Conversions/StrictTextBuilder.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module Main.Conversions.StrictTextBuilder (spec) where
+
+#if MIN_VERSION_text(2,1,2)
+
+import Data.Function
+import Data.Proxy
+import qualified Data.Text.Encoding as TextEncoding
+import Main.LawfulConversionsHspec
+import Test.Hspec
+import Test.QuickCheck.Arbitrary
+import TextBuilder (TextBuilder)
+import Prelude
+
+spec :: Spec
+spec = allIs (Proxy @TextBuilder) (Proxy @TextEncoding.StrictTextBuilder)
+
+instance Eq TextEncoding.StrictTextBuilder where
+  a == b =
+    on (==) TextEncoding.strictBuilderToText a b
+
+instance Show TextEncoding.StrictTextBuilder where
+  showsPrec d =
+    showsPrec d . TextEncoding.strictBuilderToText
+
+instance Arbitrary TextEncoding.StrictTextBuilder where
+  arbitrary =
+    TextEncoding.textToStrictBuilder <$> arbitrary
+
+#else
+
+import Test.Hspec
+import Prelude
+
+spec :: Spec
+spec = pure ()
+
+#endif
diff --git a/src/hspec/Main/LawfulConversionsHspec.hs b/src/hspec/Main/LawfulConversionsHspec.hs
new file mode 100644
--- /dev/null
+++ b/src/hspec/Main/LawfulConversionsHspec.hs
@@ -0,0 +1,38 @@
+module Main.LawfulConversionsHspec where
+
+import Control.Monad (forM_)
+import Data.Proxy (Proxy (..))
+import qualified LawfulConversions
+import Test.Hspec
+import Test.Hspec.QuickCheck
+import Test.QuickCheck (Arbitrary)
+import Test.QuickCheck.Instances ()
+import TextBuilderLawfulConversions ()
+import Prelude
+
+isSome :: (LawfulConversions.IsSome a b, Eq a, Eq b, Show a, Show b, Arbitrary b) => Proxy a -> Proxy b -> Spec
+isSome a b = describe "IsSome" do
+  forM_ (LawfulConversions.isSomeProperties a b) \(name, property) ->
+    prop name property
+
+isMany :: (LawfulConversions.IsMany a b, Eq a, Eq b, Show a, Show b, Arbitrary b) => Proxy a -> Proxy b -> Spec
+isMany a b = describe "IsMany" do
+  forM_ (LawfulConversions.isManyProperties a b) \(name, property) ->
+    prop name property
+
+is :: (LawfulConversions.Is a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec
+is a b = describe "Is" do
+  forM_ (LawfulConversions.isProperties a b) \(name, property) ->
+    prop name property
+
+allIs :: (LawfulConversions.Is a b, Eq a, Eq b, Show a, Show b, Arbitrary a, Arbitrary b) => Proxy a -> Proxy b -> Spec
+allIs a b = do
+  describe "Forward" do
+    isSome a b
+    isMany a b
+    is a b
+
+  describe "Backward" do
+    isSome b a
+    isMany b a
+    is b a
diff --git a/src/library/TextBuilderLawfulConversions.hs b/src/library/TextBuilderLawfulConversions.hs
new file mode 100644
--- /dev/null
+++ b/src/library/TextBuilderLawfulConversions.hs
@@ -0,0 +1,7 @@
+module TextBuilderLawfulConversions () where
+
+import TextBuilderLawfulConversions.LazyBuilder ()
+import TextBuilderLawfulConversions.LazyText ()
+import TextBuilderLawfulConversions.StrictBuilder ()
+import TextBuilderLawfulConversions.StrictText ()
+import TextBuilderLawfulConversions.StrictTextBuilder ()
diff --git a/src/library/TextBuilderLawfulConversions/LazyBuilder.hs b/src/library/TextBuilderLawfulConversions/LazyBuilder.hs
new file mode 100644
--- /dev/null
+++ b/src/library/TextBuilderLawfulConversions/LazyBuilder.hs
@@ -0,0 +1,22 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module TextBuilderLawfulConversions.LazyBuilder where
+
+import qualified Data.Text.Lazy.Builder
+import LawfulConversions
+import TextBuilder
+import Prelude
+
+instance IsSome Data.Text.Lazy.Builder.Builder TextBuilder where
+  to = Data.Text.Lazy.Builder.fromText . toText
+
+instance IsSome TextBuilder Data.Text.Lazy.Builder.Builder where
+  to = lazyText . Data.Text.Lazy.Builder.toLazyText
+
+instance IsMany Data.Text.Lazy.Builder.Builder TextBuilder
+
+instance IsMany TextBuilder Data.Text.Lazy.Builder.Builder
+
+instance Is Data.Text.Lazy.Builder.Builder TextBuilder
+
+instance Is TextBuilder Data.Text.Lazy.Builder.Builder
diff --git a/src/library/TextBuilderLawfulConversions/LazyText.hs b/src/library/TextBuilderLawfulConversions/LazyText.hs
new file mode 100644
--- /dev/null
+++ b/src/library/TextBuilderLawfulConversions/LazyText.hs
@@ -0,0 +1,22 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module TextBuilderLawfulConversions.LazyText where
+
+import qualified Data.Text.Lazy
+import LawfulConversions
+import TextBuilder
+import Prelude
+
+instance IsSome Data.Text.Lazy.Text TextBuilder where
+  to = to . toText
+
+instance IsSome TextBuilder Data.Text.Lazy.Text where
+  to = lazyText
+
+instance IsMany Data.Text.Lazy.Text TextBuilder
+
+instance IsMany TextBuilder Data.Text.Lazy.Text
+
+instance Is Data.Text.Lazy.Text TextBuilder
+
+instance Is TextBuilder Data.Text.Lazy.Text
diff --git a/src/library/TextBuilderLawfulConversions/StrictBuilder.hs b/src/library/TextBuilderLawfulConversions/StrictBuilder.hs
new file mode 100644
--- /dev/null
+++ b/src/library/TextBuilderLawfulConversions/StrictBuilder.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module TextBuilderLawfulConversions.StrictBuilder where
+
+#if MIN_VERSION_text(2,0,2) && !MIN_VERSION_text(2,1,2)
+
+import Data.Functor
+import Data.Text.Internal.StrictBuilder
+import LawfulConversions
+import TextBuilder (TextBuilder)
+import qualified TextBuilderCore
+import Prelude
+
+instance IsSome StrictBuilder TextBuilder where
+  {-# INLINE to #-}
+  to (TextBuilderCore.TextBuilder size write) =
+    StrictBuilder
+      size
+      ( \array offset ->
+          write array offset $> ()
+      )
+
+instance IsSome TextBuilder StrictBuilder where
+  {-# INLINE to #-}
+  to (StrictBuilder size write) =
+    TextBuilderCore.TextBuilder
+      size
+      ( \array offset ->
+          write array offset $> offset + size
+      )
+
+instance IsMany StrictBuilder TextBuilder
+
+instance IsMany TextBuilder StrictBuilder
+
+instance Is StrictBuilder TextBuilder
+
+instance Is TextBuilder StrictBuilder
+
+#endif
diff --git a/src/library/TextBuilderLawfulConversions/StrictText.hs b/src/library/TextBuilderLawfulConversions/StrictText.hs
new file mode 100644
--- /dev/null
+++ b/src/library/TextBuilderLawfulConversions/StrictText.hs
@@ -0,0 +1,21 @@
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module TextBuilderLawfulConversions.StrictText where
+
+import qualified Data.Text
+import LawfulConversions
+import TextBuilder
+
+instance IsSome Data.Text.Text TextBuilder where
+  to = toText
+
+instance IsSome TextBuilder Data.Text.Text where
+  to = text
+
+instance IsMany Data.Text.Text TextBuilder
+
+instance IsMany TextBuilder Data.Text.Text
+
+instance Is Data.Text.Text TextBuilder
+
+instance Is TextBuilder Data.Text.Text
diff --git a/src/library/TextBuilderLawfulConversions/StrictTextBuilder.hs b/src/library/TextBuilderLawfulConversions/StrictTextBuilder.hs
new file mode 100644
--- /dev/null
+++ b/src/library/TextBuilderLawfulConversions/StrictTextBuilder.hs
@@ -0,0 +1,41 @@
+{-# LANGUAGE CPP #-}
+{-# OPTIONS_GHC -Wno-orphans #-}
+
+module TextBuilderLawfulConversions.StrictTextBuilder where
+
+#if MIN_VERSION_text(2,1,2)
+
+import Data.Functor
+import Data.Text.Internal.StrictBuilder
+import LawfulConversions
+import TextBuilder (TextBuilder)
+import qualified TextBuilderCore
+import Prelude
+
+instance IsSome StrictTextBuilder TextBuilder where
+  {-# INLINE to #-}
+  to (TextBuilderCore.TextBuilder size write) =
+    StrictTextBuilder
+      size
+      ( \array offset ->
+          write array offset $> ()
+      )
+
+instance IsSome TextBuilder StrictTextBuilder where
+  {-# INLINE to #-}
+  to (StrictTextBuilder size write) =
+    TextBuilderCore.TextBuilder
+      size
+      ( \array offset ->
+          write array offset $> offset + size
+      )
+
+instance IsMany StrictTextBuilder TextBuilder
+
+instance IsMany TextBuilder StrictTextBuilder
+
+instance Is StrictTextBuilder TextBuilder
+
+instance Is TextBuilder StrictTextBuilder
+
+#endif
diff --git a/text-builder-lawful-conversions.cabal b/text-builder-lawful-conversions.cabal
new file mode 100644
--- /dev/null
+++ b/text-builder-lawful-conversions.cabal
@@ -0,0 +1,114 @@
+cabal-version: 3.0
+name: text-builder-lawful-conversions
+version: 0.1
+category: Text, Builders, Conversions
+synopsis: Orphan instances of "lawful-conversions" for "text-builder"
+homepage: https://github.com/nikita-volkov/text-builder-lawful-conversions
+bug-reports: https://github.com/nikita-volkov/text-builder-lawful-conversions/issues
+author: Nikita Volkov <nikita.y.volkov@mail.ru>
+maintainer: Nikita Volkov <nikita.y.volkov@mail.ru>
+copyright: (c) 2025, Nikita Volkov
+license: MIT
+license-file: LICENSE
+
+source-repository head
+  type: git
+  location: https://github.com/nikita-volkov/text-builder-lawful-conversions
+
+common base
+  default-language: Haskell2010
+  default-extensions:
+    BangPatterns
+    BlockArguments
+    ConstraintKinds
+    DataKinds
+    DefaultSignatures
+    DeriveDataTypeable
+    DeriveFoldable
+    DeriveFunctor
+    DeriveGeneric
+    DeriveTraversable
+    DerivingStrategies
+    EmptyDataDecls
+    FlexibleContexts
+    FlexibleInstances
+    FunctionalDependencies
+    GADTs
+    GeneralizedNewtypeDeriving
+    LambdaCase
+    LiberalTypeSynonyms
+    MagicHash
+    MultiParamTypeClasses
+    MultiWayIf
+    NoImplicitPrelude
+    NoMonomorphismRestriction
+    NumericUnderscores
+    OverloadedStrings
+    ParallelListComp
+    PatternGuards
+    QuasiQuotes
+    RankNTypes
+    RecordWildCards
+    ScopedTypeVariables
+    StandaloneDeriving
+    StrictData
+    TemplateHaskell
+    TupleSections
+    TypeApplications
+    TypeFamilies
+    TypeOperators
+    UnboxedTuples
+    ViewPatterns
+
+common executable
+  import: base
+  ghc-options:
+    -O2
+    -threaded
+    "-with-rtsopts=-N -I0 -qg"
+
+common test
+  import: base
+  ghc-options:
+    -threaded
+    "-with-rtsopts=-N -I0 -qg"
+
+library
+  import: base
+  hs-source-dirs: src/library
+  exposed-modules:
+    TextBuilderLawfulConversions
+
+  other-modules:
+    TextBuilderLawfulConversions.LazyBuilder
+    TextBuilderLawfulConversions.LazyText
+    TextBuilderLawfulConversions.StrictBuilder
+    TextBuilderLawfulConversions.StrictText
+    TextBuilderLawfulConversions.StrictTextBuilder
+
+  build-depends:
+    base >=4.13 && <5,
+    lawful-conversions ^>=0.1.7,
+    text >=1.2 && <3,
+    text-builder ^>=1.0.0.1,
+    text-builder-core ^>=0.1.1.1,
+
+test-suite hspec
+  import: test
+  type: exitcode-stdio-1.0
+  hs-source-dirs: src/hspec
+  main-is: Main.hs
+  other-modules:
+    Main.Conversions.StrictBuilder
+    Main.Conversions.StrictTextBuilder
+    Main.LawfulConversionsHspec
+
+  build-depends:
+    QuickCheck >=2.15 && <3,
+    base,
+    hspec >=2.11 && <3,
+    lawful-conversions,
+    quickcheck-instances ^>=0.3.32,
+    text,
+    text-builder,
+    text-builder-lawful-conversions,
