regedit-rs
A high-performance Windows registry toolkit inspired by node-regedit, powered by Rust with napi-rs It enables easy manipulation of the Windows registry with optimized performance.
Install
npm install regedit-rs
Example
import { list, createKey, putValue, deleteKey, deleteValue, RegSzValue, RegDwordValue, RegExpandSzValue } from "regedit-rs";
async function main(){
const keys = ["HKCU\\Software\\regedit-rs", "HKCU\\Software\\regedit-rs\\test"];
const result = await list(keys);
if(!result[keys[0]].exists){
return;
}
const nameValue = result[keys[1]].values["name"].value;
const newPath = new RegExpandSzValue(`%APPDATA%\\${nameValue}`);
if(newPath.expandedValue !== "C:\\Users\\username\\AppData\\Roaming\\test name"){
return;
}
await createKey("HKCU\\Software\\regedit-rs\\test");
await putValue({
"HKCU\\Software\\regedit-rs\\test": {
"name": new RegSzValue("test name"),
"number": new RegDwordValue(123),
"path": newPath
}
});
await deleteKey("HKCU\\Software\\regedit-rs\\old_test");
await deleteValue({
"HKCU\\Software\\regedit-rs\\test": ["name", "number", "path"]
});
}
main();
API
Every function are binded to Rust and support batching to improve performance.
Reading keys and values
List registry key(s) and value(s)
const res = await list(["HKCU\\SOFTWARE", "HKLM\\SOFTWARE", "HKCU\\DONT_EXIST"]);
Result will be an object with the following structure:
{
"HKCU\\SOFTWARE": {
"exists": true,
keys: ["HKCU\\SOFTWARE\\Microsoft", "HKCU\\SOFTWARE\\regedit-rs", ...],
values: {
szValue: [RegSzValue] // RegSzValue is a class with a value property
dwordValue: [RegDwordValue] // RegDwordValue is a class with a value property
expandSzValue: [RegExpandSzValue] // RegExpandSzValue is a class with a value and expandedValue property
}
},
"HKLM\\SOFTWARE": {
"exists": true,
keys: ["HKLM\\SOFTWARE\\Microsoft", "HKLM\\SOFTWARE\\regedit-rs", ...],
values: {
szValue: [RegSzValue]
dwordValue: [RegDwordValue]
qwordValue: [RegQwordValue]
expandSzValue: [RegExpandSzValue]
}
},
"HKCU\\DONT_EXIST": {
"exists": false,
keys: [],
values: {}
}
}
Creating keys
Create registry key(s) if not exists
await createKey("HKCU\\SOFTWARE\\regedit-rs\\test");
await createKey(["HKCU\\SOFTWARE\\regedit-rs\\test", "HKCU\\SOFTWARE\\regedit-rs\\test2"]);
Putting values
Put or update registry value(s)
await putValue({
"HKCU\\SOFTWARE\\regedit-rs\\test": {
"name": new RegSzValue("test name"),
"number": new RegDwordValue(123),
"path": new RegExpandSzValue("%APPDATA%\\test name")
}
});
Deleting keys
Delete registry key(s) and all subkeys
await deleteKey("HKCU\\SOFTWARE\\regedit-rs\\test");
await deleteKey(["HKCU\\SOFTWARE\\regedit-rs\\test", "HKCU\\SOFTWARE\\regedit-rs\\test2"]);
Deleting values
Delete registry value(s)
await deleteValue({
"HKCU\\SOFTWARE\\regedit-rs\\test": ["name", "number", "path"]
});
More
See all types, functions, and classes at index.d.ts
Sample Benchmark
npm run bench
Running "List keys and values of a registry key" suite...
Progress: 100%
regedit-rs:
3 162 ops/s, ±1.01% | fastest
regedit:
18 ops/s, ±0.37% | slowest, 99.43% slower
winreg:
33 ops/s, ±0.60% | 98.96% slower
Finished 3 cases!
Fastest: regedit-rs
Slowest: regedit
Running "Create a registry key" suite...
Progress: 100%
regedit-rs:
116 548 ops/s, ±0.74% | fastest
regedit:
22 ops/s, ±0.64% | slowest, 99.98% slower
winreg:
43 ops/s, ±1.00% | 99.96% slower
Finished 3 cases!
Fastest: regedit-rs
Slowest: regedit
Running "Put a registry value" suite...
Progress: 100%
regedit-rs:
59 015 ops/s, ±0.77% | fastest
regedit:
22 ops/s, ±0.92% | slowest, 99.96% slower
winreg:
43 ops/s, ±0.85% | 99.93% slower
Finished 3 cases!
Fastest: regedit-rs
Slowest: regedit
Test or Contributing
- Clone this repo
- Install latest stable Rust
- Install Node.js 10+
- Install dependencies with
npm install
- Build bindings with
npm run build
- Run
npm test
Release package
We use GitHub actions to automatically publish npm packages.
# 1.0.0 => 1.0.1
npm version patch
# or 1.0.0 => 1.1.0
npm version minor