### clastic flow
a minimalist lightweight real-time wpm monitor for Obsidian with stats dashboard.
Clastic Flow is a lightweight Obsidian plugin that shows your typing speed in real time while you're editing your notes. Additionally for thou scholarly goblins, Clastic Flow aggregates your typing statistics per document using a more sophisticated method than the naive troglodyte pea-sized homoheidelbergensis chaff filled brain approach, actively monitoring only the active typing sessions. Review your aggregate statistics across all notes and individual notes.
### How it works
Clastic Flow adds a `wpm: N` item to Obsidian's status bar and tracks typing speed from actual editor changes. The stats view shows the current document, global totals, and per-note history.
#### Features
- Realtime WPM in the status bar.
- Current document stats: words typed, characters typed, average WPM, active time, and bursts.
- Global stats across the vault.
- Per-note stats table.
- Active-time tracking that counts short pauses but discards longer idle gaps.
- Filters navigation, shortcuts, deletes, undo/redo, paste, and large bulk edits.
### The logic
Clastic Flow measures typing from CodeMirror editor transactions rather than from wall-clock time in a note. That means it only reacts when the document actually changes, so moving the cursor, using arrow keys, switching panes, opening command palette actions, or sitting on a note without typing will not count as typing time.
Live WPM uses a short rolling window:
```text
seconds = clamp(now - first_change_in_window, min = 1.0s, max = rolling_window)
characters_per_second = inserted_characters_in_window / seconds
wpm = characters_per_second * 60 / average_word_length
```
The default rolling window is `2000ms` and the default average word length is `4.8` characters. This keeps the status bar responsive without letting a single keypress create absurd instant WPM spikes.
Aggregate stats use active typing time. When you type in a note, Clastic Flow compares the new edit to the previous edit for that note:
- If the gap is within the pause grace window, the gap counts as active typing time.
- If the gap is longer than the pause grace window, the gap is discarded and a new burst begins.
- The default pause grace is `5000ms`, so short thinking pauses are included, but long idle periods do not dilute your average.
This avoids the naive calculation of total words divided by total time spent with a document open. A note can sit open for hours without damaging its average WPM; only active typing bursts matter.
The plugin also ignores edits that are unlikely to represent normal typing:
- Deletes and undo/redo operations.
- Navigation-only actions.
- Pasted or bulk-inserted text above the configured character threshold.
- Large autocomplete or generated insertions, unless you raise the threshold in settings.
### Setup
#### From the Obsidian community plugin store
Once Clastic Flow is accepted into the community plugin directory:
1. Open `Settings -> Community plugins` in Obsidian.
2. Disable restricted mode if needed.
3. Browse community plugins and search for `Clastic Flow`.
4. Install and enable the plugin.
#### Manual installation
Download the latest release files from GitHub:
- `main.js`
- `manifest.json`
- `styles.css`
Create this folder in your vault:
```text
YourVault/.obsidian/plugins/clastic-flow/
```
Put the three release files in that folder, then reload Obsidian and enable `Clastic Flow` from `Settings -> Community plugins`.
#### Building from source
```bash
npm install
npm run build
```
For Nix users:
```bash
nix develop path:.
npm install
npm run build
```
To install a local build into a vault:
```bash
scripts/install-obsidian-plugin /path/to/YourVault
```
### Gallery