Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?



A simple Emacs minor mode for a nice writing environment.

olivetti screenshot


  • Set a desired text body width to automatically resize window margins to keep the text comfortably in the middle of the window.
  • Text body width can be the number of characters (an integer), a fraction of the window width (a float between 0.0 and 1.0), or nil which uses the value of fill-column +2.
  • Interactively change body width with:
    olivetti-shrink C-c { { { ...
    olivetti-expand C-c } } } ...
    olivetti-set-width C-c |
  • If olivetti-body-width is an integer, the text body width will scale with use of text-scale-mode, whereas if a fraction (float) then the text body width will remain at that fraction.
  • Change the way the text body margins look with option olivetti-style: use margins, fringes, or both for a fancy "page" look.
  • Customize olivetti-fringe face to affect only Olivetti buffers.
  • Optionally remember the state of visual-line-mode on entry and recall its state on exit.

Olivetti keeps everything it does buffer-local, so you can write prose in one buffer and code in another, side-by-side in the same frame.


  • Emacs 24.4


The latest stable release of Olivetti is available via MELPA-stable. First, add MELPA-stable to your package archives:

M-x customize-option RET package-archives RET

Insert an entry named melpa-stable with URL:

You can then find the latest stable version of olivetti in the list returned by:

M-x list-packages RET

If you prefer the latest but perhaps unstable version, do the above using MELPA.

Advanced Installation

Download the latest tagged release, move this file into your load-path and add to your init.el file:

(require 'olivetti)

If you wish to contribute to or alter Olivetti's code, clone the repository into your load-path and require as above:

git clone

Bugs and Feature Requests

Send me an email (address in the package header). For bugs, please ensure you can reproduce with:

$ emacs -Q -l olivetti.el


To always use a different width for a specific file, set a File Variable:

M-x add-file-local-variable RET olivetti-body-width RET 66 RET

See (info "(emacs) File Variables")


For those looking for a hardcore distraction-free writing mode with a much larger scope, I recommend Writeroom Mode.