diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index 381d7c73f3340f84c775cb8276ffb1db2f46bc52..3fa93f210fee82fdbe048018bbdb73a39f469a5d 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -9,15 +9,16 @@ jobs:
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        java: [1.8, 11, 17]
+        java: [11, 17, 21]
     steps:
       - name: Checkout sources
         uses: actions/checkout@v2
 
       - name: Set up JDK
-        uses: actions/setup-java@v1
+        uses: actions/setup-java@v2
         with:
           java-version: ${{ matrix.java }}
+          distribution: 'zulu'
 
       - name: Build
         run: mvn -B package javadoc:javadoc
@@ -29,9 +30,10 @@ jobs:
         uses: actions/checkout@v2
 
       - name: Set up JDK
-        uses: actions/setup-java@v1
+        uses: actions/setup-java@v2
         with:
-          java-version: 1.8
+          java-version: 11
+          distribution: 'zulu'
 
       - name: Build with coverage
         run: mvn -B -Pcoverage clean test jacoco:report-aggregate
@@ -46,9 +48,10 @@ jobs:
         uses: actions/checkout@v2
 
       - name: Set up JDK
-        uses: actions/setup-java@v1
+        uses: actions/setup-java@v2
         with:
-          java-version: 1.8
+          java-version: 11
+          distribution: 'zulu'
 
       - name: Android Lint checks
         run: cd commonmark-android-test && ./gradlew :app:lint
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index 4edf451c0e46bcc9b1170cb99ff322e63cf75b02..2ecfa6d49f6bc13bb804ea55ac302a4472989e6c 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -17,9 +17,10 @@ jobs:
         uses: actions/checkout@v2
 
       - name: Set up Maven Central repository
-        uses: actions/setup-java@v1
+        uses: actions/setup-java@v2
         with:
-          java-version: 1.8
+          java-version: 11
+          distribution: 'zulu'
           server-id: ossrh
           server-username: MAVEN_USERNAME # env variable to use for username in release
           server-password: MAVEN_PASSWORD # env variable to use for password in release
diff --git a/README.md b/README.md
index 5e1342740fa3cb4f65116dd2d84d32c4fb188484..dc27c0987fed8efe694c5c91136ca4b3e0a5b442 100644
--- a/README.md
+++ b/README.md
@@ -23,9 +23,9 @@ full library with a nice API and the following features:
 * Flexible (manipulate the AST after parsing, customize HTML rendering)
 * Extensible (tables, strikethrough, autolinking and more, see below)
 
-The library is supported on Java 8 or later. It should work on Java 7
-and Android too, but that is on a best-effort basis, please report
-problems. For Android the minimum API level is 19, see the
+The library is supported on Java 11 and later. It should work on Android too,
+but that is on a best-effort basis, please report problems. For Android the
+minimum API level is 19, see the
 [commonmark-android-test](commonmark-android-test) directory.
 
 Coordinates for core library (see all on [Maven Central]):
diff --git a/pom.xml b/pom.xml
index f5c7749ef88b072e336faadf0d89535de7a2729b..da06b2c2b49d603005028b781fa74df094ee8b29 100644
--- a/pom.xml
+++ b/pom.xml
@@ -38,10 +38,9 @@
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-compiler-plugin</artifactId>
-                    <version>3.10.1</version>
+                    <version>3.12.1</version>
                     <configuration>
-                        <source>7</source>
-                        <target>7</target>
+                        <release>11</release>
                     </configuration>
                 </plugin>
                 <plugin>