A key remapping daemon for linux.

Related tags

Miscellaneous keyd


Linux lacks a good key remapping solution. In order to achieve satisfactory results a medley of tools need to be employed (e.g xcape, xmodmap) with the end result often being tethered to a specified environment (X11). keyd attempts to solve this problem by providing a flexible system wide daemon which remaps keys using kernel level input primitives (evdev, uinput).


keyd has several unique features many of which are traditionally only found in custom keyboard firmware like QMK. Some of the more interesting ones include:

  • Layers.
  • Key overloading (different behaviour on tap/hold).
  • Per keyboard configuration.
  • Instantaneous remapping (no flashing required).
  • A simple and intuitive config format.
  • Being display server agnostic (works on wayland and virtual console alike).

Why would anyone want this?

keyd is for people who:

  • Would like to experiment with layers (i.e custom shift keys).
  • Want to have multiple keyboards with different logical layouts on the same machine.
  • Want to put the control and escape keys where God intended.
  • Would like the ability to easily generate keycodes in other languages.
  • Constantly fiddle with their key layout.
  • Want an inuitive keyboard config format which is simple to grok.
  • Wish to be able to switch to a VT to debug something without breaking their keymap.
  • Like tiny daemons that adhere to the Unix philosophy.

What keyd isn't:

  • A tool for launching arbitrary system commands as root.
  • A tool for programming individual key up/down events.
  • A tool for generating unicode characters (which is best done higher up the input stack)


  • Your favourite C compiler
  • libudev


sudo apt-get install libudev-dev # Debian specific, install the corresponding package on your distribution

git clone https://github.com/rvaiya/keyd
cd keyd
make && sudo make install
sudo systemctl enable keyd && sudo systemctl start keyd


  1. Install keyd

  2. Put the following in /etc/keyd/default.cfg:

# Turns capslock into an escape key when pressed and a control key when held.
capslock = mods_on_hold(C, esc)

# Remaps the escape key to capslock
esc = capslock
  1. Run sudo systemctl restart keyd to reload the config file.

  2. See the man page for a comprehensive list of config options.

Note: It is possible to render your machine unusable with a bad config file. Before proceeding ensure you have some way of killing keyd if things go wrong (e.g ssh). It is recommended that you avoid experimenting in default.cfg (see the man page for keyboard specific configuraiton) so you can plug in another keyboard which is unaffected by the changes.

Sample Config File

# Maps escape to the escape layer when held and the escape key when pressed

esc = layer_on_hold(escape_layer, esc)

# Creates an escape layer which is activated by pressing the escape key.


# Esc+1 changes the letter layout to dvorak. 
1 = layer_toggle(dvorak)

# Esc+2 changes the letter layout back to the default. 
2 = layer_toggle(default)

# Creates a dvorak layer which inherits from the main layer (see the section on layer inheritance in the man page).


q = apostrophe
w = comma
e = dot
r = p
t = y
y = f
u = g
i = c
o = r
p = l

a = a
s = o
d = e
f = u
g = i
h = d
j = h
k = t
l = n
semicolon = s

z = semicolon
x = q
c = j
v = k
b = x
n = b
m = m
comma = w
dot = v
slash = z


What about xmodmap/setxkbmap/*?

xmodmap and friends are display server level tools with limited functionality. keyd is a system level solution which implements advanced features like layering and oneshot modifiers. While some X tools offer similar functionality I am not aware of anything that is as flexible as keyd.

What about kmonad?

keyd was written several years ago to allow me to easily experiment with different layouts on my growing keyboard collection. At the time kmonad did not exist and custom keyboard firmware like QMK (which inspired keyd) was the only way to get comparable features. I became aware of kmonad after having published keyd. While kmonad is a fine project with similar goals, it takes a different approach and has a different design philosophy.

Notably keyd was written entirely in C with performance and simplicitly in mind and will likely never be as configurable as kmonad (which is extensible in Haskell). Having said that, it supplies (in the author's opinion) the most valuable features in less than 2000 lines of C while providing a simple language agnostic config format.

Why doesn't keyd implement feature X?

If you feel something is missing or find a bug you are welcome to file an issue on github. keyd has a minimalist (but sane) design philosophy which intentionally omits certain features (e.g unicode/execing arbitrary executables as root). Things which already exist in custom keyboard firmware like QMK are good candidates for inclusion.



  • "meta+click" does not work: "space = timeout(overload(meta, space), 1000, space)"

    It seems that space+click is not meta+click when space+click is used in the following configuration. I noticed this because I tried to move (meta+leftclick) and resize (meta+rightclick) the swaywm window and could not.

    $ keyd --version
    keyd v2.3.0-rc (6581f36)
    space = timeout(overload(meta, space), 1000, space)
    keyd virtual device     xxxx:xxxx       space down
    keyd virtual device     xxxx:xxxx       space up

    Due to a glitch in the AUR, I have not been able to update to the latest version. https://aur.archlinux.org/packages/keyd-git Sorry if this has been resolved.

    todo implemented feature request mouse 
    opened by funcrab 40
  • macro(compose a

    macro(compose a ") and qt qcompleter

    I've setup a = macro(compose a ") in /etc/keyd/default.conf and it mostly works as expected. However when used with a qt application which has a qcompleter active, that is it's showing a popup below a text input for example, the macro no longer works. Instead of inserting ä the individual characters a, " are inserted. I am guessing qt captures the keyboard when it shows the popup or some such.

    opened by ville-h 21
  • Feature request: Oneshot() with timeout

    Feature request: Oneshot() with timeout

    I'd like to propose an expiration mechanism for oneshot, say oneshot2(layer, timeout) for the sake of discussion, which behaves like oneshot but only if the next key is pressed within timeout ms. The naming is suboptimal, as the two at the end usually signals the ability to supply a macro to be executed (and who knows if at some point a use case warranting the introduction of oneshot2(layer, macro) will be found), but I couldn't come up with something better except the more cumbersome layer_timeout.

    Repeated calls to oneshot2() with the same layer argument should reset the timer to the last supplied timeout, while any other action activating or deactivating a layer with a currently attached timer should remove this timer. Also, from an implementation perspective, it is probably a good idea to only allow a single expiring layer at a time, i.e. calling oneshot2() while a layer different from the one given as argument has an active timer would deactivate this other layer.

    This would address the following use cases:

    1. Self-deactivating (nested) leader keys

    The oneshot2() action would allow a user to change his mind after pressing the corresponding key. Currently, “cancelling” a oneshot action without visible consequences necessitates an additional keypress (typically some modifier key).

    More concretely, I would like to toggle some layer by tapping shift twice, i.e.

    leftshift = overload(shift,oneshot(shift))
    leftshift = toggle(layerA)
    leftshift = toggle(layerA)

    After testing it for a while, I temporarily removed this functionality as it often happened that I tapped shift because I wanted to start some sentence and then changed my mind. When I then wanted to continue to type and hence pressed shift again, layerA would activate, which was a bit annoying. If oneshot(shift) could be replaced with oneshot2(shift, 500), this problem would not occur.

    1. Automatically activate an expiring navigation layer while moving a trackpoint or physical mouse (QMK has a similar feature for keyboards with a builtin trackpoint/mouse, which I find very useful)

    Usually, after moving the mouse one has to click somewhere. If keyd would be able to activate an expiring navigation layer (typically with the mouse buttons on the home row) while moving a trackpoint or external mouse, one could replace the physical mouse buttons by proper keyboard buttons without the need to use some additional modifier press or explicitly activating a layer.

    Of course, for this functionality one would need to enable calling actions via IPC in addition (which is planned to be implemented if I'm not mistaken), so that some script could monitor for mouse move uevents and issue the corresponding oneshot2() call.

    todo feature request timeout2 
    opened by herrsimon 21
  • [RFC] Proposal: uninterruptible overload timeouts (overload2)

    [RFC] Proposal: uninterruptible overload timeouts (overload2)

    Genesis: #278, #31, and #84.

    Presently the only support for time based disambiguation of tap/hold is in the form of the timeout action, which allows the user to specify a time that the bound key must be depressed before being interpreted as being held. Crucially the key is unambiguously interpreted as a tap if an intervening keystroke occurs before the timeout has expired.

    While this is useful for overloading keys which are commonly struck in isolation (e.g space), it does not account for keys struck in quick succession, which must allow for the possibility of interleaved events.

    Specifically, an attempt to type <a> <b> (tapping behaviour), can produce any of:

    1. <a down> <b down> <b up> <a up>
    2. <a down> <b down> <a up> <b up>
    3. <a down> <a up> <b down> <b up> 

    while the attempt to type <a>+<b> (a 'hold'), can produce:

    <a down> <b down> <b up> <a up> (1)
    <a down> <b down> <a up> <b up> (2)


    To distinguish between the two possible interpretations, we introduce a new variant of overload: overload2(<layer>, <action>, <timeout>) (called timeout3 in #278)

    The binding is resolved immediately after either:

    a. The timeout expires (<layer>) or b. The bound key is released (<action>)

    This differs from timeout in that intervening key strokes are ignored (achieved by queueing them). This comes at the cost of additional visual latency, but potentially allows for commonly struck keys, to serve a dual purpose.

    The proposed behaviour appears to be equivalent to QMK's default tap/hold feature.

    opened by rvaiya 20
  • Simulate or pass through App Switching

    Simulate or pass through App Switching

    I mistakenly thought I'd encountered an error state via #47. Thank you to the @rvaiya for the help there. I'm opening this new ticket to discuss what I actually want to achieve, so I can be clearer and potentially get better advice :)

    I'm trying to make Linux shortcuts behave like Mac OS:

    • I have a Win (Meta) key that can be used for application switching, e.g. Meta-Tab and Meta-Shift-Tab
    • I have an Alt key to the left of the spacebar where Cmd normally is, so I'm thinking of Alt as the "do everything" modifier, like Cmd is in Mac OS.
    • When I press Alt-C I want to simulate the Linux system-wide "Copy" shortcut key: Ctrl-Insert
    • When I press Alt-V I want to simulate the Linux system-wide "Paste" shortcut key: Shift-Insert
    • When I press and hold Alt, followed by any sequence of Tab or Grave (tilde) I want to simulate Meta-Tab (for each Tab press/release) or Meta-Shift-Tab (for each Grave press/release), until Alt is released. (In this "held" state, after an initial Tab or Grave has been pressed, it's ok--maybe even desirable?--to do nothing when C or V are pressed, even though technically Alt is also being pressed and that could be considered an Alt-C or Alt-V sequence).

    How can I achieve this "dual nature" Alt key in keyd?

    (Note: the important part here is that once we enter the "app switching" state, the Alt key cannot be released, or else the app switcher will be shut off and lose its state)

    enhancement implemented 
    opened by canadaduane 20
  • Lorien ignores bindings from keyd-application-mapper

    Lorien ignores bindings from keyd-application-mapper

    Application bindings set for Lorien in ~/.config/app.conf don't work when keyd-application-mapper is running, even though the window is detected. Lorien was installed from the AUR package lorien-bin. When a Lorien window is in focus, it shows up in keyd-application-mapper's logs as Active window: lorien|lorien-v0-4-0.

    Here's my configs:


    extend.i = S-pagedown
    extend.o = S-pageup
    extend.i = pagedown
    extend.o = pageup
    extend+shift.b = C-y
    # Colemak-DH (Curl+Angle mods)
    esc = overload(switch, capslock)
    capslock = overload(extend, esc)
    rightmeta = compose
    rightcontrol = rightcontrol
    rightshift = rightshift
    e = f
    r = p
    t = b
    y = j
    u = l
    i = u
    o = y
    p = ;
    s = r
    d = s
    f = t
    h = m
    j = n
    k = e
    l = i
    ; = o
    z = x
    x = c
    c = d
    b = z
    n = k
    m = h
    esc = overload(switch, capslock)
    capslock = overload(extend, esc)
    rightmeta = compose
    rightcontrol = rightcontrol
    rightshift = rightshift
    e = e
    r = r
    t = t
    y = y
    u = u
    i = i
    o = o
    p = p
    s = s
    d = d
    f = f
    h = h
    j = j
    k = k
    l = l
    ; = ;
    z = z
    x = x
    c = c
    b = b
    n = n
    m = m
    capslock = esc
    j = left
    k = down
    l = up
    ; = right
    1 = f1
    2 = f2
    3 = f3
    4 = f4
    5 = f5
    6 = f6
    7 = f7
    8 = f8
    9 = f9
    0 = f10
    - = f11
    = = f12
    m = home
    / = end
    i = pagedown
    o = pageup
    f = backspace
    r = delete
    s = layer(alt)
    d = layer(shift)
    space = layer(control)
    g = enter
    s = layer(alt)
    d = layer(shift)
    space = layer(control)
    s = layer(alt)
    d = layer(shift)
    space = layer(control)
    s = layer(alt)
    d = layer(shift)
    space = layer(control)
    q = toggle(qwerty)
    w = toggle(noCapsLayer)
    opened by i-c-u-p 19
  • [feature request] timeout for tapping overloaded keys

    [feature request] timeout for tapping overloaded keys

    First of all, thank you VERY much for this great program which finally allowed me to escape the xkb custom layout hell (with all its quirks and limitations).

    I have one rather important (at least for me) feature request: When overloading a key, there is no way to avoid the tapping action once the key has been pressed. For example, when mapping the space cadet shift (tapping the shift keys yields parentheses), if one intends to type something after ending a sentence and presses shift out of habit but then needs to think a bit about which word to actually type, there is no way to release shift again without parentheses appearing. Another example is the alt key, which brings up a menu in common browsers. If the alt key is overloaded, there is no way to bring up this menu.

    As a way out, one could implement a simple timer (one second should be a good default) which starts after an overloaded key has been pressed, only executing the tapping action if the key is released while the timer is still running. This timer should be enabled by default in my opinion (maybe globally configurable), as I can't imagine anybody who wants to tap a key to hold it one second or longer. Alternatively (or in addition), it could be added as a fourth argument to the overload action.

    Thanks a lot in advance!

    opened by herrsimon 18
  • Mapping multiple keys to an action

    Mapping multiple keys to an action

    I have Microsoft Ergonomic Keyboard. It's a good keyboard, but contains two strange and useless keys between right alt and right control: "microsoft office" and "smile".

    Panel3-Microsoft-Ergonomic-Keyboard-J-Cen-Feat (photo from microsoft.com).

    When the "microsoft office" key is pressed it produces four keys: control, shift, alt and meta.

    > sudo systemctl stop keyd && sudo keyd -m
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   leftcontrol down
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   leftshift down
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   leftalt down
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   leftmeta down

    When the "smile" key is pressed it produces five keys, like "microsoft office" but with additional space key.

    > sudo systemctl stop keyd && sudo keyd -m
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   leftcontrol down
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   leftshift down
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   leftalt down
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   leftmeta down
    Microsoft Microsoft Ergonomic Keyboard  045e:082c   space down

    I just want to bind "microsoft office" to meta, with something like this:

    leftcontrol-leftshift-leftalt-leftmeta = layer(meta)

    Can I achive this in the current version? E.g. with some layer configuration. Is there a more direct way to do this planned in future releases?

    microsoft ergonomic keyboard 
    opened by alefbragin 18
  • SpaceFN is a bit too slow

    SpaceFN is a bit too slow

    First of all: as a user with a QMK keyboard that also has to regularly type on a laptop your keyd is a blessing.

    As a diehard vim guy I quickly was able to translate the most important stuff of my qmk setup to keyd:

    # Turns capslock into an escape key when pressed and a control key when held.
    capslock = overload(C, esc)
    # Remaps the escape key to capslock
    # esc = capslock
    # space when tapped, spacefn when held
    space = overload(spacefn, space)
    tab = overload(tabfn, tab)
    h = left
    j = down
    k = up
    l = right
    h = home
    j = pagedown
    k = pageup
    l = end
    • caps as ctrl/esc works like a charm, bye xcape
    • initial tests with SpaceFn and TabFn work: nice, bye xmodmap+setxkbmap

    Then I started to write an email and realizedthatthespace keyddoesnt work asreliable :/ My typing speed is non-spectacular (75-80 wpm according to monkeytype.com) but a space doesnt come through two thirds of the time.

    Is there anything I can do to make this more accurate? Did I configure something wrong?

    enhancement todo timeouts 
    opened by toneman77 18
  • Feature request: Fine tuning for overload

    Feature request: Fine tuning for overload

    I started experimenting with home row mods again, this time on QMK using its fine tuning options and was finally able to get a usable configuration.

    The crux for me (as I type rather fast) is to only enable the modifier behaviour if the overloaded key has been held for a certain amount of time (independently of other pressed keys). Unfortunately, I don't think that this is currently possible on keyd using a combination of overload() and timeout() (please correct me if I'm wrong).

    To explain better what I mean, let's assume that the f key should output an f if tapped and act as shift if held while another key is pressed.

    The event sequence when I want to input J is then

    1. f down
    2. j down
    3. f up
    4. j up

    which is problematic as those precise events are regularly generated as well upon entering fj.

    To disambiguate, one would need to examine how long the f key has been held down and then apply the mod if some threshold has been exceeded.

    I thought about an overload2(layer, action, tap_time) action, which only shifts the layer if the key is held down for at least tap_time ms (independently of whether other keys are pressed before the key is released).

    An implementation of this could be to waits for tap_time ms upon key press, buffering all occuring key events during that time. If at any point a keyup event of the overloaded key is seen, execute action and then process the buffered key events on the current layer. If tap_time expired without such a keyup event, process the buffered (and all other incoming) key events on layer until the keyup event occurs.

    For the same reasons as in my other recent feature request, overload2 might not be the best name for this and a more user friendly way would simply be to allow tap_time as an optional argument (otherwise applying a default which the user could modify in the [globals] section).

    opened by herrsimon 17
  • Mouse not working as soon as keyd is running

    Mouse not working as soon as keyd is running

    First of all: Super cool project, I love it! Unfortunately as soon I start keyd my Logitech Mouse using the Unifing Wireless Receiver does not work anymore until I stop it again.

    documentation todo mice 
    opened by JanJamaszyk-FlyNow 16
  • Question about layer_indicator

    Question about layer_indicator

    I need my keyboard indicator to turn on when one particular layer is on.

    As far as i understand layer_indicator can only turn on when any layer is active. Can i make layer_indicator turn indicator on only on one certain layer? If not, i think i can try to turn on/off numlock when layer is on/off just for the indicator, but it's such a poor fix. Is there other way around? Thank you.

    opened by Kerbiat 1
  • \ not working?

    \ not working?

    When i run keyd 2.4.2 with the following config:

    [ids] *


    [ids] *

    [main] \ = \

    The \ key produces #

    When i run it with: [ids] *

    [main] \ = ?

    It produces ?

    I'm puzzled about this behavior. How do i get a \?

    opened by mariosk8s 1
  • Toggle two layers at once?

    Toggle two layers at once?

    Hi, thanks for a very useful tool.

    I'm wondering if I could have an action that toggles two layers at once and also run a macro. Use case is as such: I have a nav layer that maps a whole bunch of keys to ctrl and alt actions, for use with programs such as firefox and slack. A few of these actions focus on text entry boxes. I would like to implement 'modes', so that if I type 't', it opens a new tab with C-t, and also removes the nav layer, and also adds in a new layer with one change: the enter key re-enters nav 'mode'. Simply toggling a second layer doesn't remove the nav layer, and so I can't enter text properly. Swap would be useful here if the changes were permanent instead of only while holding the key.

    clearm is what I'm currently using but I'd love to have more precise control over which layers are active at any given time.

    I've read through the manpages and issues enough to understand that layers aren't intended to have any kind of priority, and that's fine. I'd just like to be able to toggle two or perhaps even more layers at once along with a macro so I can build up modal workflows. Also would be nice if clear accepted multiple layers, again with a macro.

    Thanks again, this might eventually allow me to ditch qmk and the like!!

    opened by vg250156 4
  • Simple vim keymapping (right alt + hjkl) not working

    Simple vim keymapping (right alt + hjkl) not working

    I'm trying to map right alt + hjkl to arrow keys with this configuration (stored in /etc/keyd/default.conf):

    h = left
    j = down
    k = up
    l = right

    However, keyd doesn't pick it up, althoughthe configuration is read by keyd (as per output of journalctl). keyd -m shows that right alt + hjkl key combinations are still producing h, j, k, l keystrokes, not arrows as desired.

    OS: Ubuntu 22.04 keyd version: 2.4.2 (compiled from the git tag)

    Keep in mind that I'm using Gnome Tweaks too to remap Caps to escape an Meta to Win (if it can have an impact on keyd).

    Am I missing something?

    opened by mgryszko 2
  • How to map different keys for different keyboards?

    How to map different keys for different keyboards?

    Keyd is amazing, I use karabiner on macos, keyd is perfect replacement for karabiner on linux, keyd is more faster and friendly. but karabiner able to use different profile to handle different device, so I have a hhkb keyboard that layout has litter different with standard keyboard layout, so how to map different keys for different keyboards.

    opened by huwqchn 2
I've switched to gitlab as the main receptacle for my public projects. Please see https://gitlab.com/rvaiya
MIDI remapping plugin (WIP)

Wolf MidiCurve Wolf MidiCurve is a MIDI remapping plugin. It can be built as an LV2 or VST plugin and as a standalone Jack application. Build manually

Wolf Plugins 8 Oct 21, 2022
⌨️ Personal key mapping for The Key.

The Key Personal key mapping for The Key. This firmware configures: The first key to be the mute key on single tap, and the pause/play key on double t

Zihua Li 1 Dec 25, 2021
PTP daemon (PTPd) is an implementation the Precision Time Protocol (PTP) version 2

PTPd PTP daemon (PTPd) is an implementation the Precision Time Protocol (PTP) version 2 as defined by 'IEEE Std 1588-2008'. PTP provides precise time

null 404 Dec 22, 2022
A zero-configuration fan daemon for ThinkPads

zcfan Zero-configuration fan control daemon for ThinkPads. Features Extremely small (~250 lines), simple, and easy to understand code Sensible out of

Chris Down 25 Dec 23, 2022
Make your Pop!_OS (Ubuntu Linux) shortcut key experience more like Mac OS

Meta Mac Enables a Mac OS-like shortcut key experience on Pop!_OS (and most Ubuntu-based Linux distros). Installation Download or git clone this repos

Duane Johnson 14 Dec 31, 2022
split89 keyboard - a 3d printed 89 key split TKL keyboard base powered by ATmega32U4 Pro Micro controllers with QMK Configurator support.

split89 keyboard - a 3d printed 89 key split TKL keyboard base powered by ATmega32U4 Pro Micro controllers with QMK Configurator support. This keyboar

null 54 Jan 7, 2023
IDA Pro key checker tool

IDA Key Checker IDA Pro (6.x-7.x) key checker tool Usage A list of available options can be retrieved using: ida_key_checker --help Arguments: Option

null 58 Dec 26, 2022
A 2-key ISO enter macropad with a 3d printable case

Milk Crate Another milk-themed meme board, for your extra unused base kit/novelty ISO keys. Inspired by Spaceboards/2% Milk. Build Notes Printing Prin

null 8 Dec 17, 2022
A faithful transposition of the key features/functionality of @itm4n's PPLDump project as a BOF.

PPLDump BOF Who worked on this? Justin Lucas (@the_bit_diddler) Brad Campbell (@hackersoup) What is this? Jokingly, an exercise of my own personal san

null 124 Dec 28, 2022
Hook up the OnePlus6(T) tri-state key in PostmarketOS!

OnePlus 6(T) tri-state key support in PostmarketOS As the name suggest, the goal of this little project is to hook up the OnePlus6(T) tri-state key in

Michele Perrone 7 Nov 14, 2021
Implementation of DiffieHellman key exchange.

DiffieHellman What is it? This is an implementation of DiifieHellman key exchange protocol that works with very long inegers(2468 chars long, look at

Mr.Red 1 Jan 10, 2022
Implementation of the key recovery attack against GEA-1 keys (Eurocrypt 2021)

GEA1_break This tool implements the attack against the GEA-1 described in Cryptanalysis of the GPRS Encryption Algorithms GEA-1 and GEA-2. GEA-1 is on

null 47 Sep 21, 2022
A modern-day Boss Key software tool. Switch instantly from work to play & play to work with Bosky.

Bosky By: Seanpm2001, Bosky-dev Et; Al. Top README.md Read this article in a different language Sorted by: A-Z Sorting options unavailable ( af Afrika

Sean P. Myrick V19.1.7.2 2 Sep 10, 2022
Map joystick events to mouse/key events

enjoy map joystick events to mouse/key events Recently, I got a DevTerm and enjoy is specially written for this device to map joystick events to mouse

null 1 Nov 19, 2021
Azure Key Vault and Managed HSM Engine, compatible with OpenSSL

Introduction The Azure Key Vault and Managed HSM Engine allows OpenSSL-based applications to use RSA/EC private keys protected by Azure Key Vault and

Microsoft 11 Nov 28, 2022
A custom-made 11 key macropad + 2 rotary encoders with minimal components.

⌨ Ladispad Ladispad is a custom-made 11 key macropad with 2 rotary encoders designed for the simplicity and the ease of assembly to non technical user

null 25 Dec 21, 2022
An efficient, small mobile key-value storage framework developed by WeChat. Works on Android, iOS, macOS, Windows, and POSIX.

中文版本请参看这里 MMKV is an efficient, small, easy-to-use mobile key-value storage framework used in the WeChat application. It's currently available on Andr

Tencent 15.4k Jan 8, 2023
A high performance, shared memory, lock free, cross platform, single file, no dependencies, C++11 key-value store

SimDB A high performance, shared memory, lock free, cross platform, single file, no dependencies, C++11 key-value store. SimDB is part of LAVA (Live A

null 454 Dec 29, 2022
Modern transactional key-value/row storage library.

Sophia is advanced transactional MVCC key-value/row storage library. How does it differ from other storages? Sophia is RAM-Disk hybrid storage. It is

Dmitry Simonenko 1.8k Dec 15, 2022