# Leuven theme: a light Emacs theme with a dark variant

> The Leuven theme is a light-background Emacs colour theme by Fabrice Niessen, shipped through MELPA and included in Emacs since 24.4, with a dark variant generated separately and a set of variables for Org heading scaling. It targets long coding sessions on light backgrounds.

**fniessen/emacs-leuven-theme** — This Emacs theme reduces eye strain with a light, high-contrast color scheme, syntax highlighting, and support for multiple modes. Enhance your coding experience!  #emacs #theme #coding #orgmode

- Repository: https://github.com/fniessen/emacs-leuven-theme
- Stars: 767 · Forks: 57
- Language: Emacs Lisp
- License: GPL-3.0
- Published: 2026-10-21 · Updated: 2026-10-21 · Language: en
- Canonical page: https://hysenlabs.com/projects/fniessen-emacs-leuven-theme

## What the theme is and who it is for

The Leuven theme is a light-background Emacs colour theme by Fabrice Niessen, described in the README as elegant and widely loved, and the repository description is blunter about the goal: reducing eye strain with a light, high-contrast colour scheme, syntax highlighting and support for multiple modes.

The theme has shipped with Emacs itself since version 24.4, released in October 2014, and it is also on MELPA. That long history is the reason the README quotes a wall of user testimonials, several of them about Org mode specifically and one about the magit faces. The magit comment is the most informative, because it names the thing a general-purpose theme usually does not: the different sections of the magit status screen are meant to stand out.

The README states that the theme features built-in styles for various components, naming Org mode, Gnus, Dired+ and EDiff. That list is the practical scope: this is a theme for people whose Emacs day is dominated by Org and by buffer-difference views, not a general recolouring.

The repository layout is small. There is a lisp/ directory holding the theme, a bin/ directory, an images/ directory for the screenshots, a README.org as the source of the README, a TODO-emacs-leuven-theme.org file, and the GPL licence.

## Installing from MELPA, the recommended route

The README says that in Emacs 24 and later, M-x list-packages is the recommended way to list and install packages, and that MELPA keeps stable releases of the theme.

The only setup step is adding MELPA to the package archives.

```lisp
(setq package-archives
      (append '(("melpa" . "http://melpa.milkbox.net/packages/"))
              package-archives))
```

After that the README gives a five step procedure: call list-packages, search for leuven-theme, mark it for installation with i, and execute the install action with x. There is no compile step, because a colour theme is plain Emacs Lisp.

The alternative is the Git version, which is what you want if you are tracking changes or want a specific commit.

```bash
git clone https://github.com/fniessen/emacs-leuven-theme
```

Then two lines go in your .emacs file, and the README notes that the path placeholder has to be replaced.

```lisp
(add-to-list 'custom-theme-load-path "/PATH/TO/EMACS-LEUVEN-THEME/lisp")
(load-theme 'leuven t)                  ; For Emacs 24+.
```

Restart Emacs afterwards. The comment on the load-theme line is not decoration, since the trailing t is what enables the theme without the usual confirmation prompt, and the same form is used for the dark theme.

## The dark variant and how it is loaded

The dark version arrived later and was built by someone other than the original author. The README describes it as automatically built by Thibault Polge, and the framing is careful: it surely will be improved over time, but it is a major first step in the right direction, with a thanks to him.

That phrasing matters for how you should judge the dark variant. It is a contributed addition rather than a designed pair, and the README's own wording says it will change. The screenshot is a separate image in the images directory, so the two themes are documented independently.

Loading it is the same one-liner with a different name.

```lisp
(load-theme 'leuven-dark t)
```

For anyone using the use-package convention, the README gives the declarative form with the load inside the config block.

```lisp
(use-package leuven-theme
  :config
  (load-theme 'leuven-dark t))
```

Note that the package name and the theme name differ, leuven-theme against leuven and leuven-dark, and that use-package requires the package to be installed before the config block runs. Getting that wrong is the usual reason a use-package entry silently does nothing.

## The variables that change the theme's shape

The theme exposes a small set of variables, and they exist because the author made a specific visual choice that some people dislike. The README names them directly: large Org level 1 headings and a large Org agenda date heading, larger on purpose.

Turning off the heading scaling is one variable, and the dark theme has its own equivalent.

```lisp
(setq leuven-scale-outline-headlines nil)
;; For dark theme:
(setq leuven-dark-scale-outline-headlines nil)
```

Three more cover the agenda structure, the document title and the volatile highlight, each again with a dark counterpart.

```lisp
(setq leuven-scale-org-agenda-structure nil)
(setq leuven-scale-org-document-title nil)
(setq leuven-scale-volatile-highlight nil)
;; For dark theme:
(setq leuven-dark-scale-org-agenda-structure nil)
(setq leuven-dark-scale-org-document-title nil)
(setq leuven-dark-scale-volatile-highlight nil)
```

The volatile highlight is the one worth understanding, because it is the marker that follows the point in a buffer. In a theme with a large, coloured heading structure, a volatile highlight that competes with the headings is genuinely distracting, which is why it is a separate switch.

The design of the API is worth noting: every variable has a paired dark variant, and the pairs are named with the same stem. A theme with one set of variables and a dark variant that ignores them would be the usual arrangement, and this one does not do that.

## Where Leuven is the wrong choice

The first limitation is that the theme is not a complete colour system. It styles the components the author cared about, Org mode, magit, dired, gnus and ediff, and a theme that has no opinion about a package means the package keeps its own colours. If you use a major mode that the theme does not mention, you get that mode's default appearance, which in a light theme can look out of place next to a carefully coloured Org buffer.

The second is the Org orientation. The scaling variables, the agenda date heading, the document title and the outline headlines are all Org features. A programmer who never opens an Org buffer gets a fraction of the design, and a heavy Org user gets most of it. That is a coherent design, but it is a design with an opinion about what you do in Emacs.

The third is the light background itself, and the README's own framing is about reducing eye strain in a light theme, which means the project is aimed at people who find dark backgrounds worse rather than better. Combined with the fact that the dark variant is a contributed first step, that makes Leuven a light theme with a dark extra rather than a theme that works equally in both.

The fourth is the dual distribution. The theme is in Emacs since 24.4 and also on MELPA and on GitHub, and those three can be at different versions. A user who installs from MELPA and a user who relies on the bundled copy can see different output from the same Emacs, and the repository does not state a policy for which one to prefer when they differ.

The fifth is the state of the project. The repository is not archived and the last push was on 2026-10-08, so it is being maintained, but there are no GitHub releases, so there is no tag to pin and the TODO file at the top level suggests a list of open work rather than a roadmap.

## Licence, maintenance and the cost of a theme

The theme is under the GPL-3.0 licence, with the LICENSE file at the root of the repository. For a colour theme that most people load rather than distribute, the practical effect is on redistribution, and the file is present so the terms are clear.

The repository is not archived and the last push was on 2026-10-08, so the theme is being maintained. The default branch is master, and the README is an Org document, README.org, which means the screenshots and the prose are written and rendered with the same tool the theme is designed for.

The cost of adding it is one package and a few setq lines, and the cost of removing it is one line, since the theme is loaded with load-theme. The interesting cost is the tuning. A user who wants the theme to feel like their Emacs rather than like the author's has to read the variable list and turn off the features they do not want, and there are four of them, each with a dark counterpart.

One small dependency worth knowing about, mentioned in the screenshots section, is that fontifying the whole heading line in Org mode needs a separate setting in your.emacs file, org-fontify-whole-heading-line set to t, because that is an Org behaviour rather than a theme setting.

## Conclusion

Leuven suits an Emacs user who wants a light theme with careful Org mode, magit and dired faces rather than a generic palette, and who wants it installed the ordinary way through MELPA. It does not suit someone who needs a dark theme to be first class, since the dark variant is a later contribution and the README presents it as a first step. Verify the MELPA package version you get, since the theme is also bundled with Emacs itself and the bundled copy can lag behind the repository.

## FAQ

### How do I install the Leuven theme in Emacs?

Add MELPA to package-archives, then use M-x list-packages, search for leuven-theme, mark it with i and install it with x. The theme has shipped with Emacs since version 24.4, and the README says list-packages is the recommended route in Emacs 24 and later.

### How do I load the dark version of the Leuven theme?

Add (load-theme 'leuven-dark t) to your .emacs file and restart Emacs, or use the use-package form with the load inside the config block. The dark version was built by Thibault Polge and the README describes it as a first step that will be improved over time.

### How do I make the Leuven theme use smaller Org headings?

Set leuven-scale-outline-headlines to nil before the theme is loaded. The theme also exposes leuven-scale-org-agenda-structure, leuven-scale-org-document-title and leuven-scale-volatile-highlight, and each has a leuven-dark- prefixed counterpart.

### What is the Leuven theme built for?

It is a light-background theme aimed at long coding sessions, with built-in styles for Org mode, Gnus, Dired+ and EDiff, and it is described as high contrast. The README and user quotes put particular emphasis on the Org mode faces and on how the magit status sections stand out.

## Sources

- [fniessen/emacs-leuven-theme on GitHub](https://github.com/fniessen/emacs-leuven-theme)
- [Issues](https://github.com/fniessen/emacs-leuven-theme/issues)
- [License: GPL-3.0](https://github.com/fniessen/emacs-leuven-theme/blob/master/LICENSE)
- [README](https://github.com/fniessen/emacs-leuven-theme/blob/master/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/fniessen-emacs-leuven-theme
