0.4.5	2026-07-21

 * Implement the RFC 3744 ``principal-property-search`` REPORT, the
   ``principal-collection-set`` property, and the
   ``apply-to-principal-collection-set`` search flag. (Jelmer Vernooĳ)

0.4.4	2026-07-05

 * Add WebDAV-Push support, notifying subscribed clients of collection
   changes. (Jelmer Vernooĳ)

 * icalendar: reject and normalize empty VTIMEZONE blocks. (Jelmer Vernooĳ)

 * Accept a non-zero ``Depth`` header for addressbook-multiget reports.
   (Jelmer Vernooĳ, #692)

 * Return 412 Precondition Failed when a ``pre_put_hook`` raises a
   precondition failure. (Jelmer Vernooĳ)

 * Handle ``OutOfSpace`` more gracefully. (Jelmer Vernooĳ)

 * web: apply the ``SCRIPT_NAME`` prefix to the schedule-default-calendar
   URL. (Jelmer Vernooĳ)

 * caldav: don't path-quote scheme URIs in calendar-user-address-set.
   (Jelmer Vernooĳ)

 * web: only fall back to the ``EMAIL`` environment variable in
   single-user mode. (Jelmer Vernooĳ)

0.4.3	2026-05-26

 * milter: don't tell the MTA to skip RCPT events, fixing rejection of
   recipients that aren't local Xandikos principals. (Jelmer Vernooĳ)

 * store: derive ``require_unique_uids`` from the store type rather than
   storing it separately. (Jelmer Vernooĳ)

 * imip: log inbox storage and auto-apply outcomes. (Jelmer Vernooĳ)

 * web: nominate the default scheduling calendar in ``--defaults`` rather
   than at lookup time. (Jelmer Vernooĳ)

 * web: alias ``xandikos.web`` to ``__main__`` so running the module as a
   script no longer double-imports. (Jelmer Vernooĳ)

0.4.2	2026-05-25

 * Add ``xandikos-milter``, a Postfix milter that delivers inbound iMIP
   messages into per-principal calendars. (Jelmer Vernooĳ)

 * Add ``--milter-listen`` to ``xandikos serve`` for embedding the milter
   in the main process. (Jelmer Vernooĳ)

 * Move default Unix sockets under ``/run/xandikos/`` and expose a
   ``/sockets`` volume in the container image. (Jelmer Vernooĳ)

0.4.1	2026-05-25

 * Allow exporting a calendar collection as a single iCalendar feed.
   Issue a GET with ``Accept: text/calendar`` or append ``?export`` to the
   collection URL to get one merged ``.ics`` file suitable for consumers
   such as Google Calendar's "Add by URL". (Jelmer Vernooĳ, #164)

 * Serve calendar collections over the ``webcal://`` scheme.
   (Jelmer Vernooĳ)

 * Allow per-principal calendar-home-set and addressbook-home-set overrides
   via the ``[principal]`` section of the principal's ``.xandikos`` config.
   (Jelmer Vernooĳ, #17)

 * Add ``--autocert`` option for self-signed HTTPS. (Jelmer Vernooĳ)

 * Add ``--htpasswd`` flag for HTTP Basic authentication.
   (Jelmer Vernooĳ)

 * Check that VTODO with RRULE has DTSTART, and skip RRULE expansion
   without DTSTART instead of crashing. (Jelmer Vernooĳ)

 * Explicitly set PYTHONPATH in the container image so the WORKDIR no
   longer has to be correct. (Jelmer Vernooĳ)

0.4.0	2026-05-09

 * Support scheduling (iTIP/iMIP). (Jelmer Vernooĳ)

 * Add experimental multi-user mode with automatic principal creation and
   path-based authorization. (Jelmer Vernooĳ)

 * Fix OverflowError on open-start time-range queries. (Jelmer Vernooĳ)

 * Make GitStore._scan_uids thread-safe. (Jelmer Vernooĳ)

0.3.7	2026-04-11

 * Cache etag computation in VdirStore using stat metadata.
   (Jelmer Vernooĳ)

 * Add parsed file cache to VdirStore. (Jelmer Vernooĳ)

 * Populate index values during import. (Jelmer Vernooĳ)

 * Skip RRULE expansion for non-recurring calendar events.
   (Jelmer Vernooĳ)

 * Don't install benchmarks package. (Jelmer Vernooĳ)

 * Support EAGER environment variable in WSGI mode.
   (Jelmer Vernooĳ)

 * Add --eager flag for background index pre-population at startup.
   (Jelmer Vernooĳ)

 * Fix index-based time-range filtering for all-day recurring events.
   (Jelmer Vernooĳ)

 * Fix RECURRENCE-ID timezone in expanded recurrences.
   (Jelmer Vernooĳ)

 * Support time-range filter on VCALENDAR without comp-filter.
   (Jelmer Vernooĳ)

 * Support RRULE expansion for recurring VTODOs in time-range filters.
   (Jelmer Vernooĳ)

 * Fix VTODO time-range filter returning false positives.
   (Jelmer Vernooĳ)

 * Cache guessed store type with ctag-based invalidation.
   (Jelmer Vernooĳ)

 * Cache git config in RepoCollectionMetadata. (Jelmer Vernooĳ)

0.3.6	2026-04-09

 * Cache ctag (tree SHA) alongside the git index to avoid redundant
   tree builds. (Jelmer Vernooĳ)

 * Defer file parsing in index-based filtering until filter matches.
   (Jelmer Vernooĳ)

 * Cache store objects to avoid reopening git repos on every resource
   lookup. (Jelmer Vernooĳ)

 * Log key dependency versions at startup and on crashes.
   (Jelmer Vernooĳ)

0.3.5	2026-04-06

 * Add multi-user mode with automatic principal creation and
   path-based authorization. (Jelmer Vernooĳ, #469)

 * Add help subcommand. (Jelmer Vernooĳ)

 * Support icalendar 7.x. (Jelmer Vernooĳ, #596)

 * Cache the git index in TreeGitStore to avoid re-reading from disk.
   (Jelmer Vernooĳ, #613)

 * Cache the current tree in BareGitStore to avoid repeated object lookups.
   (Jelmer Vernooĳ, #614)

 * Use direct etag lookup in get_member() instead of linear scan.
   (Jelmer Vernooĳ, #612)

 * Log Remote-User in git commit message. (Yufei Zhang, #602)

 * Pass requester (User-Agent) through to git commit messages for all
   operations. (Jelmer Vernooĳ, #603)

 * Rename backends and factor out FilesystemBackend base class.
   (Jelmer Vernooĳ, #469)

 * Add --hide-principals flag to hide principals list on root page.
   (Jelmer Vernooĳ, #469)

 * Drop Python 3.8 support. (Jelmer Vernooĳ)

 * Fix icalendar compatibility with older versions by removing
   component_factory dependency. (Jelmer Vernooĳ, #589)

 * Fix logging. (Jelmer Vernooĳ, #579)

 * Fix sup5 formatting. (Jelmer Vernooĳ, #578)

0.3.4	2026-01-24

 * Add --socket-mode and --socket-group flags to set Unix domain socket
   permissions and group ownership. (Jelmer Vernooĳ, #331)

 * Fix OverflowError with date-only events at max date boundary.
   (Jelmer Vernooĳ, #577)

 * Fix DAV5x in HTML. (Jelmer Vernooĳ, #575)

 * Add xandikos container systemd file. (Jelmer Vernooĳ, #574)

 * Fix recurring events with non-UTC UNTIL when DTSTART is timezone-aware.
   (Jelmer Vernooĳ, #572)

0.3.3	2026-01-22

 * Support VALARM searching in calendar queries. (Jelmer Vernooĳ, #568)

 * Bump minimum dulwich version to 0.25. (Jelmer Vernooĳ)

 * Add python3-qrcode to container image. (Jelmer Vernooĳ)

 * Trigger docker container build on tags. (Jelmer Vernooĳ)

 * Fix container build failing on release events. (Jelmer Vernooĳ)

0.3.2	2026-01-21

 * Fix TypeError with mixed date/datetime types in EXDATE/RDATE.
   (Jelmer Vernooĳ, #537)

 * Allow escaped newlines in calendar text fields. (Jelmer Vernooĳ, #565)

0.3.1	2025-12-18

 * Fix console script entrypoint compatibility with setuptools.
   (Jelmer Vernooĳ, #563)

 * Add extensible validation error handling for different content types.
   (Jelmer Vernooĳ)

 * Implement calendar-description property modification. (Jelmer Vernooĳ, #555)

 * Implement refreshrate and calendar-timezone property support.
   (Jelmer Vernooĳ, #556)

 * Implement full CalDAV text-match support for all match types.
   (Jelmer Vernooĳ, #552)

 * Implement limit-freebusy-set support. (Jelmer Vernooĳ, #540)

 * Add support for chunked transfer encoding in HTTP requests.
   (Jelmer Vernooĳ, #535)

 * Add streaming response support for aiohttp. (Jelmer Vernooĳ, #535)

 * Add ARMv7 platform support to container builds. (Jelmer Vernooĳ, #534)

 * Publish Docker images for every commit with commit SHA tags.
   (Jelmer Vernooĳ, #533)

 * Fix Depth header validation for multiget REPORT operations.
   (Jelmer Vernooĳ, #559)

 * Fix dead property error responses per RFC 4918. (Jelmer Vernooĳ, #552)

 * Fix URI fragment handling in DELETE operations. (Jelmer Vernooĳ, #551)

 * Fix RFC 6578 sync-collection limit element bug. (Jelmer Vernooĳ, #550)

 * Fix precondition error responses to return correct status codes.
   (Jelmer Vernooĳ, #546)

 * Fix timezone awareness mismatch in RRULE occurrence generation.
   (Jelmer Vernooĳ, #529)

 * Fix EXDATE/RDATE handling to extract datetime values. (Jelmer Vernooĳ, #529)

 * Fix compatibility with Dulwich 1. (Jelmer Vernooĳ, #557)

 * Limit recurrence expansion for unbounded queries. (Jelmer Vernooĳ, #539)

 * Improve error messages for file parsing failures and RRULE parsing.
   (Jelmer Vernooĳ, #536)

 * Restrict supported dulwich versions. (Jelmer Vernooĳ, #541)

 * Clarify resource type validation in multiget and calendar-query reporters.
   (Jelmer Vernooĳ, #553, #554)

 * Document file format specification with complete metadata property reference.
   (Jelmer Vernooĳ, #561)

 * Move tests to root directory and don't install them. (Jelmer Vernooĳ, #532)

0.3.0	2025-11-26

 * Add RFC 7953 (Calendar Availability) support. (Jelmer Vernooĳ, #483)

 * Add WebDAV MOVE and COPY method support for collections and resources.
   (Jelmer Vernooĳ, #458, #460, #466)

 * Add CardDAV indexing support for improved search performance.
   (Jelmer Vernooĳ, #451)

 * Add support for CALDAV:limit-recurrence-set. (Jelmer Vernooĳ, #450)

 * Add support for VALARM search. (Jelmer Vernooĳ, #447)

 * Add support for filtering on recurring (rrule) events.
   (Jelmer Vernooĳ, #224)

 * Add caldav-server-tester integration for RFC4791 compliance testing.
   (Jelmer Vernooĳ, #516)

 * Add MemoryStore implementation. (Jelmer Vernooĳ, #464)

 * Add create-collection subcommand. (Jelmer Vernooĳ, #454)

 * Add 'serve' subcommand. (Jelmer Vernooĳ, #361, #362)

 * Show CalDAV URLs and QR barcode on homepage. (Jelmer Vernooĳ, #448)

 * Store User-Agent header in commit messages. (Jelmer Vernooĳ, #456)

 * Add Docker healthchecks. (Jelmer Vernooĳ, #506, #504)

 * Improve Docker configuration with environment variables and graceful shutdown.
   (Jelmer Vernooĳ, #485)

 * Ensure /data directory has correct ownership for named volumes in Docker.
   (Jelmer Vernooĳ)

 * Add per-store LRU cache for parsed files in GitStore for improved performance.
   (Jelmer Vernooĳ, #473)

 * Fix WebDAV litmus test failures and improve compliance. (Jelmer Vernooĳ, #497)

 * Fix contradictory POST Allow header behavior. (Jelmer Vernooĳ, #498, #495)

 * Fix high CPU usage from recurring events without bounds. (Jelmer Vernooĳ, #473)

 * Fix text search to use substring matching per RFC. (Jelmer Vernooĳ, #468)

 * Fix QR code URLs. (Jelmer Vernooĳ, #470)

 * Fix rrule filtering bug where expand_calendar_rrule modified the original calendar.
   (Jelmer Vernooĳ)

 * Fix index_keys() return type inconsistency causing paranoid mode assertion error.
   (Jelmer Vernooĳ, #457)

 * Fix handling of %2f in item names. (Jelmer Vernooĳ, #440)

 * Fix handling of whole-day recurring events. (Jelmer Vernooĳ, #442)

 * Fix property removal returning 500 error. (Jelmer Vernooĳ, #441)

 * Fix CardDAV/CalDAV report not returning 404 when no content type is available.
   (Jelmer Vernooĳ, #443)

 * Install dulwich from pip to fix Docker compatibility issue. (Jelmer Vernooĳ)

 * Disable autogc to prevent requests from timing out. (Jelmer Vernooĳ, #439)

 * Bump icalendar dependency, prevent upgrading beyond 7.0. (Jelmer Vernooĳ, #436)

 * Drop Python 3.9 support, add Python 3.14 support. (Jelmer Vernooĳ, #517)

 * Add documentation for installation, configuration, troubleshooting, and client setup.
   (Jelmer Vernooĳ, #459, #461, #453, #452)

0.2.12	2024-10-07

 * Migrate from pytz to zoneinfo (#353, Jelmer Vernooĳ)

 * Fix compatibility with newer icalendar. (#351, Jelmer Vernooĳ)

 * Fix docker command. (Artur Neumann)

 * web: Don't assume particular directory layout. (Jelmer Vernooĳ)

 * git: don't assume default branch is named 'master'.
   (Jelmer Vernooĳ)

 * Add git clone support for WSGI (Daniel Hőxtermann)

 * Document the valid settings for AUTOCREATE in the WSGI app
   (Jelmer Vernooĳ, #342)

 * Disable metrics port by default. (Jelmer Vernooĳ)

 * docs: Drop mention that Thunderbird doesn't support discovery,
   which is no longer true. (Jelmer Vernooĳ)

 * Update requirements to add vobject dependency (Wilco Baan Hofman)

0.2.11	2024-03-29

 * Various build cleanups/fixes. (Jelmer Vernooĳ)

 * Add multi-arch docker builds. (Maya)

 * do not listen on default address if systemd sockets (schnusch)

 * Use correct port in kubernetes to not conflict with the metrics port (Marcel, #286)

0.2.10	2023-09-04

 * Add support for systemd socket activation.
   (schnusch, #136, #155)

 * Add basic documentation.
   (Jelmer Vernooĳ)

 * Use entry points to install xandikos script.
   (Jelmer Vernooĳ, #163)

 * ``sync-collection``: handle invalid tokens.
   (Jelmer Vernooĳ)

0.2.8	2022-01-09

0.2.7	2021-12-27

 * Add basic XMP property support. (Jelmer Vernooĳ)

 * Add a /health target. (Jelmer Vernooĳ)

0.2.6	2021-03-20

 * Don't listen on TCP port (defautlting to 0.0.0.0) when a UNIX domain socket
   is specified. (schnusch, #134)

0.2.5	2021-02-18

 * Fix support for uwsgi when environ['wsgi.input'].read() does not
   accept a size=None. (Jelmer Vernooĳ)

0.2.4	2021-02-16

 * Wait for entire body to arrive. (Michael Alyn Miller, #129)

0.2.3	2020-07-25

 * Fix handling of WSGI - not all versions of start_response take
   keyword arguments. (Jelmer Vernooĳ, #124)

 * Add --no-strict option for clients that don't follow
   the spec. (Jelmer Vernooĳ)

 * Add basic support for expanding RRULE. (Jelmer Vernooĳ, #8)

 * Add parsing support for CALDAV:schedule-tag property.
   (Jelmer Vernooĳ)

 * Fix support for HTTP Expect. (Jelmer Vernooĳ, #126)

0.2.2	2020-05-14

 * Fix use of xandikos.wsgi module in uwsgi. (Jelmer Vernooĳ)

0.2.1	2020-05-06

 * Add missing dependencies in setup.py. (Jelmer Vernooĳ)

 * Fix syntax errors in xandikos/store/vdir.py.
   (Unused, but breaks bytecompilation). (Jelmer Vernooĳ)

0.2.0	2020-05-04

 * Fix <calendar-data> subelement filtering. (Jelmer Vernooĳ)

 * Skip non-calendar files for calendar-query operations.
   (Jelmer Vernooĳ, #108)

 * Switch to using aiohttp rather than uWSGI.
   (Jelmer Vernooĳ)

 * Query component's SUMMARY in ICalendarFile.describe().
   (Denis Laxalde)

 * Add /metrics support. (Jelmer Vernooĳ)

 * Drop support for Python 3.4, add support for 3.8.
   (Jelmer Vernooĳ)

0.1.0	2019-04-07

Initial release.
