---
title: Karabiner
description: Import an existing karabiner.json, and what does and doesn't come across.
---

Vimputer writes Karabiner-Elements config, and can read it back. To start from
the config you already have, open **Settings → Karabiner → Import**, choose
**Preview** to see what it found, then **Apply**.

:::warning
**Apply** replaces your Vimputer config with the imported one.
:::

## What imports

Each Karabiner profile becomes a Vimputer profile. Each manipulator becomes a
binding with an action per moment. Variables that bindings set become
[variables](/docs/authoring/variables), and bindings gated on the same variable value
are grouped into a layer. Regrouping can change which binding wins, so check
**Conflicts** after an import.
Raycast deeplinks become Raycast plugin actions, and `afplay` commands become
sound actions.

Some imported parts can be kept and written back but not edited in the UI:

| Part | In Vimputer |
| --- | --- |
| Mouse buttons and media keys as triggers | Kept; the recorder can't capture them |
| Optional modifiers (`from.modifiers.optional`) | Kept; the recorder can't mark a modifier optional |
| Notifications and raw events | Kept as they are |
| Extra device IDs, input source languages | Kept; the editor shows the first |

## What doesn't

The preview counts what it skipped and lists a warning for each.

| Skipped | Why |
| --- | --- |
| Manipulators other than `basic`, such as `mouse_motion_to_scroll` | Not modelled |
| Triggers with `from.any` | Not modelled |
| App conditions by `file_paths` only | Vimputer matches apps by bundle ID |
| Manipulators with no action Vimputer understands | Nothing left to bind |
