<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Shai Almog on foojay.io - Friends Of OpenJDK</title><link>https://foojay.io/today/author/shai-almog/</link><description>Articles written by Shai Almog on foojay.io - Friends Of OpenJDK</description><generator>Hugo</generator><language>en-us</language><lastBuildDate>Thu, 22 Oct 2026 00:00:00 +0000</lastBuildDate><atom:link href="https://foojay.io/today/author/shai-almog/index.xml" rel="self" type="application/rss+xml"/><item><title>Android on iOS, Web &amp; Desktop Efficiently and for Free</title><link>https://foojay.io/today/android-apps-beyond-android/</link><pubDate>Thu, 22 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/android-apps-beyond-android/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/android-apps-beyond-android/android-apps-beyond-android-d1d17778d9.jpg" alt="Android application screens reach phones, desktop and the browser" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;We are not the first to bring Android to iOS. Earlier projects brought Android&amp;rsquo;s runtime along with the application. Dalvik was built for Android, including a just-in-time compiler (JIT) that ordinary iOS apps are &lt;a href="https://support.apple.com/guide/security/security-of-runtime-process-sec15bfe098e/web" target="_blank" rel="noopener noreferrer"&gt;not permitted to use&lt;/a&gt;. Disabling it removes an important source of &lt;a href="https://android-developers.googleblog.com/2010/05/android-22-and-developers-goodies.html" target="_blank" rel="noopener noreferrer"&gt;Dalvik&amp;rsquo;s performance&lt;/a&gt;. Dalvik was designed around interpretation and JIT compilation, not ahead-of-time compilation (AOT), so taking away the JIT leaves an interpreter rather than an optimized native app.&lt;/p&gt;</description></item><item><title>Foojay Podcast #103: Killing Reflection at Build Time with Dmitry Moskalyuk and Shai Almog</title><link>https://foojay.io/today/foojay-podcast-103/</link><pubDate>Mon, 19 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/foojay-podcast-103/</guid><description>&lt;p&gt;Runtime reflection is one of those quiet taxes on the JVM: it is flexible, it is everywhere, and it is easy to stop noticing it until you go looking for where your CPU is actually going. In this episode, two teams from completely different corners of the ecosystem explain how they went looking and ended up at the same answer: push the work to build time.&lt;/p&gt;&#10;&lt;p&gt;Dmitry Moskalyuk is a new author on Foojay. His article &amp;ldquo;&lt;a href="https://foojay.io/today/reflection-free-serialization-on-the-jvm-four-formats-in-avro-out/"&gt;Reflection-Free Serialization on the JVM: Four Formats In, Avro Out&lt;/a&gt;&amp;rdquo; describes a model layer that ingests JSON, XML, YAML and TOML and converts everything to Avro, and the choice between Jackson and kotlinx.serialization that came down to where the reflection cost hides, and where it does not. Shai Almog has been &lt;a href="https://foojay.io/today/author/shai-almog/"&gt;writing on Foojay since 2021&lt;/a&gt; and works on a build-time code generation pipeline for Codename One, with the goal of &amp;ldquo;no reflection, no service loader, no Class.forName&amp;rdquo;.&lt;/p&gt;</description></item><item><title>A Smaller, Faster Java Server with a Spring-Style API</title><link>https://foojay.io/today/java-server-work-before-startup/</link><pubDate>Fri, 16 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/java-server-work-before-startup/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/java-server-work-before-startup/java-server-work-before-startup-d9b84f58b7.jpg" alt="Java server wiring moves from startup into the build" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;What do you pay for Spring and Java&amp;rsquo;s dynamic architecture? Can you deliver the same API without the same runtime cost?&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;For a small service, you might want dependency injection, transactions and scheduled jobs without a long startup or a large deployment. That is the case our native Java backend is trying to make. Write a controller and a service, compile their wiring into the application, then deploy a native executable.&lt;/p&gt;</description></item><item><title>Apple Shouldn't Dictate Your App's Redesign Schedule</title><link>https://foojay.io/today/who-decides-your-app-redesign/</link><pubDate>Fri, 16 Oct 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/who-decides-your-app-redesign/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/who-decides-your-app-redesign/who-decides-your-app-redesign-e9b18f15b8.jpg" alt="Apple designs iOS; you choose your redesign schedule" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Apple&amp;rsquo;s design team doesn&amp;rsquo;t know what&amp;rsquo;s on your backlog. A new iOS appearance might be exactly what you want for your next release. It might also arrive halfway through a customer rollout, when changing the navigation is the last thing you need.&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;We want to support the new SDK without making that decision for you. This week, you can select Xcode 27 on our build servers with the returning &lt;code&gt;ios.xcode_version&lt;/code&gt; hint. Local builds and CI also support Xcode 27, and our iOS 27 theme gets more detailed Liquid Glass effects. You choose when to adopt that appearance. Codename One renders most controls itself, so the theme ships with your app. Updating the SDK can leave that theme and your application CSS in place.&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>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>VoIP, VPN, and the Build System Behind Them</title><link>https://foojay.io/today/voip-vpn-builders/</link><pubDate>Fri, 25 Sep 2026 00:00:00 +0000</pubDate><guid>https://foojay.io/today/voip-vpn-builders/</guid><description>&lt;p&gt;In 2019, a reader asked whether our WhatsApp clone included VoIP. &lt;a href="https://www.codenameone.com/blog/whatsapp-clone-ga/#comment-24081" target="_blank" rel="noopener noreferrer"&gt;I said no&lt;/a&gt;. It would require native integration, and the setup was too much for that project. For years, that was the line.&lt;/p&gt;&#10;&lt;p&gt;&lt;img src="https://foojay.io/today/voip-vpn-builders/voip-vpn-builders-bdff9b8012.jpg" alt="A phone, secure tunnel, and native build pipeline" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;aside style="border-left: 4px solid #007aff; padding: 14px 18px; margin: 24px 0; border-radius: 4px; font-size: 0.95em;"&gt;&lt;strong&gt;What is Codename One?&lt;/strong&gt; Codename One is an open-source framework for building native iOS, Android, desktop, and web apps from a single Java or Kotlin codebase. Learn more at &lt;a href="https://www.codenameone.com/"&gt;codenameone.com&lt;/a&gt;.&lt;/aside&gt;&#10;&lt;p&gt;VPN sat behind the same line. These features do not live neatly inside the application process. On iOS, a VoIP push can arrive before the application installs a Java listener, yet CallKit expects the incoming call to reach the lock screen on its deadline. A Call Directory integration is a separate extension executable with its own lifecycle and signing identity. Managed VPN adds Network Extension entitlements and profile rules. Android solves the same jobs through &lt;code&gt;ConnectionService&lt;/code&gt;, &lt;code&gt;VpnManager&lt;/code&gt;, &lt;code&gt;VpnService&lt;/code&gt;, manifest declarations, and foreground-service rules.&lt;/p&gt;</description></item><item><title>SQLite Across Every Port: One Contract, One Encrypted File Format</title><link>https://foojay.io/today/sqlite-across-every-port-one-contract-one-encrypted-file-format/</link><pubDate>Sat, 29 Aug 2026 16:11:30 +0000</pubDate><guid>https://foojay.io/today/sqlite-across-every-port-one-contract-one-encrypted-file-format/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/sqlite-across-every-port-one-contract-one-encrypted-file-format/sqlite-portable-encrypted.jpg" alt="A locked SQLite database connected to mobile, web, desktop, and watch applications" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The original &lt;code&gt;com.codename1.db&lt;/code&gt; implementation delegated SQLite calls to the database supplied by each operating system. We knew this was less portable than the rest of Codename One, but fixing it meant taking ownership of SQLite on every target. That looked like a deep rabbit hole, so we exposed escape hatches instead. The &lt;a href="https://www.codenameone.com/blog/spatial-pluggable-sqlite/" target="_blank" rel="noopener noreferrer"&gt;pluggable SpatiaLite work we described in 2018&lt;/a&gt; is one example.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>App Shield: Your Server Should Not Trust the App Calling It</title><link>https://foojay.io/today/app-shield-your-server-should-not-trust-the-app-calling-it/</link><pubDate>Fri, 28 Aug 2026 18:39:02 +0000</pubDate><guid>https://foojay.io/today/app-shield-your-server-should-not-trust-the-app-calling-it/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/app-shield-your-server-should-not-trust-the-app-calling-it/app-shield-server-attestation.jpg" alt="A shield between a mobile application and a protected server API" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Any security check that runs only on a phone can be patched out on that phone. &lt;a href="https://github.com/codenameone/CodenameOne/pull/5486" target="_blank" rel="noopener noreferrer"&gt;App Shield&lt;/a&gt; moves the final decision to your server by attaching a short-lived, server-verified attestation token to protected requests.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The Third-Generation GUI Builder: One Workspace for Every Form</title><link>https://foojay.io/today/the-third-generation-gui-builder-one-workspace-for-every-form/</link><pubDate>Sat, 22 Aug 2026 03:17:19 +0000</pubDate><guid>https://foojay.io/today/the-third-generation-gui-builder-one-workspace-for-every-form/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/the-third-generation-gui-builder-one-workspace-for-every-form/third-generation-gui-builder.jpg" alt="A visual editor connecting project forms, CSS, Java source, and a live Codename One canvas" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;We have rebuilt the Codename One GUI Builder again. This is its third generation. The interesting part is not another drag-and-drop surface. It is what we kept, what Maven broke, and why a visual editor must understand the whole project instead of opening one generated form at a time.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Push V3: One Message From Your Server to Every Surface</title><link>https://foojay.io/today/push-v3-one-message-from-your-server-to-every-surface/</link><pubDate>Fri, 07 Aug 2026 23:14:10 +0000</pubDate><guid>https://foojay.io/today/push-v3-one-message-from-your-server-to-every-surface/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/push-v3-one-message-from-your-server-to-every-surface/push-v3-new-cloud.jpg" alt="Push V3 connects one typed message to phones, widgets, and live surfaces" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Push notifications should be application infrastructure, not a pile of expiring certificates and provider-specific JSON.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;This week we merged &lt;a href="https://github.com/codenameone/CodenameOne/pull/5440" target="_blank" rel="noopener noreferrer"&gt;Push V3&lt;/a&gt; into the Codename One core and completed its new cloud implementation. It gives an application a typed message model, managed provider credentials, subscriptions, server-side segments, campaigns, analytics, and a direct path into &lt;a href="https://www.codenameone.com/blog/widgets-live-activities-dynamic-island/" target="_blank" rel="noopener noreferrer"&gt;Surfaces&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>The Codename One JavaScript Port Is Now Free and Open Source</title><link>https://foojay.io/today/the-codename-one-javascript-port-is-now-free-and-open-source/</link><pubDate>Mon, 03 Aug 2026 15:46:30 +0000</pubDate><guid>https://foojay.io/today/the-codename-one-javascript-port-is-now-free-and-open-source/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/the-codename-one-javascript-port-is-now-free-and-open-source/javascript-free-open-source.jpg" alt="The Codename One JavaScript Port Is Now Free and Open Source" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;The Codename One JavaScript port is now open source and available on every plan, including Free. You can also build the JavaScript target locally without a Codename One account.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Own Your Pixels: Native Fidelity on Your Schedule</title><link>https://foojay.io/today/own-your-pixels-native-fidelity-on-your-schedule/</link><pubDate>Fri, 24 Jul 2026 15:45:24 +0000</pubDate><guid>https://foojay.io/today/own-your-pixels-native-fidelity-on-your-schedule/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/own-your-pixels-native-fidelity-on-your-schedule/pixel-perfect-is-a-test.jpg" alt="Own Your Pixels: Native Fidelity on Your Schedule" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;An iOS or Android update can change a screen you shipped without you changing a line of code. If your app builds its UI from UIKit, SwiftUI, Compose, or Material widgets, Apple or Google owns those widget implementations. Codename One does something different. It statically links our lightweight component implementation into your native app. The UI you test is the UI your users keep after the next OS update. An update can still break a platform API or permission contract, but it cannot swap our button implementation for a new one.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>How We Beat HotSpot Performance (By Cheating, But Not Like That)</title><link>https://foojay.io/today/how-we-beat-hotspot-performance-by-cheating-but-not-like-that/</link><pubDate>Fri, 17 Jul 2026 17:24:17 +0000</pubDate><guid>https://foojay.io/today/how-we-beat-hotspot-performance-by-cheating-but-not-like-that/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/how-we-beat-hotspot-performance-by-cheating-but-not-like-that/beating-hotspot-performance.jpg" alt="How We Beat HotSpot Performance (By Cheating, But Not Like That)" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;No, we didn&amp;rsquo;t cheat in the benchmark. At least I hope we didn&amp;rsquo;t. Every optimization in this story was gated on bit identical output checksums against HotSpot, and the harness refuses to print a ratio when a checksum differs. If anything, this post is about how good HotSpot actually is. We tilted the table in our favor in every way we could, we hand tuned C code, and we still only beat it on some benchmarks. Getting there was a genuine struggle. If you want to understand the nuts and bolts of what your Java code costs, and the tradeoffs each runtime picks, I hope this is a good read.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>More Surfaces, Same Deal: Cars, Sensors, Commerce, Video And Builds</title><link>https://foojay.io/today/more-surfaces-same-deal-cars-sensors-commerce-video-and-builds/</link><pubDate>Fri, 10 Jul 2026 18:17:06 +0000</pubDate><guid>https://foojay.io/today/more-surfaces-same-deal-cars-sensors-commerce-video-and-builds/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/more-surfaces-same-deal-cars-sensors-commerce-video-and-builds/one-codebase-more-surfaces.jpg" alt="More Surfaces, Same Deal: Cars, Sensors, Commerce, Video And Builds" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Last week&amp;rsquo;s release post was about funding open source without the bait and switch. This week&amp;rsquo;s release tests that idea again, because two of the new features touch paid infrastructure directly: Commerce and versioned builds.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Funding Open Source Without The Bait And Switch: Analytics, Native Maps, TV And More</title><link>https://foojay.io/today/funding-open-source-without-the-bait-and-switch-analytics-native-maps-tv-and-more/</link><pubDate>Sun, 05 Jul 2026 13:41:00 +0000</pubDate><guid>https://foojay.io/today/funding-open-source-without-the-bait-and-switch-analytics-native-maps-tv-and-more/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/funding-open-source-without-the-bait-and-switch-analytics-native-maps-tv-and-more/funding-open-source-without-the-bait-and-da742f04.jpg" alt="Funding Open Source Without The Bait And Switch" width="1600" height="800" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Years ago I wrote a piece called &lt;a href="https://debugagent.com/open-source-bait-and-switch" target="_blank" rel="noopener noreferrer"&gt;Open Source Bait and Switch&lt;/a&gt;. The short version: a project is released as open source while it has no business model, a community forms around it, and then the bill comes due. The project either rots into abandonware because nobody can afford to maintain it, or it sprouts a home-grown &amp;ldquo;source available&amp;rdquo; license that quietly takes back the freedoms it was given on. You have watched this happen. So have I.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Native Linux, Apple Watch, A Game Builder And Crash Protection</title><link>https://foojay.io/today/native-linux-apple-watch-a-game-builder-and-crash-protection/</link><pubDate>Fri, 26 Jun 2026 18:43:22 +0000</pubDate><guid>https://foojay.io/today/native-linux-apple-watch-a-game-builder-and-crash-protection/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/native-linux-apple-watch-a-game-builder-and-crash-protection/native-linux-apple-watch-game-builder-cr-ec6e2f86.jpg" alt="Native Linux, Apple Watch, A Game Builder And Crash Protection" width="1600" height="800" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This week brings a native Linux desktop port, an Apple Watch and Wear OS port, a visual Game Builder with a high-level gaming API, and a new crash-protection system, with a tutorial following each one over the coming days. There is also a large piece of work that you mostly should not have noticed: we rebuilt the build cloud, and that rebuild caused a few failed builds along the way. More on that below.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>We Will Not Sabotage Your Code</title><link>https://foojay.io/today/we-will-not-sabotage-your-code/</link><pubDate>Sat, 20 Jun 2026 15:37:22 +0000</pubDate><guid>https://foojay.io/today/we-will-not-sabotage-your-code/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/we-will-not-sabotage-your-code/we-will-not-sabotage-your-code.jpg" alt="We Will Not Sabotage Your Code" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is a very low bar. I am genuinely saddened that I need to write it down at all, because until last week it seemed too obvious to say out loud.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;&#10;&lt;p&gt;Last week the &lt;a href="https://arstechnica.com/security/2026/05/fed-up-with-vibe-coders-dev-sneaks-data-nuking-prompt-injection-into-their-code/" target="_blank" rel="noopener noreferrer"&gt;news broke&lt;/a&gt; of an open source developer doing something I find reprehensible. The short version: fed up with &amp;ldquo;vibe coders,&amp;rdquo; he embedded a hidden prompt aimed at AI agents inside his framework, with instructions designed to destroy data on the machines of people who used it.&lt;/p&gt;</description></item><item><title>Native Java Win32, 3D Gaming, Printing and Wallet</title><link>https://foojay.io/today/native-java-win32-3d-gaming-printing-and-wallet/</link><pubDate>Fri, 19 Jun 2026 15:45:42 +0000</pubDate><guid>https://foojay.io/today/native-java-win32-3d-gaming-printing-and-wallet/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/native-java-win32-3d-gaming-printing-and-wallet/weekly-4df2ff44.jpg" alt="Native Java Win32, 3D Gaming, Printing and Wallet" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This week we&amp;rsquo;re introducing native Windows support (no JVM!), a 3D graphics API, a gaming API, support for Apple Wallet, printing and more in what is probably our biggest update ever… But that&amp;rsquo;s not the thing that excites me the most.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>OpenAPI, ORM, SVG and Lottie</title><link>https://foojay.io/today/openapi-orm-svg-and-lottie/</link><pubDate>Thu, 18 Jun 2026 00:52:45 +0000</pubDate><guid>https://foojay.io/today/openapi-orm-svg-and-lottie/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/openapi-orm-svg-and-lottie/build-time-codegen.jpg" alt="OpenAPI, ORM, SVG and Lottie" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is the third follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt;. Saturday&amp;rsquo;s was about how you iterate; yesterday&amp;rsquo;s was about new platform APIs in the core; today&amp;rsquo;s is about a run of pieces that change how you write the structural parts of an app.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Mac Native Builds, Live Protocols, And Open Issues Under 350</title><link>https://foojay.io/today/mac-native-builds-live-protocols-and-open-issues-under-350/</link><pubDate>Wed, 17 Jun 2026 15:03:06 +0000</pubDate><guid>https://foojay.io/today/mac-native-builds-live-protocols-and-open-issues-under-350/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/mac-native-builds-live-protocols-and-open-issues-under-350/weekly.jpg" alt="Mac Native Builds, Live Protocols, And Open Issues Under 350" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Our focus was all over the place this week with work that targeted many different directions: desktop, monetization, communication, media, and more. This fits with our roadmap of one platform that delivers the promise Java never delivered: WORA for Everything Everywhere.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>AI, OAuth, And Other Platform APIs In The Core</title><link>https://foojay.io/today/codename-one-ai-oauth-and-other-platform-apis-in-the-core/</link><pubDate>Mon, 15 Jun 2026 09:00:00 +0000</pubDate><guid>https://foojay.io/today/codename-one-ai-oauth-and-other-platform-apis-in-the-core/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/codename-one-ai-oauth-and-other-platform-apis-in-the-core/platform-apis-in-the-core.jpg" alt="AI, OAuth, And Other Platform APIs In The Core" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is the second follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt;. It covers the platform APIs that moved into the framework core this release. There are two headline pieces (AI / LLM and the modern OAuth / OIDC stack), and two smaller pieces (WiFi / connectivity and share-sheet result callbacks). This continues the direction the previous release set when we moved NFC, biometrics, and cryptography into the framework core. The full background on that earlier set is in &lt;a href="https://www.codenameone.com/blog/nfc-crypto-biometrics-and-build-cloud/" target="_blank" rel="noopener noreferrer"&gt;NFC, Crypto, Biometrics, And A New Build Cloud&lt;/a&gt;.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>On-Device Debugging And JUnit 5</title><link>https://foojay.io/today/on-device-debugging-and-junit-5/</link><pubDate>Fri, 12 Jun 2026 08:49:00 +0000</pubDate><guid>https://foojay.io/today/on-device-debugging-and-junit-5/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/on-device-debugging-and-junit-5/developer-workflow-debug-and-junit.jpg" alt="On-Device Debugging And JUnit 5" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This is the first follow-up to &lt;a href="https://www.codenameone.com/blog/metal-default-new-build-cloud-and-a-new-format/" target="_blank" rel="noopener noreferrer"&gt;Friday&amp;rsquo;s release post&lt;/a&gt; and it covers the two changes from this release that affect how you iterate on a Codename One app rather than what the app itself does. On-device debugging that treats Java as Java on a real iPhone or a real Android device, and standard JUnit 5 against the JavaSE simulator. The first is the one we have been wanting for a long time, and is the one that takes the most explaining, so most of the post is about it.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Metal Default, A New Build Cloud, And A New Format</title><link>https://foojay.io/today/metal-default-a-new-build-cloud-and-a-new-format/</link><pubDate>Mon, 08 Jun 2026 09:47:43 +0000</pubDate><guid>https://foojay.io/today/metal-default-a-new-build-cloud-and-a-new-format/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/metal-default-a-new-build-cloud-and-a-new-format/metal-default-new-build-cloud-and-a-new-af830751.jpg" alt="Metal Default, A New Build Cloud, And A New Format" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This week&amp;rsquo;s release post looks different on purpose. The Friday omnibus has been getting longer and longer, and that has been working against us in two ways. SEO ignores 5,000 word pages that cover twelve unrelated topics, so the actual material gets buried instead of indexed against the queries that should find it. And when a single release post covers ten things, it becomes hard to point a colleague at &amp;ldquo;that one Codename One change from a few weeks ago&amp;rdquo; without scrolling for ten minutes.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>NFC, Crypto, Biometrics, And A New Build Cloud</title><link>https://foojay.io/today/nfc-crypto-biometrics-and-a-new-build-cloud/</link><pubDate>Wed, 03 Jun 2026 08:37:24 +0000</pubDate><guid>https://foojay.io/today/nfc-crypto-biometrics-and-a-new-build-cloud/</guid><description>&lt;p&gt;Last week was about defaults. This week is about device APIs moving into the framework core, a small simulator change that revolutionizes Bluetooth development, and a preview of the new Build Cloud UI we would love your feedback on. There is a handful of other things in here too — and the Metal default flip I trailed &lt;a href="https://www.codenameone.com/blog/skills-java17-and-theme-accents/" target="_blank" rel="noopener noreferrer"&gt;last week&lt;/a&gt; is in a different state than I expected, which is worth a word at the end.&lt;/p&gt;</description></item><item><title>Skills, Java 17, And Theme Accents with Codename One</title><link>https://foojay.io/today/skills-java-17-and-theme-accents-with-codename-one/</link><pubDate>Wed, 27 May 2026 09:32:00 +0000</pubDate><guid>https://foojay.io/today/skills-java-17-and-theme-accents-with-codename-one/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/skills-java-17-and-theme-accents-with-codename-one/skills-java17-and-theme-accents.jpg" alt="Skills, Java 17, And Theme Accents" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;Last week was about Metal and the Skin Designer. This week the headline items are about what a brand new project looks like when you generate it: the default JDK is Java 17, and every generated project ships with an &lt;code&gt;AGENTS.md&lt;/code&gt; authoring skill that lets any modern AI agent work on the project intelligently. There are also some other things worth covering: a runtime accent palette on the new native themes, three Metal follow-ups (one of which introduces a new matrix-correct translate API), the JDK 11+ String API gap closed, and iOS push permission that no longer fires at app launch.&lt;/p&gt;</description></item><item><title>Metal and Skins</title><link>https://foojay.io/today/metal-and-skins/</link><pubDate>Thu, 21 May 2026 08:59:46 +0000</pubDate><guid>https://foojay.io/today/metal-and-skins/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/metal-and-skins/metal-and-skins.jpg" alt="Metal and Skins" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;This post has a lot to cover. Before we get to any of it I want to take on the uncomfortable subject first: quality. Two incidents from the past two weeks deserve a public explanation, one was a bug that fits into our normal iteration loop and one was a serious mistake on my part. Both deserve the kind of explanation I would want if I were on the other side of the import.&#10;| &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/" target="_blank" rel="noopener noreferrer"&gt;codenameone.com&lt;/a&gt;.&lt;/p&gt;</description></item><item><title>Liquid Glass, Material 3, And A Lot Of Plumbing</title><link>https://foojay.io/today/liquid-glass-material-3-and-a-lot-of-plumbing/</link><pubDate>Mon, 11 May 2026 09:10:00 +0000</pubDate><guid>https://foojay.io/today/liquid-glass-material-3-and-a-lot-of-plumbing/</guid><description>&lt;p&gt;&lt;img src="https://foojay.io/today/liquid-glass-material-3-and-a-lot-of-plumbing/liquid-glass-material-3-modern-native-th-99b7f8fd.jpg" alt="Header Image" width="1024" height="512" loading="lazy" decoding="async"&gt;&lt;/p&gt;&#10;&lt;p&gt;It has been one of those weeks where the diff is bigger than the headline. The headline is short — Codename One now ships modern native themes: an iOS &amp;ldquo;liquid glass&amp;rdquo; look and an Android Material 3 look, bundled into the iOS and Android ports, on by default in the Playground, and selectable from a brand new menu in the simulator. The diff behind that headline is several thousand lines across the platform ports, the simulator, the GUI plumbing, and a small army of screenshot tests.&lt;/p&gt;</description></item><item><title>Extending Java APIs - Add Missing Features Without the Hassle</title><link>https://foojay.io/today/extending-java-apis-add-missing-features-without-the-hassle/</link><pubDate>Fri, 07 Mar 2025 12:03:57 +0000</pubDate><guid>https://foojay.io/today/extending-java-apis-add-missing-features-without-the-hassle/</guid><description>&lt;p&gt;The Java API is vast. That&amp;rsquo;s great, but sometimes a missing method or capability can be frustrating. With Manifold, developers can solve this problem without having to wait for Java to add a feature in a later version. Even more importantly, Manifold provides many such extensions out of the box, making Java better for developers. In this post, we will discuss the extension capability. It lets us change classes in the Java API in a compatible way without risk. If Java adds these APIs later then we can seamlessly switch to them.&lt;/p&gt;</description></item><item><title>Front End Debugging Part 3: Networking</title><link>https://foojay.io/today/front-end-debugging-part-3-networking/</link><pubDate>Thu, 27 Feb 2025 16:34:04 +0000</pubDate><guid>https://foojay.io/today/front-end-debugging-part-3-networking/</guid><description>&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#network-debugging-powerhouse"&gt;&lt;strong&gt;Network Debugging Powerhouse&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#reissuing-and-modifying-requests"&gt;&lt;strong&gt;Re-Issuing and Modifying Requests&lt;/strong&gt;&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#curl-and-postman"&gt;cURL and Postman&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#throttling-and-debugging-race-conditions"&gt;&lt;strong&gt;Throttling and Debugging Race Conditions&lt;/strong&gt;&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#why-throttling-matters"&gt;Why Throttling Matters:&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#how-to-use"&gt;How to Use&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#managing-state-with-storage-tools"&gt;&lt;strong&gt;Managing State with Storage Tools&lt;/strong&gt;&lt;/a&gt;&#10;&lt;ul&gt;&#10;&lt;li&gt;&lt;a href="#challenges-of-state-management"&gt;Challenges of State Management&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#analyzing-request-and-response-headers"&gt;&lt;strong&gt;Analyzing Request and Response Headers&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#debugging-in-incognito-mode-limitations-and-best-practices"&gt;&lt;strong&gt;Debugging in Incognito Mode: Limitations and Best Practices&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#connecting-the-frontend-to-the-database"&gt;&lt;strong&gt;Connecting the Front-End to the Database&lt;/strong&gt;&lt;/a&gt;&lt;/li&gt;&#10;&lt;li&gt;&lt;a href="#final-word"&gt;Final Word&lt;/a&gt;&lt;/li&gt;&#10;&lt;/ul&gt;&#10;&lt;p&gt;Debugging network communication issues is a critical skill for any front-end developer. While tools like &lt;a href="https://debugagent.com/wireshark-tcpdump-a-debugging-power-couple" target="_blank" rel="noopener noreferrer"&gt;Wireshark&lt;/a&gt; provide low-level insight into network traffic, modern browsers like Chrome and Firefox offer developer tools with powerful features tailored for web development. In this post we will discuss using browser-based tools to debug network communication issues effectively. This is a far better approach than using Wireshark for the vast majority of simple cases.&lt;/p&gt;</description></item></channel></rss>