PHPackages                             crusherrl/ics-link-generator - 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. crusherrl/ics-link-generator

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

crusherrl/ics-link-generator
============================

A small vanilla php ics link generator

1.1.1(12mo ago)1160MITPHPPHP ^8.0

Since Sep 5Pushed 12mo ago1 watchersCompare

[ Source](https://github.com/CrusherRL/ics-link-generator)[ Packagist](https://packagist.org/packages/crusherrl/ics-link-generator)[ RSS](/packages/crusherrl-ics-link-generator/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (3)DependenciesVersions (4)Used By (0)

Ics Link Generator
==================

[](#ics-link-generator)

This project creates all kind of ics/event urls for different platforms, like Outlook + mobile, Office 365 + mobile, Google, Yahoo and AOL.

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

[](#installation)

```
composer require crusherrl/ics-link-generator
```

Usage
-----

[](#usage)

```
use CrusherRL\IcsLinksGenerator;

// ...

$start = '2025-08-15 15:00:00'; // required
$end = '2025-08-15 16:30:00'; // required
$summary = 'Welcome on Board!'; // optional
$location = 'any location'; // optional
$description = 'Let\'s talk about this stuff'; // optional
$allDay = 'false'; // optional - NOTE: it should be true or false as string, since we urlencode this, it would be converted to 0 (false) or 1 (true)

// Building base for the generator

$generator = new IcsLinksGenerator($start, $end, $summary, $location, $description, $allDay);
// OR
$generator = IcsLinksGenerator::make(['DTSTART' => $start, 'DTEND' => $end]);
// OR Like from an URL!
$generator = IcsLinksGenerator::fromUrl('https://example.com/create-event?summary=Meeting&description=Discuss+project&location=Office&start=20250430T100000Z&end=20250430T110000Z')
// OR Like from an URL but the query is base64 encoded
$generator = IcsLinksGenerator::fromUrl('https://example.com/create-event?c3VtbWFyeT1NZWV0aW5nJmRlc2NyaXB0aW9uPURpc2N1c3MrcHJvamVjdCZsb2NhdGlvbj1PZmZpY2Umc3RhcnQ9MjAyNTA0MzBUMTAwMDAwWiZlbmQ9MjAyNTA0MzBUMTEwMDAwWg');

// Actual Generating the urls
// Generating all possible urls
$urls = $generator->generate();

// Generating only specific urls
$urls = $generator->generateSpecific([IcsLinksGenerator::YAHOO, IcsLinksGenerator::AOL, IcsLinksGenerator::OUTLOOK_MOBILE]);
```

### Output

[](#output)

After generating the urls, we receive those kind of arrays.

**Serialized**

[Example of all urls](examples/serialized/all.json)

[Example of specific urls - serialized](examples/serialized/specific.json)

**Unserialized**

[Example of all urls](examples/unserialized/all.json)

[Example of specific urls](examples/unserialized/specific.json)

**Url**

[Example of all urls](examples/url/all.json)

[Example of specific urls](examples/url/specific.json)

**base64**

[Example of all urls](examples/base64/all.json)

[Example of specific urls](examples/base64/specific.json)

### Format output

[](#format-output)

If needed you can change the labels, before generating the urls. Just simply setLabels which you want to change.

```
use CrusherRL\IcsLinksGenerator;

// ...

$generator->setLabels([IcsLinksGenerator::OUTLOOK => 'Outlook.com']);
```

Our output will change from this:

```
{
  "OUTLOOK": {
    "client": "outlook",
    "label": "Outlook",
    "url": "https:\/\/outlook.live.com\/calendar\/0\/action\/compose?&allday=false&body=&enddt=2023-08-15T16%3A30%3A00&location=&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2023-08-15T15%3A00%3A00&subject="
  }
}
```

to this:

```
{
  "OUTLOOK": {
    "client": "outlook",
    "label": "Outlook.com",
    "url": "https:\/\/outlook.live.com\/calendar\/0\/action\/compose?&allday=false&body=&enddt=2023-08-15T16%3A30%3A00&location=&path=%2Fcalendar%2Faction%2Fcompose&rru=addevent&startdt=2023-08-15T15%3A00%3A00&subject="
  }
}
```

### Generating url.

[](#generating-url)

In case you need to generate 1 or 2 urls without serialization. This is how you do it.

```
use CrusherRL\IcsLinksGenerator;

// ...

// Actual Generating the urls
// Generating all possible urls
$urls = $generator->generate(false);

// Generating only specific urls
$urls = $generator->generateSpecific([IcsLinksGenerator::YAHOO, IcsLinksGenerator::AOL, IcsLinksGenerator::OUTLOOK_MOBILE], false);

// OR you can get url only, like this
$aol = $generator->makeAOLUrl();
$yahoo = $generator->makeYahooUrl();
$google = $generator->makeGoogleUrl();
$office = $generator->makeOfficeUrl();
$officeMobile = $generator->makeOfficeMobileUrl();
$outlook = $generator->makeOutlookUrl();
$outlookMobile = $generator->makeOutlookMobileUrl();
```

How to contribute
-----------------

[](#how-to-contribute)

- clone the repo
- on `composer.json` of a laravel nova application add the following:

```
{
    //...

    "require" {
        "crusherrl/ics-link-generator: "*"
    },

    //...
    "repositories": [
        {
            "type": "path",
            "url": "../path_to_your_package_folder"
        }
    ],
}

```

- run `composer update crusherrl/ics-link-generator`

You're now ready to start contributing!

###  Health Score

33

—

LowBetter than 74% of packages

Maintenance52

Moderate activity, may be stable

Popularity12

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity50

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% 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 ~307 days

Total

3

Last Release

362d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/84df6a9be1158aa939170572aeca403d1580fd85efb4a0bf480c4ba6fe6625f8?d=identicon)[CrusherRL](/maintainers/CrusherRL)

---

Top Contributors

[![CrusherRL](https://avatars.githubusercontent.com/u/89278861?v=4)](https://github.com/CrusherRL "CrusherRL (6 commits)")

---

Tags

icscalendarlink generatorics linkics urlics eventics url generatorics event generatorics link generatorics generatorcalendar eventcalendar urlcalendar linkcalendar ics

### Embed Badge

![Health badge](/badges/crusherrl-ics-link-generator/health.svg)

```
[![Health](https://phpackages.com/badges/crusherrl-ics-link-generator/health.svg)](https://phpackages.com/packages/crusherrl-ics-link-generator)
```

###  Alternatives

[eluceo/ical

The eluceo/iCal package offers an abstraction layer for creating iCalendars. You can easily create iCal files by using PHP objects instead of typing your \*.ics file by hand. The output will follow RFC 5545 as best as possible.

1.2k17.5M46](/packages/eluceo-ical)[spatie/icalendar-generator

Build calendars in the iCalendar format

6787.4M9](/packages/spatie-icalendar-generator)[league/period

Time range API for PHP

7335.4M21](/packages/league-period)[aeon-php/calendar

PHP type safe, immutable calendar library

2079.7M16](/packages/aeon-php-calendar)[jsvrcek/ics-bundle

This bundle provides a dependency injection wrapper for the JsvrcekICS iCal library

11150.6k](/packages/jsvrcek-ics-bundle)[welp/ical-bundle

Symfony Bundle to manage .ics iCal file (creating and eventually reading)

10114.3k](/packages/welp-ical-bundle)

PHPackages © 2026

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