diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+## MMark 0.0.4.3
+
+* Compiles with `modern-uri-0.2.0.0` and later.
+
 ## MMark 0.0.4.2
 
 * Made parsing of emphasis-like markup more flexible and forgiving, see
diff --git a/Text/MMark/Parser.hs b/Text/MMark/Parser.hs
--- a/Text/MMark/Parser.hs
+++ b/Text/MMark/Parser.hs
@@ -35,12 +35,14 @@
 import Data.Semigroup (Semigroup (..))
 import Data.Text (Text)
 import Data.Void
+import Lens.Micro ((^.))
 import Text.MMark.Parser.Internal
 import Text.MMark.Type
 import Text.MMark.Util
 import Text.Megaparsec hiding (parse, State (..))
 import Text.Megaparsec.Char hiding (eol)
 import Text.URI (URI)
+import Text.URI.Lens (uriPath)
 import qualified Control.Monad.Combinators.NonEmpty as NE
 import qualified Data.Char                  as Char
 import qualified Data.DList                 as DList
@@ -1094,7 +1096,7 @@
 
 isEmailUri :: URI -> Maybe Text
 isEmailUri uri =
-  case URI.unRText <$> URI.uriPath uri of
+  case URI.unRText <$> uri ^. uriPath of
     [x] ->
       if Email.isValid (TE.encodeUtf8 x) &&
           (isNothing (URI.uriScheme uri) ||
diff --git a/Text/MMark/Util.hs b/Text/MMark/Util.hs
--- a/Text/MMark/Util.hs
+++ b/Text/MMark/Util.hs
@@ -9,6 +9,7 @@
 --
 -- Internal utilities.
 
+{-# LANGUAGE CPP               #-}
 {-# LANGUAGE LambdaCase        #-}
 {-# LANGUAGE OverloadedStrings #-}
 
@@ -62,6 +63,10 @@
 headerFragment fragment = URI
   { uriScheme    = Nothing
   , uriAuthority = Left False
+#if MIN_VERSION_modern_uri(0,2,0)
+  , uriPath      = Nothing
+#else
   , uriPath      = []
+#endif
   , uriQuery     = []
   , uriFragment  = URI.mkFragment fragment }
diff --git a/mmark.cabal b/mmark.cabal
--- a/mmark.cabal
+++ b/mmark.cabal
@@ -1,5 +1,5 @@
 name:                 mmark
-version:              0.0.4.2
+version:              0.0.4.3
 cabal-version:        >= 1.18
 tested-with:          GHC==7.10.3, GHC==8.0.2, GHC==8.2.2
 license:              BSD3
@@ -42,7 +42,7 @@
                     , megaparsec       >= 6.4  && < 7.0
                     , microlens        >= 0.4  && < 0.5
                     , microlens-th     >= 0.4  && < 0.5
-                    , modern-uri       >= 0.1.2.1 && < 0.2
+                    , modern-uri       >= 0.1.2.1 && < 0.3
                     , mtl              >= 2.0  && < 3.0
                     , parser-combinators >= 0.4 && < 1.0
                     , text             >= 0.2  && < 1.3
@@ -82,7 +82,7 @@
                     , lucid            >= 2.6  && < 3.0
                     , megaparsec       >= 6.4  && < 7.0
                     , mmark
-                    , modern-uri       >= 0.1.2.1 && < 0.2
+                    , modern-uri       >= 0.1.2.1 && < 0.3
                     , text             >= 0.2  && < 1.3
   if !impl(ghc >= 8.0)
     build-depends:    semigroups       == 0.18.*
diff --git a/tests/Text/MMark/ExtensionSpec.hs b/tests/Text/MMark/ExtensionSpec.hs
--- a/tests/Text/MMark/ExtensionSpec.hs
+++ b/tests/Text/MMark/ExtensionSpec.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP                  #-}
 {-# LANGUAGE LambdaCase           #-}
 {-# LANGUAGE OverloadedStrings    #-}
 {-# OPTIONS_GHC -fno-warn-orphans #-}
@@ -90,7 +91,11 @@
         frag <- URI.mkFragment fragment
         URI.uriScheme    uri `shouldBe` Nothing
         URI.uriAuthority uri `shouldBe` Left False
+#if MIN_VERSION_modern_uri(0,2,0)
+        URI.uriPath      uri `shouldBe` Nothing
+#else
         URI.uriPath      uri `shouldBe` []
+#endif
         URI.uriQuery     uri `shouldBe` []
         URI.uriFragment  uri `shouldBe` Just frag
 
