Hey Logseq community! I’ve built a plugin that reads from your local Outlook file to add events from your calendar as blocks. Being in an enterprise environment, I can’t just use the Microsoft Graph API or ICAL subscriptions. Also I wanted to be able to control exactly where and how the blocks where added.
I’m a data engineer and not an app developer. So, this is the first time I’ve developed something like this. I haven’t submitted it to the app store yet as I think there is some opportunity for refactoring and feature additions with feedback from the community.
Because I have it reading from the local Outlook COM, I went the route of building a Flask API in the backend that accesses the COM and exposes the events through a REST API endpoint on the localhost. This does involve the user ensuring the API service is running to use the plugin, but I have also provided a script in the repo for automatically starting the service at login. Below is the tl:dr about the plugin, but the full details can be read in the ReadMe in the repo. I look forward to your feedback.
What it does
The plugin fetches calendar events from your local Windows Outlook file and inserts them directly into your daily journal pages using a simple /Get Events slash command.
Key Features
One-command import - Type /Get Events on any journal page to pull in that day’s calendar
Custom formatting - Events appear in chronological order and formatted the way you design in the configuration settings
Meeting links - Automatically extracts and formats Teams/Zoom/Meet links as clickable buttons
Recurring events - Identifies recurring meetings with emoji indicators
Flexible settings - Configure time format (12/24hr), meeting URL detection, bracket linking, etc.
Example Output
Weekly Team Standup 🔃 [Join Meeting](https://teams.microsoft.com/l/meetup-join/...)
event-time:: 9:00 AM
event-duration:: 00:30:00
attendees:: [Homer Simpson], [Diana Prince]
How it works
Logseq plugin (JavaScript) handles the UI and formatting
Local API service (Python) reads from Outlook’s COM interface
No cloud dependencies - everything stays on your machine
Optional automation - Can auto-start the API service on login
Current status
Working great on Windows with Outlook desktop. Looking for feedback on:
Feature requests, Ideas for enhanced formatting or data extraction
Interest from Mac users (would require different calendar integration in the API)
Thanks for the great suggestions! I’ve logged them as issues in the repo and I think I can incorporate most pretty easily. I’ll have to research the dynamic generation on page creation though.
Can you say more about the processing patterns as block tags? How would you see this working? A list of words or phrases that would automatically get square brackets?
@etc , Wanted to let you know that I updated the plugin to resolve a couple of your suggestions:
include date & time: I added the ability to configure the datetime to whatever custom format you prefer
double-brackets for attendees: there is now a configuration to include double brackets for attendees
Regarding the default labels, there was already the ability to change the labels to whatever you like using the Output Format Template. Unless I’m misunderstanding your suggestion?
I wanted to follow-up about your data extraction idea. I think there is a function available in Logseq for getting a list of all current pages. Would adding a configuration to auto-add brackets for any words that match existing pages meet what you’re trying to achieve?
Thanks for the update! I’m sorry I missed your previous message.
Really cool. Thank you for considering the suggestions and even implementing a few!
I was thinking the title of an event could be parsed so that any words following a determined pattern became tags in the output to Logseq.
Personally, I am partial to single brackets in event titles and email subjects.
e.g., “Interview w. John Doe [Recruitment] [Operations] [Pos-3876]”
In the output to Logseq, this could become “Interview w. John Doe #Recruitment #Operations #Pos-3876”
The thought is similar to formatting attendee names with double-brackets. To be able to group related events in the tag page or with queries recover all applicable blocks, events and entries.