Vulkano: a safe Rust wrapper around Vulkan, and what it costs you
Safe and rich Rust wrapper around the Vulkan API
At a glance
- What is it?
- Vulkano wraps the Vulkan graphics API in Rust types that reject invalid usage at compile time, and it manages GPU synchronization for you. It is a good fit if you want Vulkan's control without writing unsafe code, and a poor fit if you need Metal, DirectX or WebGPU.
- Who is it for?
- Adopt Vulkano if your project is Rust, Vulkan-only, and you want the compiler to catch invalid API usage instead of a validation layer at runtime. Do not adopt it if you need Metal, DirectX or WebGPU from the same code path, or if you want a release cadence you can plan around.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 2 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 30, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The problem Vulkano solves: Vulkan without unsafe code
Vulkan is explicit about everything. You create devices, allocate memory, record command buffers and submit them, and the driver trusts you to get the ordering right. In C or C++ that trust is a liability: a mismatched image layout or a missing semaphore produces corruption or a device loss, not a compile error. Raw Rust bindings such as Ash keep that model and mark the entry points unsafe, so the burden stays with you.
Vulkano takes the opposite position. Its stated goal is that "as long as you don't use unsafe code you shouldn't be able to trigger any undefined behavior", which for Vulkan means non-unsafe code should conform to valid API usage. The README is explicit that this is not a teapot-drawing library: it aims to cover all possible usages of Vulkan and detect the problems, through a mix of compile-time and runtime checks.
The audience follows from that. Vulkano is for Rust developers building renderers, compute pipelines, or engine layers who want Vulkan's control surface but are unwilling to hand-audit every submission. It is less useful if you only need to draw a few triangles and would rather not learn Vulkan's object model at all.
How Vulkano manages GPU synchronization
The part of Vulkan that Vulkano most visibly takes over is synchronization. In raw Vulkan you insert pipeline barriers, decide image layouts, and pair semaphores with queue submissions by hand. Vulkano instead detects dependencies between submissions and manages the semaphores for you, which the README calls out as an area that is "both annoying to handle and error-prone".
The repository is a Cargo workspace with four published libraries rather than one crate. vulkano holds the core API. vulkano-shaders compiles GLSL or SPIR-V at build time into Rust types, and the generated types carry the shader's layout, so a mismatch between a shader binding and the descriptor you write shows up as a type error. vulkano-taskgraph is a separate crate for expressing work as a graph of tasks. vulkano-util provides convenience helpers on top. There is also an autogen crate in the workspace that generates bindings from the Vulkan registry; the workspace manifest notes that when Ash is updated, vk.xml must be updated to the same Vulkan patch version and `cargo run --bin autogen` re-run.
The escape hatch matters as much as the default. The README states that the synchronization behavior can be customized through unsafe trait implementations, so you can take manual control where the automatic path is too coarse. That is a deliberate trade: the safe path is the default, and opting out requires writing unsafe code.
Installing Vulkano and running a first example
Vulkano is published on crates.io, and the workspace pins the current line at version 0.35. The workspace manifest sets `rust-version = "1.88.0"` and `edition = "2021"`, so a toolchain at or above 1.88 is required. The README points newcomers first to the examples folder in the repository, then to docs.rs and the guide on vulkano.rs, which starts with compute examples of around 50 lines and works up to triangles and mandelbrots. The README also notes that the guide is "currently outdated a little".
The examples are workspace members, so the workspace manifest's `members` list is what makes them buildable from the repository root. The folder contains entries such as `basic-compute-shader`, `interactive-fractal`, `multi-window`, `deferred`, `msaa-renderpass` and `pipeline-caching`, and the README describes the examples folder as the place to get started. Building from a checkout is the supported route the README describes; it does not document a separate install step beyond depending on the crates, which are published on crates.io under the names vulkano, vulkano-shaders, vulkano-taskgraph and vulkano-util.
If you want build-time shader compilation, the shaders crate is versioned in lockstep with the core crate and its workspace dependency entry is `vulkano-shaders` at version 0.35. The README describes it as providing type-safe compile-time shaders, with automatically generated types for the shader's layout and transparent interoperation between GLSL and SPIR-V shader code types in Rust code.
Where Vulkano is the wrong tool
Vulkano is Vulkan-only. The README's own comparison table lists it as a high-level Rust API wrapping Vulkan, while Wgpu is described as supporting multiple backends including Vulkan, Metal, DirectX and WebGPU, and Miniquad as supporting multiple backends including the browser target. If your product ships on macOS or in a browser, Vulkano gives you no path there. Choosing it means committing to platforms where a Vulkan driver exists.
There is a second constraint that is easy to miss. The README states that no known project in the ecosystem, Vulkano included, has reached a stable release version or its final design goals, and that APIs change from time to time in a breakable way. The version history bears that out: v0.33.0 in April 2023, v0.34.0 in October 2023, then v0.35.0 in February 2025. A jump of that length between minor releases means upgrading is not a routine dependency bump; you should expect to read the changelog and fix call sites. The README also says minor releases usually happen between one and three months apart on average, which describes intent rather than the observed sequence.
Finally, the guide situation is a real cost. The README admits the guide on vulkano.rs is a little outdated, so a newcomer's first instinct, following prose tutorials, will sometimes lead to code that no longer matches the crate. The examples folder is the more reliable reference.
Vulkano vs Ash, and Vulkano vs Wgpu
The choice between Vulkano and Ash is a choice about where invalid usage gets caught. Ash is described in the README's table as low-level unsafe Vulkan bindings. It maps close to the C API and leaves validation to you plus the Vulkan validation layers. Vulkano sits above that and adds checks at compile time and runtime, plus automatic semaphore and dependency handling. If you are porting an existing Vulkan renderer and want the C structure preserved, Ash is the closer match. If you are writing new Rust code and want the type system to carry the invariants, Vulkano is the one that tries.
Against Wgpu the difference is portability against reach. Wgpu follows the WebGPU specification, exposes an async/await API, and targets Vulkan, Metal, DirectX and WebGPU. That breadth is exactly what Vulkano does not offer. In exchange, Vulkano exposes Vulkan-specific capabilities that a WebGPU-shaped API does not model, and its shader types are generated from GLSL or SPIR-V with transparent interoperation between the two in Rust code. If you need one codebase across desktop and web, Wgpu is the pragmatic pick. If you need Vulkan features and are willing to be Vulkan-only, Vulkano's surface is the wider one.
The README's own advice is worth quoting in spirit: it recommends examining each project's actual feature set and API capabilities before deciding, and notes that the choice depends on the end project's goals. That is a fair reading of a table where every entry is still pre-1.0.
Maintenance, releases and the licence
The repository is not archived, and the last push was on 2026-09-22. Development is driven by community members; the README records that the project was initially developed by Pierre Krieger (Tomaka), who set the base design goals and code structure. Contributions go through pull requests, and the README asks that changelog entries for any trait or function change be written in the pull request description rather than the changelog file, to be transferred after merge. Every PR must pass tests before merging to `master`.
Upgrade cost is the practical question. Because the crates are versioned together at 0.35 and the API is explicitly described as breakable, an upgrade touches vulkano, vulkano-shaders, vulkano-taskgraph and vulkano-util in step. The workspace manifest carries a note tying the Ash version to the vk.xml patch version and the autogen step, which tells you that a Vulkan registry bump is a coordinated change rather than a background one. Budget for reading the changelog, not for a routine dependency bump.
On licensing: the workspace declares `license = "MIT OR Apache-2.0"`, and the repository root contains both LICENSE-MIT and LICENSE-APACHE. The GitHub metadata lists Apache-2.0. The dual grant means you choose which of the two terms applies to your use; the repository does not state a preference. That is a description of what the files say, not legal advice, and the choice has consequences for how you redistribute modified copies.
Editorial conclusion
Adopt Vulkano if your project is Rust, Vulkan-only, and you want the compiler to catch invalid API usage instead of a validation layer at runtime. Do not adopt it if you need Metal, DirectX or WebGPU from the same code path, or if you want a release cadence you can plan around. Before committing, check the examples folder against the Vulkano version you pin, and read the changelog for the breaking changes between 0.35 and master.
Frequently asked questions
Who developed Vulkano?
The README states that the project was initially developed by Pierre Krieger, also known as Tomaka, who established Vulkano's base design goals and code structure. Development is now driven by Vulkano community members.
How does Vulkano compare to Ash?
Ash is described in the README's comparison table as low-level unsafe Vulkan bindings, while Vulkano is a high-level Rust API wrapping Vulkan with compile-time and runtime checks. Vulkano also handles GPU-side synchronization for you unless you opt out through unsafe trait implementations.
How does Vulkano compare to Wgpu?
Wgpu is listed as supporting multiple backends including Vulkan, Metal, DirectX and WebGPU and following the WebGPU specification with an async/await API. Vulkano wraps Vulkan only, and in exchange offers Vulkan-specific coverage plus shader types generated from GLSL or SPIR-V.
What is Vulkan and what is it used for?
Vulkan is the graphics API from Khronos that Vulkano wraps, and the README links to the Khronos page for it. Vulkano's own purpose is to expose Vulkan's usage in Rust while preventing invalid API usage.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/vulkano-rs-vulkano)