Insert Google Calendar events as static text into your Obsidian notes. Perfect for daily notes and journaling.
Unlike other calendar plugins that create dynamic embeds, Google Calendar Static inserts events as editable markdown text. This means:
- ✅ Static content - Events become permanent text in your notes
- ✏️ Fully editable - Modify, reorganize, or annotate events after insertion
- 🚀 Fast - No dynamic loading or rendering delays
- 📝 Perfect for journaling - Capture what you did, then add reflections
- 📅 Insert Today's Events - Quick command to add today's calendar
- 🗓️ Insert Events for Any Date - Choose a specific date with date picker
- 📆 Insert This Week's Events - Get all events for the current week (Monday-Sunday)
- 📊 Insert This Month's Events - Get all events for the current month
- 🤖 Auto-insert in Daily Notes - Automatically add events when opening daily notes
- ⚙️ Customizable Formatting - Control time format (12h/24h), include/exclude locations and descriptions
- 🔐 Secure OAuth - Direct authentication with Google (no third-party services)
- Open Settings → Community Plugins
- Disable Safe Mode
- Browse plugins and search for "Google Calendar Static"
- Install and enable the plugin
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Create folder:
VaultFolder/.obsidian/plugins/google-calendar-static/ - Copy files into the folder
- Reload Obsidian and enable the plugin
- Go to Google Cloud Console
- Create a new project (or select existing)
- Enable the Google Calendar API:
- Go to "APIs & Services" → "Library"
- Search for "Google Calendar API"
- Click "Enable"
- Go to "APIs & Services" → "OAuth consent screen"
- Choose "External" user type
- Fill in required fields:
- App name: "Obsidian Calendar" (or your choice)
- User support email: Your email
- Developer contact: Your email
- Add scope:
https://www.googleapis.com/auth/calendar.readonly - Add yourself as a test user
- Go to "APIs & Services" → "Credentials"
- Click "+ CREATE CREDENTIALS" → "OAuth client ID"
- Application type: "Web application"
- Name: "Obsidian Plugin"
- Add Authorized JavaScript origins:
http://localhost:8080
- Add Authorized redirect URIs:
http://localhost:8080/callback
- Click "CREATE"
- Copy your Client ID and Client Secret
- Open Obsidian Settings → Google Calendar Static
- Paste your Client ID
- Paste your Client Secret
- Click "Authenticate"
- Complete authentication in your browser
- Return to Obsidian - you're ready!
- Open any note
- Run command: "Insert today's calendar events" (Ctrl/Cmd+P)
- Events are inserted as text at your cursor
Example output:
## Calendar Events
- 09:00 - 10:00: Team standup (Zoom)
- 11:00 - 12:00: Client meeting - Acme Corp (Conference Room A)
- All day: Company holiday- Run command: "Insert calendar events for specific date"
- Choose date in the picker
- Events for that date are inserted
- Run command: "Insert this week's calendar events"
- All events for Monday-Sunday are inserted, grouped by day
Example output:
## This Week's Events
### Monday, January 6, 2026
- All day: Winter vacation (ongoing)
- 09:00 - 10:00: Team standup
- 14:00 - 15:00: Client review
### Tuesday, January 7, 2026
- 10:00 - 11:00: Planning session
- All day: Company eventNote: "Winter vacation (ongoing)" started before this week but extends into it.
- Run command: "Insert this month's calendar events"
- All events for the current month are inserted, grouped by day
- Go to Settings → Google Calendar Static
- Enable "Auto-insert in daily notes"
- Events are automatically added when you create new daily notes
- Works with filenames like
2026-01-02.mdor2026-01-02 - Title.md - Note: Only triggers for newly created notes, not when opening existing ones
- 12-hour (2:30 PM) or 24-hour (14:30)
- Show event location in parentheses
- Add event description below the event
- Show multi-day events that started before but extend into the requested period
- Example: A vacation from Dec 28 - Jan 5 will show on Jan 1 when viewing January events
- These events are marked with "(ongoing)" indicator
- Default: Enabled
- Automatically insert events when opening daily notes
- 🔒 OAuth 2.0 - Industry-standard secure authentication
- 🏠 Local storage - All tokens stored locally in Obsidian
- 👁️ Read-only access - Plugin only reads calendar events
- 🚫 No tracking - No analytics or data collection
- 🔌 Direct connection - Connects directly to Google (no middleman)
Make sure you added http://localhost:8080/callback to Authorized redirect URIs in Google Cloud Console. Port must be exactly 8080.
- Verify Client ID and Secret are correct (no extra spaces)
- Make sure you're logged in as a test user
- Check that Google Calendar API is enabled
- Try re-creating OAuth credentials
- Check that you have events in your Google Calendar for that date
- Verify you're authenticated (check settings)
- Try re-authenticating
- Check console for errors (Ctrl/Cmd+Shift+I)
Close any apps using port 8080, or restart your computer.
- Node.js v16 or later
- npm
# Clone the repository
git clone https://github.com/yourusername/google-calendar-static.git
cd google-calendar-static
# Install dependencies
npm install
# Development build (watch mode)
npm run dev
# Production build
npm run buildgoogle-calendar-static/
├── main.ts # Plugin entry point
├── settings.ts # Settings interface and UI
├── googleCalendar.ts # Google Calendar API wrapper
├── oauthServer.ts # OAuth 2.0 authentication
├── formatter.ts # Event formatting logic
├── dateModal.ts # Date picker modal
├── manifest.json # Plugin metadata
└── package.json # Dependencies
This plugin handles OAuth tokens and calendar data. Please review the Security Policy for important information about:
- Token storage and security
- Known limitations
- Best practices
- Reporting vulnerabilities
Contributions are welcome! Please read CONTRIBUTING.md for important information:
- I make no guarantees about fixing issues or accepting PRs
- Response times are not guaranteed
- Submit issues on GitHub for bugs and feature requests
- See CONTRIBUTING.md for guidelines
Quick steps:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to branch (
git push origin feature/amazing-feature) - Open a Pull Request
MIT License - see LICENSE file
- 🐛 Report bugs
- 💡 Request features
- ⭐ Star the repo if you find it useful!
Built with:
Made with ❤️ for the Obsidian community



