Latest posts from Codename One.
Blog
Search the blog
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. ...

Dash: An Endless Runner That Races Through Your City
Skirmish showed that most of a mobile game is app: the sign-in, the menus, the shop, the friends list, the pushes and the server. Dash is the second game template, and it is a different kind of game: an endless runner. A runner dashes down a track of lanes, jumps hurdles, slides under barriers and changes lanes around traffic. You can generate it from the Initializr today, under your own name and package, and the source is MIT-0. ...

Embedded Java: 20x Smaller Than Chrome, Faster Than Rust, Royalty Free
Embedded software has the hardest job description in our industry. It has to run for years without a reboot. It has to fit in whatever RAM and flash the bill of materials allowed, because every chip you add is paid for again on every unit you ship. It has to respond instantly on a CPU slower than a phone from five years ago. And now it also has to look like the phone app, talk to the phone app, and report to a cloud service, because that’s what customers expect from anything with a power cord. ...

Caches, Certificates, Streaming Uploads and a Simulator That Types
The templates this month (a bank, a streaming service, a messenger, a delivery service and a game) all have servers, and every server ran into something a modern web app takes for granted. This post collects what we added to the Codename One backend to fill those gaps. Several of them apply to the client too. Then there’s the simulator, which can now show a virtual keyboard and record a video of your app. ...

GrapheneOS, LineageOS, /e/OS and Others Are Now Officially Supported
This post is mostly about phones that don’t have Google at all: GrapheneOS, LineageOS, CalyxOS, /e/OS and other Android builds. Codename One now supports them officially. After that, a shorter update on the Android compatibility layer, which runs existing Android apps on iPhone, desktop and the web. GrapheneOS, LineageOS, CalyxOS and /e/OS I was a member of Team OS/2. I know what it’s like to use an operating system the big vendors forgot, and to find that half the apps you need just don’t start. People choose GrapheneOS, LineageOS and other AOSP builds for good reasons, usually privacy, and they deserve apps that work. There’s a business case too: when you support a niche operating system its users have learned to live without, you get the most loyal advocates your product will ever have. They notice, they remember, and they tell each other. ...