This file lists notable changes in each release. For the full history of all
changes, see ChangeLog.

2026-07-25: v1.94.100 release

Highlights:
  * bump meson dependency to 0.62
  * egis_etu905: New driver supporting PIDs 0x05AE and 0x9201
  * synaptics: New PIDs 0x010D, 0x010E and 0x01A4
  * goodixmoc: Support 27c6:6382, 27c6:6984 and 27c6:6090
  * nb1010: Support the NB-2020-U fingerprint reader
  * focaltech_moc: New PID 0xA97A
  * elanmoc: New PID 0x0CB2
  * fpcmoc: New PID 0x9B24
  * aes2550: Handle tapping without swiping and fix deactivation after errors
  * fp-device: Implement verify using identification, improving driver
    consistency and reducing duplicated driver code
  * fpcmoc, egis_etu905, elan, elanspi, goodixmoc and mafpmoc: Improve
    big-endian support
  * goodixmoc: Fix malformed payload, CRC and invalid finger handling
  * synaptics, realtek, vfs101, vfs301, upekts, elan and egismoc: Fix
    memory safety, bounds checking and error handling issues
  * aes1610, aes2510, aesx660, fpcmoc and uru4000: Fix resource leaks and
    cancellation or device deactivation issues
  * Expanded USB replay coverage for aes2550 and egis_etu905, and improved
    virtual-image testing with transformed fingerprint images

2026-02-10: v1.94.10 release

Highlights:
  * synaptics: Add USB reset in probe to recover stall condition
  * synaptics: New PIDs 0x0169, 0x019F, 0x00E9, 0x01A0, 0x0109, 0x010A
  * goodixmoc: New PID 0x66A9
  * goodixmoc: Fix crash in exit callback handler
  * fpcmoc: New PID 0xA306
  * fpcmoc: Fix interrupt cancellable leak
  * elanmoc: New PIDs 0x0CA7, 0x0CA8, 0x0CB0
  * egismoc: New PIDs 0x0584, 0x0588
  * focaltech_moc: New PIDs 0xA27A, 0x1579
  * realtek: New PID 0xFA03
  * fp-device: Clarify getter for open property
  * libfprint: Use fatal-warnings on g-i-scanner

2025-02-20: v1.94.9 release

Highlights:
  * uru4000: Use OpenSSL to perform AES-ECB encryption, as per this libfprint
    does not support on NSS, but on openssl (>= 3.0).
  * goodixmoc: New PIDs 0x60C2, 0x689A
  * synaptics: New PIDs 0x016C, 0x0174, 0x0107, 0x0108, 0x00C2, 0x00F0
  * fpcmoc: New PID 0xC844
  * focaltech_moc: New PIDs 0xA99A, 0xA57A, 0xA78A
  * elanmoc: New PIDs 0x0C98, 0x0C9D, 0x0CA3
  * elanspi: New PIDs 0x3128, 0x2766
  * fp-device: Add FP_DEVICE_RETRY_TOO_FAST retry error
  * data: AppStream meta info listing supported USB devices.
  * fixed various memory issues in multiple devices

2024-09-03: v1.94.8 release

Highlights:
 * build: Support building in non-linux unix environments (tested in FreeBSD)
 * egismoc: New PIDs 0x0583, 0x0586, 0x0587.
 * elanmoc: New PID 0x0C9F.
 * fpcmoc: New PIDs 0x9524, 0x9544.
 * goodixmoc: New PIDs 0x609A, 0x650A, 0x650C, 0x6512.
 * realtek: New PID 0x5816.
 * synaptics: New PIDs 0x00C4, 0x019D, 0x00C6.
 * fpcmoc: fix incorrect immobile handling during enrollment.
 * fpcmoc: fixed jumping to wrong state at end of custom enroll.
 * egismoc: various code cleanups.

2024-02-20: v1.94.7 release

Highlights:
 * synaptics: fix enroll identify problem after user reset database.
 * synaptics: New PIDs 0x0173, 0x0106, 0x0124.
 * goodixmoc: New PID 0x6582.
 * build: Do not require bash to build, only posix sh.
 * fp-image: Simplify minutiae detection tasks.
 * GLib 2.68 is now required to build libfprint.

New drivers:
 * realtek (PID 0x5813).
 * focaltech_moc (PIDs 0x9E48, 0xD979, 0xA959).
 * egismoc (PIDs 0x0582, 0x05a1).

2023-08-17: v1.94.6 release

Highlights:
 * goodixmoc: New PIDs 0x60A4, 0x60BC, 0x6092, 0x633C and 0x6304.
 * goodixmoc: Fix missing "enroll create" state.
 * elanmoc: New PID 0x0C99.
 * upektc: Improve compatibility with sensors 147e:2016.
 * aes4000: Actually support 08FF:5501 devices.
 * virtual-device-listener: Fix failing tests with GLib 2.76
 * tests: Add installed tests

Bugs fixed:
 * #526 libfprint: fpcmoc: use after free if enrollment or identification is
   cancelled (Vasily Khoruzhick)

2022-10-13: v1.94.5 release

Highlights:
 * New driver: fpcmoc, supporting various FPC MOC Fingerprint Sensors
 * goodixmoc: New PIDs 0x6014, 0x6094, 0x631C, 0x634C, 0x6384, 0x659A.
 * goodixmoc: Support resetting device on firmware failure due to corrupted DB.
 * elanmoc: New PIDs 0x0c88, 0x0c8c, 0x0c8d.
 * synaptics: New PID 0x0104.
 * upektc: New PID 0x2017.
 * Fixed various memory leaks
 * More tests

2022-05-24: v1.94.4 release

Highlights:
 * synaptics: New PIDs 0x0168, 0x015f
 * elan: New PID 0x0c4b
 * elanspi: New PID 0x241f
 * synaptics: Minor fix to interrupt transfer resubmission
 * Avoid sysfs writes if value is already expected
 * Improvements to the testing setup
 * Fixes to the internal critical section API

2021-11-02: v1.94.3 release

Highlights:
 * Ensure idle mainloop before completing enumeration (fprintd#119)
 * It is now possible to extend already enrolled prints
 * elanspi: Fix timeout error with some hardware (#438)
 * elanspi: Fix cancellation issues
 * goodixmoc: Return matching device print; fixes duplicate checking (#444)
 * goodixmoc: Support clearing the storage (usually unused)

2021-11-02: v1.94.2 release

Highlights:
 * goodixmoc: Fix protocol error with certain username lengths
 * elanmoc: New PID 0x0c7d
 * goodixmoc: New PID 0x63cc

2021-09-24: v1.94.1 release

Highlights:
 * Ship a simple script to create new CI tests using tshark
 * Added CI tests for elan, uru4000, aes2501
 * goodixmoc: Remove duplicate checking during enroll and let fprintd handle it
 * uru4000: Fix USB transfer type
 * synaptics: Support for new PIDs
 * goodixmoc: Support for new PIDs

2021-08-20: v1.94.0 release

Highlights:
 * Implement suspend/resume handling including USB wakeup configuration.
   This requires writing the "persist" and "wakeup" sysfs attributes.
 * Add simple temperature module to prevent devices from becoming too hot
 * Add feature for continuous scanning
 * New internal "critical section" API to simplify driver development
 * elan: new PID 0x0c58
 * elanmoc: Fixes for multi-user handling and FW changes
 * virtual-device: Do not time out for SCAN command

2021-06-30: v1.92.1 release

Highlights:
 * elanmoc: New driver for ELAN match-on-chip devices
 * egis0570: New driver for some Egis Technology devices
 * synaptics: Fix empty identify causing enroll issues
 * elan: Support more PIDs
 * misc: Architecture related bugfixes

2021-06-30: v1.92.0 release

Highlights:
 * Support for SPI devices was added together with the elanspi driver
 * Generate hwdb for autosuspend (which is now pulled by systemd)
 * An API was added to clear the device storage.
   Note: Devices may not implement the "list" API anymore.
 * Device features can now be queried using a common API

New drivers:
 * vfs7552
 * nb1010
 * elanspi

Driver changes:
 * uru4000: Fix deactivation when unplugged unexpectedly
 * goodixmoc: Correctly complete verify/identify after retry condition
 * goodixmoc: Support power shield feature
 * goodixmoc: Support new PIDs
 * synaptics: Fix driver lockup when sequence counter overflows (#358)
 * synaptics: Remove unnecessary device reset
 * synaptics: Support new PIDs
 * synaptics: Add clear_storage and remove list support
 * synaptics: Fix initialization if the device is still busy when opening
 * upeksonly: Fix double free in USB transfer callbacks
 * elan: Support new PIDs
 * vfs301: Fix leak of USB transfer
 * uru4000: Silence warning happening during startup

Internal API changes:
 * ssm: Add getter for the device
 * ssm: Add cleanup state feature
 * image-device: Allow overriding number of enroll stages
 * context: Support udev based device discovery
 * spi-transfer: Add SPI transfer helper routines

Other:
 * Use pcap based USB replay for CI
 * New virtual drivers for more advanced testing
 * Ensure async operations are run in the thread local main context
 * Disable drivers on big-endian unless they are verified to work
 * Add missing gobject-introspection dependency


2020-12-01: v1.90.7 release

Highlights:
 * vfs5011: Fix possible use-after-free
 * goodixmoc: Add two new PIDs (0x63AC, 0x639C)
 * goodixmoc: Support finger status API
 * synaptics: Only identify within provided prints
 * synaptics: Reject devices with old firmware during probe (#239)


2020-12-01: v1.90.6 release

This release is primarily a bugfix release for some older issues.

The major change is that fp_print_deserialize will now correctly return a
sunken reference rather than a floating one. Most API users will have
assumed this was true, and issues could happen at a later point.
If any API user worked around this libfprint bug, they will now leak the
returned print.

Highlights:
 * Object reference management fixes for FpPrint and identify
 * Fixed issues that caused problem on non-x86 machines (#236)
 * Fix building with older GLib versions
 * synaptics: Support PID 00e7
 * goodix: Fix issue with long USB packages


2020-12-01: v1.90.5 release

The 1.90.4 release caused a major regression, as it included a USB hub in
UDEV the autosupend rule list.

Highlights:
 * Remove USB hub from udev autosupend rules
 * synaptics: Add PID 0x00c9 which is used in some HP laptops


2020-11-27: v1.90.4 release

This release contains a number of important bugfixes. On the feature side,
the USB hotplug support was improved. A lot of drivers received fixes and
improvements.

Highlights:
 * Work around GUsb cancellation issue
 * Redefine internal image device state machine for more robustness
 * Add public finger-status reporting to FpDevice
 * Rework device removal API to be convenient (#330)
 * Enable powersave for unsupported USB devices
 * Improvements to examples
 * synaptics: Support identify operation
 * synaptics: Fix possible crash when the interrupt transfer is resubmitted
 * synaptics: Add support for PIDs 0x00f9, 0x00fc and 0x00c2
 * elan: Add PID 0x0c4d to supported device list
 * aes3k: Fix driver and add CI test (#306)
 * uru4000: Fix reference counting of image transfer
 * vfs301: Fix driver and add CI test (#320)

2020-06-08: v1.90.3 release

This release mostly contains support for a number of new match-on-chip
devices. Most notable is the addition of the new goodixmoc driver.
Currently the driver has the small caveat that we have no strategy to
garbage collect old prints yet (a simple strategy could be implemented
in fprintd).

Highlights:
 * New goodixmoc driver supporting Goodix USB devices:
   27C6:5840
   27C6:6496
   27C6:60A2
 * Newly added support for Synaptics device:
   06CB:00E9
   06CB:00DF
 * Fixed an issue with Synaptics devices sometimes not working at boot
 * Fix issue with aes3k driver (#306)

2020-06-08: v1.90.2 release

This release contains a large amount of bug and regression fixes. These
are not listed explicitly, but affect the majority of drivers.

Highlights:
 * A patch for nbis required for some sensors was accidentally dropped in
   an earlier release. Users of these sensors/drivers (aes1610, aes2501,
   aes2550, aes1660, aes2660, elan, upektc_img) need to re-enroll (#142).

2019-11-20: v1.90.1 release

This release fixes a lot of the regressions introduced in 1.90.0. Please note
that both the driver and external APIs have changed, as both the verify and
the identify functions now have early reporting mechanisms.
The soname for the library, as well as a number of file locations have also
changed. While this allows installation in parallel with the 1.0 version of
libfprint, we recommend installing only one, and migrating from version 1.0 to
version 2.0 alongside its main consumer (fprintd).

Only major changes are listed below. A lot of other cleanup work and small
fixes have also been merged.

* Library:
  - Add support to run tests in gdb/valgrind
  - Allow testing on all architectures
  - Avoid image device AWAIT_FINGER_ON to deactivate state transitions
  - Fix verify/identify error propagation to library user
  - Correctly read image device information from class data
  - Continue enroll after an image driver reported a retry error
  - Change external API to allow reporting match results early
  - A lot of new unit tests and integration tests have been added

* Drivers API
  - Support variadic arguments in error functions
  - Various re-definitions of ownership handling
  - Add convenience API to change state after a timeout
  - Add unit tests for all the drivers API

* Drivers:
  - elan: Ensure correct deactivation of device
  - uru4000: Fix IRQ handler registration and internal state handling
  - uru4000: Fix control transfer request type
  - synaptics: Ensure errors are only reported after finger removal

2019-11-20: v1.90.0 release

This release updates the core of the library to use GLib routines and Gio
style APIs. While the API both for library users remain similar in most
ways, there are some changes and all users will need to be ported.

A large motivation for the in-depth changes was the requirement to add
new API to support sensors that store the prints on the sensor. This
support is already used by the new synaptics driver, which will support
the current generation of the Prometheus MIS (match-in-sensor) chipset
by Synaptics (USB ID 06cb:00bd).

The current codebase is considered stable at this point. However, due to
the lack of wider testing it is only released as a 1.90.0 release which
can be considered a beta-release for 2.0.

With the rewrite, it is now also possible to support devices that are not
connected through USB (e.g. I2C). Another major improvement is that the
library has now a test suite, testing both the library core and allowing
tests of the drivers using umockdev.

2019-08-08: v1.0 release
* Library:
  - Add guards to the public API and require GLib 2.50
  - Deprecate print storage API
  - Better documentation for fp_discover_devs()
  - Remove unused internal fpi_timeout_cancel_for_dev()
  - Remove state from fp_img_driver activate handler
  - Bug fixes related to restarting a failed verification immediately

* Drivers:
  - The Elan driver received a lot of bug fixes including a fix for a
    hang when verifying prints with fprintd, quirks for some devices,
    a memory leak fix and support for 04f3:0c42
  - Fix a probable crash in all the AES drivers
  - Add support for Lenovo Preferred Pro Keyboard (KUF1256) to vfs5011
  - Prevent hang during enroll process in etes603 driver
  - Fix possible integer overflow in uru4000
  - Work-around SELinux AVC warnings when uru4000 driver starts
  - Remove long-unmaintained and broken fdu2000 driver

* Tools/Examples:
  - Fix examples not working due to an overly strict check
  - Fix crash in GTK demo when there's no supported devices
  - Disable GTK demo until we have a USB Flatpak portal
  - Remove sleep() in enroll example which caused a crash in some drivers
  - Add a simple storage implementation example

2018-12-14: v0.99.0 release
* Library:
  - All the internal API for device driver writers is now covered by the
    documentation and has been enhanced to make it easier to write drivers
  - Update internal NBIS fingerprint data processing library to one that's
    nearly 10 years newer
  - Re-add accessor for minutia coordinates which was used in the very
    old fprint_demo program, but also by our new GTK+ test program (see below)
  - Fix a crash when too many minutiae were detected in a capture

* Drivers:
  - Support more devices in the Elan driver, stability improvements

* Tools:
  - Add a test GTK+ application that will eventually be used for testing
    drivers without modifying the OS installed version. Note that this
    application currently requires manually changing permissions of USB
    devices, this will be fixed when the infrastructure exists to access
    those devices without additional permissions, as a normal user.

2018-07-15: v0.8.2 release
* Drivers:
  - Add USB ID for TNP Nano USB Fingerprint Reader
  - Fix UPEKTS enrollment never finishing on some devices

* Library:
  - Fix fp_get_pollfds() retval type, a small ABI change
  - Downgrade fatal errors to run-time warnings, as a number of drivers
    used to throw silent errors and we made them fatal. Those will now
    be visible warnings, hopefully helping with fixing them.

2018-06-12: v0.8.1 release
- Brown paperbag release to install the udev rules file in the correct
  directory if the udev pkg-config file doesn't have a trailing slash

2018-06-12: v0.8.0 release
- Port to meson as the build system
- Port documentation to gtk-doc

* Drivers:
  - Add Elan driver
  - Increase threshold to detect encryption on URU4000 devices
  - Remove already replaced UPEKE2 driver
  - Fix possible crash caused by vfs5011 when no lines were captured

* Library:
  - Fix a number of memory and file descriptor leaks and warnings
  - Make NSS (and URU4000) driver optional
  - Fix assembling of frames for non-reverse and non reverse stripes
  - Split internal private header to clarify drivers API
  - Simplify logging system, now all the builds can be used to output
    debug information
  - Mark fp_dscv_print functions as deprecated

* Udev rules:
  - Add some unsupported devices to the allowlist

2017-05-14: v0.7.0 release
* Drivers:
  - Add VFS0050 driver
  - Fix possible crash in AES3500 and AES4000
  - Fix broken enrollment in VFS101
  - Better verification with small sensor scanners
  - Plenty of fixes in VFS5011
  - Fix memory corruption in AES1610
  - Improve calibration settings for AES1610
  - Improve image assembling in upeksonly driver
  - Autodetect whether image is encrypted in uru4k

* Library:
  - NBIS: Remove false minutia at the edge of partial image
  - Introduce routines to assemble image from lines (used in VFS5011 and upeksonly)
  - Fix a bug that can cause driver state machine to enter into endless loop. 

* Udev rules:
  - Add driver name to the USB properties

* Plenty of build fixes

2015-02-03: v0.6.0 release

* Drivers:
  - Reduce duplication between AES3500 and AES4000 drivers and
    add support for AES3500 device
  - Add support for UPEK 147e:2020 and Upek Eikon 2 devices
  - Add EgisTec ES603 driver
  - Add VFS5011 driver
  - Always perform 5 scans for image enrollment
  - Better verification with AES1660 driver
  - Better verification for a number of AES drivers

* Library:
  - Always use Pixman for image manipulation, gdk-pixbuf and ImageMagick
    are not supported any more.

* Udev rules:
  - Fix warning when USB hub or system does not support power management

2013-08-11: v0.5.1 release

* Drivers
  - Add support for 147e:2020 to upeke2 driver
  - Fix possible race condition, and cancellation in uru4000 driver

* Udev rules:
  - Add Microsoft keyboard to the suspend denylist

* Plenty of build fixes

2012-12-03: v0.5.0 release

* Drivers:
  - New VFS300/VFS301 driver
  - New AES2550/AES2810 drivers
  - New AES1660 driver
  - New AES2660 driver
  - New DigitalPersona URU4500 driver
  - Avoid empty capture and improve image contrast in the
  AES2501 and AES2550 drivers
  - Update upektc driver, add support for Eikon Touch 300
  - Fix UrU4000 image capture on ARM

* Library:
  - Fix global variable collisions with libusb and other system headers
  - Fix possible crash in NBIS image processing with some fingerprints

* Udev rules:
  - Fix power control path for newer kernels
  - Move udev rules to the correct directory
  - Don't print duplicated udev rules
  - Include udev rules in the tarball
  - Allow disabling of udev rules for cross-compiling
  - Add driver names in the generated rules

2011-04-18: v0.4.0 release
 * Add support for Validity VFS101 (USB ID 138a:0001)
 * Fix crasher when resizing a fingerprint image
 * Fix wrong timeout being returned when either of
   libusb or libfprint doesn't have a timeout

2010-09-08: v0.3.0 release
 * Add support for UPEK TCS4C (USB ID 147e:1000)
 * Use NSS instead of OpenSSL for GPL compliance
 * upeksonly driver bug fixes
 * Fix a crash if a scan was shorter than 8 lines
 * Fix compilation with C++ compiler

2010-08-19: v0.2.0 release (since 0.1.0-pre2)
 * Add gdk-pixbuf support for image manipulation
 * Add udev rules to allow devices to autosuspend
 * Finish port of AES1610 driver
 * Add UPEK EikonII (TCRD4C) driver

2007-12-07: v0.0.5 release
 * AES1610 imaging improvements
 * Internal cleanups for Authentec drivers
 * Add support for latest Microsoft Fingerprint Scanner hardware revision

2007-11-22: v0.0.4 release
 * Enable AES1610 driver thanks to Michele B
 * Implement identification: one-to-many fingerprint matching (Daniel Drake)

2007-11-19: v0.0.3 release
 * Add API to access minutiae (Daniel Drake)
 * Add API to delete enroll data (Daniel Drake)
 * Add Authentec AES1610 driver (Anthony Bretaudeau)

2007-11-17: v0.0.2 release
 * Detect reversed scans on AES2501 (Vasily Khoruzhick)
 * Improved AES2501 scanning
 * Compatibility with older ImageMagick versions
 * Add UPEK TouchChip driver (Jan-Michael Brummer)
 * Add binarization API

2007-11-15: v0.0.1 release
 * Initial release

