<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Tools on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/category/tools/</link><description>Recent content in Tools on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 08 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foojay.io/today/category/tools/index.xml" rel="self" type="application/rss+xml"/><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>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>Community Spotlight: BoxLang Express Brings Node-Style HTTP to the JVM</title><link>https://foojay.io/today/community-spotlight-boxlang-express-brings-node-style-http-to-the-jvm/</link><pubDate>Tue, 08 Sep 2026 11:25:18 +0000</pubDate><guid>https://foojay.io/today/community-spotlight-boxlang-express-brings-node-style-http-to-the-jvm/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/community-spotlight-boxlang-express-brings-node-style-http-to-the-jvm/boxlang-express-700x373.jpg" alt="" width="700" height="373" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;ve spent years in Spring Boot, Micronaut, or Jakarta EE, &amp;ldquo;web framework&amp;rdquo; usually means a servlet container, an embedded Tomcat or Netty, a build step, and a fat jar before anything answers a request. What if you could skip all of that and still be on the JVM?&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;BoxLang Express&lt;/strong&gt; , a new community module built entirely by developer &lt;a href="https://kisdigital.com/posts/2026/08/introducing-boxexpress--express-js-ergonomics-for-boxlang" title="Robert Zehnder of KISDigital" target="_blank" rel="noopener noreferrer"&gt;Robert Zehnder of KISDigital&lt;/a&gt;, does exactly that. It&amp;rsquo;s built directly on &lt;code&gt;com.sun.net.httpserver.HttpServer&lt;/code&gt;, a class that&amp;rsquo;s been sitting in the JDK since Java 6, so there&amp;rsquo;s no embedded server to configure and nothing extra on the classpath for the HTTP layer itself. &lt;code&gt;boxlang server.bxs&lt;/code&gt; is the whole deployment story.&lt;/p&gt;</description></item><item><title>Announcing BX-WORD: Native Microsoft Word Automation for BoxLang</title><link>https://foojay.io/today/announcing-bx-word-native-microsoft-word-automation-for-boxlang/</link><pubDate>Tue, 01 Sep 2026 11:31:16 +0000</pubDate><guid>https://foojay.io/today/announcing-bx-word-native-microsoft-word-automation-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/announcing-bx-word-native-microsoft-word-automation-for-boxlang/bx-word-1-700x373.jpg" alt="" width="700" height="373" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Every enterprise runs on Word documents. Contracts. RFPs. Proposals. Board reports. Offer letters. HR handbooks. Compliance policies. Invoices. Statements of work. Legal memos. Today, we are incredibly proud to announce &lt;strong&gt;bx-word 1.0.0&lt;/strong&gt;, a first-class, fluent, production-ready module for creating, populating, and transforming Microsoft Word documents natively in BoxLang. This is not a wrapper. This is not a converter. This is a real document builder designed for the way enterprise teams actually work.&lt;/p&gt;</description></item><item><title>Offline Crypto Address Validation in Java</title><link>https://foojay.io/today/offline-crypto-address-validation-in-java/</link><pubDate>Sat, 22 Aug 2026 08:43:04 +0000</pubDate><guid>https://foojay.io/today/offline-crypto-address-validation-in-java/</guid><description>&lt;p&gt;Backend validation often starts with simple questions.&lt;/p&gt;&#10;&lt;p&gt;Is the input empty? Does it have the expected shape? Can it be parsed? Does it belong to the selected domain?&lt;/p&gt;&#10;&lt;p&gt;Crypto wallet addresses are no different, except the formats vary across chains and simple regular expressions are rarely enough.&lt;/p&gt;&#10;&lt;p&gt;If a Java backend accepts crypto withdrawal addresses, address-book entries, CSV imports, support-tool input, or transaction preflight requests, it should reject clearly invalid addresses before calling RPC nodes, explorers, exchange APIs, or internal money-movement systems.&lt;/p&gt;</description></item><item><title>Introducing BoxLang AI Explorer: A Local Catalog for Every AI Pattern</title><link>https://foojay.io/today/introducing-boxlang-ai-explorer-a-local-catalog-for-every-ai-pattern/</link><pubDate>Tue, 18 Aug 2026 14:15:48 +0000</pubDate><guid>https://foojay.io/today/introducing-boxlang-ai-explorer-a-local-catalog-for-every-ai-pattern/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/introducing-boxlang-ai-explorer-a-local-catalog-for-every-ai-pattern/boxlang-explorer-700x394.png" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Learning a new AI API usually means jumping between scattered documentation pages, guessing at imports, and copy-pasting code that may or may not still work. We wanted something better for BoxLang AI, so we built the &lt;strong&gt;BoxLang AI Explorer&lt;/strong&gt; : a local, browser-based catalog of runnable BoxLang AI examples, organized by category and difficulty, each with guidance, source code, and sample output. You can also try it online at &lt;a href="https://ai.boxlang.io/explorer/" target="_blank" rel="noopener noreferrer"&gt;https://ai.boxlang.io/explorer/&lt;/a&gt;&lt;/p&gt;</description></item><item><title>BoxLang AWS, Azure, and Google Secrets Manager Module Released</title><link>https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/</link><pubDate>Tue, 21 Jul 2026 11:38:18 +0000</pubDate><guid>https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-aws-azure-and-google-secrets-manager-module-released/boxlang-secrets-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Every production application carries secrets: database passwords, API tokens, encryption keys. The question is never whether to manage them &amp;ndash; it&amp;rsquo;s how badly the current approach is going to hurt you.&lt;/p&gt;&#10;&lt;p&gt;Hardcoded credentials in config files get committed to repos. Environment variables sprawl across deployment pipelines with no audit trail. Custom integration code for each cloud provider means three different patterns to maintain, test, and rotate. And when a key needs to rotate at 2am? Someone is waking up.&lt;/p&gt;</description></item><item><title>BoxLang 1.15.0 Released: Blazing Fast Strings, Runtime Portability, and much more</title><link>https://foojay.io/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/</link><pubDate>Tue, 14 Jul 2026 17:57:10 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-15-0-released-blazing-fast-strings-runtime-portability-and-much-more/boxlang-v1.15.0-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;BoxLang 1.15.0&lt;/strong&gt; is a high-impact release with two big headlines and a long tail of hardening. The first headline is a &lt;strong&gt;massive performance upgrade to string handling&lt;/strong&gt; : a new first-class &lt;code&gt;BoxStringBuilder&lt;/code&gt; type, compile-time literal folding, smarter &lt;code&gt;&amp;amp;=&lt;/code&gt; semantics, and a runtime concat strategy that automatically switches to builder-backed accumulation once your expression gets big enough. Your existing string-heavy code just got faster. No rewrites required.&lt;/p&gt;&#10;&lt;p&gt;The second headline is architectural. Every class loader in the BoxLang runtime and module system has been fully abstracted behind a pluggable &lt;code&gt;IClassLoaderFactory&lt;/code&gt; interface. That single seam is what unlocks the &lt;strong&gt;Android runtime&lt;/strong&gt; and &lt;strong&gt;Ahead-of-Time (AOT) compiled runtimes&lt;/strong&gt; such as GraalVM Native Image that we have on the roadmap. The default behavior is unchanged, but the ceiling just got a lot higher.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0: Navigate Anything: JSONPath Comes to BoxLang's DataNavigator</title><link>https://foojay.io/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/</link><pubDate>Thu, 02 Jul 2026 18:17:16 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-14-0-navigate-anything-jsonpath-comes-to-boxlangs-datanavigator/BoxLang-release-1.14.0-3-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Every application eventually has to deal with deeply nested data. JSON API responses with payloads six levels deep. Configuration files where the key you need is buried inside an array of objects, one of which has a &lt;code&gt;null&lt;/code&gt; for the field you thought was required. Module metadata structures that nobody wrote a schema for. Runtime introspection data shaped like a tree that grew without a plan.&lt;/p&gt;&#10;&lt;p&gt;BoxLang introduced DataNavigators in version 1 so you can use &lt;code&gt;dataNavigate()&lt;/code&gt;, call &lt;code&gt;.from()&lt;/code&gt; to scope down, chain your &lt;code&gt;.get()&lt;/code&gt; calls, provide defaults everywhere. Clean and safe. But even with the fluent API, extracting a specific slice of a complex payload still required multiple navigator hops, or a loop, or defensive key-exists checks stacked three levels deep.&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0: Query Transformers - Take Full Control of Your Query Results</title><link>https://foojay.io/today/boxlang-1-14-0-query-transformers-take-full-control-of-your-query-results/</link><pubDate>Wed, 24 Jun 2026 10:46:13 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-14-0-query-transformers-take-full-control-of-your-query-results/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-14-0-query-transformers-take-full-control-of-your-query-results/BoxLang-release-1.14.0-2-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;BoxLang 1.14.0 ships a lot of exciting features &amp;ndash; Dynamic Sets, Ranges, Inner Classes, JSONPath navigation &amp;ndash; but one quietly powerful addition will change the way you think about every database call in your application: &lt;strong&gt;Query Transformers&lt;/strong&gt;, and this is just the start, we have plans for a whole lot more cool query features.&lt;/p&gt;&#10;&lt;p&gt;If you have ever executed a query and then immediately written a loop to reshape the result into what you actually needed, this feature is for you.&lt;/p&gt;</description></item><item><title>Foojay Podcast #99: Testing the Untestable: LLM Security for Java Developers with Tiberius</title><link>https://foojay.io/today/foojay-podcast-99/</link><pubDate>Mon, 22 Jun 2026 06:54:00 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-99/</guid><description>&lt;p&gt;Your AI-powered Java application is live in production. But have you actually tested whether it can be jailbroken or manipulated into leaking data it should never reveal? In this episode, Iryna Dohndorf walks us through Tiberius, an open-source security testing library for LLM applications in Java, and explains why everything you know about unit testing needs a rethink when non-determinism is part of the design.&lt;/p&gt;&#10;&lt;h2 id="youtube"&gt;YouTube&lt;/h2&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/7bBcTzeevEo?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="YouTube video"&gt;&lt;/iframe&gt;&#10;&#9;&#9;&lt;/div&gt;&#10;&#10;&lt;h2 id="podcast-apps"&gt;Podcast Apps&lt;/h2&gt;&#10;&lt;p&gt;You can listen and subscribe to the Foojay Podcast on:&lt;/p&gt;</description></item><item><title>BoxLang 1.14.0: BoxSet is Here, BoxLang's New First-Class Set Type</title><link>https://foojay.io/today/boxlang-1-14-0-boxset-is-here-boxlangs-new-first-class-set-type/</link><pubDate>Wed, 17 Jun 2026 10:36:28 +0000</pubDate><guid>https://foojay.io/today/boxlang-1-14-0-boxset-is-here-boxlangs-new-first-class-set-type/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-1-14-0-boxset-is-here-boxlangs-new-first-class-set-type/BoxLang-release-1.14.0-1-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;BoxLang 1.14.0 ships with a new &lt;strong&gt;dynamic first-class Set type&lt;/strong&gt; baked directly into the language. Not a wrapper you reach for manually, not a &lt;code&gt;createObject( &amp;quot;java&amp;quot;, &amp;quot;java.util.HashSet&amp;quot; )&lt;/code&gt; incantation you paste from a Stack Overflow answer years ago. A real &lt;code&gt;BoxSet&lt;/code&gt; with literal syntax, operator overloads, a full functional pipeline, change listeners, JSON serialization, and deep Java interop.&lt;/p&gt;&#10;&lt;p&gt;If you have ever deduplicated an array with a loop, compared two collections element by element, or modeled a permission system on top of a struct &amp;ndash; Sets are the tool you were missing. Let&amp;rsquo;s dig in.&lt;/p&gt;</description></item><item><title>BoxLang AI 3.2.0 — Image Generation, Web Search, Fluent Audio, Agent Registry &amp; MCP Observability</title><link>https://foojay.io/today/boxlang-ai-3-2-0-image-generation-web-search-fluent-audio-agent-registry-mcp-observability/</link><pubDate>Tue, 02 Jun 2026 12:27:07 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-3-2-0-image-generation-web-search-fluent-audio-agent-registry-mcp-observability/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-ai-3-2-0-image-generation-web-search-fluent-audio-agent-registry-mcp-observability/BoxLangAI-3.2-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;BoxLang AI 3.2.0 is here, and it&amp;rsquo;s a landmark release. We&amp;rsquo;re shipping five major features: image generation, web search, a fluent audio builder API, a centralized agent registry, and deep MCP observability along with a suite of analytics improvements and a critical bug fix. Let&amp;rsquo;s dig in. 🎉&lt;/p&gt;&#10;&lt;p&gt;🖼️ Image Generation — aiImage()&lt;/p&gt;&#10;&lt;p&gt;You can now generate images directly from BoxLang using any provider that supports text-to-image generation. The aiImage() BIF follows the same fluent, chainable philosophy as the rest of bx-ai then act on the result with expressive method calls.&lt;/p&gt;</description></item><item><title>Intro to the BoxLang Formatter</title><link>https://foojay.io/today/intro-to-the-boxlang-formatter/</link><pubDate>Thu, 28 May 2026 17:45:09 +0000</pubDate><guid>https://foojay.io/today/intro-to-the-boxlang-formatter/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/intro-to-the-boxlang-formatter/boxlang-formatter-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;You know the drill. Someone opens a PR and half the review comments are about tabs vs spaces, where braces go, or why that one function has its arguments formatted differently from everything else. It&amp;rsquo;s noise. And it&amp;rsquo;s over.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;The BoxLang Formatter is here, and it handles all of that for you.&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;You can find the docs here: &lt;a href="https://boxlang.ortusbooks.com/getting-started/ide-tooling/boxlang-formatter" target="_blank" rel="noopener noreferrer"&gt;https://boxlang.ortusbooks.com/getting-started/ide-tooling/boxlang-formatter&lt;/a&gt;&lt;/p&gt;&#10;&lt;h2 id="what-is-it"&gt;What Is It?&lt;/h2&gt;&#10;&lt;p&gt;The BoxLang Formatter is a built-in code formatting tool that ships with BoxLang. It enforces consistent style across &lt;code&gt;.bx&lt;/code&gt;, &lt;code&gt;.bxs&lt;/code&gt;, &lt;code&gt;.bxm&lt;/code&gt;, &lt;code&gt;.cfm&lt;/code&gt;, &lt;code&gt;.cfc&lt;/code&gt;, and &lt;code&gt;.cfs&lt;/code&gt; files — automatically.&lt;/p&gt;</description></item><item><title>A New Generation of Java Libraries Is Born: Wasm Becomes the Implementation Detail</title><link>https://foojay.io/today/a-new-generation-of-java-libraries-is-born-wasm-becomes-the-implementation-detail/</link><pubDate>Tue, 26 May 2026 13:00:47 +0000</pubDate><guid>https://foojay.io/today/a-new-generation-of-java-libraries-is-born-wasm-becomes-the-implementation-detail/</guid><description>&lt;p&gt;If you&amp;rsquo;re running JRuby in production, you&amp;rsquo;re running WebAssembly. If TrinoDB is evaluating your Python UDFs, that&amp;rsquo;s WebAssembly too. If Microcks is running JavaScript dispatchers to route your mock API responses, WebAssembly is doing the work.&lt;/p&gt;&#10;&lt;p&gt;You didn&amp;rsquo;t install a native binary. You didn&amp;rsquo;t configure JNI. You didn&amp;rsquo;t cross-compile anything for your target platform. It just works, because the Wasm module is hiding inside a regular JAR on your classpath.&lt;/p&gt;</description></item><item><title>Introducing bx-jwt: Enterprise-Grade JSON Web Tokens for BoxLang</title><link>https://foojay.io/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</link><pubDate>Tue, 26 May 2026 10:14:00 +0000</pubDate><guid>https://foojay.io/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/introducing-bx-jwt-enterprise-grade-json-web-tokens-for-boxlang/bx-jwt-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;JWT authentication is everywhere. But rolling it correctly — with proper algorithm enforcement, key management, clock skew handling, JWE encryption, and zero security footguns — is anything but trivial. Today, we&amp;rsquo;re shipping &lt;strong&gt;bx-jwt&lt;/strong&gt;, a production-ready JWT/JWE module for BoxLang that handles all of it out of the box, so you can focus on building, not fighting cryptography.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;bx-jwt&lt;/strong&gt; is part of the &lt;a href="https://www.boxlang.io/plans" title="BoxLang&amp;#43; and BoxLang&amp;#43;&amp;#43; subscription tiers" target="_blank" rel="noopener noreferrer"&gt;BoxLang+ and BoxLang++ subscription tiers&lt;/a&gt; — our enterprise-grade module collection built for teams that take security seriously.&lt;/p&gt;</description></item><item><title>Introducing skills.boxlang.io — The Open Agent Skills Ecosystem for BoxLang &amp; the Ortus World</title><link>https://foojay.io/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/</link><pubDate>Thu, 21 May 2026 11:42:26 +0000</pubDate><guid>https://foojay.io/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/introducing-skills-boxlang-io-the-open-agent-skills-ecosystem-for-boxlang-the-ortus-world/skills-boxlang-io-700x394.jpg" alt="" width="700" height="394" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Today we&amp;rsquo;re launching something we&amp;rsquo;ve been quietly building for months: &lt;a href="https://skills.boxlang.io/" title="**skills.boxlang.io**" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;skills.boxlang.io&lt;/strong&gt;&lt;/a&gt; — a public, agent-agnostic directory for AI skills covering BoxLang, ColdBox, TestBox, CommandBox, and the entire Ortus ecosystem.&lt;/p&gt;&#10;&lt;p&gt;If you&amp;rsquo;ve ever pasted a 400-line system prompt into yet another AI agent, watched two of your bots drift onto subtly different versions of the same coding standard, or spent half a Friday afternoon trying to convince an LLM that BoxLang is &lt;strong&gt;not&lt;/strong&gt; Java and is &lt;strong&gt;not&lt;/strong&gt; CFML, or how to code for Modern CFML; this launch is for you. 🎯&lt;/p&gt;</description></item><item><title>BoxLang AI Series: Complete Guide to Building AI Agents</title><link>https://foojay.io/today/boxlang-ai-series-complete-guide-to-building-ai-agents/</link><pubDate>Thu, 14 May 2026 09:26:48 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-series-complete-guide-to-building-ai-agents/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-ai-series-complete-guide-to-building-ai-agents/Guide-to-Building-AI-Agents-2-700x365.jpg" alt="" width="700" height="365" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The world of AI development is moving fast, but building real, production-ready AI agents doesn&amp;rsquo;t have to be complex.&lt;/p&gt;&#10;&lt;p&gt;This series walks you step by step through how to design, build, and deploy AI agents using BoxLang AI. Whether you&amp;rsquo;re exploring AI for the first time or looking to modernize your current applications, these guides will help you move from concept to implementation with clarity.&lt;/p&gt;&#10;&lt;h2 id="start-here-a-practical-overview"&gt;Start Here: A Practical Overview&lt;/h2&gt;&#10;&lt;p&gt;If you&amp;rsquo;re new to BoxLang AI or want to understand what&amp;rsquo;s possible before diving into the technical details, start here:&lt;/p&gt;</description></item><item><title>UCanAccess: The Modern Pure-Java Bridge to Microsoft Access</title><link>https://foojay.io/today/ucanaccess-java-ms-access-jdbc-guide/</link><pubDate>Wed, 06 May 2026 08:44:00 +0000</pubDate><guid>https://foojay.io/today/ucanaccess-java-ms-access-jdbc-guide/</guid><description>&lt;p&gt;Microsoft Access databases are everywhere. Decades of &lt;code&gt;.mdb&lt;/code&gt; and &lt;code&gt;.accdb&lt;/code&gt; files silently power spreadsheets, small business applications, and legacy data stores across organizations of all sizes. Yet for Java developers, connecting to these files has historically meant wrestling with native Windows libraries, ODBC bridges, and platform-specific hacks.&lt;/p&gt;&#10;&lt;figure class="aligncenter size-full is-resized"&gt;&#10; &lt;img src="https://foojay.io/today/ucanaccess-java-ms-access-jdbc-guide/ucanaccess-logo.svg" alt="UCanAccess Logo" style="width:320px" loading="lazy" class="is-zoomable"&gt;&lt;/figure&gt;&#10;&#10;&lt;p&gt;&lt;strong&gt;UCanAccess&lt;/strong&gt; puts an end to that. It is an open-source, pure-Java JDBC driver that lets you read and write Microsoft Access databases (&lt;code&gt;.mdb&lt;/code&gt; and &lt;code&gt;.accdb&lt;/code&gt;) just like any other SQL database — no native drivers, no Windows dependency, no friction.&lt;/p&gt;</description></item><item><title>BoxLang AI Deep Dive — Part 4 of 7: Middleware — The Missing Layer in Every AI Framework</title><link>https://foojay.io/today/boxlang-ai-deep-dive-part-4-of-7-middleware-the-missing-layer-in-every-ai-framework/</link><pubDate>Thu, 23 Apr 2026 14:25:53 +0000</pubDate><guid>https://foojay.io/today/boxlang-ai-deep-dive-part-4-of-7-middleware-the-missing-layer-in-every-ai-framework/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-ai-deep-dive-part-4-of-7-middleware-the-missing-layer-in-every-ai-framework/bxai-series-cover-04-700x368.png" alt="" width="700" height="368" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;BoxLang AI 3.0 Series · Part 4 of 7&lt;/em&gt;&lt;/p&gt;&#10;&lt;p&gt;Here&amp;rsquo;s the question every team eventually asks about their AI agents: how do we test these things?&lt;/p&gt;&#10;&lt;p&gt;Agents make live LLM calls. They invoke real tools. They have non-deterministic outputs. Standard unit testing approaches fall apart. You can&amp;rsquo;t mock every provider. You can&amp;rsquo;t replay a conversation from three weeks ago. You can&amp;rsquo;t confidently tell stakeholders that the agent you deployed today behaves the same way it did when you signed off on it.&lt;/p&gt;</description></item><item><title>Eliminating Flaky Tests to End World Hunger</title><link>https://foojay.io/today/eliminating-flaky-tests-to-end-world-hunger/</link><pubDate>Thu, 23 Apr 2026 09:02:34 +0000</pubDate><guid>https://foojay.io/today/eliminating-flaky-tests-to-end-world-hunger/</guid><description>&lt;p&gt;Rita Mae Brown once said:&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;p&gt;&lt;strong&gt;Insanity&lt;/strong&gt; is doing the same thing over and over again and expecting different results.​&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;However, everyone has at least once experienced a test that failed and then passed in the next run without changing the code or the environment. In software engineering, we don&amp;rsquo;t call it insanity; we call such unpredictable failures &lt;strong&gt;flaky tests&lt;/strong&gt;. At first, they may seem like minor problems, but like clutter in a junk drawer, they become worse over time if you never take care of them.&lt;/p&gt;</description></item><item><title>Grails Is Back: Inside the Apache Software Foundation Migration</title><link>https://foojay.io/today/grails-isnt-done-yet-part-1-inside-the-asf-reboot/</link><pubDate>Wed, 25 Mar 2026 08:30:21 +0000</pubDate><guid>https://foojay.io/today/grails-isnt-done-yet-part-1-inside-the-asf-reboot/</guid><description>&lt;blockquote&gt;&#10;&lt;p&gt;Steve Poole | With contributions from James Fredley, Apache Grails PMC Chair&lt;/p&gt;&#10;&lt;/blockquote&gt;&#10;&lt;p&gt;For a technology that many people filed under &amp;ldquo;legacy,&amp;rdquo; Grails has been unusually active. While much of the industry&amp;rsquo;s attention has drifted toward newer frameworks and shinier stacks, something more deliberate has been happening in the background.&lt;/p&gt;&#10;&lt;p&gt;Grails has been moving into the Apache Software Foundation (ASF), modernising and positioning itself for the next chapter.&lt;/p&gt;&#10;&lt;p&gt;If you have not looked at Grails recently, your mental model is likely several years out of date. And that, in many ways, is exactly the problem.&lt;/p&gt;</description></item><item><title>TestBox 7: Real-Time Feedback, a Browser-Based IDE, and Modern Testing Workflows on the JVM</title><link>https://foojay.io/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/</link><pubDate>Tue, 24 Mar 2026 16:58:53 +0000</pubDate><guid>https://foojay.io/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/testbox-7-1-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;TestBox 7.x focuses on improving testing workflows for BoxLang and CFML applications. This release introduces improvements to the &lt;strong&gt;BoxLang CLI runner&lt;/strong&gt; , real-time &lt;strong&gt;streaming test execution via SSE&lt;/strong&gt; , &lt;strong&gt;dry run&lt;/strong&gt; capabilities, a browser-based &lt;strong&gt;TestBox RUN&lt;/strong&gt; interface, and several developer experience enhancements.&lt;/p&gt;&#10;&lt;p&gt;Check out the what&amp;rsquo;s new here: &lt;a href="https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.0.0" target="_blank" rel="noopener noreferrer"&gt;https://testbox.ortusbooks.com/readme/release-history/whats-new-with-7.0.0&lt;/a&gt;&lt;/p&gt;&#10;&lt;h4 id="testbox-run-a-browser-ide-for-your-tests"&gt;TestBox RUN: A Browser IDE for Your Tests&lt;/h4&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/testbox-7-real-time-feedback-a-browser-based-ide-and-modern-testing-workflows-on-the-jvm/image-700x155.png" alt="" width="700" height="155" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The centerpiece of TestBox 7 is &lt;strong&gt;TestBox RUN&lt;/strong&gt; : a self-hosted, single-page web app (&lt;code&gt;bx/tests/index.bxm&lt;/code&gt;) that you drop into any &lt;strong&gt;BoxLang&lt;/strong&gt; project and open in a browser. No build toolchain. No external service. Just BoxLang.&lt;/p&gt;</description></item><item><title>Introducing the BoxLang IDE Plugin for IntelliJ</title><link>https://foojay.io/today/introducing-the-boxlang-ide-plugin-for-intellij/</link><pubDate>Tue, 10 Mar 2026 14:25:33 +0000</pubDate><guid>https://foojay.io/today/introducing-the-boxlang-ide-plugin-for-intellij/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/introducing-the-boxlang-ide-plugin-for-intellij/1773053085130-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The IntelliJ ecosystem is one of the most powerful development environments for JVM developers. Today, we&amp;rsquo;re excited to introduce &lt;a href="http://https://plugins.jetbrains.com/plugin/30311-boxlang-ide" title="the official BoxLang IDE plugin for IntelliJ" target="_blank" rel="noopener noreferrer"&gt;the official BoxLang IDE plugin for IntelliJ&lt;/a&gt;, bringing modern BoxLang development directly into the JetBrains IDE family.&lt;/p&gt;&#10;&lt;p&gt;Whether you&amp;rsquo;re building new BoxLang applications or maintaining existing CFML codebases, this plugin gives you first-class tooling inside IntelliJ.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/introducing-the-boxlang-ide-plugin-for-intellij/testbox-integration-700x438.png" alt="" width="700" height="438" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="installing-the-plugin"&gt;Installing the Plugin&lt;/h2&gt;&#10;&lt;p&gt;Installing the plugin is easy from the JetBrains Marketplace.&lt;/p&gt;</description></item><item><title>BoxLang Homebrew Installer Released</title><link>https://foojay.io/today/boxlang-homebrew-installer-released/</link><pubDate>Tue, 03 Mar 2026 12:34:03 +0000</pubDate><guid>https://foojay.io/today/boxlang-homebrew-installer-released/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-homebrew-installer-released/boxlang-homebrew-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;We&amp;rsquo;re excited to announce the official &lt;strong&gt;BoxLang Homebrew tap&lt;/strong&gt; — the easiest way to get BoxLang up and running on macOS (and Linux with Homebrew). One command, and you&amp;rsquo;re in business.&lt;/p&gt;&#10;&lt;h3 id="getting-started"&gt;Getting Started&lt;/h3&gt;&#10;&lt;p&gt;First, make sure you have &lt;a href="https://brew.sh/" title="Homebrew installed" target="_blank" rel="noopener noreferrer"&gt;Homebrew installed&lt;/a&gt;, then add our tap:&lt;/p&gt;&#10;&lt;pre class="EnlighterJSRAW" data-enlighter-language="java"&gt;brew tap ortus-boxlang/boxlang&lt;/pre&gt;&lt;p&gt;From there, choose your installation path.&lt;/p&gt;&#10;&lt;h2 id="option-1-bvm--boxlang-version-manager"&gt;Option 1: BVM — BoxLang Version Manager&lt;/h2&gt;&#10;&lt;p&gt;If you want to manage multiple BoxLang versions side by side, &lt;strong&gt;BVM&lt;/strong&gt; is your tool.&lt;/p&gt;</description></item><item><title>From “Crypto AI” to general AI: Do AI agents dream of electric langoustines?</title><link>https://foojay.io/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/</link><pubDate>Mon, 23 Feb 2026 18:11:54 +0000</pubDate><guid>https://foojay.io/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/from-crypto-ai-to-general-ai-do-ai-agents-dream-of-electric-langoustines/daydreams-2-scaled.jpg" alt="" width="1600" height="686" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;h2 id="x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce-do-ai-agents-dream-of-electric-langoustines"&gt;&lt;strong&gt;x402, ERC-8004, A2A, and The Next Wave of AI Commerce: Do AI Agents Dream of Electric Langoustines?&lt;/strong&gt;&lt;/h2&gt;&#10;&lt;p&gt;&lt;em&gt;&lt;strong&gt;A Blade Runner riff for a world where the lobster ships paid endpoints while humans still argue about the roadmap.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;&#10;&lt;h2 id="the-shift-that-matters-for-agent-commerce---from-crypto-ai-to-general-ai"&gt;The shift that matters for agent commerce - From &amp;ldquo;Crypto AI&amp;rdquo; to general AI&lt;/h2&gt;&#10;&lt;p&gt;Today, you can search the web all day and never see an invoice.&lt;/p&gt;&#10;&lt;p&gt;That happens because you are not the paying client.&lt;/p&gt;</description></item><item><title>BoxLang NeoVim Plugin Released</title><link>https://foojay.io/today/boxlang-neovim-plugin-released/</link><pubDate>Wed, 18 Feb 2026 14:51:35 +0000</pubDate><guid>https://foojay.io/today/boxlang-neovim-plugin-released/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/boxlang-neovim-plugin-released/boxlang-neovim-700x467.jpg" alt="" width="700" height="467" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;We&amp;rsquo;re excited to announce the release of the BoxLang NeoVim Plugin - a comprehensive syntax highlighting solution designed specifically for BoxLang developers working in Vim and NeoVim environments. This isn&amp;rsquo;t a port or adaptation of existing CFML syntax files; it&amp;rsquo;s a ground-up implementation built for BoxLang&amp;rsquo;s modern feature set. Coming soon as well will be our runners, syntax validators, and integration with our LSP for live previews, insights, and much more.&lt;/p&gt;</description></item><item><title>Unikernel: Profiling and Troubleshooting JVM on Nanos Unikernel</title><link>https://foojay.io/today/unikernel-profiling-and-troubleshooting-jvm-on-nanos-unikernel/</link><pubDate>Wed, 11 Feb 2026 13:50:41 +0000</pubDate><guid>https://foojay.io/today/unikernel-profiling-and-troubleshooting-jvm-on-nanos-unikernel/</guid><description>&lt;h3 id="profiling-a-java-application-running-inside-an-unikernel-with-jprofiler"&gt;Profiling a Java Application Running Inside an Unikernel with JProfiler&lt;/h3&gt;&#10;&lt;p&gt;Unikernels are often associated with minimalism and tight resource control.&lt;/p&gt;&#10;&lt;p&gt;But can we profile a Java application running inside a unikernel using a standard JVM profiler?&lt;/p&gt;&#10;&lt;p&gt;The answer is yes.&lt;/p&gt;&#10;&lt;p&gt;In this guide, we will walk step by step through profiling a Quarkus&lt;/p&gt;&#10;&lt;p&gt;application running inside a Nanos unikernel using &lt;strong&gt;JProfiler&lt;/strong&gt; and&lt;br&gt;&#10;&lt;strong&gt;IBM Semeru JRE 25 (OpenJ9)&lt;/strong&gt;.&lt;/p&gt;&#10;&lt;p&gt;No special hacks. Just standard JVM tooling.&lt;/p&gt;</description></item><item><title>Not a Lucid Web3 Dream Anymore: x402, ERC-8004, A2A, and The Next Wave of AI Commerce</title><link>https://foojay.io/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/</link><pubDate>Fri, 09 Jan 2026 16:05:58 +0000</pubDate><guid>https://foojay.io/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/not-a-lucid-web3-dream-anymore-x402-erc-8004-a2a-and-the-next-wave-of-ai-commerce/daydreams-scaled.jpg" alt="DayDreams" width="1600" height="686" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;&lt;em&gt;This article is for technically savvy readers, especially developers, protocol designers, and product teams working with AI agents, APIs, or crypto rails, who want a clear view of how these areas connect.&lt;/em&gt;&lt;br&gt;&#10;&lt;em&gt;It explains how x402, ERC-8004, and agent discovery layers turn APIs and agents into small usage-based businesses, and what that means for real systems over the next 1–3 years.&lt;/em&gt;&lt;/p&gt;&#10;&lt;blockquote&gt;&#10;&lt;h3 id="vocabulary-for-this-article"&gt;Vocabulary for this article&lt;/h3&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;In this article, I use the term &lt;em&gt;micro business&lt;/em&gt; for a very small overall business, and &lt;em&gt;nano business&lt;/em&gt; for a single x402-priced endpoint or agent that earns on its own from per-call payments in stablecoins.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;AP2 (Agent Payment Protocol):&lt;/strong&gt; AP2 defines how agents pay each other. It standardizes how a service quotes a price, how payment is confirmed, and how both sides record what was bought, so payments fit directly into automated agent workflows. In practice, it is a protocol that lets one machine pay another machine for work, without a human in the loop.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;A2A (Agent-to-Agent communication):&lt;/strong&gt; A2A covers how agents talk, pass context, and coordinate work. It lets agents call each other, exchange structured messages, and chain tasks instead of acting as isolated scripts.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;x402:&lt;/strong&gt; x402 is an HTTP-based payment protocol for APIs. A server responds with status &lt;code&gt;402 Payment Required&lt;/code&gt;, the price, and a payment route, and the client pays by using stablecoins on-chain and then retries the request to get the result.&lt;/li&gt;&#10;&lt;li&gt;&lt;strong&gt;ERC-8004 (8004):&lt;/strong&gt; ERC-8004 standard is an on-chain registry for agents. It gives each agent an identity and a place to store reputation data, so other agents and tools can decide whom to trust and which services to call.&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/blockquote&gt;&#10;&lt;h2 id="foreword"&gt;Foreword&lt;/h2&gt;&#10;&lt;p&gt;&lt;strong&gt;x402&lt;/strong&gt; and &lt;strong&gt;ERC-8004&lt;/strong&gt; .&lt;/p&gt;</description></item><item><title>TornadoInsight - Compatibility with TornadoVM SDK 2.0+ &amp; Configuration Guide</title><link>https://foojay.io/today/tornadoinsight-compatibility-with-tornadovm-sdk-2-0-configuration-guide/</link><pubDate>Tue, 30 Dec 2025 09:00:00 +0000</pubDate><guid>https://foojay.io/today/tornadoinsight-compatibility-with-tornadovm-sdk-2-0-configuration-guide/</guid><description>&lt;figure class="size-full is-resized"&gt;&#10; &lt;img src="https://foojay.io/today/tornadoinsight-compatibility-with-tornadovm-sdk-2-0-configuration-guide/tornado-insight.webp" alt="" width="298" height="298" style="width:138px;height:auto" loading="lazy" class="is-zoomable"&gt;&lt;/figure&gt;&#10;&#10;&lt;p&gt;This blog updates the previously published &lt;strong&gt;TornadoInsight&lt;/strong&gt; configuration &lt;a href="https://www.tornadovm.org/post/introducing-tornadoinsight-unleashing-the-power-of-tornadovm-in-intellij-idea" target="_blank" rel="noopener noreferrer"&gt;&lt;strong&gt;++guidelines++&lt;/strong&gt;&lt;/a&gt; and explains how to configure the required environment variable to ensure that TornadoInsight correctly detects the TornadoVM SDK when IntelliJ IDEA is launched from a graphical environment.&lt;/p&gt;&#10;&lt;h2 id="overview"&gt;&lt;strong&gt;Overview&lt;/strong&gt;&lt;/h2&gt;&#10;&lt;p&gt;TornadoInsight requires access to a compatible Java Development Kit (JDK) and the TornadoVM SDK.&lt;/p&gt;&#10;&lt;p&gt;&lt;strong&gt;Important update:&lt;/strong&gt;&lt;/p&gt;&#10;&lt;p&gt;Since version &lt;a href="https://github.com/beehive-lab/tornado-insight/releases/tag/v1.4.0" target="_blank" rel="noopener noreferrer"&gt;++v1.4.0++&lt;/a&gt;, TornadoInsight can also use the &lt;strong&gt;JDK configured directly in IntelliJ IDEA&lt;/strong&gt; via &lt;strong&gt;Project Structure&lt;/strong&gt;. This means that, in many cases, users no longer need to configure the Java SDK in the plugins settings.&lt;/p&gt;</description></item></channel></rss>