Build1 distinct publisher3 min readPublished
The merged PR shares source, resources and themes with the phone build while keeping storage separate, and on Android the standalone flag takes the phone product's slot because no companion Wear APK exists yet.
The Engineer · Build desk

Compiled by The EngineerSomething wrong?How this is made
The most useful sentence in the documentation is a prohibition. Do not call `isReachable()` as a preflight for a request that already has a fallback: reachability can change after the check, and its first value during a cold start may still be unknown [18]. Send the message and let `replyFailed()` select the replicated state [18]. Failure is an ordinary branch, because the other side may be asleep, out of range, or running an older build that does not know the message path [17].
Three transports exist because a watch spends much of its life asleep [23][1]. `putData()` is for state that should converge when the watch next wakes [13]. Each data path holds only the latest value, so two rapid writes can arrive as one update, which is correct for a step count and wrong for a queue of events [14]. `sendMessage()` assumes both applications are awake and the caller needs an answer now [16]. `transferFile()` carries files and large payloads that can arrive later [19].
The platform split is where the engineering shows. Wear OS reuses the existing Android port [11]. watchOS gets a separate Core Graphics renderer, because it has no UIKit view hierarchy, no OpenGL ES and no Metal [11], and the runtime sits inside a SwiftUI shell running its own ParparVM translation rooted at the watch entry point [12]. That is a second rendering path and a second translation root in one repository, which is where I would put the test budget.
The tooling anticipates the obvious mistake. Watch > Launch Watch App runs the watch beside the phone in separate processes connected through the desktop bridge, so `sendMessage()` and `putData()` take the same asynchronous route the code expects on a device [20]. Both processes are up in that configuration, so I would not count the bridge as coverage for the `replyFailed()` branch. Four skins ship: Apple Watch 41 mm and 45 mm, plus round and square Wear [21][2]. Testing the round skin even when the first target is Apple Watch catches layouts that depend on rectangular corners [21].
For the UI itself, `CN.isWatch()` selects the form-factor-specific branch, and a `watch` theme override changes styling without forking the rest of the theme [22].
What would have to be true for this to transfer to your project: you already ship a Codename One phone application [1], and the watch screen you want is a separate application with its own startup sequence rather than another form in the phone process [25]. On the packaging gap, the build logs that no companion Wear artifact was produced instead of quietly implying otherwise [7]. A build that reports what it did not make is rarer than it should be.
Ranked by verification strength, evidence, and original report placement.
Codename One is an open-source framework for building native iOS, Android, desktop and web apps from a single Java or Kotlin codebase.
PR #5487 now builds an Apple Watch companion from codename1.watchMain.
The watch application starts from a fully qualified class name, for example codename1.watchMain=com.example.MyWatchApp.
On Apple platforms, watchMain adds a companion target to the phone build.
On Android, codename1.watchStandalone=true replaces the phone product with the Wear OS application rooted at watchMain; without that flag the Android build remains the phone application.
A companion Wear APK beside the phone application is not generated yet.
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 29, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
build
Eleven tables, no indices: 119.1 ms per read, and a tracing pipeline that accepted nothing1 distinct publisher
build
Fabricated SQLite CVEs cleared NVD, CISA ADP and Red Hat before anyone ran the code1 distinct publisher
product
Eight smartwatches reach their support cutoffs in one four-month window, and the hardware is fine1 distinct publisher
build
Thirty minutes a day, and none of it from letting the agent write Swift1 distinct publisher
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Precise, primary, and unchecked by anyone else
Every detail traces to the people who wrote the code. That cuts both ways: the property names, the WCSession and Wearable Data Layer mappings and the renderer split are the kind of specifics a vendor cannot fudge for long, and PR #5487 is public enough to check — but nobody in our coverage has checked it. What raises the floor is the post volunteering its own holes, including the Android build logging that no companion Wear artifact was produced.
A merge, and nothing downstream
The only adoption fact available is that the code landed and shipped in a weekly release. No app, no team, no download or install figure appears, and the Android path still needs two builds to produce both a phone and a standalone Wear product — a friction point that has to be crossed before real usage shows up.
The caveats outrun the pitch
Release posts usually inflate; this one deflates. It says outright that the companion Wear APK, the watchOS WidgetKit target and Wear complication or tile services do not exist yet, and warns that a failed reply is an ordinary code path rather than an edge case. The single stretch is the headline framing of one codebase, when on Android the standalone flag takes the phone product's slot and two builds are the price of shipping both.
The framework's own team, courting adopters
This is Codename One writing about Codename One on a developer platform, complete with a what-is-Codename-One primer, a link back to codenameone.com and a pointer to the rest of the week's release. The audience being recruited is the audience being informed. The technical candour is real, but so is the interest in having Java and Kotlin teams pick this over the alternatives.
Enough to plan against, not enough to bank on
We would repeat the mechanics with a straight face — one publisher, but that publisher is the implementer and the merge is public. We would not repeat anything about how well it works, how it performs on a real watch, or whether anyone is using it, because this reporting contains none of that and there is no second account to lean on.