winmd 7.0.2 copy "winmd: ^7.0.2" to clipboard
winmd: ^7.0.2 copied to clipboard

Inspect and generate Windows Metadata (.winmd) files based on the ECMA-335 standard.

ci codecov Package: winmd Publisher: halildurmus.dev Language: Dart License: BSD-3-Clause

Inspect and generate Windows Metadata (.winmd) files based on the ECMA-335 standard.

package:winmd provides both low-level primitives and high-level abstractions for working with .winmd files. It is a core component of Dart-based Windows interop tooling — most notably powering package:win32.

✨ Features #

  • Parse .winmd files into rich, strongly-typed Dart object models
  • Query type definitions, methods, fields, and more across multiple metadata sources
  • Resolve symbols quickly without knowing their namespace up front
  • Merge multiple .winmd files into a single, unified file
  • Generate .winmd files programmatically from scratch
  • Cross-platform — works on Windows, Linux, and macOS

🚀 Getting Started #

Add the package to your pubspec.yaml:

dependencies:
  winmd: ^7.0.2

Then import it:

import 'package:winmd/winmd.dart';

⚡ Quick Example #

The example below loads WinRT metadata from a .winmd file and inspects a class and an enum:

import 'dart:io' as io;

import 'package:winmd/winmd.dart';

void main() {
  // Load WinRT metadata from a local .winmd file.
  const winmdPath = r'C:\WINDOWS\System32\WinMetadata\Windows.Storage.winmd';
  final bytes = io.File(winmdPath).readAsBytesSync();
  final reader = MetadataReader.read(bytes);
  final index = MetadataIndex.fromReader(reader);

  // Optional: Use MetadataLookup for efficient type resolution by name.
  // This is especially helpful when the namespace of the target type is
  // unknown.
  final metadata = MetadataLookup(index);

  // Lookup a WinRT class (e.g., StorageFile) and list its public methods.
  final storageFile = metadata.findSingleTypeByName('StorageFile');
  print('WinRT class "${storageFile.name}" has the following methods:');
  for (final method in storageFile.methods) {
    print('  ${method.name}');
  }
  print('');

  // Lookup a WinRT enum (e.g., FileAttributes) and display its members.
  final enumType = metadata.findSingleTypeByName('FileAttributes');
  print('WinRT enum "${enumType.name}" has the following fields:');

  // The first field represents the underlying integral type (e.g., Int32).
  final underlyingType = enumType.fields.first;
  print('  ${underlyingType.name} = ${underlyingType.signature.type}');

  // Subsequent fields are named values within the enum.
  for (final field in enumType.fields.skip(1)) {
    print('  ${field.name} = ${field.constant?.value}');
  }
}

📝 Documentation #

Full API reference is available here:

👉 API Reference.

Additional usage examples are located in the example directory.

🐞 Features and Bugs #

If you encounter bugs or need additional functionality, please file an issue.

10
likes
160
points
1.49k
downloads

Publisher

verified publisherhalildurmus.dev

Weekly Downloads

Inspect and generate Windows Metadata (.winmd) files based on the ECMA-335 standard.

Repository (GitHub)
View/report issues
Contributing

Topics

#winmd #windows #metadata

Documentation

API reference

Funding

Consider supporting this project:

github.com

License

BSD-3-Clause (license)

Dependencies

archive, ffi, logging, meta, nuget, path

More

Packages that depend on winmd