Repository navigation
Conversation
The server is now compiled for Java 25 (ADR 0015). Nothing a user installs depends on that any more: IntelliJ 2026.1 runs on JetBrains Runtime 25, the VS Code extension bundles its own runtime, and the new native binary needs none at all. The native binary (ADR 0016) targets editors without a JVM, such as Vim with vim-lsp. LSP4J ships no Native Image metadata, so NativeImageSupport, a GraalVM Feature, registers every LSP4J, tinylog and server class for reflection while the image is built and registers the LanguageClient proxy. Resources and build options live in META-INF/native-image, so `native-image -jar` on the standalone JAR works as well. The `native` Maven profile builds it; CI builds and smoke tests it on all five platforms, and the release uploads the binaries with checksums. Gradle stays on JDK 17 in CI because Gradle 9.0 cannot run on Java 25. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
GraalVM Community for macOS on Intel ended with JDK 25.0.1, which rejects the schema the metadata repository now serves, so the darwin-x64 build failed. The repository only had Gson entries that the server does not need: the smoke test passes without them. Switching it off also removes a download from the build. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
…native # Conflicts: # pom.xml
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
4 of 6 tasks
koppor
added this pull request to stack #78
October 10, 2026 17:29
koppor
marked this pull request as ready for review
October 10, 2026 17:31
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Two changes that belong together, each with its own ADR:
maven.compiler.releasegoes from 17 to 25, CI and the VS Code jlink runtime build on JDK 25. Java 25 is the current LTS release, see whichjdk.com for release cadence, support windows and distributions. The IntelliJ plugin is unaffected: the 2026.1 branch of IntelliJ Community pinsruntimeBuild=25.0.4, so every IDE build the plugin supports runs on JetBrains Runtime 25. Gradle stays on JDK 17 in CI, as Gradle 9.0 does not run on Java 25.openfasttrace-language-server-<version>-<platform>for the same five platforms as the VS Code packages.How the native image handles reflection
ADR 0011 rejected GraalVM because LSP4J ships no Native Image metadata. Instead of a recorded reflection list that misses whatever a session did not exercise,
NativeImageSupportis a GraalVMFeaturethat walks the classpath at image build time and registers every class oforg.eclipse.lsp4j,org.tinylogand the server for reflection, plus theLanguageClientdynamic proxy. Resources and build options (--features,--no-fallback,-march=compatibility) sit inMETA-INF/native-image/, sonative-image -jaron the standalone JAR works too.Verified locally in a GraalVM 25 container (linux-x64): the image builds in ~27 s, is 33 MB, and
.github/workflows/native_smoke_test.shpasses againstdoc/demo/example(initialize, published diagnostics, workspace symbols, clean exit). A GraalVM tracing-agent run of the same session recorded nothing outside the registered packages, Gson's own metadata and the ServiceLoader entries that Native Image handles itself.Other changes
nativeMaven profile withnative-maven-plugin1.1.14; GraalVM SDK asprovideddependency (stays out of the fat JAR, verified).native-binarymatrix job (5 platforms) usinggraalvm/setup-graalvm, SHA pinned; release workflow builds, downloads and uploads the binaries with sha256 files.Test plan
mvn verifyon JDK 25 locally (class files at level 69)🤖 Generated with Claude Code