Coldsync ( by Andrew Arensburger is one of the options for syncing Palm devices without using the official Palm Desktop. It is headless, unlike the graphical Palm Desktop and J-Pilot. Unlike pilot-link, it actually handles the whole sync process.



Here are my patched versions of Coldsync.


Mac OS X

Version 3.0-pre4 is very hard to build on Mac. My release, version 3.0.1, builds easily. Macports users can use the following Portfile:

PortSystem          1.0
name                coldsync
version             3.0.1
license             Artistic-1
maintainers         @nkorth

categories          palm
description         Tool for synchronizing Palm OS devices with Unix workstations
long_description    Tool for synchronizing Palm OS devices with Unix workstations

platforms           darwin


checksums           rmd160  68785217968001a5e7fc6c5921e8dde5e15f421d \
        sha256  325ed708c02f4a4e4928eb8016c8eb2b8c7e9b5fd3c0c4e5f2705b0d8ec5dcee \
        size    717669

depends_build       bin:bison:bison \
depends_lib         port:perl5 \

use_parallel_build  no

Void Linux

On Void Linux, version 3.0-pre4 builds easily enough. Here’s the Void package template I wrote, which includes several patches (explained below.) I didn’t actually submit the package to Void because it’s so niche that I didn’t want to waste the maintainers’ time.


Refer to /etc/coldsync/sample.coldsync.rc.

The following .coldsyncrc works for netsync (eg. with Cloudpilot:

listen net {

# Cloudpilot on Jelly 2
pda {
        snum: "00TAP7W2A270-H";
        username: "Nathan";
        userid: 1000;

When you run Coldsync, it waits forever for a Hotsync connection, performs the sync, and quits. This means you can use a typical init script with respawning if you want it to always be ready to sync. (If, for some reason, you need to netsync multiple Palms at the same time, I suppose you’ll need to use xinetd.)

Conduits, and where I messed up

In addition to the standard “talk directly to the Palm and work with one record at a time” sync mechanism, Coldsync also offers “fetch” and “dump” modes. These modes allow your conduit to edit/read the backed-up .pdb files and let Coldsync do the work of syncing those files with the Palm. When I saw this, I thought “this sounds much easier to use/understand than the standard sync mechanism!” However, it turns out the fetch/dump mechanism is only suitable for very simple conduits. For example, in a dump conduit there’s no way to handle archived records, and if you try replacing “sync” with “fetch+dump” you don’t get any control over what happens when both Palm and PC have modified a record.


Before I realized that I was on the wrong track, I started writing Python replacements for some of the Perl scripts involved in Coldsync.


python-palm-0.1.tar.gz (unfinished!)

This module, likely the most useful part, is supposed to replace the Perl Palm library. It reads and writes .pdb files, and currently supports MemoDB and ToDoDB. It’s still missing some important things like append_record.

This has already been done in Python by someone else, but thanks to my use of Construct my code is both easier to read and much more compact than theirs.


python-coldsync-0.1.tar.gz (unfinished!)

I also implemented part of the Perl Coldsync library. I didn’t actually write any bindings exactly, I just implemented a wrapper for handling the conduit protocol (the easiest part.) This archive also contains my unfinished attempts at writing memo and todo conduits. I will be rewriting these, either in Perl or using something completely different such as pilot-link.