Latest posts from Codename One.
Blog

OpenAPI, ORM, SVG and Lottie
This is the third follow-up to Friday’s release post. Saturday’s was about how you iterate; Monday’s was about new platform APIs in the core; today’s is about a run of pieces that change how you write the structural parts of an app. The pieces are an OpenAPI client generator, a SQLite ORM, JSON and XML mappers, a component binder with validation, build-time SVG and Lottie transcoders, and a declarative router with deep links. All ride on a single build-time codegen pipeline: a Maven-plugin pass that reads annotations or declarative source files at build time and emits typed Java that compiles into your binary. No reflection, no service loader, no Class.forName. The “How it works” section at the end of this post covers the codegen plumbing once you have seen what it powers. ...

AI, OAuth, And Other Platform APIs In The Core
This is the second follow-up to Friday’s release post. 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 NFC, Crypto, Biometrics, And A New Build Cloud. ...

On-Device Debugging And JUnit 5
This is the first follow-up to Friday’s release post 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. ...

NFC, Crypto, Biometrics, And A New Build Cloud
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 last week is in a different state than I expected, which is worth a word at the end. ...

Skills, Java 17, And Theme Accents
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 AGENTS.md 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. ...

Metal and Skins
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. ...

Liquid Glass, Material 3, And A Lot Of Plumbing
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 “liquid glass” 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. ...

iOS Density, Scroll Physics, and Accessibility
Most weeks the blog post opens with a new API I want you to know about. This week I want to open with a correction instead: if you shipped to an iPhone 14 Pro — or any iPhone newer than that — your density calculations have quietly been wrong until now. The other thing worth calling out up front is that Codename One now delivers the performance benefits Java developers have been waiting on from Project Valhalla and the Vector API (JEP 460): portable SIMD, and hot-loop buffers that skip the heap entirely. Both of those are features I am genuinely looking forward to in standard Java. Neither is available to us today. Rather than wait, we built what we needed — and Codename One’s Base64 on iOS is now comfortably faster than Apple’s native implementation as a result. That work is at the end of this post because it deserves real space. ...

UIScene on by Default and iOS Performance
Last month I mentioned an option to enable UIScene in Codename One builds. We’ve tested that mode for the past month and with the coming update this Friday we will flip the default mode. This means that builds will implicitly set the build hint ios.uiscene=true instead of the current default of false. Ideally, this would have no impact on anyone… However, if you do run into sudden issues after Friday the 25th of April 2026… It might mean you need to set the build hint to ios.uiscene=false and see if it works. If you’re experiencing a regression due to this change, then let us know ASAP. ...

Swift and Kotlin Native Interfaces, Faster Base64, and More
The biggest change this week is that native interfaces now support Swift on iOS and Kotlin on Android. This is still highly experimental like most of the new features you read about in these posts. The main value here is simplified integration of native code which more often is coming with Kotlin or Swift sample code. Native Interfaces Now Support Swift and Kotlin Native interfaces are one of the most important features in Codename One. They guarantee you won’t be stuck if you need something that we can’t/won’t deliver. They let our community extend Codename One in ways we couldn’t possibly imagine. ...

Compliance Improvements, Simulator Updates, and More
In today’s update, we’re finally removing Proguard from the build process with many implications for all of us. Compliance Checks without Proguard Codename One only supports a subset of JavaSE’s API. While we’re constantly trying to expand the supported set of APIs, it would always be a partial list. Initially, this created a lot of problems where developers would send a build and find out that API X wasn’t supported. ...

Playground and java.time Support in Codename One
This week includes two important additions to Codename One. The first is a new Playground, which gives us a much faster way to experiment with UI code, prototype ideas, and share small runnable examples. The second is built-in support for the java.time API, which fills another long-standing gap in modern Java compatibility. Both are useful on their own, and both remove a bit more friction from day-to-day development. ...