remriel120 downloadsDiscover patterns in your daily writing. An Obsidian plugin for local writing analytics, word counts, goal streaks, word clouds, and topic and tone trends across your Daily Notes.
Discover patterns in your daily writing. Morning Pages Analytics is an Obsidian plugin that brings live writing stats, word clouds, goal streaks, and a writing-history dashboard to your vault.
Analyze the note you're writing, then explore how your writing changes across Daily Notes and additional journal folders. All analysis runs locally, with no account, API key, or external analysis service required.

Download the latest release · Report an issue · MIT License
Requires Obsidian 1.5.7 or later. Node.js is only needed for development.
morning-pages-analytics-<version>.zip.morning-pages-analytics folder into your vault's .obsidian/plugins/ directory.For manual installation, download main.js, manifest.json, and styles.css from the same release and place all three in .obsidian/plugins/morning-pages-analytics/.
Open a note and run Open writing stats to see its live analysis. Run Open writing history to explore indexed writing over time. History follows your configured Obsidian Daily Notes folder and date format; add other folders under Settings > Morning Pages Analytics > Folders.
The plugin backfills matching notes on startup and updates its local index when notes are saved, created, renamed, or deleted. Use Refresh daily history after changing Obsidian's Daily Notes configuration.
The active-note view includes charts for:
These charts count literal English word cues. They do not interpret context, negation, or sarcasm, and the built-in lists do not provide semantic analysis of other languages. Use them to explore recurring vocabulary and patterns. Words added per minute appears only when the stats pane observes enough editing activity to measure it.
Settings are organized into Writing, Word lists, History, and Folders.
In Writing, set Daily word goal to any positive whole number, including goals below the default of 750. The goal updates the live tracker, history charts, calendar, completion totals, and streaks, including past goal completion.
In Word lists, choose a group and category:
Separate words with spaces, commas, or newlines. Matching ignores case, counts exact words, and deduplicates terms within each category's combined list. Enter word forms separately. Changes save automatically and reanalyze the active note and tracked history after a short typing pause.
Under Folders, select Add folder and enter a vault-relative path such as Journal/Morning Pages. Start typing to see matching vault folders, or enter a path manually. Expand a folder's card to choose its date source:
| Date source | How notes are placed in history |
|---|---|
| Automatic filename dates | Recognizes twelve common formats together with the Daily Notes format, including 2026-09-13, September 13 2026, September 13, 2026, 13 September 2026, and Sep 13 2026. |
| Selected filename formats | Enables multiple preset formats, the Daily Notes format, and custom formats entered one per line. |
| Creation timestamp | Accepts any Markdown filename and uses the creation timestamp reported by Obsidian. |
Filename modes skip nonmatching or ambiguous dates without falling back to timestamps. For example, automatic mode skips 03-04-2026; choose only the intended day-first or month-first format to resolve it. Daily Notes retain filename-date precedence. For overlapping additional folders, the most specific folder wins.
Folder changes refresh history automatically after typing settles. Subfolders are included by default; settings also offer a subfolder toggle, a Daily Notes filename-format override, a default history range, and newest/oldest creation-time order within a day. Use Remove to stop tracking an additional folder.
Creation-date entries keep their calendar date when their text is edited. Copying or syncing files can reset creation timestamps, so those dates may differ from when the writing was originally authored. Notes without valid creation timestamps are skipped in that mode. History assigns each file to one calendar day; it does not split a running monthly note into daily sections.
Analysis runs locally in your vault. The plugin does not send note text or custom word lists to an external service.
The local plugin cache stores note paths, dates, file metadata, numeric analysis counts, and a word-settings signature used to trigger recounts. Preferences store your goal, edited base lists, and extra words in the vault's plugin data. The analytics cache does not persist note text or word-cloud keyword counts. Word-cloud counts are rebuilt from the selected notes and held in memory for up to four date ranges.
These screenshots use synthetic sample writing.


Requires Node.js 22 or later.
git clone https://github.com/remriel/morning-pages-analytics.git
cd morning-pages-analytics
npm ci
npm test
npm run build
The build generates main.js. Copy it together with manifest.json and styles.css into your vault's plugin folder to try a local build.
Tests cover analysis, date matching, folder history, settings, and dashboard behavior. Browser checks use Chrome or Chromium when available; set MPA_REQUIRE_BROWSER=1 to require them, as release CI does. Browser fixtures cover responsive settings and scrolling; native mobile Obsidian behavior remains unverified.
Released under the MIT License. Bug reports and feature requests are welcome in GitHub Issues.