Momentum Life
approvedby Jaime Nagase
All-in-one life dashboard for habits, tasks, fitness, nutrition and studies, stored as plain Markdown notes in your vault. - This plugin has not been manually reviewed by Obsidian staff.
Momentum Life β Obsidian plugin
All-in-one life dashboard for Obsidian: Habits, Tasks, Fitness, Nutrition and Studies rendered directly from your vault's Markdown files. Everything is stored as plain Markdown under a single folder, so your data stays yours.
Why Momentum Life
- Reads/writes files locally via the Vault API β no GitHub token, no CORS workarounds.
- Frontmatter parsing handled by Obsidian's metadata cache.
- Cross-device sync handled by Obsidian Sync / iCloud / git.
- Renders with Obsidian's DOM API and theme variables (no remote code, no CDN).
- Optional network use only: the Nutrition food search (see Network use & privacy).
Modules
| Module | What it does |
|---|---|
| π― Habit Tracker | Overview dashboard: KPIs, progress rings, donut charts, habit heatmaps, study progress |
| β Tasks & Lists | Kanban (drag & drop, boards, priorities, columns) + list view |
| ποΈ Fitness | Workout plans, active workout w/ timer, calendar, weight progress, logging |
| π₯ Nutrition | Fixed meal plans, food logging, calorie calendar & trends, water, Open Food Facts search |
| π Studies | Kanban by topic (drag & drop, subtopics, URLs) + list view |
| π° Finances | Income/expense ledger, monthly summaries, category breakdown, recurring templates (monthly & weekly) |
All visualizations use inline SVG (no external libraries / CDN).
Install (dev)
npm installnpm run dev(watch) ornpm run build(production, one-off).- Copy/symlink this folder into your vault at
.obsidian/plugins/momentum-life/(must containmanifest.json,main.js,styles.css). - In Obsidian: Settings β Community plugins β enable "Momentum Life".
- Open via the command palette β "Momentum Life: Open" (panel in the left sidebar).
Network use & privacy
Momentum works offline by default. It only reaches the network in one optional case, and only when you actively use it:
- Nutrition food search β queries the
Open Food Facts public API
(
world.openfoodfacts.org) over HTTPS, sending only the search term you typed. No API key or account required.
No personal data, vault content, or telemetry is transmitted otherwise. If you do not use this feature, the plugin makes no network requests.
Data location
Set the Data root folder in plugin settings (default: Momentum Life).
Expected subfolders: Tasks/, Tasks/Lists/, Notes/, Fitness/Exercises,
Fitness/Workouts, Fitness/Months, Nutrition/Plan, Nutrition/Logs,
Nutrition/Months, Studies/, Habits/, Finance/Transactions/,
Finance/Months, Config/settings.md.
Readable notes & monthly hubs
Finance transactions, Nutrition logs and Fitness workouts are saved with human-readable filenames, and each month gets a hub note so the file list and Graph View stay legible. Frontmatter is still the source of truth β filenames and hub notes are derived, regenerable views, so renaming or regenerating them never changes your data or totals.
Readable per-item names. Each item is one Markdown file named from its own fields (invalid filename characters are sanitized, accents preserved):
| Item | Filename pattern | Example |
|---|---|---|
| π° Transaction | <category>-<note>-<amount>-<YYYY-MM-DD> | Groceries-Market-84.20-2026-06-30 |
| π₯ Meal log | <Meal>-<kcal>cal-<YYYY-MM-DD> | Lunch-620cal-2026-06-30 |
| ποΈ Workout | <Split>-<duration>min-<YYYY-MM-DD> | PushDay-45min-2026-06-30 |
The transaction note segment is dropped when empty, amounts always use two
decimals with a . separator (no income/expense marker in the name), and if two
items would share a name the plugin appends the smallest 2, 3, β¦ suffix β
never a random string.
Module-prefixed monthly hubs. Each module keeps one hub per month under its
own Months subfolder, named <Module> <YYYY-MM MonthName> so basenames never
collide across modules:
Finance/Months/Finance 2026-06 Juneβ Income, Expenses and Balance in your configured currency, plus a linked, date-sorted list of that month's transactions.Nutrition/Months/Nutrition 2026-06 Juneβ total calories, average per day, days logged, total protein/carbs, and the month's logs.Fitness/Months/Fitness 2026-06 Juneβ workout count, total minutes, a per-split breakdown, and the month's sessions.
Every item body gets a wikilink to its hub (for example [[Finance 2026-06 June]]),
and hubs are regenerated whenever you add or delete an item. A month with no
items has its hub removed automatically. There is no global cross-module hub.
Graph View tip. Because each item links to its <Module> <YYYY-MM MonthName>
hub, the Graph View naturally clusters your notes into one group per module per
month. Open the Graph View and the hubs become the center of each monthly
cluster β a quick visual timeline of your finances, nutrition and training.
Migrating an existing vault
If you already have legacy-named notes, run the command palette command
"Momentum: migrate notes to readable names". It renames Finance, Nutrition
and Fitness notes to the readable scheme, adds each hub wikilink at most once,
and regenerates the month hubs β for all three modules in one pass. The rename is
backlink-aware (existing wikilinks keep resolving) and body-preserving (manual
lines you added, such as Hub: [[Hub - Personal]], are kept). It is idempotent
and guarded, so running it again does nothing and reports zero renames. A
one-time guarded auto-run also fires the first time you open a vault on a new
schema version; the explicit command is always available to re-run it.
Backup, dry-run & rollback. Before migrating a large vault:
- Back up first β commit your vault to git or copy the data folder. This is the simplest full rollback.
- Dry-run preview β the migration supports a dry-run mode that computes the full report (renames, skips, hubs, warnings) without writing anything, so you can preview the impact before committing to it.
- Trash recovery β hub notes removed for empty months (and any file the migration replaces) go to Obsidian's trash, so you can restore them from Settings β Files & Links β recover deleted files.
Migration only touches filenames and hub notes; your transaction, meal and workout data lives in frontmatter and is never modified, so totals stay identical across renames.
Markdown schema
Each module reads and writes plain Markdown notes with YAML frontmatter. Examples:
# Tasks/<title>.md
task_id: "uuid"
title: "Close the deal"
status: "in progress" # one of the task columns
priority: "high"
kanban_name: "Side Projects"
group: "KCD 26"
type: "task"
# Tasks/boards.md
type: boards-config
boards:
- id: aws
name: AWS
emoji: βοΈ
# Notes/<title>.md
title: "Idea"
color: yellow
type: note
Project structure
src/main.tsβ plugin entry (view registration, command, settings).src/view.tsβ dashboardItemView(sidebar + page router).src/context.tsβ shared context (store + config + refresh).src/data.tsβ Vault data layer (read/write/list + per-module loaders).src/types.tsβ domain model + defaults.src/ui.tsβ reusable Modal/Notice helpers.src/modules/*.tsβ one renderer per page.styles.cssβ UI styles mapped to Obsidian theme variables.
Publishing to the community store
- Push to a public GitHub repo.
- Tag a release matching
manifest.jsonversion(novprefix), e.g.git tag 0.1.2 && git push origin 0.1.2. The GitHub Action attachesmain.js,manifest.jsonandstyles.cssto the release. - Submit the plugin at the Obsidian Community directory (sign in, link your GitHub account, then Plugins β New plugin).
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.