windows-rs is a family of crates for Windows APIs, from raw bindings to declarative UI. This page
lists the crates by task.
Most crates cover one area, such as strings, errors, registry access, or collections. The
windows and windows-sys crates provide broad API
coverage behind API-group features.
For most projects, prefer the focused crates below, and generate a minimal, project-specific binding
with windows-bindgen for any additional APIs you need.
Start with what you are trying to do and add the smallest crate that covers it. Follow the link for
usage and examples.
| If you need |
Use |
Windows error handling (HRESULT, Error, Result) |
windows-result |
Windows string types and macros (HSTRING, PCWSTR, h!, w!, s!) |
windows-strings |
COM/WinRT type support (IUnknown, the Interface trait, cast, GUID) |
windows-core |
| To declare or implement a COM/WinRT interface |
windows-core (#[interface] / #[implement]) |
Stock WinRT collections (IVector, IMap) |
windows-collections |
WinRT values (IReference<T>, TimeSpan, DateTime) |
windows-reference, windows-time
|
| Graphics math (vectors, matrices) |
windows-numerics |
| WinRT async bridged to Rust futures |
windows-future |
| The Win32 thread pool |
windows-threading |
| The Windows registry |
windows-registry |
| To author a Windows service |
windows-services |
| The OS version at runtime |
windows-version |
To link C-style functions without import libs (link!, raw-dylib) |
windows-link |
| To generate your own focused bindings |
windows-bindgen |
| A declarative WinUI 3 UI, 2D graphics, a WebView, or a window |
windows-reactor, windows-canvas, windows-webview, windows-window
|
The full categorized index follows. Each crate has one page under crates/ covering both
usage and internals - how the crate is built and maintained (the tool_bindings / tool_reactor /
tool_package codegen pipeline, generated files, and conventions). Each crate's own readme.md is
the user-facing introduction with a quick example, and the per-crate page links to it. Item-level
API reference is the generated rustdoc on docs.rs, linked from every page.
| Crate |
Description |
| windows-core |
Fundamental COM and Windows type support, including the #[interface] / #[implement] authoring macros. |
| windows-result |
Windows error handling and propagation. |
| windows-strings |
Windows string interop types and macros. |
The #[interface] and #[implement] macros are part of windows-core, split into the
windows-interface and
windows-implement crates only because Rust requires procedural macros
to live in a dedicated proc-macro crate.
COM authoring macros & linking
These crates package functionality that is part of other crates but must ship separately.
windows-interface and windows-implement are part of windows-core (see
above); Rust requires their proc macros to live in a dedicated proc-macro crate.
Codegen & metadata tooling
Full Windows API projection
These crates project the entire Windows API surface. For new projects, prefer a focused binding
generated with windows-bindgen, or compose the smaller crates above.
| Crate |
Description |
| windows |
Safer projection of C-style, COM, and WinRT APIs. |
| windows-sys |
Zero-overhead raw bindings for C-style Windows APIs. |
-
Dependencies - every external SDK, header set, metadata file, and runtime the
build and tooling depend on: what version is used, where it is set, how it is obtained, and how to
update it.