Download Latest Version 1.19.3 and 1.19.3-beta29 source code.zip (16.7 MB) Google Add to Preferred Sources
Home / 1.20.0
Name Modified Size InfoDownloads / Week
Parent folder
1.20.0 and 1.20.0-beta30 source code.tar.gz 2026-09-04 14.0 MB
1.20.0 and 1.20.0-beta30 source code.zip 2026-09-04 17.2 MB
README.md 2026-09-04 16.2 kB
Totals: 3 Items   31.3 MB 0

Notable Changes

Non-blocking / reactive support by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/5527

An AI Service method used to hold its thread for the whole interaction - the model call, tool execution, memory I/O and guardrails. It can now return CompletableFuture<T>/CompletionStage<T> for a single response, or Flow.Publisher<AiServiceStreamingEvent>/Flow.Publisher<String> for streaming, and the interaction runs without blocking a thread. You choose the mode by the method's return type; nothing else about the interface changes.

Non-blocking goes all the way down, because a blocking gap at any layer re-blocks the whole call: tool calling (sync and CompletableFuture tools, sequential or concurrent), chat memory, guardrails, and the full retrieval graph including EmbeddingModel, EmbeddingStore, ScoringModel and WebSearchEngine.

The work is additive and marked @Experimental: the synchronous and TokenStream APIs are untouched. A few defaults deliberately differ on the async path - multiple tool calls run concurrently, a tool execution error fails the invocation rather than being sent to the LLM, and a tool argument-parse error is sent to the LLM rather than failing. See Non-blocking and Reactive.

Jackson 3 opt-in support by @dliubarskyi in https://github.com/langchain4j/langchain4j/pull/6184

Add langchain4j-jackson3 to your classpath and LangChain4j's JSON runs on Jackson 3. There is nothing to configure and no API to call, and removing the dependency puts everything back on Jackson 2. Nothing changes for anyone who does not opt in.

With the opt-in in place, Jackson 2 can be excluded outright from most of the dependency graph; the modules that still need it are listed in the documentation. The one deliberate behaviour change is that a JSON failure surfaces as JsonReadException or JsonWriteException (both LangChain4jException) instead of a RuntimeException wrapping Jackson's own - catching RuntimeException works either way. See Using Jackson 3.

Other Changes

New Contributors

Full Changelog: https://github.com/langchain4j/langchain4j/compare/1.19.0...1.20.0

Source: README.md, updated 2026-09-04