Field Utility · Windows & macOS
Palm OS Handheld · ↔ · Microsoft 365 & Google
Keep a classic Palm PDA in daily sync with a modern cloud — calendar, contacts, and tasks. Two editions: a Windows build that runs beside Palm Desktop, and a macOS build that lives inside jpilot and syncs itself. Nothing is installed on the handheld. An obsolete device, back in service, talking to the present.
As far as we know, this is the first bridge to connect a Palm OS handheld to Microsoft 365 — and now to Google as well.
Edition 01 · Windows · Release 2.0
Runs on Windows alongside Palm Desktop and HotSync. A small Python tool reads and writes Palm Desktop's own database and reconciles it with Microsoft 365. Calendar and tasks stay two-way, with the handheld as your daily capture device; contacts flow down from Outlook, since entering a full contact card by stylus is its own punishment.
| Data | Device → 365 | 365 → Device | Mode |
|---|---|---|---|
| Calendar | ● YES | ● YES | Two-way — create/delete either side |
| Tasks / To Do | ● YES | ● YES | Two-way |
| Contacts | — NO | ● YES | One-way — 365 is master, device mirrors |
The setup wizard auto-detects your device and database paths — works with any Palm that syncs to Palm Desktop.
Download .ZIPReady-set for the Palm m505 profile. Drop in, add your client ID, sync.
Download .ZIPPalm365 relies on these — it does not install them for you.
C:\Palm\, then pip install -r requirements.txt.M365_SETUP.md. You'll copy one client ID from the Azure portal.python setup.py.python sync_to_palm.py sync.sync.bat → HotSync.Edition 02 · macOS · Apple Silicon
The macOS edition takes a different route. Instead of Palm Desktop, it runs as a
native plugin inside jpilot, the
classic open-source Palm desktop, and does its work automatically: a down-sync when jpilot
opens, and a full two-way sync right after every HotSync. Nothing to run by hand. It reads
and writes jpilot's .pdb
files through pilot-link's libpisock, and — unlike the Windows edition — contacts sync both
ways too.
| Data | Device → Cloud | Cloud → Device | Mode |
|---|---|---|---|
| Calendar | ● YES | ● YES | Two-way — timed & all-day, delete either side |
| Tasks | ● YES | ● YES | Two-way |
| Contacts | ● YES | ● YES | Two-way |
Outlook calendar, To Do, and contacts — the same bridge, native on the Mac.
sudo port install palm365-macGoogle Calendar, Tasks, and Contacts. Verified end-to-end on a real Palm Vx, deletions and all.
sudo port install palmgoogle-macThree pieces stack up. MacPorts pulls in whatever a given edition needs.
sudo port install jpilot.sudo port install palm365-mac (or palmgoogle-mac). Not merged upstream yet — see the pre-merge block below.cd /opt/local/share/palm365-mac && python3.14 setup.py (swap the path for the Google edition). It walks you through creating the app registration / OAuth client — a free, one-time step that grants access to your own data.The four recipes are still open pull requests, not yet in the official MacPorts index (see Source & Ports below). Until they land, install straight from the PR branches. You'll need MacPorts itself first. This grabs the Portfiles into a local tree, registers it ahead of the official mirror (so dependency resolution doesn't fall back to the old, broken jpilot recipe), then builds all three.
# 1. Grab the Portfiles into a local port tree (palm365 edition shown; # for Google, swap the palm365-mac lines for palmgoogle-mac / add-palmgoogle-mac) mkdir -p ~/macports-local/palm/jpilot ~/macports-local/python/palm-sync-core ~/macports-local/palm/palm365-mac curl -sL -o ~/macports-local/palm/jpilot/Portfile \ https://raw.githubusercontent.com/HodsonTech/macports-ports/update-jpilot-gtk3-arm64/palm/jpilot/Portfile curl -sL -o ~/macports-local/python/palm-sync-core/Portfile \ https://raw.githubusercontent.com/HodsonTech/macports-ports/add-palm-sync-core/python/palm-sync-core/Portfile curl -sL -o ~/macports-local/palm/palm365-mac/Portfile \ https://raw.githubusercontent.com/HodsonTech/macports-ports/add-palm365-mac/palm/palm365-mac/Portfile # 2. Register it as a source, ahead of the official mirror sudo sh -c 'echo "file://'"$HOME"'/macports-local/" | cat - /opt/local/etc/macports/sources.conf > /tmp/sources.conf.new && mv /tmp/sources.conf.new /opt/local/etc/macports/sources.conf' # 3. Build the local index and install all three cd ~/macports-local && portindex sudo port -d install jpilot palm365-mac # 4. One-time setup (no sudo — writes to your own home directory) cd /opt/local/share/palm365-mac && python3.14 setup.py
Once all the PRs merge upstream, drop the file:// line back out of sources.conf and it behaves like a normal sudo port install from then on.
Field Report · Open Source
All of it is open. The macOS side is being submitted to MacPorts as four recipes — all currently open pull requests, pending review and merge into the official index.
Palm365 reads and writes live data in both your cloud account and your Palm databases, including creating and deleting records. It ships with safety features — it backs up cloud data before any deletion and pauses if a sync looks catastrophically wrong — but you are responsible for your own data. Back up your Microsoft 365 or Google information and your Palm databases before first use. Provided "as is," without warranty of any kind.
The Windows package includes PROJECT_OVERVIEW.md — a complete build
specification with the hard-won details of the Palm Desktop database format, the
duplication-prevention design, and HotSync conduit behavior. The macOS side is on GitHub, with
the shared engine documented in its own repo. Detailed enough to rebuild the tool from the
schematic.