SkillAgentSearch skills...

Winmd

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

Install / Use

/learn @halildurmus/Winmd
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

This package has moved

The package can now be found at https://github.com/halildurmus/win32/tree/main/packages/winmd.


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

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

⚡ 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.

View on GitHub
GitHub Stars30
CategoryProduct
Updated1mo ago
Forks5

Languages

Dart

Security Score

95/100

Audited on Feb 26, 2026

No findings