Calendarizer is a lightweight, zero-dependency Web Component (<calendarizer>
) that lets users instantly add events to their favorite calendar apps: Google, Outlook, Yahoo, or download a universal .ics
file compatible with Apple Calendar, Outlook Desktop, and more.
Fully customizable. Themed or theme-free. Plug & play.
📘 También disponible en: Español 🇲🇽
Embed it locally:
<script src="calendarizer.js" type="module"></script>
Or use a minified version (e.g. CDN):
<script src="calendarizer.min.js" type="module"></script>
<calendarizer
title="Product Launch"
date-start="2025-08-01T09:00"
date-end="2025-08-01T10:30"
timezone="America/Mexico_City"
location="Mexico City"
organizer="mailto:host@example.com"
content="Join us for the new product release.<br>Live demo and Q&A included."
button="Add to calendar"
theme="dark"
theme-url="https://yoursite.com/custom-calendar-theme.css"
/>
Attribute | Type | Required | Description |
---|---|---|---|
title |
string |
✅ | Event title |
date-start |
ISO string |
✅ | Start datetime (YYYY-MM-DDTHH:mm ) |
date-end |
ISO string |
✅ | End datetime |
timezone |
IANA string |
✅ | Timezone (e.g. America/New_York , UTC ) |
location |
string |
✅ | Event location (physical or virtual) |
content |
string (HTML-safe) |
✅ | Event description (supports <br> for line breaks) |
organizer |
string |
❌ | Optional organizer info (mailto: or name) |
button |
string |
❌ | Button label (default: "Add to calendar" ) |
theme |
string |
❌ | Built-in theme: light , dark , neon , etc. |
theme-url |
URL |
❌ | Optional custom CSS URL — overrides built-in themes |
- ✅ Google Calendar
- ✅ Outlook (Web & Desktop)
- ✅ Yahoo Calendar
- ✅ Apple Calendar (
.ics
) - ✅ Thunderbird & all
.ics
-compatible clients
- Use
theme="light"
ortheme="dark"
for built-in styles. - Use
theme-url="..."
to override styles with custom CSS. theme-url
always takes precedence overtheme
.- Encapsulated via Shadow DOM for full style isolation.
light
(default)dark
warm
smoke
neon
soft
Calendarizer ships with a flexible CLI build tool.
Flag | Description |
---|---|
--theme=name |
Build a single theme (e.g. neon , smoke ) |
--default=name |
Set the default theme in full/all builds |
--core |
Build only the core module (no themes included) |
--mode=type |
Choose: all (default), full , theme , or core |
--no-minify |
Skip .min.js output |
--help |
Show help text |
pnpm run build --theme=neon
pnpm run build --default=dark --mode=full
pnpm run build --core
pnpm run build --all --no-minify
File | Description |
---|---|
calendarizer.full.js |
All themes embedded, default is light |
calendarizer.min.js |
Minified version of full build |
calendarizer.core.js |
Core only, requires theme-url |
calendarizer.core.min.js |
Minified core build |
calendarizer.dark.js |
Single-theme bundle (e.g. dark only) |
calendarizer.dark.min.js |
Minified single-theme version |
... and others per theme | Based on src/themes/*.css |
Works seamlessly in any modern frontend stack:
<calendarizer
title="Launch Meeting"
date-start="2025-08-01T15:00"
date-end="2025-08-01T16:00"
timezone="America/Los_Angeles"
content="Live Zoom event with our team"
button="Add it"
/>
- ✅ React
- ✅ Vue
- ✅ Svelte
- ✅ Astro
- ✅ Vanilla HTML
Generated .ics
files follow RFC 5545 spec and include:
DTSTART
/DTEND
with proper UTC or TZIDUID
,DTSTAMP
,ORGANIZER
, andDESCRIPTION
- Proper line folding, escaping, and timezone handling
- Uses
rel="noopener"
to prevent window hijacking - Sanitizes content before
.ics
export - IANA timezone support built-in (
tzdata
fallback optional)
"scripts": {
"build": "node scripts/build.js",
"build:help": "node scripts/build.js --help",
"build:core": "node scripts/build.js --core",
"build:all": "node scripts/build.js --all --default=dark",
"build:theme": "node scripts/build.js --theme=warm",
"build:theme:neon": "node scripts/build.js --theme=neon",
"build:theme:dark": "node scripts/build.js --theme=dark",
"build:theme:smoke": "node scripts/build.js --theme=smoke",
"build:full": "node scripts/build.js --mode=full",
"build:full:dark": "node scripts/build.js --default=dark --mode=full",
"build:full:neon": "node scripts/build.js --default=neon --mode=full",
"build:dev": "node scripts/build.js --all --no-minify",
"dev": "npm run build:dev"
}
MIT © 2025 David Garay
Made with ❤️ by David Garay