Latest posts from Codename One.
Blog
Search the blog
Run an LLM and Whisper on the Phone, With No Server Bill
Most AI features in mobile apps don’t need a cloud model, and paying per token for them is a habit, not a requirement. Summarizing a note, tagging a caption, turning a voice memo into text or filling a form from a sentence is work a half billion parameter model does on the phone: offline, with no per request cost, and without sending your user’s text to anyone’s data center. ...

Windows Kiosks and Command Line Tools, Built From Java
The two kinds of software people least expect to write in Java are the app that owns a panel PC in a shop and the tool you type into a terminal. Both used to be bad fits for the same reason: a JVM to install, seconds of startup, and a runtime that doesn’t own the machine. Codename One compiles your Java ahead of time to C and then to one native executable, so both problems go away. This week that covers locked down Windows kiosks and command line tools. ...

Ship Your Game on Steam, and Why the Art Matters More Than the Engine
Here’s my claim, and the rest of this post is the evidence: the engine is the least important decision in a small game. Art decides whether people play it, the server decides whether it’s fair, and the store decides whether anyone finds it. Splat, our third game template after Skirmish and Dash, is a first person team paintball shooter, four against four, in 3D, online, written in Java with Codename One. It’s the kind of game people assume needs a commercial engine. Watch it first and judge for yourself. ...

Kafka Listeners, Mail and Live Streams in Your Backend, With Records as Entities
On Friday I said that one codebase pays twice when it includes the server. That claim is worthless if the server can’t do what a real service does: consume a queue, send a receipt email, push live updates and store data in the shape the language prefers. This week the Codename One backend does all four, and on the last one it does something JPA still forbids. ...

Subscriptions, Paywalls and a Customer Center, and We Don't Take a Cut
If you sell subscriptions in an app, you already give Apple or Google up to 30%. The usual next step is a subscription platform, because store receipts are miserable to validate and a paywall you can’t change without an app update is a paywall you’ll never test. The best known of those platforms charge a percentage of your revenue on top of the store’s. The more you earn, the more you pay them, for the same API calls. ...

Calendars, Gantt Charts and Booking Apps Without Writing a Calendar
Yesterday I argued that a framework should give you more than the OS does. Here’s the test case. Nobody ships a calendar view you can fill with your own appointments, or a Gantt chart. Not iOS, not Android, not Flutter, not React Native, not Kotlin Multiplatform, not .NET MAUI. Every one of them leaves you with a date picker and a blank screen. If your app books haircuts, plans shifts or tracks a project, you write that screen yourself, once per platform if you went native, or you license a commercial component and pay for it every year. Codename One ships both, in the box, free. ...

Shopify Was Wrong and Right to Dump React Native
In September Shopify announced it’s moving every mobile app off React Native and rewriting them in Swift and Kotlin. Their reasoning fits in one sentence from the post: “building the same feature in Swift and Kotlin no longer carries the cost it used to.” Agents write the second copy, so why share code at all? React Native deserved to die. It’s a heavyweight toolkit, and every heavyweight toolkit, from AWT to Xamarin.Forms, was eventually replaced by a lightweight one or by native code. Replacing it with two native codebases is wrong, because it takes the most expensive part of React Native, a separate platform per target, and doubles it. Code was never the cost. Platforms, testing and store churn are, and AI makes every one of them worse. ...

Debug Your Dart in a Java Debugger, and JFX Central on a Phone
Two weeks ago we showed that Codename One can build a Flutter app from its Dart source and run it faster than Flutter’s own build on most of our benchmarks. The first question from people who tried it was a fair one: what happens when something breaks? You’d be staring at a stack trace full of generated Java. That’s fixed, and this post also rounds up the rest of the week’s work on code you already have. ...

Port Your Spring Code With Fewer Edits, and Libraries That Bring Their Own Server
The Codename One backend compiles your server to a native executable that starts in 40 ms and idles in about 9 MB. The catch has always been porting: real Spring services lean on dozens of small conveniences, and every one that’s missing is an edit. This round we took real services across and fixed what they tripped on, so most of this post is code that now moves over with nothing but its imports changed. ...

Packaging Java Apps for Xbox Developer Mode, and Why Consoles Need Help
Codename One targets iOS, Android, macOS, Windows, Linux, the web, watches, TVs and now embedded boards. There’s one major category missing: game consoles. The technical side looks manageable. A console is a computer with a GPU and a controller, and we already render through Metal, Direct3D and OpenGL ES and map controllers to game actions. They’re hard because everything about them sits behind a non-disclosure agreement. This week we took the first step that doesn’t need one. ...

Real-Time Java: Control Loops the Garbage Collector Never Stops
In Friday’s embedded Linux post I promised the hardcore part. A device with a touchscreen is one thing. A device that drives a motor, reads a force sensor or balances something is another, because the code that does that has deadlines. Miss one and the motor stutters, the reading is stale, or the thing falls over. The standard advice is that you can’t write that code in Java. The garbage collector will stop your thread at the worst moment. This post explains what real time actually requires, why that advice is usually right, how real-time JVMs like JamaicaVM and the RTSJ got around it, and the approach we took because we own the VM. ...

Pulse: Heart Rate Zones From the Watch to the Trainer's Screen
A spin class with a screen on the wall showing every rider’s heart rate zone is the kind of feature studios pay a lot for. It usually means a vendor’s hardware, a vendor’s app and a monthly fee per location. Underneath, it’s three hard integrations: reading a watch or a chest strap in real time, getting that reading off the phone fast enough to matter, and doing it on iOS and Android, which store health data in two completely different places. ...