7.3 KiB
CLAUDE.md
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Overview
This is the HP webOS SDK version 3.0.5 (build 676), a legacy development kit for creating applications for the HP/Palm webOS platform. The SDK includes frameworks, tools, sample applications, and reference implementations of core webOS applications.
SDK Structure
0.1/ # SDK version 0.1 (symlinked as Current/)
├── bin/ # Command-line tools (palm-* commands)
└── share/
├── addons/ # Additional libraries and utilities
├── applications/ # Reference application source code
│ └── enyo/ # Enyo-based reference apps
├── documentation/ # API and SDK documentation
├── framework/ # Core frameworks
│ ├── enyo/ # Enyo 1.0 framework (build 128)
│ └── mojo/ # Mojo framework (version 506)
├── jars/ # Java-based webOS tools
└── samplecode/ # Example applications
├── enyo/ # Enyo examples and templates
└── mojo/ # Mojo examples and samples
Development Tools
All webOS command-line tools are located in 0.1/bin/ and follow the palm-* naming convention. These are bash scripts that invoke Java tools from 0.1/share/jars/webos-tools.jar.
Requirements: Java 1.8 or greater is required to run the SDK tools.
Common Commands
palm-generate- Generate new app projects from templatespalm-package <app-dir> [service-dir] [package-dir]- Package applications into .ipk filespalm-install [-r] <package.ipk>- Install/remove apps on device or emulator (use-rto remove)palm-launch <app-id>- Launch an installed applicationpalm-log -f <app-id>- Follow/tail application logspalm-run- Run applicationspalm-help- Display help information
Packaging Workflow
Standard workflow for building and deploying applications:
# Package the application
palm-package path/to/app-dir
# Remove old version (optional)
palm-install -r com.example.app
# Install the new package
palm-install com.example.app_1.0.0_all.ipk
# Launch the application
palm-launch com.example.app
# Watch logs
palm-log -f com.example.app
macOS Driver Installation
The repository includes scripts for building macOS installer packages for the novacom/novacomd USB drivers:
build-driver-installer-mac.sh- Automated build script for creating architecture-specific installer packages (supports both Intel and Apple Silicon)BUILD-DRIVER-INSTALLER-MAC.md- Complete guide to building, signing, and distributing the installer packages
These tools automate the packaging of novacom/novacomd binaries and their libusb dependencies into a macOS .pkg installer with proper code signing and launchd service integration. See BUILD-DRIVER-INSTALLER-MAC.md for detailed build instructions.
Application Frameworks
Enyo Framework (Primary for webOS 3.0)
Located at: 0.1/share/framework/enyo/1.0/framework/
Enyo is a component-based JavaScript framework for building webOS applications with a declarative syntax.
Key Concepts:
- Applications use
enyo.kind()to define UI components - Entry point is
index.htmlwhich loadsenyo.jsfrom the framework depends.jsfile declares JavaScript and CSS dependencies usingenyo.depends()appinfo.jsondefines app metadata (id, version, title, icon, etc.)- Set
"uiRevision": 2in appinfo.json for Enyo apps
Templates available in 0.1/share/samplecode/enyo/templates/:
SinglePane- Single view applicationMultiPanel- Multi-panel navigationSplitView- Split-pane layout
Mojo Framework (Legacy)
Located at: 0.1/share/framework/mojo/506/
Older framework for webOS applications, still supported for backward compatibility.
Application Structure
Standard Enyo Application
app-directory/
├── appinfo.json # App metadata and configuration
├── index.html # Main HTML entry point
├── depends.js # Dependency declarations
├── icon.png # App icon
└── source/ # Application source files
├── App.js # Main application logic
└── App.css # Application styles
appinfo.json Fields
id- Unique reverse-DNS identifier (e.g., "com.palm.app.photos")version- Version stringtitle- Display namemain- Entry HTML file (typically "index.html")type- Application type ("web" for JavaScript apps)icon- Icon filenameuiRevision- Set to 2 for Enyo appsvendor- Publisher namekeywords- Array of keywords for universal search
Service-Based Applications
Applications can include JavaScript services for background processing. These use a packageinfo.json at the package level that references both the app and service directories:
{
"id": "com.example.app",
"package_format_version": 2,
"version": "1.0.0",
"app": "com.example.app",
"services": ["com.example.app.service"]
}
Package with: palm-package app-dir/ service-dir/ package-dir/
Reference Applications
Source code for core webOS applications is available in 0.1/share/applications/enyo/:
com.palm.app.browser- Web browsercom.palm.app.email- Email client (missing some open source dependencies)com.palm.app.maps- Maps applicationcom.palm.app.messaging- Messaging/SMScom.palm.app.notes- Notes applicationcom.palm.app.photos- Photos & Videos app
Note: Some applications have missing open source components (see readme.txt in applications directory).
Sample Applications
Enyo Samples (0.1/share/samplecode/enyo/)
examples/- Basic examples (HelloWorld, Maps, Layouts, G11n, Theming, etc.)more-examples/- Advanced examples (WebView, Accelerometer, Bluetooth, ZeroConf, etc.)templates/- Project templates for new applications
Mojo Samples (0.1/share/samplecode/mojo/)
Extensive collection including:
BasicService- JavaScript services exampleDB8BingPhonebook- DB8 database usageSampleCalendarSync- Synergy/sync service exampleAccountApp- Account integrationActivityManager- Background activitiesBluetoothSPPGPS- Bluetooth Serial Port ProfileZeroConf- Network service discovery- And many more...
Key Architectural Concepts
webOS Services
Applications communicate with system services using the palm:// URL scheme. Services handle system integration like:
- DB8 database operations
- Bluetooth connectivity
- GPS/location services
- Calendar and contact syncing
- Account management
- Background activities
Enyo Component Model
Enyo uses a declarative component system where UI is built from enyo.kind() definitions that inherit from base kinds like enyo.Control, enyo.VFlexBox, enyo.HFlexBox, etc.
Dependency Management
The depends.js file uses enyo.depends() to list JavaScript and CSS files that should be loaded. This is the standard way to declare application dependencies in Enyo apps.
Version Information
- SDK Version: 3.0.5 (Build 676)
- Enyo Framework: 1.0 (Build 128)
- Mojo Framework: Version 506
- SDK Tools: Version 38
- Novacom: Version 80
- PDK (Native Plugin Development Kit): Version 138