Skip to content

Repository files navigation

πŸ“… ical-rs Documentation Coverage Matrix Mastodon Sponsor

iCalendar parser, validator, editor, merger and builder library for Rust

Table of contents

Features

  • Both iCalendar flavours: read and write vCalendar 1.0 and iCalendar 2.0 through one version-agnostic model.
  • Nested structure, preserved: events, to-dos, journals, free/busy blocks, time zones and alarms, parsed and round-tripped whole.
  • Byte-faithful editing: change one field and every other byte comes back unchanged, line endings and fold points included.
  • Forgiving parser: accept any real calendar, with a recovering mode for the ones a strict reading would throw away whole.
  • Strict building and validation: construct calendars checked against the standard, with an escape hatch to step outside it.
  • Recurrence and time zones: expand a rule or a whole recurrence set, and resolve an offset from the calendar's own rules.
  • Three-way merge: reconcile two divergent edits against their common base, every action and conflict reported.
  • Small and portable: no_std compatible, with an allocation-only core that pulls in no dependencies; the parser itself is optional.
  • Optional content decoding: quoted-printable text, inline base64 binary and foreign character sets, each behind its own feature.
  • Optional jCal: read and write a calendar as JSON.
  • Optional JSCalendar: convert a calendar to and from the object model exchanged over JMAP.

Tip

ical-rs uses cargo features to gate optional support. The default feature set is declared in Cargo.toml or on docs.rs.

RFC coverage

Spec What is covered
1.0 vCalendar 1.0: the original versit format, including its quoted-printable and charset conventions
5545 iCalendar 2.0: the current standard, with its full component tree, property set, value types and parameters, its recurrence rules and its time zones
5546 iTIP: whose the properties of a scheduled component are, which the merge enforces
6638 CalDAV scheduling: the parameters a server reads and writes on an attendee
7265 jCal: the JSON representation of a calendar
7529 Non-Gregorian recurrence: SKIP is expanded for the Gregorian scale; another scale is carried, not expanded
7953 Availability: the availability window and the periods inside it
7986 Calendar extensions: the newer calendar-level properties
8984 JSCalendar: the JSON data model a JMAP calendar server exchanges, converted both ways
9073 Event publishing extensions: participants, locations, resources and structured data
9074 Alarm extensions: acknowledgement, proximity and the alarm relations
9253 Relationships: typed links, reference identifiers and concepts

Usage

See documentation at docs.rs.

Examples

See complete examples at ./examples.

License

This project is licensed under either of:

Social

Sponsoring

nlnet

Special thanks to the NLnet foundation and the European Commission that have been financially supporting the project for years:

This program is part of Pimalaya, free software funded entirely by grants and donations. If you find it useful, consider sponsoring its development:

GitHub Ko-fi Buy Me a Coffee Liberapay thanks.dev PayPal

About

iCalendar parser, validator, editor, merger and builder library for Rust

Topics

Resources

Contributing

Security policy

Stars

1 star

Watchers

1 watching

Forks

Sponsor this project

Contributors

Languages