All notable changes to this project will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
2.0.1 - 2026-02-03
- Reorganized test suite into structured packages by RFC and component
(
core/components,core/properties,core/rfc5545,extensions/rfc7986,extensions/rfc9073,extensions/rfc9074,infrastructure,integration,performance,compatibility) - Consolidated duplicate tests (716 → 694 tests across 67 classes)
- Source code cleanups: removed unused imports and dead code
- Updated maven-enforcer-plugin to 3.6.2
- Updated versions-maven-plugin to 2.21.0
2.0.0 - 2026-01-27
- RFC 9073 - Event Publishing Extensions
- PARTICIPANT component with UID, PARTICIPANT-TYPE, CALENDAR-ADDRESS, STRUCTURED-DATA, NAME, and DESCRIPTION properties
- VLOCATION component with UID, NAME, DESCRIPTION, GEO, LOCATION-TYPE, CATEGORIES, and URL properties
- VRESOURCE component with UID, NAME, DESCRIPTION, GEO, RESOURCE-TYPE, and STRUCTURED-DATA properties
- STYLED-DESCRIPTION property for rich-text descriptions (HTML, Markdown)
- CALENDAR-ADDRESS, LOCATION-TYPE, PARTICIPANT-TYPE, and RESOURCE-TYPE property classes
- RFC 9074 - VALARM Extensions
- PROXIMITY property for location-based alarm triggers (ARRIVE, DEPART, CONNECT, DISCONNECT)
- STRUCTURED-DATA property for VALARM components
- RFC 7986 - Calendar Extensions
- COLOR, IMAGE, and CONFERENCE properties for VEVENT/VTODO/VJOURNAL
- NAME and CALENDAR-ADDRESS properties for VCALENDAR
- RefreshInterval and Source property classes
- RFC 5546 - iTIP Protocol
- METHOD property parsing, storage, and serialization
- METHOD value validation against RFC 5546 constants in strict mode
- iTIP flow support for PUBLISH, REQUEST, REPLY, and CANCEL methods
- VALARM component with ACTION, TRIGGER, SUMMARY, DESCRIPTION, DURATION, REPEAT properties and multiple ATTENDEE/ATTACH support
- VALARM subcomponent parsing across VEVENT, VTODO, and VJOURNAL
- VAVAILABILITY component with BUSYTYPE support (BUSY, FREE, BUSY-UNAVAILABLE, BUSY-TENTATIVE)
- Organizer and Contact property classes
- VEVENT enhancements: ORGANIZER, CONTACT, PRIORITY, REQUEST-STATUS, GEO
- Comprehensive validation with detailed error reporting for Event, Todo, Journal, Timezone, and RRULE components
- Advanced recurrence support with
getAllOccurrencesfor complex RRULE patterns with RDATE/EXDATE exceptions - Performance optimizations: streaming parsing mode, configurable buffer sizes, performance monitoring metrics
- RFC 5545 line folding in all
toICalendar()methods Utils.exportToFile()andUtils.importFromFile()utilities- Comprehensive RFC 5545 compliance test framework (sections 3.1–4.0)
- Dependabot for automated dependency updates
- GitHub Actions CI workflow
- Java 17+ now required (up from Java 11)
- Enhanced VTODO status handling with strict validation (COMPLETED status requires COMPLETED date and PERCENT-COMPLETE=100)
- Improved RRULE validation: FREQ values, INTERVAL ranges, COUNT/UNTIL mutual exclusivity, BYxxx rule compatibility checks
- Enhanced timezone validation: TZID format, TZURL, offset format checking
- Improved text escaping per RFC 5545
- TRANSP property parsing (was incorrectly using
parseStatusinstead of direct value parsing) - Todo.java compilation errors (duplicate methods, missing constructors)
- Organizer.java inheritance issues (Property constructor compatibility)
- Ant build file (Maven only going forward)
1.0.2 - 2024-09-02
- Bundled Google RFC 2445 RRule library source directly, since no reliable Maven artifact is available (source unmodified except for a Java 9+ compatibility fix)
- Switched back to Java 11 (Java 17+ features were not yet in use)
- Journal UI code (moved to its own repository at craigk5n/k5njournal)
1.0.1 - 2024-08-28
- New unit tests
- Updated to Java 17
- Fixes for many existing tests
1.0.0 - 2021-12-14
- Converted build system from Ant to Maven
- Restructured directories for Maven conventions
- Upgraded from JUnit 3 to JUnit 5
- Reformatted code to standard Java formatting
- Refactored collections: replaced
VectorwithList/ArrayList, simplified loops
- RRULE code that threw exceptions when no timezone info was provided
- Creating Event would lose start date setting
- Bug in CSVParser class in parser method (patch 2859626)
- ISO 8601 date parsing in CSVParser (patch 2860537)
- yDoc build documentation (patch 2864816)
- CalendarPanelApplet class for displaying remote iCalendar files in a Java applet
- EXDATE and RDATE support in VEVENT
- ATTENDEE read/write support
- CREATED field support
- TRANSP field support in VEVENT
- Empty UID on new events
- Floating date-time handling (added
Date.setFloating/Date.isFloating) - CalendarPanel header area not resizing on font changes
- Multi-column day layout in CalendarPanel for days with many events
- Custom mouse-over popup displays replacing Swing ToolTip
setFontsupport in CalendarPanel
- Weekly repeating events not saved correctly
- CalendarPanel scrollbar values inaccurate after pressing "Today" button
- Generated iCalendar output for RRULEs
- Simple constructor for Rrule class
- ATTACH property support with Apache Commons Codec for base64 encoding/decoding
getNamedAttributemethod on all Property classes- Performance improvements for parsing long folded lines (inline attachments)
- STATUS field support in Event and Journal classes
- CalendarPanel: different background for today's date, "Today" button, background color override support
- CSVParser for parsing CSV calendar data from MS Outlook
- CalendarPanel modified to work with Java 1.2 (removed generics)
- CalendarPanel Swing GUI component
source-zipandjavadocAnt targets
- Google RRULE Java implementation for generating recurrence dates
getDayOfWeek,getFirstDayOfWeekForYear,getLastDayOfWeekForYearin UtilsgetWeekOfYear,getDayOfYear,getDayOfWeek,isBefore,isAftermethods on DatesetUserData/getUserDatamethods on Event- Timezone support via Joda Time
- Comment and Location support for events
- Numerous RRULE bugs
- Duration in Event
- Replaced "Clear" button for text search with graphic icon (k5njournal)
- Text search filter (k5njournal)
- Export to ICS in File menu (k5njournal)
- Clicking journal list column headers to sort caused wrong entry display
- Wrap text at word boundaries in entry descriptions (k5njournal)
- Default to Windows look and feel (k5njournal)
- NullPointerException when data file is missing DTSTART values
- JTree not refreshing to show newly added dates (k5njournal)
- NullPointerException if no journal entries yet (k5njournal)
- k5njournal compatibility with Java 1.4
- k5njournal application (
java -jar k5njournal-0.2.0.jar) - Journal object (VJOURNAL) implementation
- CLASS and URL support in Event
- Unit tests based on JUnit
- Made most Event members protected with get/set methods
- Renamed classes with "Ical" to "ICalendar"
- Changed
Date.hasTimetoDate.isDateOnly - Added getter/setter methods to Date
- Added
Utils.DateToYYYYMMDDmethod
- LANGUAGE attribute handling in Description and Summary
- VALUE=DATE attribute handling for dates
- Day-of-month error checking including leap year
- Date parsing for UTC dates (patch 1464212)
- Initial public release