| name | stacks-calendar |
| description | Use when working with calendar functionality in Stacks — exporting events to Google Calendar, Outlook, Yahoo, or ICS format, the CalendarLink interface for event definitions, timezone handling, all-day events, or calendar URL generation. Covers @stacksjs/calendar-api. |
| license | MIT |
| compatibility | Bun >= 1.3.0, TypeScript |
| allowed-tools | Read Edit Write Bash Grep Glob |
Stacks Calendar
Calendar event export to 4 calendar providers.
Key Paths
- Core package:
storage/framework/core/calendar-api/src/
- Package:
@stacksjs/calendar-api
Export Functions
import { exportCalendarGoogle, exportCalendarIcs, exportCalendarOutlook, exportCalendarYahoo } from '@stacksjs/calendar-api'
const event: CalendarLink = {
title: 'Team Meeting',
description: 'Weekly standup',
from: new Date('2024-06-15T10:00:00'),
to: new Date('2024-06-15T11:00:00'),
address: '123 Main St, City',
timezone: 'America/New_York',
allDay: false
}
const googleUrl = exportCalendarGoogle(event)
const icsContent = exportCalendarIcs(event)
const outlookUrl = exportCalendarOutlook(event)
const yahooUrl = exportCalendarYahoo(event)
CalendarLink Interface
interface CalendarLink {
title: string
description?: string
from: Date
to: Date
allDay?: boolean
address?: string
timezone?: string
}
Calendar Store Types
interface CalendarStore {
day: number
month: number
year: number
currentMonthYear: string
datesOfMonth: number[]
currentWeekView: WeekDates[]
}
interface Events {
date: string
title: string
description?: string
month: number
day: number
year: number
time?: Time
}
interface Time { from: string, to: string }
interface WeekDates { month: number, date: number }
All-Day Events
const allDayEvent: CalendarLink = {
title: 'Company Holiday',
from: new Date('2024-12-25'),
to: new Date('2024-12-25'),
allDay: true
}
Format Differences
| Feature | Google | ICS | Outlook | Yahoo |
|---|
| URL-based | Yes | No (file) | Yes | Yes |
| Timezone | URL param | VTIMEZONE | URL param | URL param |
| All-day | Date only | DATE value | isAllDay=true | st= format |
| Description | details= | DESCRIPTION | body= | desc= |
Gotchas
- Note package name is
@stacksjs/calendar-api (not @stacksjs/calendar)
- ICS export returns file content (not a URL) — serve as
.ics download
- All-day events use date-only format, ignoring time components
- Timezone handling varies by provider — ICS includes VTIMEZONE block
- Google Calendar uses UTC format in URLs
- For task scheduling (cron), use
@stacksjs/scheduler instead
- ICS generates a unique UID per event for calendar deduplication