Skip to content
Crossbow 3.0.0 "Alida"
======================

After almost two years since version 2.0.0, I'm proud to announce
a new release of Crossbow! Version 3.0.0, codename "Alida".

This release comes with a few relevant changes that justify a bump
of the MAJOR version digit.

1. The build system is migrated from Autotools to CMake
-------------------------------------------------------

I recently grew fond of CMake, and it is nowadays easier for me to
maintain a CMake configuration, than the Autoconf/Automake
equivalent.

CMake allows to leverage fast build tools such as Ninja, while
keeping compatibility with classic tools such as Make, both on GNU
and BSD systems.

On the downside, it is hard or impossible to have a "dist" package
that doesn't list CMake in the build time dependencies.
I think the compromise is acceptable, since most packaging systems
I know have a clean distinction between build time and run time
dependencies.

The README.md file distributed with Crossbow has been updated with
brief instructions on how to compile and install your beloved feed
reader, but please refer to the excellent CMake documentation for
details.

2. Dropped crossbow-upgrade(1)
------------------------------

The crossbow-upgrade(1) tool served the purpose of migrating an
existing configuration for the 1.x series of Crossbow to the new
configuration format supported by the 2.x series.

Since no change in the configuration language was introduced with
Crossbow 3.0.0, the tool has been removed.

If upgrading from Crossbow 1.x to Crossbow 3.0.0, please install
Crossbow 2.0.0 first, run crossbow-upgrade(1) to migrate any old
configurations to the new format, and then proceed with a new
upgrade.

3. Feed entries are now identified by a digest
----------------------------------------------

Crossbow has relied so far on the "guid" field of feed entries as
unique identifiers, and using the "link" field as a fallback
when the "guid" is not identified.

Unfortunately, however uncommon, nothing prevents a feed to
publish multiple entries having the same "guid" or "link".
A feed with such characteristics was found in the wild, and it
could not be handled properly by Crossbow.

To address this problem, Crossbow 3.0.0 uniquely identifies
each entry by the SHA-1 digest of the concatenation of a few entry fields.
The current selection of fields is: "title", "guid", "link" and
"pubDate".

To obtain the digest we rely on libcrypto, which is now a direct
dependency of Crossbow.

Since Crossbow keeps track of entries that have been seen by
persisting their identifiers, all entries will be re-processed
on the first execution after the upgrade.

To avoid this, it is recommended to follow these steps:

  1. Update all the feeds by running `crossbow`, forcing every
     unseen entry to be processed by Crossbow 2.0.0;

  2. Install the 3.0.0 release;

  3. Remove the persistence files corresponding to every involved
     configuration (by default, this means the  "~/.crossbow"
     directory).  This step is optional.

  4. Update all the feeds again by running `crossbow -c`
     (catch-up mode).

Any update published by followed feed in the time window between
step 1 and step 4 is going to be lost.