Why Codename One

Native apps from Java, without a browser or scripting bridge.

Codename One runs Java on Android's native runtime and translates Java bytecode to C for a native iOS build. You keep one UI and application codebase, use the Java ecosystem, and ship without royalties or a platform vendor setting the framework agenda.

Architecture at a glance

Compare what your application actually ships.

The language, runtime, UI layer, test cycle, and vendor incentives affect the product long after the first screen works.

DecisionCodename OnePlatform UIFlutterWeb
Primary ecosystemJava, Maven, JVM libraries, and mainstream Java IDEsSwift/Xcode plus Kotlin or Java/Android StudioDart, pub packages, and Flutter toolingHTML, CSS, JavaScript, and browser tooling
Android executionJava bytecode runs on Android's ART runtime and calls Android APIs directlyKotlin or Java runs on ART with direct Android APIsAOT-compiled Dart code runs with the Flutter engineJavaScript inside a browser or WebView
iOS executionParparVM translates Java bytecode to C, then Xcode compiles the native binarySwift or Objective-C compiled by XcodeAOT-compiled Dart code runs with the Flutter engineJavaScript in WebKit, or a native wrapper around it
Shared UIOne UI implementation across mobile, desktop, web, watch, TV, and vehicle targetsSeparate Swift and Kotlin UI implementationsShared across Flutter-supported targetsShared across browsers; native wrappers add platform work
ThemingCSS themes shared across targets, with platform-specific selectors when neededSeparate SwiftUI/UIKit and Compose/View stylingTheme and widget code written in DartCSS interpreted by the browser
Local developmentOne JavaSE simulator with device skins, component inspection, networking tools, tests, and MCP controlPlatform simulator and emulator toolchainsFlutter tooling plus platform simulators for native behaviorBrowser developer tools
CI testingShared logic, UI, and screenshot tests can run on the JVM or headless JavaScript before native buildsSeparate iOS and Android test jobsDart tests plus native jobs for platform behaviorHeadless browser tests; wrappers need native jobs
Runtime packagingAndroid application bytecode runs on ART. On iOS, ParparVM translates Java bytecode to C before Xcode compiles the native binary. The Codename One UI toolkit is bundled with the appUses each OS runtime and UI toolkitRelease builds bundle AOT-compiled Dart code with the Flutter engine and its Dart runtime supportRuns inside a browser engine or WebView
Native OS componentsNative interfaces plus PeerComponent for real maps, browsers, cameras, and other platform viewsDirect access to every platform componentPlatform channels and Platform ViewsBrowser APIs or wrapper plugins
License and directionIndependent, open source, GPLv2 with Classpath Exception, no royaltiesControlled separately by Apple and GoogleOpen source and directed by GoogleStandards and engines controlled by browser vendors

The Codename One advantage

One strict Java codebase, one simulator, one set of tests.

  • Keep Java's library ecosystem, Maven builds, and mainstream profiling and debugging tools.
  • Theme the shared UI with CSS instead of rebuilding styling in each platform language.
  • Run most UI and logic work in the universal JavaSE simulator without waiting for a native build.
  • Move fast CI work onto ordinary JVM or headless browser runners, then reserve native builders for native verification.
  • Reuse Android's built-in ART runtime. The Codename One UI toolkit ships with the application; it does not add a browser or a second language runtime on Android.
  • Embed real OS views when you need them, and call native SDKs synchronously when the platform permits it.
  • Ship any number of commercial applications without royalties or per-app fees.
  • Work with an independent framework company whose revenue depends on customers shipping across vendors.

Platform UI

Two vendor toolkits and two UI implementations.

  • You get immediate access to each vendor's newest APIs.
  • You also maintain separate Swift and Kotlin screens, tests, behavior, and release work.
  • Apple or Google can restyle platform-owned controls after your application ships.

Flutter

A Dart codebase built around the Flutter engine.

  • Release builds include AOT-compiled Dart code, the Flutter engine, and Flutter runtime support. On Android, Codename One application bytecode runs on ART.
  • Moving from Java to Flutter means adopting Dart, pub packages, and a Google-directed framework instead of retaining JVM libraries, Maven, and Java tooling.
  • Native integration crosses asynchronous platform channels or embeds Platform Views. Codename One uses native interfaces and PeerComponent, including synchronous native calls where the platform permits them.

Web

A URL-first application inside the browser.

  • The web is a strong deployment target when a URL and browser APIs match the product.
  • App-store packaging adds a WebView wrapper and native integration layer.
  • Codename One includes a JavaScript port when the same Java application also needs web reach.

Control the whole development loop

Codename One removes duplicated work before the store build.

Java is native on Android

Your application code runs as Java bytecode on Android's own ART runtime. Codename One adds a portable UI and API layer; it does not hide Android behind JavaScript.

Java tooling stays useful

Use Maven, IntelliJ IDEA, NetBeans, Eclipse, VS Code, JUnit, profilers, and the wider JVM library ecosystem. The mobile project remains a Java project.

CSS controls the UI

One CSS theme covers the shared component hierarchy. Platform selectors and constants let you diverge deliberately without creating another screen implementation.

Test before native CI

The JavaSE simulator runs the same shared UI and business logic locally. JVM and headless JavaScript jobs catch routine failures before scarce macOS or device infrastructure is involved.

Native integration is explicit

Native interfaces expose platform SDKs. PeerComponent embeds heavyweight OS views such as maps and browsers inside the shared UI.

No royalties or vendor agenda

The framework is open source and independent. Commercial applications have no royalty or per-app fee, and the business succeeds when customers keep shipping across Apple, Google, desktop, and web targets.

Verify it in your codebase

Build the screen that makes other frameworks expensive.

Use a screen with real layout, CSS, business logic, and one native view. Run it in the simulator, add a JVM test, then submit iOS and Android builds from the same project.

  1. 1Generate the Java project.
  2. 2Build and theme one representative screen.
  3. 3Add the native view your product needs.
  4. 4Run local tests, then build for both stores.

Keep the codebase

Create a Java project and test the architecture yourself.

The framework is open source and royalty free. The free cloud tier includes 100 free cloud build credits each month.