<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Friends Of OpenJDK Today on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/</link><description>Recent content in Friends Of OpenJDK Today on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Tue, 06 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foojay.io/today/index.xml" rel="self" type="application/rss+xml"/><item><title>Building a Code Editor Control in JavaFX</title><link>https://foojay.io/today/building-a-javafx-code-editor-control/</link><pubDate>Tue, 06 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/building-a-javafx-code-editor-control/</guid><description>&lt;p&gt;JavaFX doesn&amp;rsquo;t ship with a code-editor control, and &lt;code&gt;TextArea&lt;/code&gt; isn&amp;rsquo;t built to grow into one — no per-character styling, no gutter, no virtualization tuned for thousands of lines. Building a real one means going back to &lt;code&gt;Control&lt;/code&gt; + &lt;code&gt;Skin&lt;/code&gt; and constructing the editor surface yourself. This post walks through several pieces of a custom editor control.&lt;/p&gt;&#10;&lt;h2 id="the-core-idea-two-virtualized-lists-not-one"&gt;The core idea: two virtualized lists, not one&lt;/h2&gt;&#10;&lt;p&gt;The instinctive design is a single &lt;code&gt;ListView&amp;lt;String&amp;gt;&lt;/code&gt;, one row per line, with each row containing both the line number and the code. This approach has a drawback: when the user scrolls horizontally, the line numbers disappear.&lt;/p&gt;</description></item><item><title>Featured Foojay Authors for October 2026: Bazlur Rahman and Nicolas Fränkel</title><link>https://foojay.io/today/featured-foojay-authors-for-october-2026/</link><pubDate>Tue, 06 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/featured-foojay-authors-for-october-2026/</guid><description>&lt;p&gt;Foojay wouldn&amp;rsquo;t exist without the many contributions from its community, whether it&amp;rsquo;s a single post or an ongoing stream of knowledge sharing. That&amp;rsquo;s why we highlight two of them each month as &lt;strong&gt;&lt;a href="https://foojay.io/today/author/"&gt;Featured Authors&lt;/a&gt;&lt;/strong&gt;. After &lt;a href="https://foojay.io/today/author/marit-van-dijk/"&gt;Marit&lt;/a&gt; and &lt;a href="https://foojay.io/today/author/graeme-robinson/"&gt;Graeme&lt;/a&gt; in September, October belongs to &lt;strong&gt;&lt;a href="https://foojay.io/today/author/bazlur-rahman/"&gt;Bazlur Rahman&lt;/a&gt;&lt;/strong&gt; and &lt;strong&gt;&lt;a href="https://foojay.io/today/author/nicolas-frankel/"&gt;Nicolas Fränkel&lt;/a&gt;&lt;/strong&gt;. Want to read more from either of them? Click their name to visit their Foojay author page, where you&amp;rsquo;ll find their full list of posts.&lt;/p&gt;</description></item><item><title>Run Java in the Browser with TeaVM</title><link>https://foojay.io/today/java-in-the-browser-with-teavm/</link><pubDate>Tue, 06 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/java-in-the-browser-with-teavm/</guid><description>&lt;p&gt;There’s something satisfying about editing a line of Java on a web page, clicking &lt;strong&gt;Run&lt;/strong&gt;, and seeing the result appear right there in the browser. I use this approach for the live Java snippets at &lt;a href="https://nablatensor.com/learn" target="_blank" rel="noopener noreferrer"&gt;nablatensor.com/learn&lt;/a&gt; and for source code used to bootstrap &lt;a href="https://nablatensor.com/quantlab" target="_blank" rel="noopener noreferrer"&gt;nablatensor.com/quantlab&lt;/a&gt;. In this article, I’ll explain how the pieces fit together and walk you through a React app you can run yourself.&lt;/p&gt;&#10;&lt;h2 id="from-java-source-to-a-result"&gt;From Java source to a result&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://teavm.org/docs/intro/overview.html" target="_blank" rel="noopener noreferrer"&gt;TeaVM&lt;/a&gt; compiles Java bytecode into JavaScript or WebAssembly for the browser. To let readers edit and compile the examples, I use &lt;a href="https://github.com/Vsprocessing/teavm-javac" target="_blank" rel="noopener noreferrer"&gt;teavm-javac&lt;/a&gt;, which brings a Java compiler into the browser as well. &lt;strong&gt;Compilation happens directly in the reader&amp;rsquo;s browser:&lt;/strong&gt; the edited source is sent to a Web Worker in the same tab, without sending a compilation request to a server.&lt;/p&gt;</description></item><item><title>Foojay Podcast #102: Why Foojay Walked Away From WordPress for Static Sites</title><link>https://foojay.io/today/foojay-podcast-102/</link><pubDate>Mon, 05 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-102/</guid><description>&lt;p&gt;Foojay.io quietly moved off WordPress and onto Hugo, a static site generator. No more CMS login, no database, no admin panel — just Markdown and AsciiDoc files, built and deployed straight from GitHub. In this episode we dig into why that move happened, and into the bigger question behind it: is a traditional CMS still the right way to run a content site in 2026, or has static tooling caught up? Along the way we go through the real security numbers behind WordPress&amp;rsquo;s plugin ecosystem — more than 10,000 vulnerabilities found in WordPress plugins since 2025 alone — and put very different static site generators head to head: Hugo and Jekyll, the veterans, versus Roq, the Java-and-Quarkus-based newcomer.&lt;/p&gt;</description></item><item><title>Changes Included in Release 26.08 of Azul Zing Builds of OpenJDK</title><link>https://foojay.io/today/changes-included-in-release-26-08-of-azul-zing-builds-of-openjdk/</link><pubDate>Fri, 02 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/changes-included-in-release-26-08-of-azul-zing-builds-of-openjdk/</guid><description>&lt;p&gt;Azul Zing Builds of OpenJDK, the optimized Java runtime within &lt;a href="https://www.azul.com/products/prime" target="_blank" rel="noopener noreferrer"&gt;Azul Platform Prime&lt;/a&gt;, has reached the release of the 26.08 Stable Release line. This Stable Build represents an August 2026 promotion from Stream to Stable status, consolidating six months of Stream Build work into a single, supported release line. The headline addition is &lt;strong&gt;Compilation Streaming&lt;/strong&gt;, which lets a JVM download pre-compiled code from Azul Optimizer Hub at startup instead of waiting on its own JIT compilation queue.&lt;/p&gt;</description></item><item><title>Announcing 'Skinning JavaFX Applications'</title><link>https://foojay.io/today/announcing-skinning-javafx-applications/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/announcing-skinning-javafx-applications/</guid><description>&lt;p&gt;If you&amp;rsquo;ve ever tried to make a JavaFX application look like Microsoft or JetBrains, you know that CSS is not enough. &lt;em&gt;Skinning JavaFX Applications&lt;/em&gt; is my attempt to close that gap — a practical, code-first book built from years of shipping real desktop business applications.&lt;/p&gt;&#10;&lt;p&gt;The main purpose of this book is to cover the Control-Skin architecture, so you can create your own custom controls and skins. We&amp;rsquo;ll cover how to implement custom window chrome, runtime theme switching, Fluent Design materials like Mica and Acrylic, and a full set of micro-interactions.&lt;/p&gt;</description></item><item><title>Lathe: A Java Language Server That Works Straight From Your Maven Build</title><link>https://foojay.io/today/lathe-a-java-language-server-from-your-maven-build/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/lathe-a-java-language-server-from-your-maven-build/</guid><description>&lt;p&gt;I have written Java in many editors and IDEs over the years, and they all seem to struggle with the same&#10;thing.&lt;/p&gt;&#10;&lt;p&gt;For me, the hard part of a Java IDE or language server was never the code intelligence. It was getting&#10;the project structure right. The IDE reads your build files and then tries to guess the module&#10;structure from them. And over time, Java&amp;rsquo;s compiler and runtime configuration has become more and more&#10;complex: annotation processors, the module system, and more. So you often end up in a familiar place:&#10;the code compiles and runs in the build, but not in the IDE. Even the best ones tend to break the&#10;project setup after an upgrade.&lt;/p&gt;</description></item><item><title>Why Every JVM In Your Fleet Warms Up Alone</title><link>https://foojay.io/today/why-every-jvm-in-your-fleet-warms-up-alone/</link><pubDate>Thu, 01 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/why-every-jvm-in-your-fleet-warms-up-alone/</guid><description>&lt;p&gt;We live in a distributed systems world. We handle more traffic &amp;ldquo;simply&amp;rdquo; by adding more instances, or replicas, of the same service and then distribute the traffic between them.&lt;/p&gt;&#10;&lt;p&gt;The service ends up running on tens, hundreds or thousands of JVMs. Same JAR, same JDK, same instance type, same traffic shape. Instance 1 starts cold, spends its first minutes working out which of its several thousand methods are hot, and compiles them optimizing them specifically for the traffic observed. Instance 1000, starting a couple hours later, does exactly the same thing. From scratch, for the 1000th time.&lt;/p&gt;</description></item><item><title>Durable Execution Is a Property, Not a Product</title><link>https://foojay.io/today/durable-execution-is-a-property-not-a-product/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/durable-execution-is-a-property-not-a-product/</guid><description>&lt;p&gt;Three method calls. That is my entire workflow: charge a payment, reserve inventory, send a confirmation email.&lt;/p&gt;&#10;&lt;p&gt;Run those three calls on a dedicated workflow engine and here is what happens before your business logic is done: 23 history events are appended, 15 durable state transitions are committed to a database, and 15 gRPC round trips travel between your worker and the orchestration cluster.&lt;/p&gt;&#10;&lt;p&gt;That, in one paragraph, is why I want to talk about durable execution. Not because the engines are bad. They are impressive systems built by serious engineers. I want to talk about it because the Java community is being sold a property as if it were a product, and I think most of us already own the property.&lt;/p&gt;</description></item><item><title>JavaFX Links of September 2026</title><link>https://foojay.io/today/javafx-links-of-september-2026/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/javafx-links-of-september-2026/</guid><description>&lt;p&gt;Here are the JavaFX LinksOfTheMonth of September 2026. This was a big month with the release of JavaFX 27!&lt;/p&gt;&#10;&lt;p&gt;You can find the weekly lists on &lt;a href="https://www.jfx-central.com/links" target="_blank" rel="noopener noreferrer"&gt;jfx-central.com&lt;/a&gt;. Did we miss anything? Is there anything you want to have included in one of the next overviews? Let us know via &lt;a href="mailto:links@jfx-central.com"&gt;links@jfx-central.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;h2 id="core"&gt;Core&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;From the OpenJFX mailing list:&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Alexander Zuev&lt;/strong&gt; integrated &lt;a href="https://marc.info/?l=openjdk-openjfx-dev&amp;amp;m=178836230081558&amp;amp;w=2" target="_blank" rel="noopener noreferrer"&gt;8384483: Create implementation of NSAccessibilityTable protocol&lt;/a&gt;, a 585-line addition across 11 files that gives macOS proper accessibility support for tables and lists: &amp;ldquo;&lt;em&gt;To preserve functionality the separate native peers for tables and lists are created; the list peer for now reports its role as a table for backward compatibility, that can be changed later; fixed the long existed bug where table reported incorrectly currently selected rows.&lt;/em&gt;&amp;rdquo; Reviewed by &lt;strong&gt;Andy Goryachev&lt;/strong&gt; and &lt;strong&gt;Ambarish Rapte&lt;/strong&gt;. &lt;a href="https://git.openjdk.org/jfx/pull/2217" target="_blank" rel="noopener noreferrer"&gt;PR #2217&lt;/a&gt; — &lt;a href="https://git.openjdk.org/jfx/commit/67853fbf55117f92d0fabcc02798a1115837e2e5" target="_blank" rel="noopener noreferrer"&gt;changeset 67853fbf&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1w4o4t0/what_is_the_future_of_javafx_looking_like/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Gufran Thakur&lt;/strong&gt; asks on Reddit&lt;/a&gt;: &amp;ldquo;&lt;em&gt;What is the future of JavaFX looking like?&lt;/em&gt;&amp;rdquo; A lot of interesting answers already. Want to add yours? And, thank you &lt;strong&gt;Marius Hanl&lt;/strong&gt;, for mentioning &lt;strong&gt;JFX Central&lt;/strong&gt; in your answer, we appreciate it! :-)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="http://www.mail-archive.com/openjfx-dev@openjdk.org/msg29287.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Jose Pereda&lt;/strong&gt; integrated 8391779: JVM crashes after copy key event on focused WebView that has no selection&lt;/a&gt;: &amp;ldquo;&lt;em&gt;This PR adds a guard to WebKit/EditorJava.cpp, to prevent passing an empty selection to the pasteboard, that would cause an immediate JVM termination, when firing a copy key event over a focused WebView that has no selection.&lt;/em&gt;&amp;rdquo; Reviewed and integrated on 8 September. (&lt;a href="https://git.openjdk.org/jfx/pull/2241" target="_blank" rel="noopener noreferrer"&gt;PR on GitHub&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;Release cycle note: the cutoff for backports into &lt;strong&gt;JavaFX 27.0.1&lt;/strong&gt; was 7 September, and &lt;a href="http://www.mail-archive.com/openjfx-dev@openjdk.org/msg28928.html" target="_blank" rel="noopener noreferrer"&gt;jfx27u is now open for 27.0.2 fixes&lt;/a&gt; — announced by &lt;strong&gt;Kevin Rushforth&lt;/strong&gt;, version bump &lt;a href="http://www.mail-archive.com/openjfx-dev@openjdk.org/msg29269.html" target="_blank" rel="noopener noreferrer"&gt;integrated by &lt;strong&gt;Ambarish Rapte&lt;/strong&gt;&lt;/a&gt; on 8 September.&lt;/li&gt;&#10;&lt;li&gt;The &lt;a href="https://github.com/openjdk/jfx/blob/master/doc-files/release-notes-27.md" target="_blank" rel="noopener noreferrer"&gt;Release Notes for JavaFX 27&lt;/a&gt; are available in the OpenJFX repository and list everything that went into this release: 7 new features, 20 other enhancements, 77 bug fixes and 6 security fixes.&lt;/li&gt;&#10;&lt;li&gt;The &lt;strong&gt;Gluon Team&lt;/strong&gt; published &lt;a href="https://gluonhq.com/news/2026-09-15-javafx-27-is-now-available/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 27 is Now Available&lt;/a&gt; with an overview of the release: the Metal rendering pipeline as the new default on macOS, conditional stylesheets and media queries in CSS, JavaFX controls in the window title bar, the RichTextArea additions, and over 70 bug fixes and control performance improvements. Two things to check before upgrading: JavaFX 27 is compiled with &lt;code&gt;--release 25&lt;/code&gt;, so an older JDK fails at startup, and on macOS you can fall back to the previous pipeline with the &lt;code&gt;-Dprism.order=es2&lt;/code&gt; launch parameter.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://openjfx.io/highlights/27/" target="_blank" rel="noopener noreferrer"&gt;JavaFX 27 Highlights&lt;/a&gt; lists what is new: RichTextArea tab stop attributes plus embedded image, text background and wavy underline attributes; conditional stylesheet imports; &lt;code&gt;ConditionalFeature&lt;/code&gt; and platform media queries; JavaFX controls in the title bar; animations that now respect the reduced motion preference; improved macOS accessibility including navigable static text and hyperlinks; better Flatpak integration through &lt;code&gt;GtkFileChooserNative&lt;/code&gt;; and iOS improvements including &lt;code&gt;UIWindowScene&lt;/code&gt; support. The community fixed more than 60 bugs, and dependencies moved to WebKit 623.1, GStreamer 1.28.3, libxml2 2.15.3 and libxslt 1.1.45. The highlights page credits &lt;a href="https://gluonhq.com" target="_blank" rel="noopener noreferrer"&gt;Gluon&lt;/a&gt; for the bulk of the work on this release.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Andy Goryachev&lt;/strong&gt; integrated &lt;a href="https://mail-archive.com/openjfx-dev@openjdk.org/msg29554.html" target="_blank" rel="noopener noreferrer"&gt;8390913: RichTextArea: Down arrow stuck on paragraph if space above and below are set&lt;/a&gt;: &amp;ldquo;&lt;em&gt;Fixes broken navigation introduced in JDK-8370902 with non-zero paragraph spacing (above, below, line spacing).&lt;/em&gt;&amp;rdquo; The Rich Editor Demo was also updated to allow setting paragraph line spacing in addition to space above/below (right click → Paragraph). A sizeable change at 539 lines across 11 files, reviewed by &lt;strong&gt;Jose Pereda&lt;/strong&gt; and &lt;strong&gt;Lukasz Kostyra&lt;/strong&gt;, integrated on 15 September. (&lt;a href="https://github.com/openjdk/jfx/pull/2280" target="_blank" rel="noopener noreferrer"&gt;PR on GitHub&lt;/a&gt;, &lt;a href="https://github.com/openjdk/jfx/commit/23c3580cc2d25b13dbf4cb8142afb51691c2cf5f" target="_blank" rel="noopener noreferrer"&gt;changeset&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Marius Hanl&lt;/strong&gt; integrated &lt;a href="https://mail-archive.com/openjfx-dev@openjdk.org/msg29563.html" target="_blank" rel="noopener noreferrer"&gt;8392149: Mark deprecated snap methods for removal in SkinBase&lt;/a&gt;, a heads-up for anyone writing custom skins: &amp;ldquo;&lt;em&gt;Since we will remove the snapping methods in &lt;code&gt;Region&lt;/code&gt; at one point, we should also do that in &lt;code&gt;SkinBase&lt;/code&gt;.&lt;/em&gt;&amp;rdquo; A continuation of JDK-8390773, reviewed by &lt;strong&gt;Kevin Rushforth&lt;/strong&gt; and &lt;strong&gt;Andy Goryachev&lt;/strong&gt;, integrated on 15 September. (&lt;a href="https://github.com/openjdk/jfx/pull/2311" target="_blank" rel="noopener noreferrer"&gt;PR on GitHub&lt;/a&gt;, &lt;a href="https://github.com/openjdk/jfx/commit/bb1789c15faadc866656a5ee2520e1ee4cabd95a" target="_blank" rel="noopener noreferrer"&gt;changeset&lt;/a&gt;)&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.infoq.com/news/2026/09/java27-released/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Michael Redlich&lt;/strong&gt; wrote up the Java 27 release for InfoQ, with a section on JavaFX 27&lt;/a&gt;: JavaFX 27 joins Helidon 27 and Jipher 20 as new additions to the Oracle &lt;a href="https://www.oracle.com/java/technologies/downloads/jvp/" target="_blank" rel="noopener noreferrer"&gt;Java Verified Portfolio&lt;/a&gt;, delivering a &amp;ldquo;&lt;em&gt;metal rendering pipeline on macOS for smoother performance on modern Apple hardware&lt;/em&gt;&amp;rdquo;, enhanced text editing controls, and continued accessibility improvements.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Alexander Matveev&lt;/strong&gt; integrated &lt;a href="https://marc.info/?l=openjdk-openjfx-dev&amp;amp;m=179004515064455&amp;amp;w=2" target="_blank" rel="noopener noreferrer"&gt;8331458: Replace qtdemux with MP4 demux based on Media Foundation&lt;/a&gt; in OpenJFX: &amp;ldquo;&lt;em&gt;Replaced &lt;code&gt;qtdemux&lt;/code&gt; with a Media Foundation-based MP4 demuxer on Windows. H.264 video from MP4 and fMP4 (HLS) is now decoded using Media Foundation instead of DirectShow. This change avoids several DirectShow issues encountered with the new MP4 demuxer and reduces implementation complexity.&lt;/em&gt;&amp;rdquo; The changeset also fixes 8305842 (video sometimes does not start when reinitializing on Windows 11). See &lt;a href="https://git.openjdk.org/jfx/pull/2206" target="_blank" rel="noopener noreferrer"&gt;PR #2206&lt;/a&gt; and &lt;a href="https://git.openjdk.org/jfx/commit/67f70684baa3f6168c9c0183e588c6d294d9f65d" target="_blank" rel="noopener noreferrer"&gt;commit 67f70684&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://mail-archive.com/openjfx-dev@openjdk.org/msg29755.html" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Michael Strauß&lt;/strong&gt; integrated a fix for rows disappearing in a TableView with a horizontal scrollbar&lt;/a&gt;: &amp;ldquo;&lt;em&gt;&lt;code&gt;VirtualFlow&lt;/code&gt; stores the scroll location in two values &amp;hellip; These two values can become inconsistent &amp;hellip; The patch is quite easy: it sets &lt;code&gt;absoluteOffset&lt;/code&gt; to zero when all cells fit.&lt;/em&gt;&amp;rdquo; See &lt;a href="https://git.openjdk.org/jfx/pull/2317" target="_blank" rel="noopener noreferrer"&gt;PR #2317&lt;/a&gt; and the &lt;a href="https://git.openjdk.org/jfx/commit/7f321a7015e001a2822b5b10e27701503acf0828" target="_blank" rel="noopener noreferrer"&gt;commit&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;Public Service Announcement (PSA) from &lt;strong&gt;milchshakee&lt;/strong&gt; &lt;a href="https://www.reddit.com/r/JavaFX/comments/1wmmdmb/psa_starting_with_jdk27_you_do_no_longer_need_to/" target="_blank" rel="noopener noreferrer"&gt;on Reddit&lt;/a&gt;: starting with JDK 27, you no longer need a separate &lt;code&gt;Main&lt;/code&gt; class to launch a JavaFX application from the classpath, per &lt;a href="https://bugs.openjdk.org/browse/JDK-8248122" target="_blank" rel="noopener noreferrer"&gt;JDK-8248122&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="applications"&gt;Applications&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1w0rmqc/i_made_a_local_music_player/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Former_Weather_1174&lt;/strong&gt; made a local music player&lt;/a&gt;. &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve made a local music player based on JavaFX. Although it&amp;rsquo;s still quite rudimentary, it already has all the necessary functions. I think some people might be interested in it. Here is the link to the &lt;a href="https://github.com/Muimi272/Kimusic" target="_blank" rel="noopener noreferrer"&gt;GitHub repository: Kimusic&lt;/a&gt;.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.linkedin.com/posts/helal-anwar-94571016b_java-javafx-opencv-ugcPost-7502853372006432768-VXi5/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Helal Anwar&lt;/strong&gt; shared a video of Passport Studio FX&lt;/a&gt;, a desktop application to simplify passport and ID photo preparation for local photo studios and print shops. It provides AI-powered background removal with MODNet and ONNX Runtime, manual cropping with passport-size aspect ratios, custom background colors, zoom controls, standard photo size presets, and A4 print-sheet generation with cutting borders. The tech stack is Java, JavaFX, FXML, OpenCV, ONNX Runtime, MODNet, Apache PDFBox, Maven, and jpackage for the Windows build. All images are processed locally, so nothing gets uploaded to the cloud.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1wal3zv/4_years_developing_im_proud_to_announce_numehub/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;LooseCartographer989&lt;/strong&gt; announced NumeHub on Reddit&lt;/a&gt;, claiming it is &lt;em&gt;&amp;ldquo;the largest JavaFX application ever built&amp;rdquo;&lt;/em&gt;: &amp;ldquo;&lt;em&gt;Four years ago I opened a JavaFX project to see how far the platform would go before it broke. It never broke. So I kept going.&lt;/em&gt;&amp;rdquo; NumeHub is a single desktop app that bundles projects, CRM, a point-of-sale system, WhatsApp and email campaigns, a file explorer, a browser and system monitoring, with an AI agent (built on MCP tools) on top that answers questions by voice or text. &amp;ldquo;&lt;em&gt;Millions of nodes. Under half a gig of RAM. A new release every week.&lt;/em&gt;&amp;rdquo; Runs on Windows and macOS (Apple Silicon and Intel) in English, Portuguese, Chinese and German; Linux is planned if there is demand. It&amp;rsquo;s not open source and &lt;a href="https://nume.solutions/download" target="_blank" rel="noopener noreferrer"&gt;downloads are here&lt;/a&gt;. The thread turned into a fun &amp;ldquo;who has the biggest JavaFX app&amp;rdquo; contest, with &lt;strong&gt;PartOfTheBotnet&lt;/strong&gt; (9 years, 5,440 commits), &lt;strong&gt;_DystopianSnowman&lt;/strong&gt; (13 years, ~90k LOC) and &lt;strong&gt;Siedlerchr&lt;/strong&gt; weighing in for JabRef.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1wi4552/sharing_my_tiny_project_please_check_it_out/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Thunder_ZEK&lt;/strong&gt; shared his tiny project on Reddit&lt;/a&gt;, Memento: &amp;ldquo;&lt;em&gt;It&amp;rsquo;s an application where you are asked 100 questions&amp;hellip; about your life, and answers to these 100 questions are basically in depth information about you and your life. So after answering you can download a PDF and share this to anybody.&lt;/em&gt;&amp;rdquo; Built with JDK 17, JavaFX 17, SQLite and OpenPDF, with all data staying on your device unless you export it. The &lt;a href="https://github.com/Savirar0/Memento" target="_blank" rel="noopener noreferrer"&gt;sources are on GitHub&lt;/a&gt;. He learned JavaFX from YouTube tutorials and built this over a few months to show he had picked it up - a Windows installer is included, but &amp;ldquo;&lt;em&gt;it&amp;rsquo;s only working on my laptop lol.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;The &lt;strong&gt;JabRef Team&lt;/strong&gt; released &lt;a href="https://github.com/JabRef/jabref/releases/tag/v6.0-beta.1" target="_blank" rel="noopener noreferrer"&gt;JabRef 6.0-beta.1&lt;/a&gt;, the first beta of the next major version of the JavaFX-based BibTeX/BibLaTeX reference manager. Highlights: almost everything is now navigable by keyboard with visual indicators, a fetcher for Software Heritage identifiers (SWHID), the community themes from &lt;a href="https://themes.jabref.org/" target="_blank" rel="noopener noreferrer"&gt;themes.jabref.org&lt;/a&gt; (Everforest, Nord, Papers, Chocolate Honey and more) selectable from the preferences with preview images, per-tab icons, and automatic reconnection to shared databases. &lt;a href="https://github.com/JabRef/jabref" target="_blank" rel="noopener noreferrer"&gt;Project on GitHub&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;NURI&lt;/strong&gt; demoed &lt;a href="https://www.youtube.com/watch?v=Cpjn4AeTFa0" target="_blank" rel="noopener noreferrer"&gt;StarLore, a gamified astronomy RPG desktop application&lt;/a&gt;: &amp;ldquo;&lt;em&gt;StarLore is a JavaFX-based desktop application that combines astronomy, mythology, exploration, and interactive gaming.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="components-libraries-tools"&gt;Components, Libraries, Tools&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;strong&gt;Erik Costlow&lt;/strong&gt; wrote a post on InfoQ about &lt;a href="https://www.infoq.com/news/2026/08/flexgantfx/" target="_blank" rel="noopener noreferrer"&gt;FlexGanttFX going Open Source&lt;/a&gt;: &amp;ldquo;&lt;em&gt;Dirk Lemmerman has open sourced FlexGanttFX, a resource-scheduling framework for generating Gantt charts. Lemmerman open sourced the library after 15 years as a way of increasing availability of the code for use while using the AGPL license as a way to address project maintenance.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1wjc3zr/luvml_21_is_on_maven_central_a_typesafe_java_dsl/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Guilty_Village_958&lt;/strong&gt; announced on Reddit&lt;/a&gt; that luvml 2.1 is on Maven Central, &amp;ldquo;&lt;em&gt;a type-safe Java DSL that treats your HTML, CSS, and Vue templates as one typed authoring language instead of three.&lt;/em&gt;&amp;rdquo; The one to watch for JavaFX developers is the sibling project &lt;a href="https://github.com/luvml/luvjfx" target="_blank" rel="noopener noreferrer"&gt;luvjfx&lt;/a&gt;, &amp;ldquo;&lt;em&gt;a terse, type-safe construction DSL for JavaFX&lt;/em&gt;&amp;rdquo;: nested calls instead of imperative setup, with the property methods machine-generated from JavaFX itself by reflection (367 capabilities across 51 node types), built-in one-way and two-way binding, and an escape hatch to the raw JavaFX API. No releases yet, so no Maven coordinates for luvjfx for now.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://bsky.app/profile/chadpreisler.bsky.social/post/3mvpxdc3m622z" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; needed a sorted list that stays usable at scale&lt;/a&gt;: &amp;ldquo;&lt;em&gt;I needed a sorted list in #JavaFX that could show millions of records in a TableView and still be usable.&lt;/em&gt;&amp;rdquo; The &lt;a href="https://github.com/jfxmodules/mods" target="_blank" rel="noopener noreferrer"&gt;mods&lt;/a&gt; project - &amp;ldquo;&lt;em&gt;New components for JavaFX or enhancements to existing JavaFX functionality&lt;/em&gt;&amp;rdquo; - was created several years ago, but recently got some threading fixes, improved string sorting and usage information in the readme.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Florian Enner&lt;/strong&gt; published the article behind the video we linked &lt;a href="https://www.jfx-central.com/links/2026-09-18" target="_blank" rel="noopener noreferrer"&gt;last week&lt;/a&gt;: &lt;a href="https://ennerf.github.io/2026/09/18/JavaFX-27-Native-Image-on-a-Raspberry-Pi-5.html" target="_blank" rel="noopener noreferrer"&gt;JavaFX 27 as a GraalVM Native Image on a Raspberry Pi 5&lt;/a&gt;. It compares Gluon Substrate (still on GraalVM 23 CE and JavaFX 21), BellSoft&amp;rsquo;s Liberica NIK, and his own &lt;a href="https://github.com/HebiRobotics/jfx-static-feature" target="_blank" rel="noopener noreferrer"&gt;StaticFX&lt;/a&gt;, which &amp;ldquo;&lt;em&gt;runs as a regular GraalVM Feature on the stock toolchain&lt;/em&gt;&amp;rdquo; and keeps all JavaFX modules working, including Media and Web. For the AtlantaFX Sampler on a Raspberry Pi 5, the time to the first window drops from 3.6s with jlink to 0.5s, and memory use after visiting all pages from 1,424 MB to 634 MB, in a binary of about 33 MB. The missing reachability metadata remains the biggest hurdle, &amp;ldquo;&lt;em&gt;but IMO the payoff is worth pushing through the initial barrier.&lt;/em&gt;&amp;rdquo;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Dirk Lemmermann&lt;/strong&gt; released &lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX/releases/tag/v4.5.0" target="_blank" rel="noopener noreferrer"&gt;GemsFX 4.5.0&lt;/a&gt;: &lt;code&gt;DialogPane&lt;/code&gt; gains a cancellable dialog feature so dialogs can be closed with the ESC key or a dedicated cancel button, the busy button was removed from &lt;code&gt;PowerPaneApp&lt;/code&gt; to streamline the dialog options, and &lt;code&gt;SVGUtil&lt;/code&gt; now uses a default loader context with jsvg updated to 2.2.0. &lt;a href="https://github.com/dlsc-software-consulting-gmbh/GemsFX" target="_blank" rel="noopener noreferrer"&gt;Project on GitHub&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;mkpaz&lt;/strong&gt; released &lt;a href="https://github.com/mkpaz/atlantafx/releases/tag/v3.0.0" target="_blank" rel="noopener noreferrer"&gt;AtlantaFX 3.0.0&lt;/a&gt;, a major update to the JavaFX theme collection: adds window decorations, a Scene Builder plugin, a theme manager, and a new Sidebar component. See the &lt;a href="https://github.com/mkpaz/atlantafx/releases/tag/v3.0.0" target="_blank" rel="noopener noreferrer"&gt;release and changelog&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;The &lt;strong&gt;Techsenger&lt;/strong&gt; team introduced &lt;a href="https://github.com/techsenger/patternfx" target="_blank" rel="noopener noreferrer"&gt;PatternFX&lt;/a&gt; on &lt;a href="https://www.reddit.com/r/JavaFX/comments/1wkqrsf/patternfx_mvc_mvp_mvvm_templates_for_javafx/" target="_blank" rel="noopener noreferrer"&gt;Reddit&lt;/a&gt;: a framework providing MVC, MVP, and MVVM templates sharing a common architectural foundation. It models a window as a tree of dynamically composable components, each built with one of the three templates, and organizes inter-component communication through type-safe &amp;ldquo;ports&amp;rdquo; instead of a bus. Other features include component lifecycle support, component inheritance, history preservation, component-level logging, and an FXML-free design, with a demo implementing the same example in all three templates. Their &lt;a href="https://github.com/techsenger/shellfx" target="_blank" rel="noopener noreferrer"&gt;ShellFX&lt;/a&gt; platform is built on top of it.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="podcasts-videos-books"&gt;Podcasts, Videos, Books&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://bsky.app/profile/starbuxman.joshlong.com/post/3muyzvqkb6r23" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Josh Long&lt;/strong&gt; published two videos&lt;/a&gt; on combining Spring Boot, JavaFX, GraalVM native images and Spring Security to build desktop applications: &amp;ldquo;&lt;em&gt;native, lightning-fast, dynamic, efficient, reusable desktop applications that run well on Mac, Windows, and Linux, and look amazing, while taking small fractions of the RAM of a similar Electron-based application&lt;/em&gt;&amp;rdquo;. Also mentioned in &lt;a href="https://spring.io/blog/2026/09/08/this-week-in-spring-september-8th-2026" target="_blank" rel="noopener noreferrer"&gt;This Week in Spring, September 8th, 2026&lt;/a&gt;.&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://youtu.be/Od2NDwHED58" target="_blank" rel="noopener noreferrer"&gt;The Ultimate Desktop Client Stack: Building High-Performance Apps with Spring Boot &amp;amp; JavaFX&lt;/a&gt; shows how to use Spring Boot and JavaFX together, &amp;ldquo;&lt;em&gt;so that you get the component model, event dispatch subsystem, internationalization, lifecycle management, and, of course, the entire and very rich ecosystem of Spring components and can use them to manage JavaFX components, too&lt;/em&gt;&amp;rdquo;, and ends with native image compilation.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://youtu.be/gB7FIbxMEos" target="_blank" rel="noopener noreferrer"&gt;Build Secure Desktop Apps with JavaFX, Spring Boot &amp;amp; PKCE OAuth 2.0&lt;/a&gt; looks at using Spring Security&amp;rsquo;s OAuth client in the context of a desktop application, &amp;ldquo;&lt;em&gt;which can not, by definition, hold a client secret&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;Florian Enner&lt;/strong&gt; published a short video, &lt;a href="https://www.youtube.com/watch?v=GA_iAnxznO8" target="_blank" rel="noopener noreferrer"&gt;JavaFX 27 Native Image running AtlantaFX Sampler on Raspberry Pi 5&lt;/a&gt;, showing the AtlantaFX Sampler - which uses all controls and nearly all features JavaFX offers - as an ahead-of-time (AOT) compiled JavaFX 27 Native Image created with the latest Oracle GraalVM 25.3: &amp;ldquo;&lt;em&gt;Everything works, including javafx.media, javafx.web, as well as the desktop integration to open files.&lt;/em&gt;&amp;rdquo; The native image is built with his &lt;a href="https://github.com/HebiRobotics/jfx-static-feature" target="_blank" rel="noopener noreferrer"&gt;jfx-static-feature&lt;/a&gt;, a GraalVM Feature that statically links the JavaFX native code into a standalone executable, with support for rich text, WebView and media on Windows, Linux and macOS, on both Intel and ARM.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://youtu.be/76pWS0WFu_U" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Artistic_Solution117&lt;/strong&gt; shared a video&lt;/a&gt; of a &amp;ldquo;&lt;em&gt;Second test of Java-EARTH-GLOBE-1. Pure JavaFX Google Earth / Nasa Worldwind like viewer in a single shot. On-the-fly on the JVM were the agent runs. Built with gemini 3.8 flash with 24-core raytracing and local disk caching&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://bsky.app/profile/chadpreisler.bsky.social/post/3mvpvd2towc2z" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Chad Preisler&lt;/strong&gt; shared a demo video of a pure JavaFX Kafka client&lt;/a&gt;: &amp;ldquo;&lt;em&gt;Check out my Pure #JavaFX Kafka Client application. This project has come a long way since I first showed it. I find it incredibly useful. I hope you like it.&lt;/em&gt;&amp;rdquo; The &lt;a href="https://youtu.be/lsiJBYTlxVs" target="_blank" rel="noopener noreferrer"&gt;Visual Kafka (VK) Demo&lt;/a&gt; walks through the result on the &lt;strong&gt;Chad Preisler&lt;/strong&gt; YouTube channel. We linked a very early version of this, then still &amp;ldquo;a very basic Kafka topic viewer&amp;rdquo;, back in &lt;a href="https://www.jfx-central.com/links/2023-02-24" target="_blank" rel="noopener noreferrer"&gt;February 2023&lt;/a&gt;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="tutorials"&gt;Tutorials&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://rottenwifi.com/creating-a-simple-3d-platformer-game-using-javafx/" target="_blank" rel="noopener noreferrer"&gt;Creating a Simple 3D Platformer Game Using JavaFX&lt;/a&gt; is a step-by-step guide by the &lt;strong&gt;RottenWiFi Team&lt;/strong&gt; that builds a playable 3D platformer prototype with a player character, multiple platforms, gravity, WASD movement and jumping, axis-aligned bounding-box collision detection, respawning after a fall, and a goal platform. It starts from a Maven setup and camera configuration and works through frame-rate-independent movement and per-axis collision resolution. The focus is on the fundamentals — scene graphs, coordinate systems and physics — rather than on production tooling, as &amp;ldquo;&lt;em&gt;JavaFX is a framework for desktop applications with 3D graphics features, not a complete commercial game engine&lt;/em&gt;&amp;rdquo;.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="miscellaneous"&gt;Miscellaneous&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.reddit.com/r/javahelp/comments/1wckpbm/building_a_javafx_hibernate_talent_acquisition/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;Nirvex1&lt;/strong&gt; is looking for advice on Reddit&lt;/a&gt; while building a desktop Talent Acquisition System with Java 11, JavaFX, Maven, Hibernate and MariaDB: &amp;ldquo;&lt;em&gt;One of the more challenging parts so far has been managing around 17 different FXML views and connecting all of them properly with their controllers. I also had to spend quite a bit of time understanding &lt;code&gt;module-info.java&lt;/code&gt;, resource paths, and how everything fits together in a modular JavaFX application. Thankfully, that part is finally stable.&lt;/em&gt;&amp;rdquo; The questions are about Hibernate session management and &lt;code&gt;LazyInitializationException&lt;/code&gt;, how to run database queries without freezing the UI, and which threading patterns and architectural choices keep a large multi-view JavaFX application maintainable. The first answers mostly argue for putting a backend service between the desktop client and the database instead of connecting to it directly.&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1wjhtou/how_can_javafx_attract_more_developers/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;enthalpyzx&lt;/strong&gt; started a discussion on Reddit&lt;/a&gt;, &amp;ldquo;How can JavaFX attract more developers?&amp;rdquo;, from the perspective of someone who hasn&amp;rsquo;t written a JavaFX application yet but likes what they see: &amp;ldquo;&lt;em&gt;I&amp;rsquo;ve noticed that JavaFX is very capable of doing incredible things that I had never imagined.&lt;/em&gt;&amp;rdquo; The open questions are how multiplatform JavaFX really is, whether applications can look native on every desktop (with &lt;a href="https://www.jfx-central.com/libraries/atlantafx" target="_blank" rel="noopener noreferrer"&gt;AtlantaFX&lt;/a&gt; mentioned as the likely answer, next to wrappers like Java-GI and QtJambi), why things like tray icons and notifications still need AWT, and above all the lack of a single recommended way of working: &amp;ldquo;&lt;em&gt;I would like Gluon or Oracle to stand up and say: look, this is how things work now, this is how you work for desktop apps, this is how you work for mobile apps, this is the library you have to use.&lt;/em&gt;&amp;rdquo; Also asked: are &lt;a href="https://www.jfx-central.com/books/definitiveguide2modernjavaclients" target="_blank" rel="noopener noreferrer"&gt;The Definitive Guide to Modern Java Clients with JavaFX&lt;/a&gt; and &lt;a href="https://www.jfx-central.com/books/learnjfx17" target="_blank" rel="noopener noreferrer"&gt;Learn JavaFX 17&lt;/a&gt; a good starting point?&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.reddit.com/r/JavaFX/comments/1wp4u70/javafx_in_the_browser/" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;indyjoe&lt;/strong&gt; asked on Reddit&lt;/a&gt; for good options to run JavaFX in the browser with minimal rewriting, still allowing a desktop version, supporting a large per-client data model, and scaling to hundreds of concurrent users. The discussion weighs WebFX (promising but limited control support and mostly a one-person project), CheerpJ (good for AWT/Swing, no timeline for JavaFX), Gluon (an old prototype not being updated without funded support), JPro (server-side rendering, a concern for apps with large per-user data), and whether a GraalVM-to-WASM path is even possible.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;h2 id="jfx-central"&gt;JFX Central&lt;/h2&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;The JavaFX Links Of The Week of August got &lt;a href="https://foojay.io/today/javafx-links-of-august-2026/"&gt;bundled and published on Foojay.io&lt;/a&gt;.&lt;/li&gt;&#10;&lt;li&gt;New content on JFX Central:&#10;&lt;ul&gt;&#10;&lt;li&gt;People: &lt;a href="https://www.jfx-central.com/people/j.long" target="_blank" rel="noopener noreferrer"&gt;Josh Long&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;Videos by Josh:&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.jfx-central.com/videos/Od2NDwHED58" target="_blank" rel="noopener noreferrer"&gt;The Ultimate Desktop Client Stack: Building High-Performance Apps with Spring Boot &amp;amp; JavaFX&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.jfx-central.com/videos/gB7FIbxMEos" target="_blank" rel="noopener noreferrer"&gt;Build Secure Desktop Apps with JavaFX, Spring Boot &amp;amp; PKCE OAuth 2.0&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;Tutorials based on these videos:&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="https://www.jfx-central.com/learn-javafx/spring-boot" target="_blank" rel="noopener noreferrer"&gt;JavaFX and Spring Boot&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="https://www.jfx-central.com/learn-javafx/spring-boot-oauth" target="_blank" rel="noopener noreferrer"&gt;Securing a JavaFX desktop application with Spring Security and OAuth 2.0&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;/ul&gt;</description></item><item><title>Lies, Damn Lies and Benchmarks</title><link>https://foojay.io/today/performance-work-between-benchmarks/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/performance-work-between-benchmarks/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/performance-work-between-benchmarks/performance-work-between-benchmarks-add0d8fe44.jpg" alt="Lies, Damn Lies And Benchmarks" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;There&amp;rsquo;s an old joke about three kinds of lies: &lt;a href="https://www.spec.org/osg/news/articles/news9412/lies.html" target="_blank" rel="noopener noreferrer"&gt;lies, damn lies, and benchmarks&lt;/a&gt;. Codename One did very well in our benchmarks. But were they accurate? Were they representative?&lt;/p&gt;&#10;&lt;aside style="border-left: 4px solid #007aff; padding: 14px 18px; margin: 24px 0; border-radius: 4px; font-size: 0.95em;"&gt;&lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/"&gt;codenameone.com&lt;/a&gt;.&lt;/aside&gt;&#10;&lt;p&gt;Performance is the fitted sheet of programming. Just when you get the damn corner into place, the rest of the bed is a complete mess.&lt;/p&gt;</description></item><item><title>My love-hate relationship with Java formatters</title><link>https://foojay.io/today/my-love-hate-relationship-with-java-formatters/</link><pubDate>Wed, 30 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/my-love-hate-relationship-with-java-formatters/</guid><description>&lt;p&gt;Disclaimer: I don&amp;rsquo;t want to turn this into &amp;ldquo;Java formatters week&amp;rdquo;, but I started my own project a while ago, and I think it&amp;rsquo;s time for it to come out of stealth mode.&lt;/p&gt;&#10;&lt;p&gt;I&amp;rsquo;ve been writing Java for many, many years, and the Sun Code Conventions were my favorite bedside reading. I&amp;rsquo;ve seen plenty of variations over the years, and even after they became the Oracle Code Conventions, they were still the same few-page guide on how to write a hello-world app with the standard class library. For some reason I never took to the Google conventions: too C-flavored, with tiny indents, too few columns on the screen, and so on.&lt;/p&gt;</description></item><item><title>The Java 21 Doomsday Clock Countdown</title><link>https://foojay.io/today/the-java-21-doomsday-clock-countdown/</link><pubDate>Tue, 29 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/the-java-21-doomsday-clock-countdown/</guid><description>&lt;h2 id="the-java-21-countdown-is-pressing"&gt;The Java 21 Countdown Is Pressing&lt;/h2&gt;&#10;&lt;p&gt;Oracle JDK 21 was free to use in production under Oracle&amp;rsquo;s No-Fee Terms and Conditions (NFTC) license. That free ride is over. Oracle&amp;rsquo;s licensing rule ties free NFTC use to one year after the next Long Term Support (LTS) release ships, and since Java 25 became generally available on September 16, 2025, the license window closed on September 16, 2026.&lt;/p&gt;&#10;&lt;p&gt;The date that matters now is &lt;strong&gt;October 20, 2026&lt;/strong&gt;. That is Oracle&amp;rsquo;s next quarterly update — the first batch of Java 21 patches, including Critical Security Patch Updates (CSPUs), that no longer reaches you under the free license. Every Java 21 fix from that day forward requires a paid Oracle subscription. This is not a one-time event: the same mechanism already retired free updates for Java 17, and it will retire Java 25&amp;rsquo;s free updates in turn once Java 29 ships. It&amp;rsquo;s a recurring toll booth built into Oracle&amp;rsquo;s licensing terms.&lt;/p&gt;</description></item><item><title>How much will post-quantum migration cost your Java codebase?</title><link>https://foojay.io/today/how-much-will-post-quantum-migration-cost-your-java-codebase/</link><pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/how-much-will-post-quantum-migration-cost-your-java-codebase/</guid><description>&lt;p&gt;The post-quantum transition has stopped being a research topic and become a set of dates. NIST finalized ML-KEM (FIPS 203), ML-DSA (FIPS 204) and SLH-DSA (FIPS 205) in August 2024. NIST IR 8547 deprecates RSA, ECDSA, (EC)DH and the rest after 2030 and disallows them after 2035, and similar timelines are turning up in government guidance elsewhere.&lt;/p&gt;&#10;&lt;p&gt;So the destination is settled. For most Java teams the hard question is not &lt;em&gt;what&lt;/em&gt; to migrate to. It is &lt;em&gt;how much&lt;/em&gt; the migration will cost for their specific codebase, and where the expensive parts are hiding. That question has been oddly hard to answer, and most of the post-quantum migration tooling I could find targets C, C++ and Rust, even though a great deal of enterprise cryptography runs on the JVM.&lt;/p&gt;</description></item><item><title>Testing Kafka Consumer Recovery Contracts With Testcontainers and JUnit</title><link>https://foojay.io/today/testing-kafka-consumer-recovery-contracts-with-testcontainers-and-junit/</link><pubDate>Mon, 28 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/testing-kafka-consumer-recovery-contracts-with-testcontainers-and-junit/</guid><description>&lt;p&gt;A Kafka consumer can pass a unit test and still fail when production redelivers a&#10;record.&lt;/p&gt;&#10;&lt;p&gt;That happens because the unit test usually checks the handler, not the recovery&#10;contract. It verifies that one message produces one expected side effect. It&#10;rarely verifies what happens when the same event arrives twice, when a malformed&#10;record reaches the topic, or when the consumer applies a side effect and then&#10;crashes before committing the offset.&lt;/p&gt;</description></item><item><title>AI-assisted genealogy, a follow-up</title><link>https://foojay.io/today/ai-assisted-genealogy-follow-up/</link><pubDate>Sun, 27 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/ai-assisted-genealogy-follow-up/</guid><description>&lt;p&gt;I got a lot of feedback on my post &lt;a href="https://blog.frankel.ch/ai-assisted-genealogy/" target="_blank" rel="noopener noreferrer"&gt;AI-assisted genealogy&lt;/a&gt;, some good, some not so good. In any case, I felt the subject was interesting to a lot of people. Meanwhile, I continue working on my tree, and I have deepened my understanding of the subject. In this post, I want to share again.&lt;/p&gt;&#10;&lt;h2 id="trust-but-verify"&gt;Trust, but verify&lt;/h2&gt;&#10;&lt;p&gt;Let&amp;rsquo;s address the not-so-good feedback first. The gist of it was: AI can hallucinate. It&amp;rsquo;s true in theory: when you ask a question, it provides any answer. The pushback is much less valid when the answer is grounded in data.&lt;/p&gt;</description></item><item><title>One Database, Two Models: Building AI-Friendly Java Applications with MySQL JSON Duality Views</title><link>https://foojay.io/today/one-database-two-models-mysql-json-duality-views-java/</link><pubDate>Sat, 26 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/one-database-two-models-mysql-json-duality-views-java/</guid><description>&lt;p&gt;MySQL can now hand your application a complete JSON document, such as an order with its customer and line items, while the data stays in normal relational tables. You can even send the document back and MySQL updates the right rows. I built a small Java app to see how far that goes. Reading got much simpler. Writing works too, but it comes with a few sharp edges you should know about before you use it.&lt;/p&gt;</description></item><item><title>BoxLang AI 3.4.0: Gateways, Human-in-the-Loop, and a Full Security Stack</title><link>https://foojay.io/today/boxlang-ai-340-gateways-hitl-security/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-340-gateways-hitl-security/</guid><description>&lt;p&gt;BoxLang AI 3.4.0 is a major release centered on a single theme: &lt;strong&gt;trust&lt;/strong&gt;. AI agents operating in real applications need ways to involve people in consequential decisions and manage potentially untrusted inputs. This release introduces gateways, a restructured Human-in-the-Loop subsystem with durable decisions, layered security controls, batched approvals, normalized provider reasoning, and broader AWS Bedrock support.&lt;/p&gt;&#10;&lt;p&gt;The sections below follow the original &lt;a href="https://www.ortussolutions.com/blog/boxlang-ai-340-gateways-human-in-the-loop-and-a-full-security-stack" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI 3.4.0 release announcement&lt;/a&gt; and preserve &lt;strong&gt;all its code examples&lt;/strong&gt;. For the complete change log, see the &lt;a href="https://ai.ortusbooks.com/readme/release-history/3.4.0" target="_blank" rel="noopener noreferrer"&gt;BoxLang AI 3.4.0 release history&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>VoIP, VPN, and the Build System Behind Them</title><link>https://foojay.io/today/voip-vpn-builders/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/voip-vpn-builders/</guid><description>&lt;p&gt;In 2019, a reader asked whether our WhatsApp clone included VoIP. &lt;a href="https://www.codenameone.com/blog/whatsapp-clone-ga/#comment-24081" target="_blank" rel="noopener noreferrer"&gt;I said no&lt;/a&gt;. It would require native integration, and the setup was too much for that project. For years, that was the line.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/voip-vpn-builders/voip-vpn-builders-bdff9b8012.jpg" alt="A phone, secure tunnel, and native build pipeline" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;aside style="border-left: 4px solid #007aff; padding: 14px 18px; margin: 24px 0; border-radius: 4px; font-size: 0.95em;"&gt;&lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/"&gt;codenameone.com&lt;/a&gt;.&lt;/aside&gt;&#10;&lt;p&gt;VPN sat behind the same line. These features do not live neatly inside the application process. On iOS, a VoIP push can arrive before the application installs a Java listener, yet CallKit expects the incoming call to reach the lock screen on its deadline. A Call Directory integration is a separate extension executable with its own lifecycle and signing identity. Managed VPN adds Network Extension entitlements and profile rules. Android solves the same jobs through &lt;code&gt;ConnectionService&lt;/code&gt;, &lt;code&gt;VpnManager&lt;/code&gt;, &lt;code&gt;VpnService&lt;/code&gt;, manifest declarations, and foreground-service rules.&lt;/p&gt;</description></item><item><title>Diagrams as Code: Mermaid Support on the new Foojay</title><link>https://foojay.io/today/diagrams-as-code-mermaid-support-on-foojay/</link><pubDate>Thu, 24 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/diagrams-as-code-mermaid-support-on-foojay/</guid><description>&lt;p&gt;Some things are much easier to show than to describe. A request travelling&#10;through three services, a class hierarchy, the states a connection moves&#10;through: a paragraph explaining it takes real effort to write and still leaves&#10;the reader assembling the picture themselves.&lt;/p&gt;&#10;&lt;p&gt;The usual answer is to open a drawing tool, export a PNG, and drop it in the&#10;article folder. That works, and it is what most Foojay articles have done so&#10;far. It also means the diagram is now a binary file that nobody can review,&#10;nobody can correct a typo in, and nobody can update without finding the original&#10;file again, assuming they still have it.&lt;/p&gt;</description></item><item><title>AsciiDoc Support on the new Foojay</title><link>https://foojay.io/today/asciidoc-support-on-foojay/</link><pubDate>Wed, 23 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/asciidoc-support-on-foojay/</guid><description>&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Markdown is a good default. It is easy to write, everybody already knows it, and for most articles it is exactly enough.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;For some articles it is not. If you have ever wanted to put a caption on a code block, number the interesting lines and explain them underneath, or set a warning apart from the paragraph before it, you have found the limits of Markdown.&lt;/p&gt;&#10;&lt;/div&gt;&#10;&lt;div class="paragraph"&gt;&#10;&lt;p&gt;Large parts of the Java ecosystem document in&#10;&lt;a href="https://asciidoc.org/"&gt;AsciiDoc&lt;/a&gt; for exactly this reason. So posts here on the new Hugo-driven Foojay, can now be written in it too.&#10;Thanks to &lt;a href="https://foojay.io/today/author/brice-dutheil/"&gt;Brice Dutheil&lt;/a&gt; for requesting&#10;this feature, and for naming exactly which parts of it he uses. And of course, &lt;a href="https://github.com/foojayio/website/blob/main/content/posts/2026/09/23/asciidoc-support-on-foojay/index.adoc"&gt;this post is written in AsciiDoc&lt;/a&gt; to show it off!&lt;/p&gt;&#10;&lt;/div&gt;</description></item><item><title>Announcing The New Foojay</title><link>https://foojay.io/today/announcing-the-new-foojay/</link><pubDate>Tue, 22 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/announcing-the-new-foojay/</guid><description>&lt;p&gt;Foojay has moved, but the address stays exactly where it was, just like every URL you have bookmarked, linked or cited. Everything behind that address is&#10;new. Foojay is now a static site, its entire content lives in a public Git&#10;repository, and publishing an article is a pull request.&lt;/p&gt;&#10;&lt;p&gt;If you only read one paragraph: &lt;strong&gt;nothing you have written has moved, and&#10;nothing you need to do has changed, except if you want to &lt;a href="https://foojay.io/today/how-to-submit-your-next-article-on-foojay-io/"&gt;contribute content&lt;/a&gt;.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>World geography gotchas</title><link>https://foojay.io/today/world-geography-gotchas/</link><pubDate>Sun, 20 Sep 2026 05:51:17 +0000</pubDate><guid>https://foojay.io/today/world-geography-gotchas/</guid><description>&lt;p&gt;Years ago, a colleague of mine told me about two pockets of foreign land surrounded by Switzerland: &lt;a href="https://osm.org/go/0Ck2o6xg-" target="_blank" rel="noopener noreferrer"&gt;Campione d&amp;rsquo;Italia&lt;/a&gt; and &lt;a href="https://osm.org/go/0C1ZlDk" target="_blank" rel="noopener noreferrer"&gt;Büsingen am Hochrhein&lt;/a&gt;, respectively Italy and Germany. Both are &lt;em&gt;enclaves&lt;/em&gt; of their respective country in Swiss territory:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;An enclave is a part of the territory of a state that is enclosed within the territory of another state. To distinguish the parts of a state entirely enclosed in a single other state, they are called true enclaves. A true enclave cannot be reached without passing through the territory of a single other state that surrounds it.&lt;/p&gt;</description></item><item><title>BoxLang 1.17.0 Released: Module Inception, CLI Checker, Jar Loading and much more!</title><link>https://foojay.io/today/boxlang-1-17-0-released-module-inception-cli-checker-jar-loading-and-much-more/</link><pubDate>Thu, 17 Sep 2026 20:20:32 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-17-0-released-module-inception-cli-checker-jar-loading-and-much-more/</guid><description>&lt;p&gt;&lt;strong&gt;BoxLang has always been an extensible language. As of 1.17.0, it is a hierarchically extensible one.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-17-0-released-module-inception-cli-checker-jar-loading-and-much-more/boxlang-v1.17.0-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Modules can now contain other modules; &lt;strong&gt;aka Module Inception&lt;/strong&gt; . Recursively. To any depth. Each nested module gets its own class loader, chained to its parent&amp;rsquo;s, and BoxLang&amp;rsquo;s own &lt;code&gt;ModuleService&lt;/code&gt; discovers, registers, activates, and unloads that entire tree itself. No package manager. No build tool. No install ordering. Drop in one artifact and everything it depends on comes with it, already wired up and already isolated. &lt;strong&gt;Not only that, you can now package modules into a single jar.&lt;/strong&gt;&lt;/p&gt;</description></item><item><title>What's New In The September 2026 Azul Payara Release?</title><link>https://foojay.io/today/whats-new-in-the-september-2026-azul-payara-release/</link><pubDate>Wed, 16 Sep 2026 16:46:54 +0000</pubDate><guid>https://foojay.io/today/whats-new-in-the-september-2026-azul-payara-release/</guid><description>&lt;p&gt;The September 2026 release brings Azul Payara Server &amp;amp; Micro 7.4.0, Payara Community 7.2026.9, as well as Azul Payara Server &amp;amp; Micro 6.42.0 5.91.0 &amp;amp; 4.1.2.191.59.&lt;/p&gt;&#10;&lt;p&gt;The headline for Azul Payara is MicroProfile 7.1. It shipped in the Community release last month; this cycle it arrives on both the commercial 7 and 6 lines. That upgrade brings one change that needs reading before you upgrade: MicroProfile OpenTracing has been removed, and the specification defines no automatic migration path.&lt;/p&gt;</description></item><item><title>Can You Explain the Diff Your AI Agent Just Wrote?</title><link>https://foojay.io/today/can-you-explain-the-diff-your-ai-agent-just-wrote/</link><pubDate>Tue, 15 Sep 2026 14:12:01 +0000</pubDate><guid>https://foojay.io/today/can-you-explain-the-diff-your-ai-agent-just-wrote/</guid><description>&lt;p&gt;Every Java developer has been in a code review where the question is simple: &amp;ldquo;What does this method do?&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;The answer used to tell you something. The developer who wrote it would describe the intent, the edge cases, the trade-off they considered and rejected. The code review was a conversation about the invariant the code protects.&lt;/p&gt;&#10;&lt;p&gt;Now the answer is sometimes: &amp;ldquo;The agent wrote it.&amp;rdquo;&lt;/p&gt;&#10;&lt;p&gt;The code compiles. The tests pass. The linter is clean. Nobody in the review can explain the architecture of the PR, including the person who submitted it.&lt;/p&gt;</description></item><item><title>How I Built an AI Assistant for My Career with Java, Spring AI, and MongoDB</title><link>https://foojay.io/today/how-i-built-an-ai-assistant-for-my-career-with-java-spring-ai-and-mongodb/</link><pubDate>Tue, 15 Sep 2026 11:51:17 +0000</pubDate><guid>https://foojay.io/today/how-i-built-an-ai-assistant-for-my-career-with-java-spring-ai-and-mongodb/</guid><description>&lt;p&gt;The best way to learn a technology is by putting it into practice in a real system.&lt;/p&gt;&#10;&lt;p&gt;A few months ago, I decided to build a virtual assistant that could answer questions about my career, help people learn more about my articles, videos, talks, and projects, and even schedule a call on my calendar.&#10;&lt;img src="https://foojay.io/today/how-i-built-an-ai-assistant-for-my-career-with-java-spring-ai-and-mongodb/unnamed-16-1024x937.png" alt="" width="1024" height="937" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;At first, the idea was simple: give the assistant access to my content and let people ask questions about it. But as the project evolved, I realized that not every question should be handled in the same way. Some questions can be answered with a direct query to the database, while others benefit from semantic search. In other cases, the assistant may need to use a tool or execute multiple steps before reaching an answer.&lt;/p&gt;</description></item><item><title>Hello Java 27! Have You Been Working Out?</title><link>https://foojay.io/today/hello-java-27-have-you-been-working-out/</link><pubDate>Tue, 15 Sep 2026 08:00:00 +0000</pubDate><guid>https://foojay.io/today/hello-java-27-have-you-been-working-out/</guid><description>&lt;p&gt;It&amp;rsquo;s been six months since we saw a new Java release, and this new edition seems to be ready to flex its muscles. With numerous improvements to performance and security, Java 27 is like that friend that you haven&amp;rsquo;t seen all summer, and when you finally see them again it&amp;rsquo;s clear that they spent a lot of time in the gym!&lt;/p&gt;&#10;&lt;p&gt;This post focuses on everything that has been added in this release, giving you a brief introduction to each of the features. Where applicable the differences with Java 26 are highlighted and a few typical use cases are provided, so that you&amp;rsquo;ll be more than ready to start using these features after reading this.&lt;/p&gt;</description></item><item><title>Foojay Podcast #101: Java 27 in Practice: Smaller Heaps, Smarter Defaults, and Valhalla on the Horizon</title><link>https://foojay.io/today/foojay-podcast-101/</link><pubDate>Mon, 14 Sep 2026 06:11:42 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-101/</guid><description>&lt;p&gt;JDK 27 arrives on 15 September 2026, and it is a feature release rather than a Long-Term Support one. That distinction matters less than it sounds: as Simon Ritter points out, all OpenJDK releases are delivered the same way, and &amp;ldquo;long-term support&amp;rdquo; is a property of the binary distributions you install, not of the platform itself. What JDK 27 does have is two changes that switch on by default and cost you nothing but the upgrade. Compact object headers shrink the per-object header from 64 bits to 32, which the JEP measures at a 22% reduction in heap and 8% in CPU on SPECjbb2015 — and because it is internal to the JVM, a JAR you built years ago benefits without a single line changing. Alongside it, G1 becomes the default garbage collector everywhere, including the small, single-core machines that used to fall back to the serial collector.&lt;/p&gt;</description></item><item><title>Come for Java. Get a Whole Lot More.</title><link>https://foojay.io/today/come-for-java-get-a-whole-lot-more/</link><pubDate>Fri, 11 Sep 2026 09:33:46 +0000</pubDate><guid>https://foojay.io/today/come-for-java-get-a-whole-lot-more/</guid><description>&lt;p&gt;JCON USA returns inside IBM TechXchange 2026 with two rooms of deep Java content, a dedicated community home, and direct access to one of the years biggest technical conferences.&lt;/p&gt;&#10;&lt;h2 id="from-orlando-to-atlanta"&gt;From Orlando to Atlanta&lt;/h2&gt;&#10;&lt;p&gt;Last year, we tried something new. We brought JCON USA into IBM TechXchange and created a Java community conference inside a much larger technology event. The result showed us that these two worlds fit together remarkably well. JCON brought the independent, developer-to-developer spirit of the Java community. TechXchange provided the scale, infrastructure, learning opportunities, and access to experts that only a major international conference can offer.&lt;/p&gt;</description></item></channel></rss>