README file from
GithubDaily Work Log
An Obsidian plugin that visualizes daily time tracking (Events) and To-Do lists directly from your daily markdown notes — no YAML frontmatter required.
Features
- Grid timeline: a 10-minute-cell grid in the sidebar — drag across cells to log a new time block, click an existing block to edit it.
- Categories: color-coded categories (5 built-in — Work/Study/Rest/Reading/Exercise — plus up to 10 custom), stored as a
[Category]tag right in the note body. - Collapsible To-Do panel: docked at the bottom of the sidebar, with inline add/check/delete.
- PDF / HTML export: turn any day into a standalone, printable HTML file.
- Configurable daily note folder: notes don't have to live at the vault root, with folder autocomplete in settings.
- Minimal metadata: everything is read from three plain markdown headings — no frontmatter needed.
- Multi-language, backward-compatible markers: notes use
Event/ToDo/Diary(or Korean이벤트/할일/다이어리) headings; the legacy underscore-prefixed spelling (_Eventetc.) from older notes is still recognized so nothing breaks. - Automatic UI language detection: picked up from Obsidian's own language on first run, overridable in settings.
- Two independent themes: a Light/Dark toggle just for the sidebar (separate from Obsidian's own theme, popups always follow the system theme), and Work Insights that follows Obsidian's theme automatically.
- Work Insights: a vault summary — total notes in configured folder, current streak, time window filtering (7d/30d/90d/All), To-Do completion rate, total event time and daily average, category time breakdown visualization (Multi-Segment Progress Bar), and recent note activity history.
Daily Note Format
Daily notes must be named YYYY-MM-DD.md. A new note created through the plugin looks like this:
# Event
- 9:00 - 10:30 [Work] Team meeting
# ToDo
- [x] Submit weekly report
- [ ] Review pull requests
# Diary
Free-form notes go here — not parsed or shown in the sidebar.
- The
[Category]tag right after the time range is optional —- 9:00 - 10:30 Team meeting(no category) still works. - Blocks can appear in any order.
- Notes written before this format existed (
# _Eventetc., with a leading underscore) keep working — the plugin recognizes both spellings.
Installation
This plugin isn't published on the Community Plugins browser yet. To install manually:
- Download
main.js,manifest.json, andstyles.cssfrom a release (or build them yourself — see below). - Copy the three files into
<your vault>/.obsidian/plugins/daily-work-log/. - In Obsidian, go to Settings → Community plugins, turn off Restricted mode if needed, and enable Daily Work Log.
Building from source
npm install
npm run build # outputs dist/main.js, dist/manifest.json, dist/styles.css
For active development, use npm run dev instead — it rebuilds automatically on every change (esbuild watch mode).
[!TIP]
Switching from DayTime Tracker? That plugin stores its data as
timeline-logs/timeline-todosYAML frontmatter properties instead of plain body text.scripts/migrate-from-daytimetracker.mjsconverts your existing daily notes to this plugin's format.This script is only in the source repository, not in the release download (the release only contains
main.js/manifest.json/styles.css) — you'll need to clone this repo and runnpm installfirst:git clone https://github.com/seongchan/DailyWorkLog.git cd DailyWorkLog npm install node scripts/migrate-from-daytimetracker.mjs <path-to-your-vault> # dry run — writes nothing, just previews node scripts/migrate-from-daytimetracker.mjs <path-to-your-vault> --write # actually rewrite the filesAlways run the dry run first and back up your vault before using
--write— this rewrites daily notes in place and there's no undo. See the comment at the top of the script for exactly what does and doesn't get migrated.
Usage
From the sidebar
- Work Insights: click the ribbon icon (gauge), or run "Open Work Insights" from the Command Palette. Opens as a normal tab in the main workspace.
- Sidebar: click the ribbon icon (calendar-clock), or run "Open sidebar" from the Command Palette (
Cmd/Ctrl+P). You can assign either a hotkey in Settings → Hotkeys. - Drag across the grid to log a new time block; click an existing block to edit or delete it.
- Use the Today button in the sidebar header to open (or create) today's note; Print exports the current day as a printable HTML file.
Directly in the note
You don't need the sidebar at all — the sidebar is just a UI on top of plain markdown, so typing directly into the note body works exactly the same way. Under each heading, add lines in this format:
# Event
- 9:00 - 10:30 [Work] Team meeting
- 14:00 - 14:30 Quick call with no category
# ToDo
- [ ] Something to do
- [x] Something already done
- HH:mm - HH:mm [Category] descriptionfor an Event. The[Category]part is optional; the category name must match one of the names configured in Settings → Category Management to pick up its color (an unrecognized or missing category just shows as uncategorized).- [ ] text/- [x] textfor a To-Do, same as a normal Obsidian checkbox.- Save the file (or just keep typing — Obsidian autosaves) and the sidebar/Work Insights pick up the change automatically.
Multi-line notes
Any line right after an Event or To-Do line that doesn't itself look like a new Event/To-Do/heading line is treated as a continuation of the one above it — handy for jotting extra detail without cluttering the single description line:
# Event
- 9:00 - 10:30 [Work] Team meeting
Discussed Q3 roadmap and confirmed next steps with design.
Follow-up scheduled for next week.
# ToDo
- [ ] Ship the release
Rollback plan is documented in the runbook.
- For Events, the sidebar already supports this — press Enter in the description field of the add/edit popup and the extra lines are saved and shown right there when you reopen it.
- For To-Dos, the sidebar's quick-add field is single-line only for now, but the note format supports it — add the extra line(s) by editing the note directly, right after the
- [ ]/- [x]line. They're preserved (and can be deleted together with the to-do) even though the sidebar doesn't show or edit them yet. - A continuation line can't itself start like a new time range (
09:00 - 10:00 ...) or a checkbox (- [ ] ...) — it would otherwise be misread as a separate new item the next time the note is parsed. The sidebar blocks saving a description that would do this; if you're editing the note directly, just avoid starting a note line that way. - A single blank line stays part of the item as a paragraph break, but two or more blank lines in a row end it right there — the rest is left in the file untouched, just no longer part of that item, so it stops showing in the sidebar and won't be affected by editing that item. Saving from the sidebar automatically collapses 3+ blank lines down to 1.
A note on HTML tags
When viewing Event/To-Do content in the sidebar, HTML tags are stripped out. This uses simple tag-pattern matching (<...>), so writing a literal inequality comparison in a description (e.g. 3 < 5, 10 > 2) can be misread as a tag and disappear from the sidebar/export. If you need </> as literal text, use the HTML entities </> instead.
Settings
- Day Start Hour / Day End Hour: the hour range shown on the grid.
- Daily Note Folder: where new daily notes are created (vault root by default), with folder autocomplete.
- Language: auto-detected from Obsidian's own UI language on first run. Controls the marker labels inserted into new notes and all sidebar/settings text — existing notes in either language keep parsing correctly regardless of this setting.
- Background Theme Mode: Light or Dark, for the sidebar only.
- Category Management: add, rename, recolor, or delete categories, or reset to the defaults.
Development
npm test # run the Vitest unit test suite
npm run build # type-check (tsc) + production build
Changelog
0.4.3 (2026-08-15)
- Fixed the sidebar view (Events, To-Dos) to strip HTML tags from content when displaying it.
0.4.2 (2026-08-14)
- Fixed a multi-line Event description bug: typing multiple lines (pressing Enter) into an Event's description saved correctly to the file, but reopening that event in the sidebar showed only the first line — the rest looked lost even though it was still sitting in the file. Multi-line content is now preserved and shown in full when reopened.
- Added continuation-line ("note") support: any line right after an Event or To-Do line that doesn't itself look like a new item is now recognized as a note attached to the one above it (see "Multi-line notes" above for details). Events support this directly in the sidebar; To-Dos don't have a dedicated input UI for it yet, but notes written directly into the file are recognized and preserved.
- Saving a note that would collide with a real Event/To-Do shape is now blocked with a clear message, and runs of 3+ blank lines are automatically trimmed to one (see "Multi-line notes" above for the full rules).
0.4.1 (2026-08-08)
- Narrowed Work Insights folder scan: when collecting notes for statistics, the scan is now limited to the configured
dailyNoteFolder(including subfolders) instead of walking the entire vault. Improves performance in large vaults with a narrow folder set. Falls back to a vault-wide scan when no folder is configured (the fresh-install default). - Removed unused dependency: dropped the
js-yamlpackage, which was never actually imported anywhere in the codebase.
0.4.0 (2026-08-07)
- Redesigned Work Insights view:
- Overhauled the summary view into a refined UI.
- Configurable Folder Filtering (
dailyNoteFolder): collects notes strictly from the folder specified in settings, rather than the entire vault. - Time Window Filter: filter statistics by Last 7 Days, 30 Days, 90 Days, or All Time in real-time.
- Category Time Breakdown: visual multi-segment progress bar and legend grid reflecting configured category colors.
- Recent Note Activities: card-based history list displaying per-note To-Do progress, top category badge, and recorded event time (click to open note).
- Renamed: updated the view name from 'Dashboard' to 'Work Insights' for better clarity.
0.3.1 (2026-08-07)
- Added a DayTime Tracker migration script:
scripts/migrate-from-daytimetracker.mjs— converts existing daily notes written by DayTime Tracker (stored intimeline-logs/timeline-todosfrontmatter properties) into this plugin's body-text format. Not included in the release download — you need to clone the source repository to use it (see the tip under "Installation" above).
0.3.0 (2026-08-05)
- Sidebar rebuilt as a 10-minute grid timeline (drag to select a time range), replacing the old list-and-calendar layout. Calendar date navigation has been removed — use Obsidian's own file explorer or quick switcher to jump to another day's note.
- Added color-coded categories (5 built-in + up to 10 custom), stored as an optional
[Category]tag in each Event line. - Simplified the block markers to
Event/ToDo/Diary(dropping the leading underscore, which rendered as italics in some viewers). Notes written with the old_Event/_ToDo/_Diarymarkers keep working. - Added PDF/HTML export for a single day's timeline and To-Do list.
- Added a configurable daily note folder (with autocomplete), instead of always using the vault root.
- Added automatic UI language detection on first run.
- Expanded the settings screen: hour range, daily note folder, language, sidebar theme, and full category management.
License
MIT