Skip to content

v0.2.0

Latest

Choose a tag to compare

@github-actions github-actions released this 24 Aug 18:45
v0.2.0
956c060

Added

  • Added three remote backends alongside CardDAV: JMAP contacts, Microsoft Graph and Google People, each behind its own cargo feature (jmap, msgraph, people).

    None of the three exposes a vCard, so cardamum synthesizes the document of record and re-projects it on write. JMAP converts through JSContact; Graph and People project field by field and stash server-side the properties that have no slot, so nothing is lost round-trip.

  • Added the pimdir backend: cardamum over a local pimdir store, the offline cache a sync engine fills.

    A card the sync listed but has not downloaded still lists, and reading it reports "body not fetched" rather than failing. Writes are staged for the next sync to push, and addressbooks come from the sync, so the collection verbs refuse here.

  • Added one protocol-specific command family per backend: carddav, jmap, msgraph, people and vdir item.

    Each mirrors its protocol's own vocabulary and exposes what the shared API hides: ETags and preconditions, sync tokens, changes and delta incremental sync, multiget, discovery, and the raw native payloads under --json. Each also carries an escape hatch for a request the commands do not model, carddav report raw, jmap request, and request <METHOD> <PATH> on Graph and People.

  • Added the configure command (alias wizard), the -b/--backend flag selecting between the backends an account declares, and the account list and account check reports.

Changed

  • Reworked the first run around automatic discovery, aligning it with Himalaya, Ortie, Comodoro and Carillon. Behaviour change.

    One prompt takes an email address, a server URL or a local folder path, and its shape orients the setup. Discovery runs in parallel under an 8-second deadline and offers one entry per reachable service, picking one prompting only how to authenticate. The wizard tests the account, then writes it into the configuration file, appending an [accounts.<name>] block when one is already there. It configures only what it can discover, and points at config.sample.toml otherwise.

    A missing configuration raises an offer rather than a gate, so the command carries on either way. A bare cardamum shows the help when a configuration exists, and nothing prompts when stdin is not a terminal or --json is set.

  • Renamed the remote backend from webdav to carddav across the public surface: the cargo feature, the subcommand and the config block. Breaking.

  • Renamed the shared commands to the singular addressbook and card, the plural forms staying as hidden aliases. Breaking.

  • Replaced the positional addressbook id with a -k/--addressbook flag across the shared API, falling back to addressbook.default everywhere except addressbook delete, which stays explicit. Breaking.

  • Changed card create and card update to take their vCard as a trailing positional argument, a path, raw contents, or - for stdin, instead of the --file flag. Breaking.

  • Relicensed from AGPL-3.0-only to dual MIT OR Apache-2.0.

  • Replaced the io-addressbook aggregator with a product-owned cross-backend layer, and upgraded the whole Pimalaya dependency stack.

  • Bumped comfy-table to v8. The table.preset option keeps accepting the v7 spelling, and truncated cells now end with rather than ....

  • Replaced the docs/ folder with cairn/, following the Cairn convention.

Removed

  • Removed account configure and its edit alias: the wizard is the single way to generate an account, and account list and account check cover inspection. Breaking.

Fixed

  • Fixed a 404 against a CardDAV server whose discovery hands back a bare origin rather than the context root, as Fastmail does by serving contacts under /dav/. The client now probes .well-known/carddav and follows its redirect before the principal walk.
  • Fixed the shared commands inventing collections and cards on the vdir backend: card update on an unknown id created the file, card create on an unknown addressbook created the collection, and an unknown addressbook listed as an empty table. Each fails by name now.
  • Fixed card update creating a card on CardDAV when the given id does not exist, a WebDAV PUT being create-or-replace. The update now reads the card first and guards the write with its ETag; passing your own --if-match skips that read.
  • Fixed addressbook update reporting success when the server changed nothing, and --description "" / --color "" doing nothing although the help documents "" as the way to clear a property.
  • Fixed the Nix package shipping no manual pages and no shell completions, its install step passing the output directory where a command name was expected.