DEV Community

Cover image for I built a free Outlook add-in to fix the Todo bar's biggest limitation
Alex May
Alex May

Posted on

I built a free Outlook add-in to fix the Todo bar's biggest limitation

If you use Classic Outlook on Windows and rely on the Todo bar to keep an eye on your calendar, you've probably noticed it only shows appointments from one calendar. If you have multiple accounts — work, personal, shared calendars — they're invisible.
This has been a known limitation for years. Every forum thread about it ends with "not possible" or "vote on UserVoice." There's one paid third-party add-in that solves it, but nothing free.
So I built one.
What it does
It's a VSTO C# add-in that replaces the built-in Todo bar with a custom task pane showing:

Appointments from every calendar across all your Outlook accounts, colour-coded by calendar, for the next 7 days
Tasks and flagged emails grouped into Overdue / Today / Upcoming / No Date
Single-click to open any item for editing
A + button in the header to create a new task
A ribbon button to show/hide the pane
Auto-refresh every 15 minutes, plus refresh when items are saved or closed

How it works
VSTO (Visual Studio Tools for Office) lets you build COM add-ins for Classic Outlook in C#. A CustomTaskPane docks a WinForms UserControl on the right side of the Outlook window — visually replacing the native Todo bar.
The key to reading all calendars is iterating Application.Session.Stores rather than just the default folder:
csharpforeach (Outlook.Store store in _app.Session.Stores)
{
var calFolders = GetCalendarFolders(store.GetRootFolder());
// ...
}
This picks up every calendar across every account configured in Outlook.
For tasks and flagged emails, olFolderToDo returns exactly what the native Todo bar shows — tasks and flagged mail combined — so the data source mirrors Outlook's own behaviour.
The tricky bits
COM object releasing — Outlook's interop objects must be explicitly released with Marshal.ReleaseComObject or you'll exhaust Outlook's shared resources. Every AppointmentItem, Items collection and folder needs a finally block.
Threading — Outlook's COM objects are STA and must be accessed from the UI thread. Background threading for data fetching doesn't work. The refresh is synchronous but fast enough with a 7-day window and proper COM releasing.
Refresh triggers — hooking SelectionChange or NewInspector too aggressively causes noticeable delays. The solution is to only attach close handlers to appointments, tasks, and flagged emails — not regular emails.
DPI scaling — fixed pixel heights for cards clip text at non-standard DPI settings. The fix is to use Graphics.MeasureString("Wg", font) to measure actual rendered line height rather than hardcoding pixel values.
Installation
It requires Visual Studio 2022 Community (free) with the Office/SharePoint development workload. Build and run with F5 — VSTO registers it automatically. The README has step-by-step instructions.
GitHub: https://github.com/galexmay/Outlook-Todo-Plus-Multiple-Calendar-Pane
Happy to answer questions or take PRs if anyone wants to extend it.

Top comments (0)