WallWay19 downloadsShow a Kindle-style reading ruler: a clear band at reading height while the rest of the text is dimmed. Works in Markdown notes and PDFs, on desktop and mobile.
A Kindle-style reading ruler for Obsidian: a clear horizontal band at reading height while the rest of the text is dimmed. It helps you keep your place in long notes and dense PDFs.

On an iPad the band follows the hovering Apple Pencil, a trackpad or mouse, or rests at a fixed height while the page scrolls underneath it.
The band can be as thin as a single line or as tall as a paragraph, full width or narrower, clear or tinted like a highlighter:
![]() |
![]() |
![]() |
![]() |
| Input | What the ruler does |
|---|---|
| Mouse or trackpad (also on iPad) | The band follows the pointer vertically. |
| Apple Pencil hover | The band follows the hovering pencil. |
| Finger | The band rests at a fixed height and the text scrolls underneath it, like on a Kindle. A small handle appears at the edge of the band; drag it to move the band. The position is remembered. |
| Typing (optional) | With Follow caret while editing turned on, the band jumps to the line you are typing on. Moving the mouse takes over again. |
Every pane with a note or PDF gets its own ruler, including split panes, stacked tabs and pop-out windows. Sidebars, tab bars and toolbars are never dimmed.
All commands are available from the command palette. No hotkeys are assigned by default; add your own under Settings → Hotkeys.
| Command | What it does |
|---|---|
| Reading Ruler: Toggle ruler | Turns the ruler on or off. Turning it off also unpins it. |
| Reading Ruler: Pin or unpin ruler | Freezes the band at its current height, or releases it again. While pinned the touch handle is hidden, so the band cannot be moved by accident. |
| Reading Ruler: Increase band height | Makes the band 10 px taller (up to 300 px). |
| Reading Ruler: Decrease band height | Makes the band 10 px shorter (down to 20 px). |
Pin and resize only appear while the ruler is on. There is also a ribbon icon that toggles the ruler.
Tip for mobile: add the commands to the mobile toolbar under Settings → Toolbar. The toolbar is only visible while editing; in Reading view and PDFs use the ribbon icon or the command palette.
| Setting | Range | Default |
|---|---|---|
| Show ruler | on / off | off |
| Band height | 20–300 px | 60 px |
| Dim strength | 10–90 % | 50 % |
| Full width | on / off | on |
| Width (when not full width) | 30–100 % | 100 % |
| Tint color | yellow, blue, green, pink, gray or custom | yellow |
| Tint strength | 0–40 % (0 = fully clear band) | 0 % |
| Fixed position | 0–100 % from the top | 35 % |
| Follow caret while editing | on / off | off |
| Show in Markdown notes | on / off | on |
| Show in PDF files | on / off | on |
Changes are visible on the ruler immediately. The on/off state and all settings are remembered between sessions.
Once the plugin has been accepted: Settings → Community plugins → Browse, search for Reading Ruler, install and enable.
driekeerJ/obsidian-reading-ruler and confirm.main.js, manifest.json and styles.css from the latest release.<your vault>/.obsidian/plugins/reading-ruler/.npm install
npm run dev # watch build
npm run build # type-check and production build
npm test # unit tests (Vitest)
npm run lint # ESLint with the Obsidian plugin rules
All arithmetic and rules (band geometry, settings clamping, on/off and pin rules, input arbitration, colour conversion) live in src/core/. Those modules have no Obsidian or DOM dependency and are developed test-first. src/overlay.ts, src/manager.ts and src/caret.ts are a thin layer that forwards raw input to the core and writes the result as a CSS transform.
To test in a vault, symlink main.js, manifest.json and styles.css into <vault>/.obsidian/plugins/reading-ruler/.
minAppVersion in manifest.json if needed.npm version patch (or minor / major). This updates manifest.json, package.json and versions.json and creates a tag without a v prefix. If your npm is configured with ignore-scripts=true, the script that updates manifest.json and versions.json is skipped; use npm version patch --ignore-scripts=false instead. The release workflow refuses a tag that does not match manifest.json.git push && git push --tags.main.js, manifest.json and styles.css. Review it and publish.Plugins are submitted through the Obsidian Community directory, not through a pull request. See Submit your plugin for the official walkthrough.
README.md, LICENSE and manifest.json in the root of the default branch. The directory reads the manifest.json at the HEAD of that branch.version in manifest.json (for example 1.0.0, without a v), with main.js, manifest.json and styles.css attached as individual files. It has to be a normal release, not a draft.https://github.com/driekeerJ/obsidian-reading-ruler. Choose yourself as the owner, agree to the developer policies and select Submit.#updates on Discord.After the first submission, new versions only need a GitHub release; nothing has to be submitted again.
Reading Ruler makes no network requests, collects no data and only stores its own settings in the plugin's data.json.