---
title: Layers
description: Modes you enter with a key, groups that follow an app or condition, and which binding wins.
---

Every binding lives in a layer. The sidebar shows them as one tree, and each
layer page edits how the layer turns on and the bindings inside it.

<LayerKeyboard compact name="Leader" trigger="space" bindings={[["b", "Chrome"], ["m", "Spotify"], ["g", "github.com"], ["t", "Terminal"], ["e", "Email address"], ["u", "Sticky ⇧"]]}>
  A mode on <kbd>space</kbd>: the key that enters it is ringed, and the keys it binds light up.
</LayerKeyboard>

## Modes and groups

A layer's **Mode** is either **Modal** or **While**.

| Mode | On when | Off when |
| --- | --- | --- |
| Modal | A key enters it | <kbd>esc</kbd> (if **Esc exits** is on), an Exit mode action, or entering another mode |
| While | Its **Active when** conditions hold, or always if it has none | Its conditions stop holding |

Add one from the sidebar's **+**: **Mode** makes a modal layer, **Group** a While
layer, and **App** a While layer for one app.

A modal layer lists the keys that enter it under **Enter with**, with the layer
each one is bound in, such as "F in Chrome". Use **+** there to record a new one,
or bind **Activate layer** anywhere. Only one mode is active at a time; entering
one leaves the last.

Groups nest. A group inside another adds its conditions to its parent's, and the
layer page shows what it picks up under **Inherits**. Modes don't nest: a mode's
keys work wherever it was entered from, so where it can be entered lives in the
bindings that enter it.

## Which binding wins

Karabiner runs the first rule that matches. When two bindings share a trigger and
both apply, Vimputer orders them:

1. A pin, set with **Fire first** in Conflicts.
2. The narrower scope. A binding that only applies in Chrome fires before one that
   applies everywhere.
3. Sidebar order. Higher in the sidebar fires first.

**Conflicts** lists every key where this order decides the outcome, including
bindings that can never fire. **Fire first** moves a binding above its rival in the
same layer, or pins it over a rival in another; **Change key** rebinds it. Open
Conflicts from the status bar.

## Views

A layer page shows its bindings three ways: **List** (a column per moment),
**Keyboard** (bindings on their keys; click one to edit it), and **Hints** (the
grid the HUD uses).

## From plugins and apps

The layer menu's **Add from plugin…** fills a layer with a plugin's commands, and
**Add from app…** with commands from an app paired with Vimputer, such as a web app
through the browser extension. Either way they arrive as ordinary bindings. See [Plugins](/docs/integrations/plugins).
