robusgun26 downloadsDrop emails in to sort them into categories and track activity. Stores references only, never email bodies or attachments.
Status: in development. This plugin is at an early stage (0.x) and is subject to change. Features, settings and the stored record format may change between versions. Export your records to CSV before updating.
Drop emails into Obsidian and they're sorted into your own categories and child categories by keyword, sender and domain filters. Anything that matches nothing goes to Uncategorized, where you can build a filter straight from the email. A dashboard shows activity over time, per category. Any category can be a task, whose status (Open / Waiting / Done) follows what its emails say.
The plugin stores only a short reference to each email, never its body or attachments, and can encrypt what it stores. It's desktop-only.
main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/email-task-tracker/, then enable the plugin under Settings → Community plugins.The plugin reads each email in memory only to sort it. It saves a small reference record:
| Saved | Never saved |
|---|---|
| Subject (can be turned off) | Body text or HTML |
| Sender address and domain | Recipients (To/Cc/Bcc) |
| Date, Message-ID | Attachments |
| Up to N single keywords (no numbers; configurable, 0 = none) | The original file |
| Categories, and the task status phrases found in the email (e.g. "resolved") |
Categories, filters and records live in .obsidian/plugins/email-task-tracker/records.json in the vault. Preferences such as dashboard layout live in data.json next to it. Nothing else is written, except a CSV file when you export, and a records.backup-….json copy if records.json is ever found damaged (see Security controls). To find the original email, use Copy search on a row (paste it into Outlook or Gmail search), or turn on Gmail links.
Settings → Encryption → Turn on encrypts records.json. Categories and filters are encrypted too, since they can contain sender addresses. Windows Explorer can still see and open the file, but its contents are unreadable ciphertext.
records.json turns up unencrypted or missing while encryption was on (for example, replaced by a sync conflict or an old backup), the plugin warns you instead of quietly saving plain text.The plugin works fully offline. It never connects to anything.
.eml/.msg files from that folder, and only that folder. With Delete files after import turned on (off by default), it permanently deletes each file there once the email is tracked..eml and .msg files dropped anywhere in Obsidian, including pop-out windows, are imported by this plugin instead of being saved into the vault. Other files are left alone.records.json syncs with them. Export to CSV writes subjects and senders to a file in the vault root.records.json. Export to CSV first if you want to keep them.npm run build scans the bundled main.js and fails if it finds fetch, XMLHttpRequest, WebSocket, requestUrl, workers, WebRTC, src assignments, remote CSS url()s, Node network modules, dynamic import() or unexpected URLs. This covers dependencies too.DOMParser document, so tracking pixels and remote images never load.records.json can't be read, or some entries are damaged, a records.backup-….json copy is kept and you're told, instead of the plugin failing to start..gitignore and a pre-commit hook (.githooks/pre-commit) block .eml, .msg, .csv, data.json and every records*.json file, including temporary and backup copies. Test fixtures are synthetic..msg), then drop that file in, or use the drop folder..eml file..eml/.msg files there are imported automatically, and can be deleted afterwards.Each category has a filter. Every section you fill in must match:
An email gets every category whose filter matches, so it can be in several at once.
Child categories can have several parents. For example, Unity can sit under both Gaming and Software. A matching email then counts under each parent.
Manage categories from the dashboard's category list (hover for edit / add / delete, right-click for more) or from Settings → Email Task Tracker. Use the pencil in the Categories column of the table to place an email by hand.
New imports are matched against the full email. Re-running filters on past emails can only use what was stored (subject, sender, keywords). Emails you assign by hand are never moved by re-runs.
Turn on Treat as a task for a category (marked with a clipboard icon). The category is the task, and its emails, including those in its child categories, are the task's activity.
Phrases are detected in the full email at import. Phrases added later are checked against past emails' stored subject and keywords.
Use Add chart, then each chart's ⋯ menu to pick a type, style, width and position. Every chart follows the dashboard filters: category, status, period and search.
Releases are built by GitHub Actions from the tagged source, with a signed build provenance attestation. To check that a downloaded main.js came from this repository:
gh attestation verify main.js -R chaxic/obsidian-email-task-tracker
npm install
git config core.hooksPath .githooks # once per clone: turns on the pre-commit hook
npm test # vitest: parsing, classification, tasks, encryption and recovery, validation, storage-minimisation checks
npm run build # type-check, bundle, network guard
OBSIDIAN_VAULT=/path/to/test/vault npm run deploy # build + copy into that vault
npm audit
After deploying, reload Obsidian (or toggle the plugin off and on) under Settings → Community plugins.
Security issues: see SECURITY.md.
MIT. Bundled third-party code is listed, with its licenses, in THIRD_PARTY_LICENSES.md.