README file from
GithubMeeting Note Importer
An Obsidian plugin that creates structured meeting notes from calendar invites — drop a .ics file, drag a meeting directly from Outlook, or enter meeting details manually.
Features
- Drag and drop a
.icsfile from Finder, Explorer, or any file manager - Drag a meeting directly from Outlook for Mac — no file export needed
- Click to browse for a
.icsfile via the file picker - Quick/manual entry — create a note by typing a title and picking a date and time, no file needed
- Populates title, date, attendees, organizer, location, meeting URL, and description automatically
- Skips duplicate notes — if a note for that meeting already exists it is returned without overwriting
- Supports a custom Obsidian template with
{{date}}and{{title}}placeholders - Configurable note name template with
{{date}},{{title}},{{startTime}},{{endTime}}, and{{organizer}}placeholders - Override current note — when a file is open, optionally write the meeting content into that file instead of creating a new one; a secondary toggle also renames the file to match the meeting
- Configurable target folder and heading names for attendees and notes sections
- Localised UI in English, French, and Spanish — automatically follows Obsidian's language setting
Note: This plugin is designed for desktop use. Drag-and-drop and direct Outlook integration rely on desktop APIs. Mobile behaviour is untested.
Usage
From a calendar file
Click the calendar icon in the ribbon, or run the command Create meeting note from file, then:
- Drag a
.icsfile into the drop zone, or - Drag a meeting event directly from Outlook for Mac, or
- Click the drop zone to browse for a
.icsfile
Quick/manual entry
Run the command New quick meeting note (or assign it a hotkey in Settings → Hotkeys) to open the modal directly on the Quick/Manual Entry tab. Enter a title, adjust the date and times if needed, and press Create (or hit Enter in the title field).
- Date defaults to today
- Start time defaults to the current time rounded to the nearest time increment
- End time defaults to start + one increment
The plugin creates a note in the configured folder and opens it immediately.
Default note structure
---
title: "2024-06-15 - Team Sync"
date: "2024-06-15"
tags:
- meeting
---
# 2024-06-15 - Team Sync
## Attendees
- Jane Smith (Organizer)
- John Doe
## Notes
> https://teams.microsoft.com/meet/...
## Summary
## Action Items
- [ ]
Settings
| Setting | Default | Description |
|---|---|---|
| Show ribbon icon | On | Show the calendar icon in the ribbon bar. Change takes effect after reloading Obsidian. |
| Save in active folder | On | Save the note in the folder of the currently open file |
| Fallback notes folder | (vault root) | Folder used when active-folder is off, or no file is open |
| Template file | (built-in) | Path to a custom Obsidian template |
| Note name template | {{date}} - {{title}} |
Filename template — supports {{date}}, {{title}}, {{startTime}}, {{endTime}}, {{organizer}} |
| Attendees heading | ## Attendees |
Heading under which attendees are injected |
| Notes heading | ## Invite Notes |
Heading under which the meeting URL and description are injected |
| Open note after creation | On | Automatically open the note after it is created |
| Rename note by default when overriding | Off | Pre-enable the rename toggle when the override toggle is turned on |
| Time increment | 30 min | Step size used for quick-entry time defaults and start-time rounding (15, 30, or 60 min) |
Localisation
The plugin UI is available in English (default), French, and Spanish. The language is detected automatically from Obsidian's language setting (via the built-in moment.js locale).
To add a new language:
- Copy
src/ts/i18n/en.jsontosrc/ts/i18n/<code>.json(e.g.de.json) - Translate all values — keys must stay identical to
en.json - Import and register it in
src/ts/i18n.ts:import de from "./i18n/de.json"; const locales = { en, fr, es, de }; - Rebuild with
npm run build
Installation
Manual
- Download
main.js,manifest.json, andstyles.cssfrom the latest release - Copy them into your vault at
.obsidian/plugins/meeting-note-importer/ - Enable the plugin in Settings → Community plugins
Development
# Install dependencies
npm install
# Copy .env.example and set your vault plugin path
cp .env.example .env
# Development build (with sourcemaps)
npm run dev
# Production build
npm run build
# Copy dist/ to your local vault (reads OBSIDIAN_PLUGIN_DIR from .env)
npm run deploy
# Development build + deploy in one step
npm run dev:deploy
# Remove dist/
npm run clean
Testing
# Run all unit tests
npm test
# Integration test — parse a real .ics file and print the generated note
TEST_ICS_FILE=/path/to/invite.ics npm test
# Integration test — parse Outlook meeting text saved to a file
TEST_OUTLOOK_FILE=/path/to/invite.txt npm test
The integration tests are skipped automatically when the env vars are not set, so npm test always works without any fixtures.
To get a .ics file from Outlook for Mac: right-click a calendar event → Export…, or drag the event from Calendar.app to Finder.
Releases
-
Prepare the version bump — choose
patch,minor, ormajor:npm run release:prepare patchThis updates
package.jsonandmanifest.json. Commit the result:git add package.json manifest.json git commit -m "chore: bump version to X.Y.Z"Or do both in one step with the
--commitflag:npm run release:prepare -- patch --commit -
Publish — pushes the branch, tags the commit, and pushes the tag:
npm run releaseGitHub Actions picks up the tag, builds the plugin, runs tests, and creates a release containing
main.js,manifest.json, andstyles.cssas flat assets ready for manual installation.