win32_registry 3.0.2
win32_registry: ^3.0.2 copied to clipboard
A modern, type-safe Dart API for accessing and managing the Windows Registry.
Changelog #
All notable changes to this project will be documented in this file.
3.0.2 - 2026-02-27 #
🏠 Repository #
- Package has been moved to the
halildurmus/win32monorepo.
3.0.1 - 2026-02-26 #
📦 Dependencies #
- Allow
package:metaversions from1.17.0up to but not including2.0.0to ensure compatibility with a wider range of Dart SDK versions.
3.0.0 - 2026-02-22 #
🔄 Breaking Changes #
This release introduces a major overhaul of the API with improved type safety, and powerful new capabilities.
The package now offers transaction support, enhanced monitoring, and a more intuitive interface for managing registry keys and values.
Key breaking changes include:
-
API Restructuring:
- Removed
Registryclass entirely. Static methods likeRegistry.openPath()are no longer available. - Removed
RegistryHiveenum. Use predefined top-level fields instead:RegistryHive.localMachine→LOCAL_MACHINERegistryHive.currentUser→CURRENT_USERRegistryHive.classesRoot→CLASSES_ROOTRegistryHive.allUsers→USERSRegistryHive.performanceData→PERFORMANCE_DATARegistryHive.currentConfig→CURRENT_CONFIG
- Removed
-
AccessRights→RegistryAccess:- Replaced enum with a final class offering bitwise combination support.
- Renamed constants:
readOnly→readwriteOnly→writeallAccess→all
- Added new access rights:
notify,readWrite - Supports combining access rights with the
|operator.
-
RegistryKey:- Opening and creating keys now requires calling methods on predefined
constants or existing keys:
- Old:
Registry.openPath(RegistryHive.localMachine, path: keyPath) - New:
LOCAL_MACHINE.open(keyPath)
- Old:
- Renamed methods:
getBinaryValue()→getBinary()getIntValue()→getInt()getStringValue()→getString()getStringArrayValue()→getMultiString()createKey()→create()deleteKey()→removeSubkey()deleteValue()→removeValue()renameSubkey()→rename()
create()andopen()now accept aRegistryOpenConfigparameter for fine-grained control of access rights, options, and transactions.onChanged()stream functionality replaced withRegistryChangeMonitorclass.
- Opening and creating keys now requires calling methods on predefined
constants or existing keys:
-
RegistryValue:- Constructors no longer accept a
nameparameter. Value names are now passed directly tosetValue():- Old:
RegistryValue.string('MyValue', 'data') - New:
key.setValue('MyValue', RegistryValue.string('data'))or with dot shorthand syntax:key.setValue('MyValue', const .string('data'))
- Old:
- Renamed factory constructors:
int32()→dword()int64()→qword()stringArray()→multiString()
- Constructors no longer accept a
-
RegistryValueType:- Changed from enum to final class with a factory constructor.
- Renamed constants:
int32→dwordint64→qwordstringArray→multiString
- Renamed field:
value→raw - Replaced
fromWin32()factory withfromRaw().
🚀 Features #
-
Transaction Support:
- New
Transactionclass enables atomic registry operations. - Pass a
Transactioninstance viaRegistryOpenConfigto perform multiple operations that can be committed or rolled back as a unit.
- New
-
Enhanced Registry Monitoring:
- New
RegistryChangeMonitorclass provides isolate-backed, stream-based monitoring of registry key changes. - Replaces the previous
onChanged()stream approach with more robust error handling and resource management.
- New
-
Configuration Objects:
RegistryOpenConfig: Centralizes parameters for opening and creating keys (access rights, creation behavior, options, transactions).RegistryOpenOptions: Type-safe wrapper for native registry options (nonVolatile,volatile,createLink,backupRestore, etc.).
-
New Key Management Methods:
removeTree(): Recursively deletes all subkeys and values within a key without deleting the key itself.removeValues(): Deletes all values under a key without affecting subkeys.
📦 Dependencies #
- Bumped minimum required Dart SDK version to
3.11.0.
2.1.0 - 2025-02-19 #
2.0.1 - 2024-12-10 #
2.0.0 - 2024-11-02 #
This release introduces significant changes to the API with a streamlined structure, new methods for specific registry data handling, and enhanced support for monitoring registry key changes.
🔄 Breaking Changes #
-
AccessRights:win32Valuefield renamed tovalue.
-
Registry:- Now an
abstract finalclass. - Removed
performanceDatastatic getter.
- Now an
-
RegistryHive:- Constructor is now private.
win32Valuefield renamed tovalue.
-
RegistryKey:- Now a
finalclass.
- Now a
-
RegistryValue:- Now a
sealedclass. - Removed
fromWin32factory constructor. - Removed
toWin32getter. - Removed
datafield.
- Now a
-
RegistryValueType:- Constructor is now private.
win32Valuefield renamed tovalue.- Removed
unknownvalue. - Removed
win32Typegetter.
✨ New Features #
-
Registry Hive Construction:
- Added
RegistryHive.fromWin32factory constructor for creating hives based on Win32 constants.
- Added
-
Enhanced Data Retrieval:
- Added type-specific methods to
RegistryKey:getBinaryValue,getIntValue,getStringValue, andgetStringArrayValuefor retrieving data in specific formats. - Deprecated
getValueAsIntandgetValueAsStringmethods in favor of the new type-specific methods.
- Added type-specific methods to
-
Registry Change Notifications:
- Introduced
RegistryKey.onChangedstream for monitoring registry key changes, with optional subkey tracking.
- Introduced
-
Typed Registry Values:
- Introduced specialized subclasses in
RegistryValuefor each registry value type, enhancing clarity and simplifying data handling.
- Introduced specialized subclasses in
-
Registry Value Type Construction:
- Added
RegistryValueType.fromWin32factory constructor to handle value type creation based on Win32 constants.
- Added
🚨 Dart SDK Requirement #
- Bumped the minimum required Dart SDK version to
3.5.0.
1.1.5 #
- Fix issue where creating
REG_SZorREG_EXPANDED_SZstring registry values resulted in malformed data. The null terminator for string values was incorrectly encoded as a single byte instead of the required two bytes for UTF-16 encoding (#22, thanks to @dancarrollg).
1.1.4 #
- Fix issue where
RegistryValue.datafor binary-type registry values might be freed before being read (#19, thanks @tylerlacey). - Bump minimum required Dart SDK version to
3.4.0
1.1.3 #
- Fix deprecation warnings
- Update links
- Bump minimum required Dart SDK version to
3.3.0
1.1.2 #
- Improved code quality.
- Improved documentation.
1.1.1 #
- Update dependency constraints.
1.1.0 #
- Add
recursivenamed option to methoddeleteKey()ofRegistryKey(thanks @Zekfad) - Use enhanced enums from Dart 2.17.
- Update dependency constraints.
1.0.2 #
- Update
ffidependency constraints to>=1.1.2 <3.0.0.
1.0.1 #
- Minor tweaks to documentation.
1.0.0 #
- First stable release.