Magnet
May 6, 2026 · View on GitHub
Customize global hotkeys in macOS. Supports usual hotkey and double tap hotkey like Alfred.app.
Also supports sandbox application.
Upgrading from Magnet v2.x to v3.x
See Upgrading from Magnet v2.x
Example
Register Normal hotkey
Add ⌘ + Control + B hotkey.
if let keyCombo = KeyCombo(key: .b, cocoaModifiers: [.command, .control]]) {
let hotKey = HotKey(identifier: "CommandControlB", keyCombo: keyCombo, target: self, action: #selector())
hotKey.register() // or HotKeyCenter.shared.register(with: hotKey)
}
Or you can use closures.
if let keyCombo = KeyCombo(key: .b, cocoaModifiers: [.command, .control]) {
let hotKey = HotKey(identifier: "CommandControlB", keyCombo: keyCombo) { hotKey in
// Called when ⌘ + Control + B is pressed
}
hotKey.register()
}
Register Double tap hotkey
Add ⌘ double tap hotkey.
if let keyCombo = KeyCombo(doubledCocoaModifiers: .command) {
let hotKey = HotKey(identifier: "CommandDoubleTap", keyCombo: keyCombo, target: self, action: #selector())
hotKey.register() // or HotKeyCenter.shared.register(with: hotKey)
}
Add Control double tap hotkey.
if let keyCombo = KeyCombo(doubledCarbonModifiers: controlKey) {
let hotKey = HotKey(identifier: "ControlDoubleTap", keyCombo: keyCombo, target: self, action: #selector())
hotKey.register() // or HotKeyCenter.shared.register(with: hotKey)
}
Support modifiers
Double tap hotkey only support following modifiers.
- Command Key
NSEventModifierFlags.commandorcmdKey
- Shift Key
NSEventModifierFlags.shiftorshiftKey
- Option Key
NSEventModifierFlags.optionoroptionKey
- Control Key
NSEventModifierFlags.controlorcontrolKey
Unregister hotkeys
HotKeyCenter.shared.unregisterAll()
or
HotKeyCenter.shared.unregisterHotKey(with: "identifier")
or
let hotKey = HotKey(identifier: "identifier", keyCombo: KeyCombo, target: self, action: #selector())
hotKey.unregister() // or HotKeyCenter.shared.unregister(with: hotKey)
Dependencies
How to Build
- Move to the project root directory
- Install dependency library with
carthageorgit submodule carthage checkout --use-submodulesorgit submodule update --init --recursive- Open
Magnet.xcworkspaceon Xcode. - build.