This package provides a Dart abstraction over Windows metadata files, making it possible to load them and build Dart FFI interop libraries from the results.

pub package Language Build


Architecture diagram

Usage (Windows Runtime)

A simple example: loading the MediaPlayer class and retrieving information about its methods.

import 'package:winmd/winmd.dart';

void main() {
  // A Windows Runtime interface
  const typeToGenerate = 'Windows.Media.Playback.MediaPlayer';

  // Load the metadata for this interface
  final typeDef = MetadataStore.getMetadataForType(typeToGenerate)!;

  // Create a Dart projection
  print('$typeToGenerate contains the following methods:');

  for (final method in typeDef.methods) {
    print('  ${}');

Usage (Win32)

Load all the methods from the GDI namespace and print out some metadata.

import 'package:winmd/winmd.dart';

void main() {
  // Load WinMD metadata for Win32, as produced by the following utility:
  final scope = MetadataStore.getWin32Scope();

  // Find a namespace
  final namespace =

  // Sort the functions alphabetically
  final sortedMethods = namespace.methods
    ..sort((a, b) =>;

  // Find a specific function
  const funcName = 'MessageBoxW';
  final method = sortedMethods.firstWhere((m) => == funcName);

  // Print out some information about it
  print('Win32 function $funcName [token #${method.token}]');

  // Retrieve its parameters and project them into Dart FFI types
  final params = method.parameters
      .map((param) =>
          '${'.').last} ${}')
      .join(', ');
  print('The parameters are:\n  $params');

  final returnType ='.').last;
  print('It returns type: $returnType.');

Features and bugs

Please file feature requests and bugs at the issue tracker.


Support for working with Windows Metadata, as defined in the ECMA-335 specification. [...]