Momentum
pendingby kryticyz
Snapshot active projects into daily/weekly notes and track time logs.
Momentum (Obsidian Plugin)
MVP plugin for:
- Snapshotting active projects into daily and weekly notes.
- Tracking project time with start/stop timer commands.
- Exporting time data to JSONL for external dashboards.
Active Project Rules
A note is treated as an active project when frontmatter includes:
tags:
- project
status: active
end: YYYY-MM-DD
Optional subproject relationship:
up: [[Parent Project Name]]
Supported Note Names
- Daily note:
YYYY-MM-DD.md - Weekly note:
Weekly Note YYYY-MM-DD.md(Sunday week start)
Inserted Sections
## Active Projects## Time Logs
If the headings already exist, the plugin regenerates managed content in those sections. Time log entries are preserved during regeneration.
Time Log Line Format
- 09:10-09:45 [[Project A]] (35m) "what was done"
This same format is used for timer-generated entries and manual entries.
Commands
Momentum: Start project timerMomentum: Start project timer in the pastMomentum: Adjust active timer start timeMomentum: Stop project timer and log entryMomentum: Open timer side panelMomentum: Debug timer project scanMomentum: Debug timer stateMomentum: Regenerate project snapshot in current noteMomentum: Export time entries to JSONL
Backdated start accepts either duration input (45, 90m, 1h30m) or exact local time (09:40, 9:40am).
The plugin shows a confirmation summary before applying a parsed backdated/adjusted start.
## Time Logs includes a rendered button control block in reading mode.
The plugin also shows a clickable timer in the status bar.
Settings
- Due date field (default:
end) - Timezone (default:
Australia/Sydney) - Daily note folder (default: vault root)
- Export path (default:
.obsidian/momentum/time-entries.jsonl) - Export target (
JSONL fileorBackend refresh URL) - Backend refresh URL (default:
http://localhost:8080, usesPOST /refresh) - Auto insert snapshots on note creation
- Note-create hook delay (for templater timing)
Network Behavior
- Default mode (
JSONL file) is fully local and does not make network requests. Backend refresh URLmode sends a singlePOST /refreshrequest to the configured URL after export.- The plugin does not send analytics or telemetry.
Repository Layout
- Plugin source:
src/ - Release artifacts:
release/momentum/ - Tests:
test/ - Plugin stylesheet:
styles.css
Development
bun run build
bun test
Build output is written to:
release/momentum/main.jsrelease/momentum/manifest.jsonrelease/momentum/styles.css
Optional for type tooling:
bun install
Maintainer Local Install (Obsidian Desktop)
- Build the plugin output:
bun run build
- Link this output into your local vault plugins folder:
bun run install:link -- "/absolute/path/to/your/vault"
This creates/updates:
<vault>/.obsidian/plugins/momentum->release/momentum
Optional (env var form):
OBSIDIAN_VAULT_PATH="/absolute/path/to/your/vault" bun run install:link
- Load in Obsidian:
- Open the target vault.
- Go to
Settings->Community plugins. - Disable
Restricted modeif enabled. - Click
Reload plugins. - Enable
Momentum.
Maintainer Dev Loop
Use watch mode during development:
bun run dev
Then in Obsidian:
- Use
Reload pluginsafter changes. - If you update
manifest.jsonorstyles.css, runbun run buildonce to recopy those files torelease/momentum.
For plugin developers
Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.