JSPM

regedit-rs

1.0.3
  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 94
  • Score
    100M100P100Q74725F
  • License MIT

A high-performance Windows registry toolkit, powered by Rust with napi-rs

Package Exports

  • regedit-rs
  • regedit-rs/index.js

This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (regedit-rs) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.

Readme

regedit-rs

GitHub CI Status regedit-rs npm version Rust 1.70+

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