<?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>Thu, 15 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foojay.io/today/index.xml" rel="self" type="application/rss+xml"/><item><title>Lightweight Spring Boot Monitoring Without Prometheus and Grafana</title><link>https://foojay.io/today/lightweight-spring-boot-monitoring/</link><pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/lightweight-spring-boot-monitoring/</guid><description>&lt;p&gt;Running one Spring Boot application or a handful of them on a VPS still calls for basic operational visibility. You need to know whether an application is reachable, whether errors are rising, and whether it restarted. You may not need a complete monitoring platform to answer those questions.&lt;/p&gt;&#10;&lt;p&gt;Spring Boot Actuator already exposes much of that information through its health endpoint and Micrometer metrics. &lt;a href="https://github.com/PVRLabs/statlite" target="_blank" rel="noopener noreferrer"&gt;StatLite&lt;/a&gt; turns it into a focused dashboard for health, requests, errors, latency, memory, uptime, and restarts. It runs as one Go binary and stores its history in SQLite.&lt;/p&gt;</description></item><item><title>Scraping websites and bot-protection</title><link>https://foojay.io/today/bypass-bot-protection/</link><pubDate>Thu, 15 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/bypass-bot-protection/</guid><description>&lt;p&gt;While searching for my ancestors, I had to access data from many different websites. I noticed there were different levels of protection against automated access depending on the site. In this post, I&amp;rsquo;ll list them and mention countermeasures you can take to bypass them anyway.&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Warning:&lt;/strong&gt; As a private person using the data for my own personal use, I have no qualms about bypassing the protection. It can be considered fair use. However, I don&amp;rsquo;t know about your context, and I&amp;rsquo;m not saying you should. Scrape responsibly.&lt;/p&gt;</description></item><item><title>One Embedding per Job, or Two? Measuring Semantic Search in a Spring Boot Job Portal</title><link>https://foojay.io/today/embedding-strategies-job-search/</link><pubDate>Wed, 14 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/embedding-strategies-job-search/</guid><description>&lt;p&gt;This job portal started as a practice project. I built it after college, mostly so I&amp;rsquo;d have something to put on my resume. Recently I picked it up again. I was job hunting myself, looking for a switch, and it struck me that I should develop it properly, and maybe even launch it someday.&lt;/p&gt;&#10;&lt;p&gt;The first thing that bothered me was search. The results just weren&amp;rsquo;t good, so I started reading about how to make them better.&lt;/p&gt;</description></item><item><title>What I Learned Building an AI Code Reviewer with Java and Spring Boot</title><link>https://foojay.io/today/what-i-learned-building-an-ai-code-reviewer-with-java-spring-boot/</link><pubDate>Wed, 14 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/what-i-learned-building-an-ai-code-reviewer-with-java-spring-boot/</guid><description>&lt;p&gt;AI-assisted coding has changed how quickly developers can write software.&lt;/p&gt;&#10;&lt;p&gt;But that creates another question:&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;How do you review all that generated code effectively?&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;That question led me to build CodeGuard AI, a self-hosted AI code-review application for GitHub Pull Requests using Java and Spring Boot.&lt;/p&gt;&#10;&lt;p&gt;At first, the architecture seemed simple:&lt;/p&gt;&#10;&lt;pre class="EnlighterJSRAW" data-enlighter-language="generic"&gt;GitHub Pull Request&#10; ↓&#10; LLM&#10; ↓&#10; Review&lt;/pre&gt;&lt;p&gt;In practice, that wasn&amp;rsquo;t enough.&#10;The interesting engineering work was everything around the model: collecting useful Pull Request context, defining review instructions, structuring the model response, assessing findings, and integrating the result back into the GitHub workflow.&#10;This article explains what I learned while building that workflow.&lt;/p&gt;</description></item><item><title>What's New In The October 2026 Azul Payara Release?</title><link>https://foojay.io/today/whats-new-in-the-october-2026-azul-payara-release/</link><pubDate>Wed, 14 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/whats-new-in-the-october-2026-azul-payara-release/</guid><description>&lt;p&gt;The October 2026 release brings Payara Community 7.2026.10, as well as Azul Payara Server &amp;amp; Micro 7.5.0, 6.43.0, 5.92.0 &amp;amp; 4.1.2.191.60.&lt;/p&gt;&#10;&lt;p&gt;The headline for Payara Community is day-to-day operations. SSH nodes no longer require elevated permissions, two new commands, delete-jvm-option and delete-system-properties, make configuration easier to manage from the command line, and a run of fixes resolves problems that show up in real deployments, from applications failing to deploy after a domain restart to concurrent deployments failing. Three of the changes in this release were contributed by the community (thank you!).&lt;/p&gt;</description></item><item><title>Introduction to Error Prone: How to Catch Bugs at Compile Time</title><link>https://foojay.io/today/introduction-to-error-prone-how-to-catch-bugs-at-compile-time/</link><pubDate>Tue, 13 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/introduction-to-error-prone-how-to-catch-bugs-at-compile-time/</guid><description>&lt;p&gt;The Java compiler&amp;rsquo;s job is to check whether code follows the rules of the language. Trying to remove an element from a collection that can never contain it, or using the wrong letter in a date pattern, does not break those rules, so nothing stops the code from compiling. In short, any code that follows the rules compiles, even when it does not do what its author intended.&lt;/p&gt;&#10;&lt;h2 id="what-is-error-prone"&gt;What is Error Prone?&lt;/h2&gt;&#10;&lt;p&gt;&lt;a href="https://errorprone.info/" target="_blank" rel="noopener noreferrer"&gt;Error Prone&lt;/a&gt; is an open source static analysis tool that Google built to fill this gap. Unlike most static analysis tools, it does not run as a separate step; it plugs into &lt;code&gt;javac&lt;/code&gt; as a plugin. Using the information the compiler produces while analyzing the code, it looks for patterns that follow the rules of the language but are most likely wrong, and reports them as compiler warnings or errors.&lt;/p&gt;</description></item><item><title>Testing Jakarta EE: Three Layers, Three Tools</title><link>https://foojay.io/today/testing-jakarta-ee-three-layers-three-tools/</link><pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/testing-jakarta-ee-three-layers-three-tools/</guid><description>&lt;p&gt;Testing a Jakarta EE application is awkward because the behaviour you care about often doesn&amp;rsquo;t exist until a container assembles it. Mock everything and your tests pass while proving very little. Deploy everything and you get slow scenarios nobody runs during development.&lt;/p&gt;&#10;&lt;p&gt;A recent three-part series by Simon Laden, &lt;em&gt;Testing Jakarta EE: Three Layers, Three Tools&lt;/em&gt;, shows how WeldInitiator, Arquillian and Testcontainers each answer a different question. All three parts run on the same example project, &lt;a href="https://github.com/payara/Payara-Examples/tree/main/ecosystem/testcontainers-example" target="_blank" rel="noopener noreferrer"&gt;testcontainers-example&lt;/a&gt;, a small library management system running on Azul Payara Micro. Here is a quick guide to the series.&lt;/p&gt;</description></item><item><title>Your agents don't need an LLM to negotiate</title><link>https://foojay.io/today/your-agents-dont-need-an-llm-to-negotiate/</link><pubDate>Mon, 12 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/your-agents-dont-need-an-llm-to-negotiate/</guid><description>&lt;p&gt;In agents that negotiate, the negotiating usually ends up inside a language model. You describe&#10;the situation in a prompt, the model answers, and you parse what comes back. It works, and it&#10;costs a network round trip and a line on a bill for every decision.&lt;/p&gt;&#10;&lt;p&gt;For the narrow case of handing work to whoever should do it, there&amp;rsquo;s a protocol that predates&#10;all of this. It&amp;rsquo;s called Contract Net, and it&amp;rsquo;s small enough to read in an afternoon.&#10;&lt;a href="https://github.com/mauro-mura/agenor" target="_blank" rel="noopener noreferrer"&gt;Agenor&lt;/a&gt; ships it. The example below has a manager hand a job to one of three workers in a single JVM, and its imports&#10;contain nothing from any model provider.&lt;/p&gt;</description></item><item><title>Media Partner for OCX27 and jChampions Conference 2027</title><link>https://foojay.io/today/media-partner-for-ocx27-and-jchampions-conference/</link><pubDate>Sun, 11 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/media-partner-for-ocx27-and-jchampions-conference/</guid><description>&lt;p&gt;Foojay is proud to be a media partner for two very different, but equally&#10;great, events coming up: &lt;strong&gt;OCX 2027&lt;/strong&gt; in Brussels and the fully online&#10;&lt;strong&gt;jChampions Conference 2027&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;h2 id="ocx-2027"&gt;OCX 2027&lt;/h2&gt;&#10;&lt;p&gt;We&amp;rsquo;re excited to be a media partner of &lt;a href="https://ocxconf.org/" target="_blank" rel="noopener noreferrer"&gt;Open Community Experience&#10;(OCX) 2027&lt;/a&gt;. From &lt;strong&gt;13–15 April 2027&lt;/strong&gt;, developers,&#10;maintainers, researchers, engineering leaders, and open source communities&#10;from around the world will meet at &lt;strong&gt;Tour &amp;amp; Taxis&lt;/strong&gt; in Brussels, Belgium.&lt;/p&gt;</description></item><item><title>Keep WordPress If You're Looking for Trouble... Or Read This!</title><link>https://foojay.io/today/keep-wordpress-if-youre-looking-for-trouble/</link><pubDate>Sat, 10 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/keep-wordpress-if-youre-looking-for-trouble/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;&lt;em&gt;I wrote this article by hand. AI was used to review grammar, style, and fact-check the data.&lt;/em&gt;&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;WordPress made it easy for anyone to build a website. So easy that &lt;a href="https://w3techs.com/technologies/details/cm-wordpress" target="_blank" rel="noopener noreferrer"&gt;43% of the web&lt;/a&gt; runs on it. Twenty years later, it&amp;rsquo;s just as easy for anyone to break into one. If that sounds dramatic, keep reading. You can also &lt;a href="https://foojay.io/today/foojay-podcast-102/"&gt;listen to our podcast&lt;/a&gt; on the topic.&lt;/p&gt;&#10;&lt;p&gt;11K plugin vulnerabilities in 2025/26 (+42% YoY), exploit time on critical vulnerabilities: 5 hours (&lt;a href="https://patchstack.com/whitepaper/state-of-wordpress-security-in-2026/" target="_blank" rel="noopener noreferrer"&gt;source&lt;/a&gt;). The question is not if they can pwn your website, it is when.&lt;/p&gt;</description></item><item><title>How to Create Agent Skills: Tools, Testing, and Installation</title><link>https://foojay.io/today/how-to-create-test-install-agent-skills/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/how-to-create-test-install-agent-skills/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;In short.&lt;/strong&gt; Start with a task that keeps coming up and turn it into a Skill with &lt;code&gt;superpowers:writing-skills&lt;/code&gt;. While creating it, test scenarios with and without the Skill, and validate the structure of &lt;code&gt;SKILL.md&lt;/code&gt;. Then use the Skill on several real tasks. If it consistently helps, share it with your team through a Skills repository or a Plugin.&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;Creating your first Agent Skill is easy. Make a folder, put a &lt;code&gt;SKILL.md&lt;/code&gt; file in it, and write a few instructions.&lt;/p&gt;</description></item><item><title>Introducing cbGenesis: The AI-Native ColdBox Starter for BoxLang</title><link>https://foojay.io/today/introducing-cbgenesis-ai-native-coldbox-starter-for-boxlang/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/introducing-cbgenesis-ai-native-coldbox-starter-for-boxlang/</guid><description>&lt;p&gt;&lt;strong&gt;Ortus Solutions today announces the general availability of &lt;a href="https://cbgenesis.coldbox.org" target="_blank" rel="noopener noreferrer"&gt;cbGenesis 1.0&lt;/a&gt;, a production-ready ColdBox HMVC starter template for BoxLang, and the first one designed from day one to be built &lt;em&gt;with&lt;/em&gt; an AI coding agent, not just &lt;em&gt;by&lt;/em&gt; one.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;"&gt;&#10;&#9;&#9;&#9;&lt;iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/wbiZTAPrYQs?autoplay=0&amp;amp;controls=1&amp;amp;end=0&amp;amp;loop=0&amp;amp;mute=0&amp;amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="Introducing cbGenesis"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;p&gt;For twenty years, &lt;strong&gt;ColdBox&lt;/strong&gt; has been one of the most battle-tested HMVC frameworks in the CFML and BoxLang world. &lt;strong&gt;cbGenesis&lt;/strong&gt; takes that foundation and ships the part every team rebuilds by hand: authentication, permissions, security hardening, an admin panel, tests, and the guidance an AI agent needs to extend all of it correctly.&lt;/p&gt;</description></item><item><title>We Didn't Want to Build Another Java Server</title><link>https://foojay.io/today/why-another-java-server/</link><pubDate>Fri, 09 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/why-another-java-server/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/why-another-java-server/why-another-java-server-f8959ffdf0.jpg" alt="Small servers, one Java stack" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="why-build-another-java-server"&gt;Why Build Another Java Server?&lt;/h2&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;The last thing we wanted to build was another Java server framework. We have Spring, Micronaut, Quarkus, and enough ways to answer an HTTP request to fill a conference schedule.&lt;/p&gt;</description></item><item><title>Introducing Jenesis: You Already Wrote the Build Script</title><link>https://foojay.io/today/introducing-jenesis/</link><pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/introducing-jenesis/</guid><description>&lt;p&gt;Over the last decade, Java has changed considerably. The language gained modules, records and virtual threads, and the platform moved to a release every six months. The way we build Java applications, however, has barely changed. A &lt;code&gt;pom.xml&lt;/code&gt; or a &lt;code&gt;build.gradle.kts&lt;/code&gt; still restates what the code already declares, such as the project&amp;rsquo;s name, its dependencies and its main class. On top of that, every step beyond the defaults adds a block of configuration and typically another plugin, until the build has become a second program that needs to be maintained beside the first. And before a single line of code is compiled, a wrapper first downloads the build tool itself, which in the case of Gradle are 152 MB. This article introduces Jenesis, a build tool that I have written to approach this problem from a different angle.&lt;/p&gt;</description></item><item><title>try.boxlang.io Now Runs Every BoxLang Version, With or Without CFML</title><link>https://foojay.io/today/tryboxlang/</link><pubDate>Thu, 08 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/tryboxlang/</guid><description>&lt;p&gt;The &lt;a href="https://try.boxlang.io/" target="_blank" rel="noopener noreferrer"&gt;BoxLang playground&lt;/a&gt; now lets you choose among released BoxLang versions and switch CFML compatibility on or off without installing a runtime or setting up containers. Choose a version, enter a snippet, and run it in the browser.&lt;/p&gt;&#10;&lt;p&gt;Behind the editor is a serverless implementation on AWS Lambda. Each combination of BoxLang version and compatibility mode is built from one repository and deployed as an isolated function. Here&amp;rsquo;s what changed and how that arrangement works.&lt;/p&gt;</description></item><item><title>Adding RAG to a Jakarta EE 11 App With Only the JDK and Jakarta Specs</title><link>https://foojay.io/today/adding-rag-to-jakarta-ee-11-app/</link><pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/adding-rag-to-jakarta-ee-11-app/</guid><description>&lt;p&gt;The standard story about AI in the enterprise goes something like this. Your app needs AI, so you spin up a Python service. You add a vector database like Pinecone or Weaviate. You pick an orchestration framework. You now have two deployment pipelines, two languages, and two teams. The original Java monolith that handled your business logic just fine becomes one half of a distributed system that exists mostly to connect to the other half.&lt;/p&gt;</description></item><item><title>Green Build, Wrong Task: A Working Agreement for Java Teams Using AI Coding Agents</title><link>https://foojay.io/today/green-build-wrong-task-a-working-agreement-for-java-teams-using-ai-coding-agents/</link><pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/green-build-wrong-task-a-working-agreement-for-java-teams-using-ai-coding-agents/</guid><description>&lt;p&gt;You open a pull request. &lt;code&gt;./gradlew check&lt;/code&gt; is green, the diff is 400 lines, the description says &amp;ldquo;added tests as requested&amp;rdquo;. You scroll and see a dozen unit tests for one service class. What you asked for, in a two-line Jira comment, was end-to-end coverage of the checkout flow.&lt;/p&gt;&#10;&lt;p&gt;Nobody lied. The agent filled a gap in the request with the most likely reading and got to work. This is the first of three failure modes our team went through in a webinar on September 28. I am writing it up because the fixes turned out to be boring and mechanical, and they work with whatever agent your team has already installed.&lt;/p&gt;</description></item><item><title>Real-Time Fraud Detection in Java with Kafka Streams and Vector Similarity</title><link>https://foojay.io/today/real-time-fraud-detection-kafka-vector-similarity/</link><pubDate>Wed, 07 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/real-time-fraud-detection-kafka-vector-similarity/</guid><description>&lt;p&gt;&lt;em&gt;This content is based on a talk that my colleague Tim Kelly and I presented at &lt;a href="https://devnexus.com/events/real-time-fraud-detection-in-java-with-kafka-streams-vector-similarity" target="_blank" rel="noopener noreferrer"&gt;DevNexus 2026&lt;/a&gt; in Atlanta, one of the largest Java conferences in the world.&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Imagine you&amp;rsquo;re at a supermarket or shopping online. You tap your card or click &amp;ldquo;Buy Now&amp;rdquo;. In that exact moment, your bank has to make a decision: is this transaction legitimate, or is it fraud? And it has to do that in milliseconds, and get it right. If it blocks a real transaction, it frustrates the customer. If it approves a fraudulent one, it leads to financial loss. So the question is: how do banks actually do this? What&amp;rsquo;s happening behind the scenes? In this article, we&amp;rsquo;ll explore a real-world approach to solving this problem using Java, Apache Kafka, Kafka Streams, and vector similarity with MongoDB.&lt;/p&gt;</description></item><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></channel></rss>