A desktop application for syncing a Palm OS handheld with a modern Linux PC over USB, using pilot-link's HotSync protocol. Contacts, calendar events, memos, and tasks are read from the device, stored locally in SQLite, and merged back with PC-priority conflict resolution.
Built with Python 3 and PyQt5.
- 📇 Contacts — read and edit the Palm address book
- 📅 Calendar — view and manage datebook events
- 📝 Memos — sync memo pad entries
- ✅ Tasks — sync the to-do list
- 🔄 HotSync over USB — one-button sync via pilot-link
- 💾 Local SQLite store with PC-priority merge on conflicts
Download the latest palm-sync_*.deb from the
Releases page, then:
sudo apt install ./palm-sync_1.0_all.debThis installs the app (it appears in your application menu as Palm Pilot
Sync), sets up the udev rules, loads the visor kernel module, and adds you to
the dialout group. Log out and back in afterward for the group change to
take effect.
HotSync needs pilot-xfer from pilot-link, which is no longer packaged for
modern Ubuntu/Debian. If it isn't already installed, the package will tell you
to run:
sudo palm-sync-setup-pilotlinkThis builds and installs pilot-link automatically (from apt if available, otherwise from source).
git clone https://github.com/neonymbus/palm-sync.git
cd palm-sync
./packaging/setup.sh # installs dependencies, udev rules, pilot-link
python3 main.py- Connect your Palm to the PC via its USB cradle or cable.
- Launch Palm Pilot Sync (from the menu, or
palm-syncin a terminal). - Click HotSync, then press the HotSync button on your Palm/cradle.
The device appears as /dev/pilot once the udev rule is active.
⚠️ Record formatting is mangled during sync (both directions). As of v1.0, text in synced records can come out garbled when converting between the Palm and the PC — this affects Palm → PC and PC → Palm. The likely cause is a round-trip mismatch in how records are encoded (Palm uses CP1252 while the PC store is UTF-8), how line endings are handled, or how fields are packed back into the.pdbformat. Back up your device before syncing important data. A fix is planned; contributions and bug reports are welcome.
palm-sync/
├── main.py # Entry point — initialises the DB and launches the UI
├── icon.svg # Application icon
├── requirements.txt # Python dependencies (PyQt5)
├── palm_sync/ # Backend
│ ├── database.py # SQLite storage + merge logic
│ ├── hotsync.py # HotSync engine (drives pilot-xfer)
│ ├── models.py # Data models
│ ├── usb_manager.py # USB device detection
│ ├── bluetooth_manager.py
│ └── parsers/ # Palm .pdb record parsers (contacts, datebook, memo, todo)
├── ui/ # PyQt5 views (contacts, calendar, memos, tasks, sync dialog)
└── packaging/
├── build-deb.sh # Builds the distributable .deb
└── setup.sh # Manual/from-source dependency setup
./packaging/build-deb.sh # builds dist/palm-sync_1.0_all.deb
./packaging/build-deb.sh 1.1 # builds a specific versionThe output lands in dist/ (git-ignored). Attach it to a GitHub Release to
share it.
MIT © 2026 Brian