Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Dense Reading

yunminyunmin19 downloads

Tighter paragraph and heading spacing for reading view, with a switchable line width per note or per view.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates3

Tighter paragraph and heading spacing for reading view, with a switchable line width — no Style Settings, no hand-written cssclasses frontmatter.

Dense Reading does two independent things, both purely at the display layer. No file is modified, and nothing is written into your notes.

Tight spacing

Long-form notes in Obsidian's reading view are spaced for skimming, not for reading. Turning on the dense mode compresses paragraph margins, heading gaps and list spacing to a reading rhythm, and drops the decorative chrome on hr and inline code so they follow your text colour instead of shouting.

Spacing only ever applies when the switch is on. With it off, the plugin is invisible.

Line width

Reading width is the bigger lever. Dense Reading sets --file-line-width at the view layer, which is what actually takes effect — the same value set on body is overridden by Obsidian's inline 700px.

Preset Width
窄读 Narrow 44rem
均衡 Balanced 54rem
宽幅 Wide 66rem
超宽 Extra wide 78rem
自定义 Custom 36–96rem, slider

Choosing a line-width preset

The settings page previews the width as a proportional bar rather than at its real pixel size — the settings pane is always narrower than the reading pane, so a true-size preview would have looked identical on every preset:

Width preview in settings

Width and spacing are independent: you can narrow the column without turning on dense spacing, which is the common case for tables and code.

Dense reading in the reading view

Per-note width

A single global width is rarely right for every note. Readings sit well narrower than a reference table. Dense Reading can remember a width per note: pin one from the command palette, and it is applied whenever you open that note. The list of pinned notes is shown in settings and can be cleared there.

Commands

Command What it does
Toggle dense reading Turns the spacing switch on or off
Cycle line width preset Steps through the five presets
Pin line width for this note Fixes the current preset to the active note
Clear line width for this note Removes that note's pin

No default hotkey is bound — width is a deliberate, occasional choice, and a global key for it would fight whatever else you have on that key. Bind one in Settings → Hotkeys if you want it.

Installation

Community plugins: search for "Dense Reading" in Settings → Community plugins.

Manual: download main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/dense-reading/, then enable it.

Beta builds: add yunmin311/dense-reading-obsidian to BRAT.

Migrating from the CSS snippet

This plugin started life as a CSS snippet driven by Style Settings. The class names are deliberately identical (dense-w44 … dense-w-custom, dense-reading-mode), so:

  1. Install and enable the plugin; set your width and switch in its settings.
  2. Delete cssclasses: dense-w54 style frontmatter from your notes. The plugin no longer needs it — that was the point.
  3. The snippet can stay enabled (the rules are the same, so they cannot conflict) or be disabled, since styles.css now carries them.

Language

The settings page, commands and every notice are available in Chinese and English. Pick a language at the top of the settings page: Auto follows Obsidian's own language, or pin it to 简体中文 / English explicitly.

Adding another language is a pure data change — an extra entry in locales.js — with no build step involved. Preset ids and CSS class names stay language-independent, so switching language never changes what is applied.

Privacy

No network access. No telemetry. No accounts. The plugin reads the path of the active note to remember its width, and stores that map in its own data.json inside the plugin folder — the same mechanism every Obsidian plugin uses.

License

MIT


中文说明

密排阅读:把阅读视图的段落、标题、列表间距收紧密排,并让分隔线与行内代码 跟随正文颜色;这一组只在总开关打开时生效,关闭即完全无痕。

行宽则独立于总开关,写在视图层(写在 body 上会被 Obsidian 内联的 --file-line-width: 700px 压掉,这是踩过的坑)。五档可选,也可用滑条自定义 36–96rem。

按笔记记住档位:长文和参考表格需要的宽度往往不同。可以在命令面板把当前档位 固定到某篇笔记,之后每次打开自动套用;设置页里能看到并清除这些固定。

原来的 dense-reading.css 片段 + Style Settings 那套装法已不需要: 类名与片段完全一致,装好插件、把笔记 frontmatter 里的 cssclasses: dense-w54 删掉即可——这正是做成插件的意义。

HealthExcellent
ReviewPassed
About
Compress paragraph, heading and list spacing in Reading view and mute decorative chrome on hr and inline code for a calmer, denser reading rhythm without changing your files. Set line width from five presets or a custom range, pin a width per note, and toggle dense spacing on or off at the view layer.
AppearanceCSS
Details
Current version
0.2.2
Last updated
Yesterday
Created
Yesterday
Updates
3 releases
Downloads
19
Compatible with
Obsidian 1.4.0+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Author
yunminyunminyunmin311
GitHubyunmin311
  1. Community
  2. Plugins
  3. Appearance
  4. Dense Reading

Related plugins

Style Settings

Adjust theme, plugin, and snippet CSS variables.

Custom Font Loader

Customize your vault with any font you want (+ Support for Android and iOS).

Lapel

Show the heading levels in the gutter of the editor.

Snippetor

Create and tweak common snippets.

Show Whitespace

CSS styles and CM6 extensions to highlight whitespace in Source and Live Preview modes.

Focus Mode

Add a toggle to hide interface elements so you can focus on your note.

Fontsource

Load custom fonts from Fontsource into your notes.

Animated Cursor

Simple yet smooth animated cursor.

Better Bullets

Improves readability of bulleted notes.

Contextual Typography

Add a data-tag-name attribute to all top-level divs in preview mode containing the child's tag name, allowing contextual typography styling.