Composition Mode — Focus mode with pages

A distraction-free writing mode for Obsidian that turns the editor into a paginated, paper-like page. I built it because Obsidian’s default focus mode still reads like a text box — I wanted to see my long-form work with page breaks and margins, while I write.

Composition Mode in action

What it does

  • Paper-on-gray layout. Your note renders as a series of pages on a neutral backdrop. Tab headers, status bar all hide. You need to close the sidebars before toggling the mode on (which you do via command p, toggle…)
  • Kind-of-Real pagination. Visible gaps between pages at paragraph boundaries, targeting a configurable word count per page (Letter or A4 proportions). No, your final printed document will very likely not look like this. Sometimes this can get messed up. I’m not sure why, but this plug in is a bit of a hack, so I am asking Obsidian to do a lot it wasn’t intended.
  • Configurable settings. Paper width, max paper width (for big external monitors), side margins, top/bottom margins, image width as a percentage of the text column, background darkness.

Why another “focus mode”

Most focus/zen modes just hide the chrome and leave you with a wall of text across an arbitrary viewport width. Composition Mode gives the text a page with real margins that stops expanding past a sensible width on big monitors. You get the see your draft as an object feeling that word processors give you, without leaving Obsidian. Think Word’s focus mode. It was also inspired by Scrivener’s Composition View (hence the name) and you can simulate that more directly by turning off the page breaks if you want (there are no page breaks in that view). I find it easier to work this way since it helps me break text into chunks.

This is a fresh plugin I made for my own purposes. I vibe coded it, but man, the AIs just did not understand how to do this. It was instructive. Luckily I had some idea what I was doing, but they really got tangled thinking this through.

I’ve only tested it with the Minimal theme on desktop (macOS). Other themes very likely produce visual quirks around:

  • image embed sizing
  • the gray page-gap bar (slivers of white between bar and paper edge)
  • background color overrides
    I can’t promise that I will fix bugs or revise this, but given that, to my knowledge, there has not been a plug in that would do page breaks or simulate a page view, this is a starting point. Please fork away and turn this into something useful. I’ve been working on this all weekend so I could write more easily and now that it’s working (more or less), that’s what I want to do.

Install

BRAT (recommended): Add kvarnelis/composition-mode in BRAT → enable under Community Plugins.

Manual: Grab main.js, manifest.json, styles.css from the latest release and drop them in <vault>/.obsidian/plugins/composition-mode/.

Desktop only — mobile layout is different enough that the pagination math doesn’t translate.

Links

Feedback, bug reports, and feature ideas all welcome — especially theme compatibility reports

Disclaimer

Is this project open source? Yes
Is this project completely free? Yes
Is this project vibe-coded beyond the author’s ability to comprehend how it works? No, it is vibe coded, but I seem to understand it better than Claude or Chatgpt do, which still doesn’t mean I understand it fully! But geez, they really did NOT get how to lay out a page.


2 Likes

Could not get out of this mode as the command palette no longer works. Needed to close obsidian. The little pop up covers over the settings button as well. This plugin needs a lot of work done. Also does not work well with mermaid diagrams as it does not scale them to fit in what is left of a page.

Thanks Caroline! Sorry, a crucial step is that I forgot to mention that the escape key exits. Darn it. yeah, there should be other exit modes, I will add some. I thought that diagrams and tables are likely going to break it as I only tuned it with images. Again, really just a departure point.

I added an exit button in the control bar. Hover over the bottom to reveal it and exit. Escape still works. I also was able to get the command palette working, but beware, that has the potential to do all sorts of psychotic things. This isn’t a theme, so things could break badly.

Thanks for the changes. When i was using it, i was also wondering how to force a page break in markdown but there seems to be no way to do that. Quite often, a heading would be the last thing on a page and the text that should be beneath it was on the next page. Might be able to acheive that by changing the page layout algorithm.

I added page breaks to my local version, but I don’t ever use headings, so I didn’t think of that one. I can have it keep the headings together with the next paragraph. Good catch.

I’ve been using it nonstop for a few days now and as far as basic writing goes, I’m finding it makes me feel a lot more focused. I write complex arguments so seeing a whole paragraph really helps, but it’s good to reduce the distractions.

This may be anathema to some folks since this is, after all, supposed to be a focus plugin, but as I’ve been revising it (again, for my purposes), I’ve made it possible to pull up the left and right sidebars via the command palette. Here you can see me releasing the plugin while I work in my essay.

It will be like this when the border is hidden.

CleanShot 2026-05-10 at 3 .29.36@2x