Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
PalmSDK 0.4.1 Overview
This is a modernization of the 2011-era webOS SDK and driver for the Palm/HP mobile operating system. It works with devices like the Palm Pre or the HP TouchPad on modern desktop platforms.
The SDK consists of four parts, most of which were initially distributed separately. These parts have been combined and modernized for convenience and manageability:
- novacomd: the driver that communicates with the webOS device
- novacom: a utility that interacts with the driver for basic device commands
- sdk tools and content: command line tools and sample code for building, installing and interacting with webOS apps and services
- pdk: headers and device libraries for native (C/C++ and SDL) plug-in development
The easiest, and most common deployment will use all four parts, but you can also pick and choose based on your needs.
What's new in 0.4.1
A Windows release: Windows now gets what macOS and Linux got in 0.4. Thanks to @achunt2143 for the port.
- Lunacy devices on Windows. Windows now runs this repo's own novacomd, built
from the same sources as macOS and Linux, as the
NovacomDservice in place of HP's closed 2011 daemon. So Lunacy devices on adb are listed there too, and future novacomd fixes reach Windows. A prebuilt x64windows\novacomd.exeis committed, so nothing needs compiling. See Windows below. - A Windows setup wizard,
webOS-SDK-Redux-<version>-Setup.exe. You pick components, it offers to install Java if Java is missing, it upgrades or takes over an earlier install, and it uninstalls from Settings → Apps. - macOS driver packages rebuilt (package version 3.1.0.1). The
.pkgfiles published with 0.3 and 0.4 carried an older novacomd with no Lunacy support, and on arm64 no TCP fix either. The new ones are built from clean on both architectures. - The batch installer and uninstaller install this novacomd too, and hand the
service back to HP's daemon on uninstall (
/hpnovacomdkeeps HP's). - No changes to the SDK tools, frameworks or PDK, or to novacomd's source on
macOS and Linux. The SDK folder is renamed
0.4.1to follow the versioning convention. - Known issue: novacomd doesn't build with gcc 15 or later on Linux (C23 makes
boola keyword). This predates the port. See GCC15-C23-BOOL.md.
What was new in 0.4
- Lunacy devices. Lunacy runs webOS apps on Android. novacomd now finds it through adb and lists it beside any TouchPad, and every tool works with it. See Lunacy below.
- The TouchPad's own frameworks. Enyo is now the reference TouchPad's tree, with the localized resources and libraries 0.3 lacked, plus Lunacy's fixes for modern engines; Mojo's stylesheets, images and templates, 483 broken links in 0.3, are real files. See FRAMEWORKS.md.
- novacom no longer takes a packet whose payload arrives after its header for the connection closing.
What was new in 0.3
- webOS CE 3.1.0 device support. The SDK tools previously refused to talk to
a device running the community OS update, failing with
unrecognized device version. See webOS CE support below. - The PDK is back. Native plug-in headers and the unstripped ARM device libraries now ship again, so you can build, link and debug C/C++ and SDL plug-ins. See PDK below.
palm-*commands now resolve throughCurrent, so changing SDK versions no longer means rerunning the installer.- Installing a new version reports older ones instead of leaving them silently orphaned, and tells you how to roll back.
- Fixed installing via the
Currentsymlink, which previously copied the symlink instead of the SDK tree and still reported success.
Pre-requisites
- This SDK targets macOS (Intel or Apple Silicon) and 64-bit Linux. Windows gets a setup wizard (64-bit Windows 10 and 11) and a batch installer; see Windows below. On 32-bit Linux or very old OSX, the legacy SDK will likely work for you.
- You will need some version of Java. This version of the toolchain is very tolerant of different versions of Java, but make sure you have at least Java 8 working!
- You will need build tools for your platform. On Linux these are installed with your package manager and called
build-essentialorDevelopment Tools. On macOS this means XCode Command Line tools and Homebrew. - You will need libusb. On Linux this is
libusb-devorlibusb-devel. On macOS, this islibusb-compatfrom Homebrew.
The installers will try to help you with these pre-reqs, but its always best if you get them working first!
Installation (All Parts)
- Run ./install.sh from the root of this folder
Installation (Individual Parts)
novacomd
Build and install this first!
- Run
./build.shfrom thenovacomdfolder. If the build succeeds it will offer to install. - If you need to troubleshoot, you can separately run
./install-<platform>.sh - See BUILD_SUMMARY.md in the novacomd folder for troubleshooting.
novacom
This is optional, but useful for some SDK operations and device troubleshooting
- Ensure you have novacomd built and installed -- novacom will use the same path as novacomd.
- Run
./build.shfrom thenovacomfolder. If the build succeeds it will offer to install. - If you need to troubleshoot, you can separately run `./install-.sh
- See BUILD_SUMMARY.md in the novacom folder for troubleshooting.
SDK
If you want to build webOS applications, you'll need the SDK. You don't strictly have to install it, but it can be helpful to have it in your path. Typically you'll install this in the same place as novacom (if you built it).
- Ensure you have installed novacomd and novacom
- Run
./install-<platform>.shfrom the0.4.1folder
The SDK ships in a numbered folder that changes with each release, with a
Current symlink beside it. The installer mirrors that layout where it installs
— /opt/PalmSDK/Current -> /opt/PalmSDK/0.4.1 by default — and the palm-*
commands it puts on your PATH point through Current. Switching or rolling
back a version is therefore one command, with no reinstall:
sudo ln -sfn /opt/PalmSDK/0.4 /opt/PalmSDK/Current
Older versions are left in place when you install a new one; the installer tells you which it found rather than deleting anything.
PDK
If you want to build native (C/C++ or SDL) plug-ins rather than JavaScript apps,
you'll also want the PDK. It installs to /opt/PalmPDK.
- Run
sudo ./install-pdk.shfrom thepdkfolder (the top-levelinstall.shdoes this for you)
This ships the headers, the unstripped ARM device libraries you link and debug
against, the device helper scripts, and the sample code. It deliberately does
not ship HP's cross-compilers: those were 32-bit Intel binaries and cannot
run on macOS 10.15 or later. Bring your own ARM toolchain and point it at
/opt/PalmPDK/include and /opt/PalmPDK/device/lib.
Earlier releases dropped the PDK entirely on the grounds that none of it ran on a modern Mac. That was true of the compilers and false of everything else — see PDK.md.
Windows
Windows gets a setup wizard: download webOS-SDK-Redux-<version>-Setup.exe
from the releases
and run it. It lets you pick components, offers to install
Java (Eclipse Temurin) if it's missing, and uninstalls from Settings → Apps.
Build it yourself with installer-windows\build.ps1 (needs Inno Setup).
For scripting there is also a batch installer. Run it from an elevated command prompt:
install-windows.bat
Either one installs the SDK to %ProgramFiles%\PalmSDK (with the same Current
junction convention), puts the palm-* commands on the system PATH, installs
the PDK to C:\PalmPDK, runs HP's novacom MSI for the USB driver, and installs
this repo's novacomd as the NovacomD service in place of HP's 2011 daemon.
That brings Lunacy devices (through adb) to Windows, and replaces HP's closed
32-bit binary with one built from the same sources as macOS and Linux, so their
fixes reach Windows too. Nothing needs compiling:
a prebuilt x64 windows\novacomd.exe is committed. You need 64-bit Windows 10
or 11 and Java 8+. Options: /y, /sdkdir <path>, /nopdk, /nonovacom,
/hpnovacomd (keep HP's daemon).
Tested on Windows 11 with an HP TouchPad (webOS CE 3.1.0), a Palm Pre 3 (HP webOS 2.2.4) and Lunacy 0.8.0 over adb. To build novacomd yourself, MSYS2's MinGW-w64 does it (see novacomd/README.md); the installer prefers your build.
The one thing that cannot be built from source here is the driver — Windows
needs HP's original NovacomInstaller_{x86,x64}.msi, which is committed under
windows/. It binds the device to Microsoft's in-box WinUSB rather than
shipping its own kernel driver, and its catalog is WHQL-signed by Microsoft
with a SHA-1 digest from 2011. Windows 11 still loads it and re-running
the MSI over an existing install works, though installing it on a machine that
never had it has not been tried on Windows 11.
See WINDOWS.md for the details.
macOS driver installer (.pkg)
For distributing the drivers to people who won't build from source, there's a signed, notarized macOS installer package containing novacomd, novacom, novaterm and their libusb dependencies:
./build-driver-installer-mac.sh --notarize # produces novacom-installer-<arch>.pkg
It builds both binaries from clean, stamped with the package version, and prints
the version strings it packaged so a stale or misattributed build is visible in
the log. Signing and notarization need your Apple credentials in
set-apple-vars.sh (gitignored).
Note this package is drivers only — it contains no SDK and no PDK, so it is
not a substitute for install.sh.
See DRIVER-INSTALLER-MAC-README.md for what it installs and BUILD-DRIVER-INSTALLER-MAC.md for building, signing and notarizing it.
webOS CE support
The stock SDK tools only recognize devices whose PRODUCT_VERSION_STRING starts
with Palm webOS or HP webOS, so every palm-* command against a device
running webOS CE 3.1.0 failed with unrecognized device version. The
webos-tools.jar in this repo is patched to accept modern version strings —
webOS CE, Open webOS, and unprefixed webOS x.y.z — and Lunacy by name, while
still parsing every 2011-era string exactly as before.
See SDK-VERSION-DETECTION.md for the bug and the fix, and patch-webos-tools-version.py to re-apply it to a pristine jar or to check whether a given jar is patched.
Lunacy
Lunacy runs legacy webOS apps on Android. With an Android device attached over adb (USB or Wi-Fi) and Lunacy running on it, novacomd lists it beside any webOS device, and every tool works with it:
$ novacom -l
44815 39bda514d848b5d5710752050a8920c7b7ff5c1f adb lunacy
$ palm-install -d lunacy com.example.app_1.0.0_all.ipk
$ palm-log -d lunacy -f com.example.app
There is nothing to set up beyond adb itself. See LUNACY.md.
Novacom over Wi-Fi (TCP)
This SDK's novacomd fixes a bug that kept Palm's TCP transport from ever
completing its handshake on Linux, so a device can attach over Wi-Fi instead of
USB — handy when the device's only USB port is needed for something else. Every
tool (novacom, novaterm, palm-install, palm-log, …) then works over it
unchanged.
See NOVACOM-TCP.md for the bug, the fix and the setup, and novacom-tcp/ for ready-made host scripts and the device-side firewall job.
Note that network novacom is an unauthenticated root shell — treat a device with it enabled as lab equipment on a trusted network.