Power Plugins419 downloadsBring Microsoft 365, Google, CalDAV, and ICS calendars into Obsidian in month, week, day, and agenda views, with a mail triage inbox and a note per event.
Your calendars and your mail, inside Obsidian. Connect Microsoft 365 (several accounts at once), Google Calendar, CalDAV (iCloud, Fastmail, Nextcloud), and ICS feeds, then see them in month, week, day, or agenda views with a mail inbox beside them and a note for every event.

Microsoft 365 and Google events are fully editable: drag across empty space to create one, drag it to move it, edit or delete it from its card. CalDAV and ICS stay read-only.
Formerly Power Calendar. Settings migrate automatically, and the old power-calendar code block keeps working forever, so existing daily-note templates are untouched.
Month is a classic grid, with all-day events as banners and a crowded day collapsing to "+N more". Week, Work week, and Day give you a timed grid with overlapping events side by side and a red line that knows what time it is. Agenda is the next few days as a readable list with join buttons.
Click any event for its card: time, location, organizer, attendees, description, RSVP buttons, and the actions. The card can be dragged and resized, and it remembers where you put it.
C.Find events searches words anywhere in an event, including its description, plus organizer, attendee, location, and date range. Results appear in the window rather than replacing the calendar, because "when did I meet Deanna about Kore" is usually a question you read the answer to.
Also here: a mini month navigator behind the title, an optional second time zone beside the hours, and Copy free slots, which reads your next five workdays and puts your open times on the clipboard as text you can paste into an email.
Print offers the two shapes a calendar has on paper: an agenda list, or the month grid in landscape. A timed week grid on paper turns an hour into a few millimetres, so the list is the default everywhere except month view.
Calendar and mail share the same accounts, so Power Desk carries a full inbox: every mail-enabled Microsoft account in one list, a reading pane, and compose.
Two bridges make mail belong in a vault:
Reply, forward, archive, delete, flag, categorize, and move, all writing back to the real mailbox so Outlook sees them too.
Typing runs against a local index of the mail already on this device and narrows on every keystroke, with no network at all. Pressing Enter runs the same words against the whole mailbox. The title says which you are looking at ("14 here" against "14 in the mailbox"), because those are different claims.
The search box speaks a small query language: bare words, from:name, subject:word, is:unread, is:flagged, has:attachment, after:2026-01-31, and "an exact phrase". An advanced search window builds the same query from fields and shows you what it built.
Each opens from the palette or either toolbar, and each remembers its own size and position.
The mail list is keyboard-first: J/K walk messages, ↵ opens, R replies, A replies all, F forwards, C composes, E archives, S flags, B snoozes, V files, Del deletes, / searches, and ? shows the whole card. Nothing fires while the caret is in a field.
Ctrl/Cmd+K opens a command palette covering every folder and every action that applies right now, so you never have to know whether what you want is a place or a verb.
With the calendar focused: T for today, M W D A for the views, 5 for the work week, arrows to page, C for a new event, / to find one, R to refresh.
The calendar and the mail view each have a toolbar you configure from the gear at its end: pick the buttons, drop the ones you never use, and drag them into order. Mail ships in Outlook's own order, which is what your hands already know, and anything left off keeps its keyboard shortcut and its palette entry, so a short toolbar gives up nothing.
The panel button folds the whole left sidebar away for these two tabs only. Step onto a note and it comes back. Nothing else ever moves your layout.
Put a code block in a note and the day's events render right there:
```power-desk
```
With no options it reads the day from the note's own filename, so a daily note named 2026-07-18 Saturday shows that Saturday. Add date: to pin a day or days: 3 to widen the span. Drop it into your daily-note template once and every day has its agenda.
Every event can carry a note, written with queryable frontmatter and the attendees as links. Events whose note already exists show a small dot.
Attendee names on an event card are links to that person's page, created on first visit. With Power Assistant installed it uses the same People folder, so meetings and meeting notes connect to the same person.
Create events base drops a ready-made table over your event notes, using Power Bases when it is there.
Settings has a tab per source, each with its own Add account button. Several accounts of the same kind can be signed in side by side, and each calendar gets its own toggle and color.
Uses your own free Azure app registration, so your password never touches Obsidian. Press Show the steps in settings for a walkthrough with the exact value for every field. In short:
You consent to the permissions at first sign-in. Sign-in uses a device code, so it works on phones and tablets too.
If Power Assistant is already connected to Microsoft 365, Power Desk borrows its registration and those three steps disappear.
Mail needs a one-time Reconnect to grant its permissions. Sender photos, saved contacts, and To Do each sit behind their own permission, so you only grant what you use.
Google requires your own free Google Cloud project, because their terms forbid shipping shared credentials in an open-source plugin. About five minutes, once:
Sign-in runs on desktop; after that the connection syncs to your phone with the vault.
The source no other calendar can have: your own notes. Point it at a folder and a date property, and every matching note becomes an event beside your real calendars. Drag one and its frontmatter is rewritten, which makes deadlines reschedulable from the calendar. Entirely local, and updates appear as you edit.
iCloud, Fastmail, Nextcloud, Radicale, and anything else speaking CalDAV. iCloud and Fastmail need an app-specific password rather than your normal one. ICS feeds are read-only subscriptions: paste the URL and name it.
This plugin talks to the network only for the calendars you configure.
login.microsoftonline.com and graph.microsoft.com for Microsoft 365, only after you connect an account.accounts.google.com, oauth2.googleapis.com, and www.googleapis.com for Google, only after you connect one through your own project.open-meteo.com for the optional weather strip, and only once you set a location for it. Leave it empty and neither host is ever called.Calendars, inboxes, and folder trees are cached beside the plugin so both views paint instantly on launch and refresh in the background. That file holds data only, never tokens, and can be deleted freely. Mail syncs by delta, so a check that finds nothing is one small request per account, and only what you are looking at is polled.
The community catalog scans a plugin for what it is capable of, which is not the same as what it does with it. Power Desk reports three things.
| What the scan reports | What it is | Where |
|---|---|---|
| Vault enumeration | Listing your notes, in two places: gathering events from a vault folder you nominated as a calendar source, and offering files in the attachment picker. Only the notes under a folder you chose are read. | src/main.ts vaultEvents, the attachment picker |
| Clipboard access | Writing, never reading. Eight places, each a button or a row you clicked: a message's text, an attachment's name, the day's agenda, a person's address, the two sign-in device codes, and two setup values. Nothing reads your clipboard anywhere in this plugin. | src/main.ts, the copy buttons |
| Local network listener | Google sign-in only. OAuth for a desktop app returns its result to a loopback address, so a server binds to 127.0.0.1 on an ephemeral port, catches the one redirect, and closes. Bound to loopback rather than every interface, so nothing outside your machine can reach it, and a timer closes it either way. Microsoft sign-in uses a device code and needs no listener. |
src/google.ts |
Mail is HTML written by whoever sent it, which is the one place this plugin handles content it did not author. Every message body goes through Obsidian's own sanitizeHTMLToDom before it reaches the page, in the reading pane, the print view, and the quoted original of a reply. That matters more than it looks: assigning HTML would not run a <script> tag, but it would run an inline handler like <img onerror=...>, and the sanitizer is what removes those.
There is no eval, no Function constructor, and no code fetched and run at runtime. Every network call goes through Obsidian's requestUrl; there is no fetch in the built main.js at all. No processes are started.
No telemetry of any kind exists. The only calendar writes are the ones you make yourself. Sign-in tokens and CalDAV credentials live in this plugin's data.json inside your vault, so if you sync your vault, they sync with it.
Each one works on its own, and they fit together when you have more than one.
Power Desk stands alone and has no required companions. When a sibling is present it borrows quietly and works the same either way.
MIT
Power Desk is built and maintained by one person. If it earns a place in your daily vault, you can buy me a coffee. Nothing in the plugin is held back either way.