nudelta: an open source replacement for the NuPhy Console on three keyboard models
Open source NuPhy Console alternative
At a glance
- What is it?
- nudelta remaps NuPhy Air75 V1, Air60 V1 and Halo75 V1 keyboards by reverse engineering their USB protocol, with a GUI for keymaps and a CLI for loading profiles, dumping keymaps, and resetting to defaults. It is GPL-3.0 licensed and explicitly limited to those three boards.
- Who is it for?
- nudelta is worth trying if you own an Air75 V1, an Air60 V1, or a Halo75 V1 and want keymap changes without the vendor application or a Windows machine. It is the wrong tool for every other NuPhy board, since the project states those use a different protocol, and it is the wrong tool if you need macros or RGB control.
- Can I use it commercially?
- Yes, with conditions. GPL-3.0 is a copyleft licence: if you distribute software that includes it, you must release that software's source code under the same licence. Running it internally without distributing it does not trigger that obligation.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly JavaScript, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 23, 2026, and from our analysis. They are not legal advice.
Editorial analysis
nudelta exists because NuPhy's own console is closed source
nudelta is an open source alternative to the NuPhy Console, built by reverse engineering the USB protocol that the keyboards speak. The motivation is straightforward: the vendor console is the only supported way to change keymaps on some NuPhy boards, and it is proprietary software for a piece of hardware you already own. The README is careful about its legal and technical position. It states that NuPhy is a registered trademark of NuPhy Studio, that nudelta is an unofficial product and is not affiliated with NuPhy Studio, and that the project only supports Air60, Air75, and Halo75 V1. The audience is Linux, macOS, and Windows users with one of those three boards who want remapping without installing a vendor application, plus people who simply prefer a text file they can keep in version control over a vendor GUI.
The README lists what is missing as plainly as what is there
Most reverse engineering projects advertise. This one enumerates its gaps. There are no macros. There is no multi-layer remapping for the Air60, and no support for other keyboards at all, because the author does not have them. There is no support for keyboards that do not use the NuPhy Console protocol, including the Air75 V2, V3 and HE, because those speak a different protocol. There is no RGB control, with the comment that the author does not need that personally. The README then says contributions are appreciated for all of these gaps. That framing tells you what kind of project this is: a working tool with a clear boundary, not a product roadmap, and the one-line summary of the supported hardware is short enough to memorise: Air75 V1, Air60 V1 with limited support, and Halo75 V1, on Windows 10 or newer, macOS 11.3 or newer, and Linux.
Keymaps load from a yml file with a flat key map
The configuration format is a YAML file with a single top level object named keys, mapping physical keys on the board to their replacements. The minimal example in the README is two lines:
keys:
capslock: escThat is the whole schema. The physical keys available for remapping are listed in per-board index files, for example `res/Air75/indices_win.yml` for the Windows mode of the Air75, and the replacement keycodes live in `res/Air75/default_keymap_win.yml`. The existence of a Windows-specific index file is a small but real constraint: the remappable set depends on the mode the keyboard is in, so a profile written for one mode may not map cleanly in another. The repository also ships `example.yml` as a worked profile. Because the format is a plain text mapping of key names to key names, a profile is diffable, reviewable, and easy to keep alongside the rest of a dotfiles repository, which is the practical advantage over a vendor tool where the layout lives in a binary blob.
The CLI covers loading, dumping, and resetting keymaps
Beyond the GUI, the CLI is where the tool earns its keep, and the README lists three capabilities: loading and saving keymap modifications from a `.yml` configuration file, backing up and dumping keymaps to binary formats, and dumping keymaps to a human-readable hex format. Loading a custom profile is one flag:
nudelta -l ./donns_remap.ymland resetting the board to its default keymap is another:
nudelta -rThe hex dump format is what makes the binary backup useful to a human, because a hex dump of a keymap is something you can diff and read when a profile does not do what you expected. The permissions story differs by platform and the README says so plainly. On Linux you may need sudo. On macOS you need to grant Input Monitoring permission to whichever Terminal host you run the tool from, most likely Terminal.app. On Windows no special permissions are required, as far as the author can tell, which is the honest phrasing of someone who cannot test every configuration.
Building it means a C++ core, an Electron shell, and five toolchains
The architecture is visible in the repository layout and the package scripts. There is a native side built through CMake into `lib`, `include`, and `src`, which is where the USB protocol work lives, and a user interface under `ui` that is bundled with Rollup and shipped as an Electron app. The build requirements are a C++17 compiler, CMake, pkg-config, Node 22 or newer with Yarn, and Ruby 2.0.0 or newer for glue scripts. The documented build sequence is:
git clone https://github.com/donn/nudelta
cd nudelta
rm -rf build
yarn
yarn build_native # CLI / Library
yarn build # GUI`yarn build_native` produces the command line tool and library, `yarn build` produces the GUI, and the package scripts confirm the split, with `build` running the native build, the UI build, and electron-builder with publishing disabled. The Linux AppImage lands under `./dist` and the Mac app under `./dist/mac`. There is also a Nix path, `nix run github:donn/nudelta`, and a NixOS udev rule in the README for hidraw access.
The NixOS udev rule is the step most people will miss
Running the tool on Linux as a regular user needs a device rule, and the README spells it out:
services.udev.extraRules = ''
# Hidraw for Seated Users (This rule requires a reboot)
KERNEL=="hidraw*", SUBSYSTEM=="hidraw", TAG+="uaccess"
'';The tag gives the hidraw device to the logged-in user rather than to root, which is what removes the need for sudo on Linux for the common case. The comment in the README notes that the rule requires a reboot. That is a small but characteristic detail of this project: the operation depends on raw HID access, so the operating system has to hand the device over explicitly, and on macOS the equivalent gate is the Input Monitoring permission prompt. The repository also includes a `Dockerfile` for Linux builds based on a manylinux image with CMake, Node, libudev development headers, and Ruby installed, which is a convenience for producing the AppImage in a container rather than on your workstation.
GPL-3.0 and a version below 1.0
The project is licensed under the GNU General Public License v3 or, at your option, any later version, and the package metadata records `GPL-3.0-or-later`. For a hardware utility that talks to your own keyboard, that is a reasonable choice for a reverse engineered project, and it is worth reading alongside the trademark statement at the top of the README, since the licence covers the software while the NuPhy name and the hardware stay with their owner. The version number tells the other story: 0.10.0, released on 2026-06-13, after 0.9.0 in October 2025 and 0.8.0 in March 2025. A pre-1.0 version number here signals that the CLI flags and the profile format may still change. The repository also carries a `Changelog.md`, an `OSAcknowledgements.txt`, a `flake.nix`, and a `util/usb` directory holding hex dumps for the Air96 V1 and Halo96 V1 keymaps, with pull requests for support for those boards invited.
Editorial conclusion
nudelta is worth trying if you own an Air75 V1, an Air60 V1, or a Halo75 V1 and want keymap changes without the vendor application or a Windows machine. It is the wrong tool for every other NuPhy board, since the project states those use a different protocol, and it is the wrong tool if you need macros or RGB control. Before you commit to it, confirm your exact board revision against the supported list in the README, then try the CLI reset and a single key remap from a `.yml` profile before touching your daily layout, because a mistaken profile write is as easy to make as a mistaken one in any other remapper.
Frequently asked questions
Which NuPhy keyboards does nudelta support?
The README states that nudelta only supports Air60, Air75, and Halo75 V1. Air75 V1, Halo75 V1, and Air60 V1 with limited support are the supported models, and the Air60 has no multi-layer remapping.
Can nudelta remap the Air75 V2 or Halo75 V2?
No. The README says those keyboards use a different protocol and are not supported, and it points Air75 and Halo75 V2 users to QMK or VIA. Later Air75 models, including the HE, are pointed to the proprietary nuphy.io tool.
How do I load a custom keymap in nudelta?
Run the CLI with the profile flag, for example `nudelta -l ./donns_remap.yml`. The file has a top level `keys` object that maps physical keys to their replacements, such as `capslock: esc`.
How do I reset my NuPhy keyboard to the default keymap?
The CLI has a reset option, `nudelta -r`. You can also dump the current keymap in a human-readable hex format or back it up in a binary format from the same command line tool.
What permissions does nudelta need on Linux and macOS?
On Linux you may need sudo, unless you add a udev rule that tags hidraw devices for the logged-in user, which the README shows for NixOS and notes requires a reboot. On macOS you have to grant Input Monitoring permission to the Terminal host you run the tool from. On Windows no special permissions are required.
Does nudelta support macros or RGB lighting?
No. The README lists macros and RGB control among the things nudelta does not have, along with multi-layer remapping for the Air60 and support for keyboards that use a different protocol.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/donn-nudelta)Was this useful?