Display your calendar events on Elgato Stream Deck. Visual countdowns and color warnings help you stay on schedule.
Download from Stream Deck Store ยท Latest Release ยท Report Bug
- Install the plugin from Stream Deck Store (search "iCal")
- Get your calendar URL (Google | Outlook | Apple)
- Add a button - Drag "Smart Calendar" to your Stream Deck
- Configure - Click Settings โ Add Calendar โ Paste URL โ Save
That's it! Your next meeting countdown appears on the button.
| Action | Best For | Description |
|---|---|---|
| Smart Calendar โญ | Most users | Auto-switches between countdown modes. Shows "Time Left" during meetings, "Next Meeting" otherwise. |
| Next Meeting | Anticipating upcoming | Always shows countdown to next meeting. Tap for meeting title. |
| Time Left | During meetings | Shows time remaining in current meeting. Supports concurrent meetings. |
๐ก Recommendation: Start with Smart Calendar - it combines both modes intelligently.
Set up named calendars (Work, Personal, Family) and assign different calendars to different buttons.
- Orange when meeting is approaching (default: 5 min, configurable)
- Red when meeting is imminent (default: 30 sec, configurable)
Full support for daily, weekly, monthly patterns (RRULE) with exceptions (EXDATE).
Automatic conversion between Windows and IANA timezones. Works globally.
- Tap to show meeting title (scrolling marquee)
- Double-tap to force refresh calendar
- Tap during meeting to cycle through concurrent meetings
| Provider | Status | Notes |
|---|---|---|
| Google Calendar | โ Full support | Including Workspace |
| Microsoft Outlook | โ Full support | Outlook.com & Office 365 |
| Apple Calendar | โ Full support | iCloud sharing |
| Any iCal URL | โ Works | RFC 5545 compatible |
Google Calendar
- Open Google Calendar
- Click โฎ next to your calendar โ Settings and sharing
- Scroll to "Integrate calendar"
- Copy "Secret address in iCal format"
โ ๏ธ Use the "Secret address" - the public address won't show private events.
Microsoft Outlook / Office 365
- Open Outlook Calendar
- Click โ๏ธ Settings โ View all Outlook settings
- Go to Calendar โ Shared calendars
- Under "Publish a calendar", select your calendar
- Click Publish and copy the ICS link
Apple Calendar / iCloud
- Open Calendar app on Mac
- Right-click calendar โ Share Calendar
- Check "Public Calendar" and copy the URL
- Replace
webcal://withhttps://when pasting
Click Settings in the Property Inspector to access:
| Setting | Description | Default |
|---|---|---|
| Calendars | Add/remove named calendars | - |
| Default Calendar | Used when button has no selection | First added |
| Orange Warning | Minutes before meeting | 5 min |
| Red Warning | Seconds before meeting | 30 sec |
| Title Duration | How long to show meeting title | 15 sec |
| Flash on Start | Visual alert when meeting begins | Off |
Each button can use a different calendar from your library - just select it from the dropdown in the Property Inspector.
No events showing
- Verify URL is correct (test in browser - should download .ics file)
- Check events are within time window (default: 3 days)
- Double-tap button to force refresh
- Check if "Exclude all-day events" is filtering them out
Wrong times displayed
- Verify your computer's timezone is correct
- For Outlook: Plugin auto-converts Windows timezones
- Try force refresh after timezone change
Button stuck on "Loading"
- Check internet connection
- Verify calendar URL is accessible
- Restart Stream Deck software
- Check Settings for error messages
- Stability Fixes - Capped RRULE expansion, fetch timeouts, concurrent update guards (#26)
- DST-Aware Recurrence - Fixed RECURRENCE-ID matching across daylight saving transitions (#27)
- Export Diagnostics - One-click diagnostic report for easier bug reporting
- Error Isolation - Bad events no longer break the entire calendar
See full changelog for all versions.
| Technology | Purpose |
|---|---|
| TypeScript | Type-safe plugin code |
| Node.js SDK v2 | Stream Deck integration |
| Vitest | 572 unit tests |
| Rollup | Bundle optimization |
| rrule | Recurring event expansion |
| Luxon | Timezone handling |
See CONTRIBUTING.md for:
- Development setup
- Architecture overview
- Testing guidelines
- Pull request process
- ๐ง Upgraded @elgato/streamdeck SDK from v1.4.1 to v2.0.2 for DRM compatibility
- ๐ Fixed Elgato Marketplace rejection due to manifest reading in DRM-encrypted plugins
- ๐ Fixed Export Diagnostics not copying to clipboard (caused "No response from plugin" false alarm)
- ๐ง Robust clipboard fallback: execCommand โ Clipboard API โ manual textarea
- ๐ Fixed buttons showing "Loading iCal" on every background calendar refresh
- ๐ Background refresh failures now preserve cached data instead of clearing events
- ๐ Fixed CPU spike from unbounded RRULE expansion (#26)
- ๐ Fixed RECURRENCE-ID mismatch across DST boundaries (#27)
- โจ Export Diagnostics button for one-click bug reports
- โจ 30-second fetch timeout to prevent hangs
- โจ Concurrent update guard prevents stacking requests
- โจ Per-event error isolation for resilient parsing
- โจ Enhanced debug logging (500-entry buffer, error filtering)
- โจ Named Calendars with friendly names
- โจ Per-button calendar selection
- โจ Configurable warning thresholds
- โจ Graceful calendar deletion handling
- ๐ Fixed calendar selection persistence
- โจ Smart Calendar action (auto-switching)
- โจ Configurable title display duration
- โจ Flash on meeting start option
- ๐ Fixed startup race conditions
- โจ Recurring events (RRULE/EXDATE)
- โจ Configurable time window
- โจ Improved timezone handling
- โจ Force refresh feature
- ๐ Initial release
MIT License - see LICENSE
Created by Pedro Fuentes
Report Bug ยท Discussions ยท Contribute
