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