Latest posts from Codename One.
Blog

Native Desktop Themes for Production Apps
A desktop app needs more than larger versions of its phone controls. Dialogs need their own windows. Title bars, scrollbars, and keyboard focus need to behave as desktop users expect. Last week we introduced the native desktop theme experiment. This week we bring those themes into production use. Fluent, Aqua, and Adwaita include refined controls in light and dark appearances, plus the window and dialog defaults that go with them. Your application can inherit those styles and retain its own branding. ...

Your Push Request Succeeded. The Device Key Is Dead.
Your server sends a push request and gets a successful response. Somewhere in the target list is a device key that stopped working weeks ago. The response can’t identify it because the provider hasn’t answered yet. BuildCloud now sends delivery feedback to your backend. It closes the gap between admitting the request and learning what happened during provider delivery, so your own device database can stop retaining keys that the provider has rejected. ...

WebSocket Support for Your Java Backend
A job finishes on the server. The app should know about it without asking the same HTTP endpoint every few seconds. WebSockets keep a two-way connection open so either side can send a message when there’s something to report. The Codename One backend now supports RFC 6455 WebSockets, with Java callbacks for text and binary messages. The client API, com.codename1.io.WebSocket, already existed. This release adds the server half, com.codename1.backend.WebSocket, and @WebSocketMapping to register an endpoint. ...

OpenTelemetry Support from App to Database
A user taps Save. The spinner stays up for three seconds. Your API dashboard says the server is healthy, and the database log contains thousands of queries. Which of those facts explains the wait? Distributed tracing gives the operation a shared identity as it crosses process boundaries. Codename One now instruments app requests and backend work so you can follow that path into a tracing system your team already uses. The entry point is an annotation on each side. ...

JPA Inspired ORM from SQLite to PostgreSQL
Changing a customer’s name should not require remembering which DAO to call after every assignment. Loading twenty orders should not accidentally fetch each customer’s entire history. Those are the kinds of problems that appear once an application grows beyond a few independent tables. Last week’s ORM example introduced shared entities and generated DAOs. This release adds a managed session: an object that keeps track of the entities involved in one unit of work, detects their changes, and coordinates persistence. Relationships now belong in the model too. ...

iOS 27 Glass You Can Choose, Measure, and Test
A tab bar can look right in a screenshot and feel wrong the first time you tap it. Its selection moves, stretches, samples the content underneath, and settles. A still image catches one moment in that process. Alongside that rendering work, we’re bringing back an option long-time Codename One users will remember: choosing the Xcode version on our build servers. It follows last week’s build migration. We have separate iOS 26 and 27 theme generations, revised glass materials, and a closer look at the tab-selection animation. We also have local iPhone Duo support, with a different validation boundary from the ordinary iOS 27 CI runs. ...

Apple Shouldn't Dictate Your App's Redesign Schedule
Apple’s design team doesn’t know what’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. 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 ios.xcode_version 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. ...

The Java Compiler That Became Its Own Test Case
Our Java-to-C translator is written in Java. That made it an obvious candidate for ParparVM, and a very effective way to discover what our runtime hadn’t been asked to do yet. ParparVM is now self-hosting: it can compile its own translator into a native executable, and that executable can translate Java programs. It’s an important step toward building Codename One with Codename One. It also gives us a roughly 37,000-line program that regularly exercises our collections, strings, file handling, exceptions, and collector together. ...

A Desktop Theme Has to Know About the Mouse
A button can have the right color and still feel wrong the moment you move the mouse over it. Desktop themes have to account for pointer states, font metrics, focus, and the conventions of the machine running the app. Native desktop themes are now available in Codename One, in a deeply experimental mode. This week’s release adds Fluent for Windows, Aqua for macOS, and Adwaita for GNOME. We’re keeping the current defaults while the implementation develops. ...

Xcode 27: The Build Settings That Can Stop a Release
An unchanged Java app can stop building because a number inside its generated Xcode project is now too low. No new API call, no changed screen, just a deployment target the new SDK refuses to accept. That was the first problem in our Xcode 27 work. Launch-screen metadata and scene lifecycle supplied the next two. This week’s release handles all three in the builder, where an application team should be able to expect them to work. ...

The Hard Part of Invite a Friend Is the Install
You spend $100 on ads for your app. How do you know whether you got your money’s worth? The ad platform can count clicks, but you need to know what happened afterward. Did those people install the app? Did they use it? Did any of them pay? Without that connection, you can keep spending money on ads that bring very little business. An invitation has the same problem. A user shares a link with a friend, and the friend may pass through an app store before your app can receive anything. If the invitation code disappears during installation, the later signup or purchase loses its connection to the invitation that started it. ...

One Vault, from Your Phone to the Browser
Encrypting a file is the easy part. Giving the same person access to it on a phone and in a browser, without handing the sync server the key, is where the application starts accumulating security code. Our new com.codename1.security.vault API takes responsibility for that work. It extends the security work in this week’s release to synchronized data and gives the JavaScript target a much better set of options than a key stored beside its ciphertext. ...