---
title: Conditions
description: Limit a binding or a layer to an app, a variable's value, a device, and more.
---

Conditions decide when a binding fires. They appear in two places: a binding's
**Only when**, and a layer's **Active when**, which applies to every binding in
the layer. Conditions in a list must all hold.

## Kinds

**+ condition** offers the common kinds directly and the rest under Advanced. Each
one can be flipped between **is** and **is not**.

| Condition | Matches |
| --- | --- |
| App | The frontmost app. Pick several to match any of them. |
| State | A [variable](/docs/authoring/variables) has one of the chosen values |
| Trackpad | A number of fingers on the trackpad, anywhere or in one half |
| App scope | Where you are inside a paired app, such as a web app's current page |
| Device | A keyboard or mouse, by vendor and product ID |
| Input source | The active input source |
| Keyboard | ANSI, ISO, or JIS |
| Variable | A raw Karabiner variable's value |
| Expression | A Karabiner expression, built from parts |

Device and input source conditions imported from Karabiner can hold more than the
editor shows, such as location IDs or a language. Those parts are kept and written
back.

## Any of

To accept one of several conditions of different kinds, add **Any of…**. It holds
its own list, which passes when any one of its conditions holds. An Any of group
can't contain another.

## Missing apps

When an app a binding opens is uninstalled, the binding shows an amber warning
instead of dropping the reference.
