Calendar Bridge
pendingby Rey Ian Cabanganan
Bridge your calendars to Obsidian. Display events from iCloud, Google Calendar, and other services with a monthly calendar view
Calendar Bridge for Obsidian
Bridge your calendars to Obsidian. A powerful plugin that integrates calendar events directly into your workspace. View events from iCloud, Google Calendar, and any calendar service that provides subscription URLs.
Features
π Calendar View
- Monthly calendar grid with intuitive navigation
- Day selection to view events for any date
- Event indicators (dots) showing which days have events
- Today highlight and selected day highlight
- Manual refresh button to instantly update events
- Clean, theme-aware design
π Event Display
- All-day events displayed in separate section
- Timed events sorted chronologically
- Event details including:
- Title and description
- Date and time
- Location
- Calendar source
- Click events to see full details in modal
βοΈ Customization
- Calendar subscriptions: Add calendars via subscription URLs
- Calendar filters: Choose which calendars to display
- Time format: 12-hour or 24-hour display
- Auto-refresh: Configurable intervals (1, 5, or 20 minutes)
- All-day events: Toggle visibility
- Multiple calendars: Support for unlimited calendar subscriptions
π Privacy & Security
- Direct subscription access: Fetches events from your calendar URLs
- No credentials stored: Uses public subscription links
- Read-only: Plugin never modifies your calendar data
- Works with any calendar service: iCloud, Google Calendar, Office 365, etc.
Installation
Manual Installation
-
Download the plugin files:
main.jsmanifest.jsonstyles.css
-
Copy to your vault:
mkdir -p /path/to/your/vault/.obsidian/plugins/calendar-bridge cp main.js manifest.json styles.css /path/to/your/vault/.obsidian/plugins/calendar-bridge/ -
Enable the plugin:
- Open Obsidian
- Go to Settings β Community plugins
- Enable "Calendar Bridge"
-
Add your calendars:
- Go to Settings β Calendar Bridge
- Click "Add Calendar"
- Enter a name and paste your calendar subscription URL
- See instructions below for getting subscription URLs
Build from Source
# Clone the repository
git clone https://github.com/iancubus/Calendar_Bridge.git
cd Calendar_Bridge
# Install dependencies
npm install
# Build the plugin
npm run build
# The built files (main.js, manifest.json, styles.css) will be in the root directory
Usage
Getting Calendar Subscription URLs
From Apple Calendar (iCloud)
- Open Calendar.app
- Right-click on the calendar you want to add
- Select "Share Calendar"
- Check "Public Calendar"
- Copy the webcal:// URL that appears
From Google Calendar
- Go to Google Calendar
- Click the three dots next to the calendar
- Select "Settings and sharing"
- Scroll to "Integrate calendar"
- Copy the "Public address in iCal format" URL
From iCloud.com
- Go to iCloud.com β Calendar
- Click the share icon next to your calendar
- Enable "Public Calendar"
- Copy the webcal:// URL
Adding Calendars to the Plugin
- Open Settings β Calendar Bridge
- Click "Add Calendar" button
- Enter a friendly name (e.g., "Work", "Personal")
- Paste the subscription URL (webcal:// or https://)
- Click "Add Calendar"
- The calendar will immediately start loading events
Opening the Calendar View
- Click the calendar icon in the ribbon (left sidebar)
- Or use the command palette:
Open Calendar - The calendar will appear in the right sidebar
Viewing Events
- Select a day on the calendar
- Events for that day appear below the calendar
- Click the refresh button (β») to manually update events
- Click any event to see full details in a modal
- Navigate months using the arrow buttons or "Today" button
Managing Calendars
- Go to Settings β Calendar Bridge
- Use checkboxes to enable/disable specific calendars
- Click "Edit" to change calendar name or URL
- Click "Remove" to delete a calendar subscription
- Use "Enable All" or "Disable All" for quick changes
- Settings are saved automatically
Configuration
Settings Options
| Setting | Description | Options |
|---|---|---|
| Calendar Subscriptions | Add/edit/remove calendar URLs | Name + webcal:// or https:// URL |
| Refresh Interval | How often to auto-check for updates | 1, 5, or 20 minutes |
| Show All-Day Events | Display all-day events | On/Off |
| Time Format | Display format for event times | 12h or 24h |
| Calendar Filters | Which calendars to display | Individual checkboxes |
Technical Details
Requirements
- Obsidian: Version 0.15.0 or higher
- Platform: Cross-platform (macOS, Windows, Linux)
- Internet: Required to fetch calendar data from subscription URLs
- Node.js: For development only
Architecture
- TypeScript: Full type safety
- Moment.js: Date manipulation
- node-ical: Parse .ics calendar files
- Obsidian requestUrl API: Fetch calendar data over HTTPS
- Vanilla JS/DOM: No framework dependencies
- Bundle size: ~900KB (includes node-ical parser)
File Structure
calendar-events/
βββ src/
β βββ main.ts # Plugin entry point
β βββ calendar-view.ts # Calendar view component
β βββ calendar-ui.ts # Calendar UI rendering
β βββ event-reader.ts # Fetch calendars from URLs
β βββ event-parser.ts # Parse .ics files
β βββ event-modal.ts # Event details modal
β βββ settings.ts # Settings tab with add/edit modals
β βββ types.ts # TypeScript types
βββ styles.css # Plugin styling
βββ manifest.json # Plugin metadata
βββ README.md # This file
Troubleshooting
No events showing
- Check URL: Make sure the subscription URL is correct
- Check calendar visibility: Ensure calendar is toggled ON in settings
- Make calendar public: Some services require making calendars public
- Click refresh button: Use the manual refresh button (β»)
- Check filters: Make sure "Show All-Day Events" is enabled if needed
- Wait for auto-refresh: Or reload the plugin
Can't add calendar
- Check URL format: Must start with
webcal://orhttps:// - Verify URL is accessible: Try opening the URL in a browser
- Check permissions: Make sure calendar is shared/public
- Try different format: Some services provide multiple URL formats
Events not updating
- Click refresh button: Use the manual refresh (β») next to "Events for..."
- Check refresh interval: Set to shorter interval in settings (1 min)
- Reload plugin: Disable and re-enable in Community Plugins
- Check internet: Plugin needs internet to fetch calendar data
Performance issues
- Disable unused calendars: Toggle off calendars you don't need
- Increase refresh interval: Set to 20 minutes instead of 1
- Remove large calendars: Some calendars have thousands of events
Development
Building
npm install # Install dependencies
npm run dev # Watch mode for development
npm run build # Production build
Code Style
- TypeScript with strict mode
- ESLint for linting
- Obsidian API best practices
Roadmap
- Week view option
- Event search functionality
- Custom event colors per calendar
- Event filtering by keywords
- Export events to notes
- Offline caching
- Multi-day event spanning
Contributing
Contributions are welcome! Please feel free to submit issues or pull requests.
License
MIT License - See LICENSE file for details
Credits
- Author: Rey Ian Cabanganan
- GitHub: @iancubus
- Inspired by: Liam Cain's Calendar Plugin
- Built with: Obsidian API, node-ical, moment.js
Support
If you find this plugin helpful, please consider:
- β Starring the repository
- π Reporting bugs
- π‘ Suggesting features
- π Improving documentation
Made with β€οΈ for the Obsidian community
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.