diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml
index 470a7277..40920bbf 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/test.yml
@@ -167,7 +167,7 @@ jobs:
     - name: 'Build Jextract'
       shell: sh
       run: |
-        sh ./gradlew -Pjdk22_home=${{ matrix.DEPS_ROOT }}/jdk-toolchain -Pllvm_home=${{ matrix.DEPS_ROOT }}/llvm/image clean verify        
+        sh ./gradlew -Pjdk_home=${{ matrix.DEPS_ROOT }}/jdk-toolchain -Pllvm_home=${{ matrix.DEPS_ROOT }}/llvm/image clean verify
 
     - name: 'Get cached JTReg'
       uses: actions/cache@v4
@@ -180,4 +180,4 @@ jobs:
     - name: 'Run tests'
       shell: sh
       run: |
-        sh ./gradlew -Pjdk22_home=${{ matrix.DEPS_ROOT }}/jdk-toolchain -Pllvm_home=${{ matrix.DEPS_ROOT }}/llvm/image -Pjtreg_home=./deps/jtreg/build/images/jtreg jtreg
+        sh ./gradlew -Pjdk_home=${{ matrix.DEPS_ROOT }}/jdk-toolchain -Pllvm_home=${{ matrix.DEPS_ROOT }}/llvm/image -Pjtreg_home=./deps/jtreg/build/images/jtreg jtreg
diff --git a/README.md b/README.md
index f092a66c..47fbfaee 100644
--- a/README.md
+++ b/README.md
@@ -14,7 +14,7 @@ Alternatively, to build jextract from the latest sources (which include all the
 
 ### Building
 
-`jextract` depends on the [C libclang API](https://clang.llvm.org/doxygen/group__CINDEX.html). To build the jextract sources, the easiest option is to download LLVM binaries for your platform, which can be found [here](https://releases.llvm.org/download.html) (version 13.0.0 is recommended). Both the `jextract` tool and the bindings it generates depend heavily on the [Foreign Function & Memory API](https://openjdk.java.net/jeps/454), so a suitable [jdk 22 distribution](https://jdk.java.net/22/) is also required.
+`jextract` depends on the [C libclang API](https://clang.llvm.org/doxygen/group__CINDEX.html). To build the jextract sources, the easiest option is to download LLVM binaries for your platform, which can be found [here](https://releases.llvm.org/download.html) (version 13.0.0 is recommended). Both the `jextract` tool and the bindings it generates depend heavily on the [Foreign Function & Memory API](https://openjdk.java.net/jeps/454). A suitable [JDK 23 or higher distribution](https://jdk.java.net/23/) is also required.
 
 > <details><summary><strong>Building older jextract versions</strong></summary>
 >
@@ -33,7 +33,7 @@ We currently use gradle version 7.3.3 which is fetched automatically by the grad
 
 
 ```sh
-$ sh ./gradlew -Pjdk22_home=<jdk22_home_dir> -Pllvm_home=<libclang_dir> clean verify
+$ sh ./gradlew -Pjdk_home=<jdk_home_dir> -Pllvm_home=<libclang_dir> clean verify
 ```
 
 
@@ -63,7 +63,7 @@ Expected a header file
 The repository also contains a comprehensive set of tests, written using the [jtreg](https://openjdk.java.net/jtreg/) test framework, which can be run as follows (again, on Windows, `gradlew.bat` should be used instead):
 
 ```sh
-$ sh ./gradlew -Pjdk22_home=<jdk22_home_dir> -Pllvm_home=<libclang_dir> -Pjtreg_home=<jtreg_home> jtreg
+$ sh ./gradlew -Pjdk_home=<jdk_home_dir> -Pllvm_home=<libclang_dir> -Pjtreg_home=<jtreg_home> jtreg
 ```
 
 Note: running `jtreg` task requires `cmake` to be available on the `PATH`.
diff --git a/build.gradle b/build.gradle
index 04abe575..9ce544a2 100644
--- a/build.gradle
+++ b/build.gradle
@@ -29,6 +29,7 @@ def static checkPath(String p) {
 }
 
 def llvm_home = project.property("llvm_home")
+def jdk_home = project.property("jdk_home")
 checkPath(llvm_home)
 checkPath("${llvm_home}/lib/clang")
 def clang_versions = new File("${llvm_home}/lib/clang/").list();
@@ -39,7 +40,7 @@ if (clang_versions.length == 0) {
 def clang_version = clang_versions[0]
 
 def buildDir = layout.buildDirectory.get()
-def jextract_version = "22"
+def jextract_version = "23"
 def jmods_dir = "$buildDir/jmods"
 def jextract_jmod_file = "$jmods_dir/org.openjdk.jextract.jmod"
 def jextract_jmod_inputs = "$buildDir/jmod_inputs"
@@ -59,9 +60,9 @@ repositories {
 }
 
 compileJava {
-    options.release = 22
+    options.release = 23
     options.fork = true
-    options.forkOptions.executable = "${jdk22_home}/bin/javac${os_exe_suffix}"
+    options.forkOptions.executable = "${jdk_home}/bin/javac${os_exe_suffix}"
 }
 
 jar {
@@ -104,7 +105,7 @@ task createJextractJmod(type: Exec) {
         delete(jextract_jmod_file)
     }
 
-    executable = "${jdk22_home}/bin/jmod"
+    executable = "${jdk_home}/bin/jmod"
     args = [
           "create",
           "--module-version=$jextract_version",
@@ -131,7 +132,7 @@ task createJextractImage(type: Exec) {
         project.mkdir "${jextract_bin_dir}"
     }
 
-    executable = "${jdk22_home}/bin/jlink"
+    executable = "${jdk_home}/bin/jlink"
     args = [
          "--module-path=$jmods_dir",
          "--add-modules=org.openjdk.jextract",
@@ -183,9 +184,9 @@ task createRuntimeImageForTest(type: Exec) {
         delete(out_dir)
     }
 
-    executable = "${jdk22_home}/bin/jlink"
+    executable = "${jdk_home}/bin/jlink"
     args = [
-         "--module-path=$jmods_dir" + File.pathSeparator + "$jdk22_home/jmods",
+         "--module-path=$jmods_dir" + File.pathSeparator + "$jdk_home/jmods",
          "--add-modules=ALL-MODULE-PATH",
          "--output=$out_dir",
     ]
diff --git a/samples/python3/compilesource.sh b/samples/python3/compilesource.sh
index f11a2b7c..78f5b539 100644
--- a/samples/python3/compilesource.sh
+++ b/samples/python3/compilesource.sh
@@ -3,6 +3,7 @@ if [[ -z "${ANACONDA3_HOME}" ]]; then
 fi
 
 jextract --output src \
+  -D_Float16=short \
   -l :${ANACONDA3_HOME}/lib/libpython3.11.dylib \
   -I ${ANACONDA3_HOME}/include/python3.11 \
   -t org.python \