windows-rs lets you call Windows APIs - past, present, and future - directly from Rust. It is not
a single crate but a family of them, from low-level API access to high-level declarative UI. This
page helps you find the right crate for the job; each crate's own documentation then covers how to
use it, with examples.
Most of these crates are small and focused - string types, error handling, the registry,
collections, and so on - and you depend only on what you actually use. For broad, exploratory access
to the entire Windows API surface, the windows and
windows-sys crates project everything past, present, and future, gated
behind per-namespace 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.