Org Reader

approvedunreviewed

by esenonfossiio

Read Org files in a clean rendered view: headings, TODO keywords, tags, lists, tables, code blocks and links, with a switch to edit the source.

↓ 3 downloadsUpdated todayMIT

Org Reader

CI

Obsidian plugin that opens .org files in a clean, easy-to-read view, and edits them in a CodeMirror editor with Org highlighting, folding and Org-style keys. It has its own Org parser and renderer, so it does not depend on any other Org plugin and replaces Orgmode (cm6). A button in the view header switches between reading and editing.

Only one plugin can handle the .org extension. If you use Orgmode (cm6), disable it first (Settings → Community plugins) and restart Obsidian. Org Reader shows a notice on startup when the extension is already taken.

Screenshots

Reading view: headings, inline formatting, links, TODO keywords, tags and dates.

Reading view

Code, quote, verse and note blocks, with footnotes collected at the end.

Blocks and footnotes

LaTeX math, inline and display, typeset with Obsidian's MathJax.

LaTeX math

Task lists, in a small file.

Checklist

The editor: the same file as text, one click away with the Edit button.

Source view

Editing

In editing mode the file is a CodeMirror editor with Org syntax highlighting (headings, TODO keywords, tags, links, timestamps, markup, blocks, tables, math). Keys, which are also commands you can bind in Settings → Hotkeys:

KeyOn a headingOn a list itemElsewhere
Tabfold / unfoldindent the item and its childreninsert two spaces
Shift-Tabcycle folding of the whole file: overview → contents → alldedent the item and its childrencycle folding
Shift-Right / Shift-Leftnext / previous TODO statenormal selection
Alt-Right / Alt-Leftdemote / promote the headingindent / dedent the item
Alt-Shift-Right / Alt-Shift-Leftdemote / promote the subtreeindent / dedent with children
Alt-Up / Alt-Downmove the subtree up / downmove the item up / down
Alt-Enternew heading after the subtreenew item (with [ ] if it has a checkbox)
Ctrl-c Ctrl-ctoggle the checkbox

Headings, #+BEGIN blocks and drawers can be folded. Other plugins (such as Org Journal) can extend the editor through view.codeMirror.

What it renders

OrgShown as
* Heading, ** SubCollapsible headings with a size per level
TODO / DONE, custom #+TODO: wordsColoured keyword badges
[#A], :tag1:tag2:Priority and tag pills
SCHEDULED:, DEADLINE:, CLOSED:, <2026-10-20 Tue>Date badges
:PROPERTIES: drawersHidden by default (setting); other drawers are collapsed
*bold* /italic/ _underline_ +strike+ =verbatim= ~code~Inline formatting
[[url][text]], [[file:note.org]], [[*Heading]], bare URLsLinks; file and heading links work inside Obsidian
[[file:image.png]]The image from your vault
- item, 1. item, - [X] task, - term :: textLists, nested lists, checkboxes, description lists
| a | b |Tables (rows above the |---+---| rule are the header)
#+BEGIN_SRC, _EXAMPLE, _QUOTE, _VERSE, _CENTER, _COMMENT, othersCode and text blocks
[fn:1] and [fn:1] textFootnotes collected at the end
$x^2$, \(x\), \[x\], $$x$$, \begin{equation}...\end{equation}LaTeX math, typeset with Obsidian's built-in MathJax
#+TITLE, #+AUTHOR, #+DATEPage header
#+STARTUP: overview / contentOpens folded
#+CAPTION:Figure captions for tables and blocks

Not rendered: sub/superscripts, Org entities such as \alpha (write $\alpha$ instead), inline source blocks, the agenda, table formulas and Babel execution. Unknown syntax is shown as plain text, never dropped.

Commands

Run from the command palette (Ctrl+P, prefix "Org Reader: ").

  • New Org file: creates an empty .org file (next to the active file, or where Obsidian puts new notes) and opens it for editing. Also in the ribbon and in the folder menu of the file explorer.
  • Toggle reading and editing
  • Fold all headings / Show headings only / Unfold all headings
  • The editing keys above, as commands: next/previous TODO state, promote/demote heading or subtree, move up/down, toggle checkbox, new heading or item, fold at cursor, cycle folding

Settings

  • Open files in: reading or editing.
  • Show property drawers, Show comments.
  • LaTeX math: typeset formulas, or show them as written.
  • Follow #+STARTUP: open folded when the file says overview or content.

Install

Until the plugin is in the community list, install it with BRAT: add ESeNonFossiIo/obsidian-org-reader. Or copy main.js, manifest.json and styles.css from the latest release into <vault>/.obsidian/plugins/org-reader/.

Development

npm ci
npm test         # parser unit tests (node --test, Node 22)
npm run build    # bundles src/main.js to main.js
npm run dev      # rebuild on change

The code is split by concern; only view.js and main.js use the Obsidian API, and editor.js uses CodeMirror (provided by Obsidian):

  • src/parser.js: Org text to a document tree. Pure, unit-tested.
  • src/render.js: tree to DOM (no innerHTML). Links and images go through callbacks.
  • src/highlight.js, src/edit.js: editor highlighting and Org editing operations, also pure and tested.
  • src/editor.js: the CodeMirror editor (extensions, folding, key bindings).
  • src/view.js, src/main.js, src/settings.js: the view, plugin and settings tab.

To try changes in a vault, put the vault's plugin folder (a real folder, not a symlink) in a one-line .deploy-target file, or set OBSIDIAN_PLUGIN_DIR; every build then copies main.js, manifest.json and styles.css there.

Releasing

With a clean master that is pushed, run npm version X.Y.Z (or patch, minor, major). It runs the tests, bumps package.json, package-lock.json, manifest.json and versions.json, commits, tags X.Y.Z (no v) and pushes. The Release workflow then builds and publishes main.js, manifest.json and styles.css with provenance attestations.

License

MIT

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.