diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,8 @@
+# Version 1.3.5
+
+* Add optional support for `conduit` and `resourcet`.
+
+
 # Version 1.3.4
 
 * Fix typo in `unliftio-core` Cabal flag.
diff --git a/di-monad.cabal b/di-monad.cabal
--- a/di-monad.cabal
+++ b/di-monad.cabal
@@ -1,9 +1,9 @@
 cabal-version: 1.18
 name: di-monad
-version: 1.3.4
+version: 1.3.5
 author: Renzo Carbonara
 maintainer: renλren.zone
-copyright: Renzo Carbonara 2017-2018
+copyright: Renzo Carbonara 2017
 license: BSD3
 license-file: LICENSE.txt
 extra-source-files: README.md CHANGELOG.md
@@ -49,6 +49,16 @@
   manual: True
   default: True
 
+flag resourcet
+  description: Library support: resourcet
+  manual: True
+  default: True
+
+flag conduit
+  description: Library support: conduit
+  manual: True
+  default: True
+
 library
   hs-source-dirs: lib
   default-language: Haskell2010
@@ -92,4 +102,13 @@
   if flag(unliftio-core)
     cpp-options: -DFLAG_unliftio_core
     build-depends: unliftio-core
+
+  if flag(resourcet)
+    cpp-options: -DFLAG_resourcet -DFLAG_primitive -DFLAG_unliftio_core
+    build-depends: resourcet, primitive, unliftio-core
+
+  if flag(conduit)
+    cpp-options: -DFLAG_conduit -DFLAG_primitive -DFLAG_unliftio_core
+                 -DFLAG_resourcet
+    build-depends: conduit, primitive, unliftio-core, resourcet
 
diff --git a/lib/Di/Monad.hs b/lib/Di/Monad.hs
--- a/lib/Di/Monad.hs
+++ b/lib/Di/Monad.hs
@@ -122,6 +122,14 @@
 import Streaming.Internal qualified as S
 #endif
 
+#ifdef FLAG_resourcet
+import Control.Monad.Trans.Resource.Internal qualified as R
+#endif
+
+#ifdef FLAG_conduit
+import Data.Conduit.Internal qualified as C
+#endif
+
 import Di.Core (Di)
 import Di.Core qualified as Di
 
@@ -610,6 +618,40 @@
       S.Step fs -> S.Step (local g <$> fs)
       S.Effect ms -> S.Effect (local g <$> ms)
       S.Return r -> S.Return r
+#endif
+
+#ifdef FLAG_resourcet
+instance R.MonadResource m => R.MonadResource (DiT level path msg m) where
+   {-# INLINE liftResourceT #-}
+   liftResourceT = lift . R.liftResourceT
+
+instance
+   (MonadDi level path msg m)
+   => MonadDi level path msg (R.ResourceT m)
+   where
+   {-# INLINE local #-}
+   local f = \(R.ResourceT g) -> R.ResourceT (local f . g)
+#endif
+
+#ifdef FLAG_conduit
+instance
+   (MonadDi level path msg m)
+   => MonadDi level path msg (C.Pipe l i o u m)
+   where
+   {-# INLINEABLE local #-}
+   local f = \case
+     C.HaveOutput p o -> C.HaveOutput (local f p) o
+     C.NeedInput p c -> C.NeedInput (local f . p) (local f . c)
+     C.Done x -> C.Done x
+     C.PipeM mp -> C.PipeM (local f <$> local f mp)
+     C.Leftover p i -> C.Leftover (local f p) i
+
+instance
+   (MonadDi level path msg m)
+   => MonadDi level path msg (C.ConduitT i o m)
+   where
+   {-# INLINE local #-}
+   local f = \(C.ConduitT k) -> C.ConduitT (local f . k)
 #endif
 
 --------------------------------------------------------------------------------
