diff --git a/WORKSPACE b/WORKSPACE
index d0e9e4e..11821e9 100644
--- a/WORKSPACE
+++ b/WORKSPACE
@@ -74,37 +74,37 @@
     sha1 = "f7be08ec23c21485b9b5a1cf1654c2ec8c58168d",
 )
 
-COMMONMARK_VERSION = "0.10.0"
+COMMONMARK_VERSION = "0.21.0"
 
 # When upgrading commonmark it should also be updated in plugins/gitiles
 maven_jar(
     name = "commonmark",
-    artifact = "com.atlassian.commonmark:commonmark:" + COMMONMARK_VERSION,
-    sha1 = "119cb7bedc3570d9ecb64ec69ab7686b5c20559b",
+    artifact = "org.commonmark:commonmark:" + COMMONMARK_VERSION,
+    sha1 = "c98f0473b17c87fe4fa2fc62a7c6523a2fe018f0",
 )
 
 maven_jar(
     name = "cm-autolink",
-    artifact = "com.atlassian.commonmark:commonmark-ext-autolink:" + COMMONMARK_VERSION,
-    sha1 = "a6056a5efbd68f57d420bc51bbc54b28a5d3c56b",
+    artifact = "org.commonmark:commonmark-ext-autolink:" + COMMONMARK_VERSION,
+    sha1 = "55c0312cf443fa3d5af0daeeeca00d6deee3cf90",
 )
 
 maven_jar(
     name = "autolink",
-    artifact = "org.nibor.autolink:autolink:0.7.0",
-    sha1 = "649f9f13422cf50c926febe6035662ae25dc89b2",
+    artifact = "org.nibor.autolink:autolink:0.10.0",
+    sha1 = "6579ea7079be461e5ffa99f33222a632711cc671",
 )
 
 maven_jar(
     name = "gfm-strikethrough",
-    artifact = "com.atlassian.commonmark:commonmark-ext-gfm-strikethrough:" + COMMONMARK_VERSION,
-    sha1 = "40837da951b421b545edddac57012e15fcc9e63c",
+    artifact = "org.commonmark:commonmark-ext-gfm-strikethrough:" + COMMONMARK_VERSION,
+    sha1 = "953f4b71e133a98fcca93f3c3f4e58b895b76d1f",
 )
 
 maven_jar(
     name = "gfm-tables",
-    artifact = "com.atlassian.commonmark:commonmark-ext-gfm-tables:" + COMMONMARK_VERSION,
-    sha1 = "c075db2a3301100cf70c7dced8ecf86b494458a2",
+    artifact = "org.commonmark:commonmark-ext-gfm-tables:" + COMMONMARK_VERSION,
+    sha1 = "fb7d65fa89a4cfcd2f51535d2549b570cf1dbd1a",
 )
 
 maven_jar(
diff --git a/java/com/google/gitiles/doc/BlockNoteExtension.java b/java/com/google/gitiles/doc/BlockNoteExtension.java
index deda75a..fa3cf5f 100644
--- a/java/com/google/gitiles/doc/BlockNoteExtension.java
+++ b/java/com/google/gitiles/doc/BlockNoteExtension.java
@@ -73,7 +73,7 @@
       }
       if (state.getIndent() <= indent) {
         int s = state.getNextNonSpaceIndex();
-        CharSequence line = state.getLine();
+        CharSequence line = state.getLine().getContent();
         if ("***".contentEquals(line.subSequence(s, line.length()))) {
           done = true;
           return BlockContinue.atIndex(line.length());
@@ -97,7 +97,7 @@
     @Override
     public BlockStart tryStart(ParserState state, MatchedBlockParser matched) {
       int s = state.getNextNonSpaceIndex();
-      CharSequence line = state.getLine();
+      CharSequence line = state.getLine().getContent();
       CharSequence text = line.subSequence(s, line.length());
       if (text.length() < 3 || !"***".contentEquals(text.subSequence(0, 3))) {
         return BlockStart.none();
diff --git a/java/com/google/gitiles/doc/GitHubThematicBreakExtension.java b/java/com/google/gitiles/doc/GitHubThematicBreakExtension.java
index 3e32990..a8b8c7b 100644
--- a/java/com/google/gitiles/doc/GitHubThematicBreakExtension.java
+++ b/java/com/google/gitiles/doc/GitHubThematicBreakExtension.java
@@ -55,7 +55,7 @@
     @Override
     public BlockStart tryStart(ParserState state, MatchedBlockParser matched) {
       if (state.getIndent() == 0) {
-        CharSequence line = state.getLine();
+        CharSequence line = state.getLine().getContent();
         int s = state.getNextNonSpaceIndex();
         if ("--".contentEquals(line.subSequence(s, line.length()))) {
           return BlockStart.of(new BreakParser()).atIndex(line.length());
diff --git a/java/com/google/gitiles/doc/MarkdownToHtml.java b/java/com/google/gitiles/doc/MarkdownToHtml.java
index ec9f058..a2d5752 100644
--- a/java/com/google/gitiles/doc/MarkdownToHtml.java
+++ b/java/com/google/gitiles/doc/MarkdownToHtml.java
@@ -49,6 +49,7 @@
 import org.commonmark.node.Image;
 import org.commonmark.node.IndentedCodeBlock;
 import org.commonmark.node.Link;
+import org.commonmark.node.LinkReferenceDefinition;
 import org.commonmark.node.ListBlock;
 import org.commonmark.node.ListItem;
 import org.commonmark.node.Node;
@@ -391,6 +392,11 @@
     html.close("a");
   }
 
+  @Override
+  public void visit(LinkReferenceDefinition node) {
+    // Ignored in rendered output
+  }
+
   @VisibleForTesting
   String href(String target) {
     if (target.startsWith("#")
diff --git a/java/com/google/gitiles/doc/MultiColumnExtension.java b/java/com/google/gitiles/doc/MultiColumnExtension.java
index 4f1ca53..125c9ce 100644
--- a/java/com/google/gitiles/doc/MultiColumnExtension.java
+++ b/java/com/google/gitiles/doc/MultiColumnExtension.java
@@ -86,7 +86,7 @@
       }
       if (state.getIndent() == 0) {
         int s = state.getNextNonSpaceIndex();
-        CharSequence line = state.getLine();
+        CharSequence line = state.getLine().getContent();
         if (MARKER.contentEquals(line.subSequence(s, line.length()))) {
           done = true;
           return BlockContinue.atIndex(line.length());
@@ -157,7 +157,7 @@
       }
 
       int s = state.getNextNonSpaceIndex();
-      CharSequence line = state.getLine();
+      CharSequence line = state.getLine().getContent();
       CharSequence text = line.subSequence(s, line.length());
       if (text.length() < MARKER.length()
           || !MARKER.contentEquals(text.subSequence(0, MARKER.length()))) {
diff --git a/java/com/google/gitiles/doc/NamedAnchorExtension.java b/java/com/google/gitiles/doc/NamedAnchorExtension.java
index e6a3071..cd02733 100644
--- a/java/com/google/gitiles/doc/NamedAnchorExtension.java
+++ b/java/com/google/gitiles/doc/NamedAnchorExtension.java
@@ -56,12 +56,9 @@
     }
 
     @Override
-    public int getDelimiterUse(DelimiterRun opener, DelimiterRun closer) {
-      return 1;
-    }
-
-    @Override
-    public void process(Text opener, Text closer, int delimiterUse) {
+    public int process(DelimiterRun openingRun, DelimiterRun closingRun) {
+      Text opener = openingRun.getOpener();
+      Text closer = closingRun.getCloser();
       Node content = opener.getNext();
       if (content instanceof Text && content.getNext() == closer) {
         Matcher m = ID.matcher(((Text) content).getLiteral());
@@ -72,13 +69,14 @@
           anchor.setName(m.group(1));
           opener.insertAfter(anchor);
           MarkdownUtil.trimPreviousWhitespace(opener);
-          return;
+          return 1;
         }
       }
 
       // If its not exactly one well formed Text node; restore the delimiter text.
       opener.insertAfter(new Text("{"));
       closer.insertBefore(new Text("}"));
+      return 1;
     }
   }
 }
diff --git a/java/com/google/gitiles/doc/SmartQuotedExtension.java b/java/com/google/gitiles/doc/SmartQuotedExtension.java
index 7df0c13..f1b8c02 100644
--- a/java/com/google/gitiles/doc/SmartQuotedExtension.java
+++ b/java/com/google/gitiles/doc/SmartQuotedExtension.java
@@ -77,13 +77,9 @@
     }
 
     @Override
-    public int getDelimiterUse(DelimiterRun opener, DelimiterRun closer) {
+    public int process(DelimiterRun openingRun, DelimiterRun closingRun) {
+      quote(type, openingRun.getOpener(), closingRun.getCloser());
       return 1;
     }
-
-    @Override
-    public void process(Text opener, Text closer, int delimiterUse) {
-      quote(type, opener, closer);
-    }
   }
 }
diff --git a/java/com/google/gitiles/doc/TocExtension.java b/java/com/google/gitiles/doc/TocExtension.java
index 34db0cf..24eabe0 100644
--- a/java/com/google/gitiles/doc/TocExtension.java
+++ b/java/com/google/gitiles/doc/TocExtension.java
@@ -56,7 +56,7 @@
     @Override
     public BlockStart tryStart(ParserState state, MatchedBlockParser matched) {
       if (state.getIndent() == 0) {
-        CharSequence line = state.getLine();
+        CharSequence line = state.getLine().getContent();
         int s = state.getNextNonSpaceIndex();
         if ("[TOC]".contentEquals(line.subSequence(s, line.length()))) {
           return BlockStart.of(new TocParser()).atIndex(line.length());
