PHPackages                             horde/icalendar - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. horde/icalendar

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

horde/icalendar
===============

iCalendar and vCard library

v3.0.0(6d ago)14.0k↑51.2%516LGPL-2.1-onlyPHPPHP ^7.4 || ^8

Since Jul 6Pushed 3d ago5 watchersCompare

[ Source](https://github.com/horde/Icalendar)[ Packagist](https://packagist.org/packages/horde/icalendar)[ Docs](https://www.horde.org/libraries/Horde_Icalendar)[ RSS](/packages/horde-icalendar/feed)WikiDiscussions FRAMEWORK\_6\_0 Synced yesterday

READMEChangelog (4)Dependencies (30)Versions (22)Used By (16)

Horde iCalendar
===============

[](#horde-icalendar)

`horde/icalendar` is a PHP library for parsing, manipulating, and writing iCalendar (RFC 5545) and vCard data. It provides both a low-level content-line parser and a typed object model with open enums, value wrappers, and component accessors.

Installation
------------

[](#installation)

```
composer require horde/icalendar
```

Requires PHP 8.1+.

Architecture
------------

[](#architecture)

### Layers

[](#layers)

LayerNamespacePurposeParser/Writer`Horde\Icalendar`Content-line reader, streaming reader, writerComponents`Horde\Icalendar\Component`PropertyBag, AbstractComponent, ComponentFactoryCalendar types`Horde\Icalendar\Calendar`VCalendar, Vevent, Vtodo, Vjournal, Vfreebusy, Valarm, VtimezoneEnums`Horde\Icalendar\Enum`Open enum classes (ParticipationStatus, CalendarMethod, EventStatus, etc.)Values`Horde\Icalendar\Value`Attendee, Organizer, DateTimeParser### Boundaries

[](#boundaries)

This library is responsible for:

- Parsing iCalendar/vCard byte streams into an object model
- Providing typed accessors for well known component properties (UID, DTSTART, ATTENDEE, etc.) and a generic bag for all parsed properties known and unknown.
- Serializing the object model back to RFC-compliant text
- Representing iCalendar values with correct semantics (open enums, date/time, attendee roles)

This library in its modern form is **not** responsible for:

- iTIP scheduling logic (REQUEST/REPLY/CANCEL processing) — see `horde/itip`
- Email transport (iMIP) will be handled by the upcoming `horde/imip` package
- CalDAV operations are handled by `horde/dav`
- Calendar and addressbook UI or storage. These are handled by application layers (Kronolith, Nag, Turba)

### Collaboration Partners

[](#collaboration-partners)

PackageRelationship`horde/timezone`Timezone handling, formatting and matching beyond IANA standards based builtins, ready to handle real world quirks (Outlook/Exchange, Apple)`horde/date`Recurrence calculations and date formatting`horde/itip`Consumes VCalendar, Vevent, Vtodo, Attendee, Organizer, and open enums for iTIP scheduling decisions`horde/imip` (planned)Will consume serialized VCalendar output for MIME email transport`horde/dav`Uses the parser/writer for CalDAV object exchangeKronolith / Nag / TurbaApplication layers that store and display calendar/task dataUpgrading
---------

[](#upgrading)

See [doc/UPGRADING.md](doc/UPGRADING.md) for migration guidance from `Horde_Icalendar` (PSR-0) to the modern `Horde\Icalendar` (PSR-4) API.

Usage
-----

[](#usage)

```
use Horde\Icalendar\Calendar\VCalendar;
use Horde\Icalendar\Calendar\Vevent;
use Horde\Icalendar\Enum\CalendarMethod;
use Horde\Icalendar\Enum\ParticipationStatus;
use Horde\Icalendar\Value\Attendee;
use Horde\Icalendar\Value\Organizer;
use Horde\Icalendar\Reader;

// Parse from string
$reader = new Reader();
$cal = $reader->readString($icsData);

// Typed access
$event = $cal->getEvents()[0];
$uid = $event->getUid();
$start = $event->getDtstart();
$attendees = $event->getAttendees();

foreach ($attendees as $attendee) {
    $email = $attendee->getEmail();
    $status = $attendee->getParticipationStatus(); // ParticipationStatus open enum
}

// Build programmatically
$event = new Vevent();
$event->setUid('unique-id@example.com');
$event->setSummary('Team Meeting');
$event->setDtstart(new DateTimeImmutable('2026-06-01 10:00'), 'America/New_York');
$event->setOrganizer(Organizer::create('boss@example.com', 'The Boss'));
$event->addAttendee(Attendee::create('dev@example.com', 'Developer', ParticipationStatus::from('NEEDS-ACTION')));

$cal = new VCalendar();
$cal->setVersion();
$cal->setMethod(CalendarMethod::from('REQUEST'));
$cal->addChild($event);
```

License
-------

[](#license)

LGPL-2.1 — see [LICENSE](LICENSE).

###  Health Score

60

—

FairBetter than 98% of packages

Maintenance99

Actively maintained with recent releases

Popularity27

Limited adoption so far

Community37

Small or concentrated contributor base

Maturity72

Established project with proven stability

 Bus Factor1

Top contributor holds 65.8% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~267 days

Recently: every ~333 days

Total

16

Last Release

6d ago

Major Versions

2.1.8 → 3.0.0alpha12021-02-24

PHP version history (5 changes)2.1.1PHP &gt;=5.3.0,&lt;=6.0.0alpha1

2.1.3PHP &gt;=5.3.0,&lt;=8.0.0alpha1

2.1.7PHP ^5.3 || ^7

3.0.0alpha1PHP ^7

v3.0.0alpha4PHP ^7.4 || ^8

### Community

Maintainers

![](https://www.gravatar.com/avatar/c943a083635c28520599075eaea7ede2d743b7697b76e84d6bdc37e52cc8249b?d=identicon)[yunosh](/maintainers/yunosh)

![](https://www.gravatar.com/avatar/c931cd02664859360478593450d6c473a05bb12b209dfacfc534cd13257cc7ef?d=identicon)[ralflang](/maintainers/ralflang)

![](https://www.gravatar.com/avatar/e4f6c6771993db2ed500959b42353f6cf6a2ca0406d9617f7ae680f4504faa4a?d=identicon)[horde](/maintainers/horde)

![](https://www.gravatar.com/avatar/a7767adb66b45f2f05bcd44d49bc4e67efacd9ce05b161ce2d481d5dd6af025c?d=identicon)[mrubinsk](/maintainers/mrubinsk)

---

Top Contributors

[![yunosh](https://avatars.githubusercontent.com/u/379318?v=4)](https://github.com/yunosh "yunosh (265 commits)")[![mrubinsk](https://avatars.githubusercontent.com/u/66822?v=4)](https://github.com/mrubinsk "mrubinsk (66 commits)")[![ralflang](https://avatars.githubusercontent.com/u/646976?v=4)](https://github.com/ralflang "ralflang (31 commits)")[![slusarz](https://avatars.githubusercontent.com/u/381003?v=4)](https://github.com/slusarz "slusarz (28 commits)")[![wrobel](https://avatars.githubusercontent.com/u/10232?v=4)](https://github.com/wrobel "wrobel (4 commits)")[![ralfbecker](https://avatars.githubusercontent.com/u/972180?v=4)](https://github.com/ralfbecker "ralfbecker (3 commits)")[![renan](https://avatars.githubusercontent.com/u/28046?v=4)](https://github.com/renan "renan (3 commits)")[![TDannhauer](https://avatars.githubusercontent.com/u/6716033?v=4)](https://github.com/TDannhauer "TDannhauer (1 commits)")[![remicollet](https://avatars.githubusercontent.com/u/270445?v=4)](https://github.com/remicollet "remicollet (1 commits)")[![powercycle](https://avatars.githubusercontent.com/u/2614846?v=4)](https://github.com/powercycle "powercycle (1 commits)")

### Embed Badge

![Health badge](/badges/horde-icalendar/health.svg)

```
[![Health](https://phpackages.com/badges/horde-icalendar/health.svg)](https://phpackages.com/packages/horde-icalendar)
```

###  Alternatives

[horde/horde

Horde base application

583.0k70](/packages/horde-horde)[horde/kronolith

Calendar and scheduling application

101.5k4](/packages/horde-kronolith)[horde/imap_client

IMAP client library

275.5k19](/packages/horde-imap-client)[horde/imp

Webmail application

261.3k](/packages/horde-imp)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
