{"id":45278541,"url":"https://github.com/attackgoat/vk-graph","last_synced_at":"2026-07-04T04:03:01.111Z","repository":{"id":37474770,"uuid":"272821902","full_name":"attackgoat/vk-graph","owner":"attackgoat","description":"High-performance Vulkan driver with automated resource management and execution","archived":false,"fork":false,"pushed_at":"2026-06-18T12:43:42.000Z","size":33913,"stargazers_count":337,"open_issues_count":6,"forks_count":24,"subscribers_count":7,"default_branch":"main","last_synced_at":"2026-06-18T14:26:41.614Z","etag":null,"topics":["3d","3d-game-engine","game-development","game-engine","gamedev","rust","vulkan"],"latest_commit_sha":null,"homepage":"","language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/attackgoat.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE-APACHE","code_of_conduct":"CODE_OF_CONDUCT.md","threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2020-06-16T22:08:40.000Z","updated_at":"2026-06-18T12:43:46.000Z","dependencies_parsed_at":"2023-02-14T11:01:47.480Z","dependency_job_id":"c578714f-f810-4145-92c6-0b2807a06fb0","html_url":"https://github.com/attackgoat/vk-graph","commit_stats":{"total_commits":340,"total_committers":7,"mean_commits":48.57142857142857,"dds":"0.10882352941176465","last_synced_commit":"f09665dbe20c3b514c23157990aa521729ff1123"},"previous_names":["attackgoat/vk-graph"],"tags_count":32,"template":false,"template_full_name":null,"purl":"pkg:github/attackgoat/vk-graph","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attackgoat%2Fvk-graph","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attackgoat%2Fvk-graph/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attackgoat%2Fvk-graph/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attackgoat%2Fvk-graph/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/attackgoat","download_url":"https://codeload.github.com/attackgoat/vk-graph/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/attackgoat%2Fvk-graph/sbom","scorecard":{"id":215657,"data":{"date":"2025-08-11","repo":{"name":"github.com/attackgoat/screen-13","commit":"65309515ef45a97b01906ba712cc51ff2504a921"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":5.3,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":2,"reason":"Found 6/30 approved changesets -- score normalized to 2","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Packaging","score":-1,"reason":"packaging workflow not detected","details":["Warn: no GitHub/GitLab publishing workflow detected."],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Maintained","score":4,"reason":"5 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 4","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Info: jobLevel 'contents' permission set to 'read': .github/workflows/rust-clippy.yml:26","Warn: no topLevel permission defined: .github/workflows/rust-clippy.yml:1","Warn: no topLevel permission defined: .github/workflows/rust.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"Vulnerabilities","score":10,"reason":"0 existing vulnerabilities detected","details":null,"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: LICENSE-APACHE:0","Info: FSF or OSI recognized license: Apache License 2.0: LICENSE-APACHE:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"Pinned-Dependencies","score":3,"reason":"dependency not pinned by hash detected -- score normalized to 3","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-clippy.yml:30: update your workflow using https://app.stepsecurity.io/secureworkflow/attackgoat/screen-13/rust-clippy.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust-clippy.yml:51: update your workflow using https://app.stepsecurity.io/secureworkflow/attackgoat/screen-13/rust-clippy.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/rust.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/attackgoat/screen-13/rust.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/rust.yml:19: update your workflow using https://app.stepsecurity.io/secureworkflow/attackgoat/screen-13/rust.yml/master?enable=pin","Info:   0 out of   3 GitHub-owned GitHubAction dependencies pinned","Info:   1 out of   2 third-party GitHubAction dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Branch-Protection","score":-1,"reason":"internal error: error during branchesHandler.setup: internal error: githubv4.Query: Resource not accessible by integration","details":null,"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"SAST","score":10,"reason":"SAST tool is run on all commits","details":["Info: all commits (9) are checked with a SAST tool"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}}]},"last_synced_at":"2025-08-17T01:36:34.054Z","repository_id":37474770,"created_at":"2025-08-17T01:36:34.054Z","updated_at":"2025-08-17T01:36:34.054Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":35109212,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-07-04T02:00:05.987Z","response_time":113,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["3d","3d-game-engine","game-development","game-engine","gamedev","rust","vulkan"],"created_at":"2026-02-21T02:06:57.952Z","updated_at":"2026-07-04T04:03:01.106Z","avatar_url":"https://github.com/attackgoat.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"Vulkan Graph Driver\n===================\n\n[![Crates.io](https://img.shields.io/crates/v/vk-graph.svg)](https://crates.io/crates/vk-graph)\n[![Docs.rs](https://docs.rs/vk-graph/badge.svg)](https://docs.rs/vk-graph)\n[![Guide Book](https://img.shields.io/badge/vk--graph-Guide_Book-blue?link=https%3A%2F%2Fattackgoat.github.io%2Fvk-graph%2F)](https://attackgoat.github.io/vk-graph)\n\n_vk-graph_ is a high-performance [Vulkan](https://www.vulkan.org/) driver for the Rust programming\nlanguage featuring automated resource management and execution. It is _blazingly_-fast, built for\nreal-world use, and supports modern Vulkan commands[^modern].\n\n```toml\n[dependencies]\nvk-graph = \"0.14\"\n```\n\n[*Changelog*](https://github.com/attackgoat/vk-graph/blob/main/CHANGELOG.md)\n\n\u003cbr\u003e\n\n## Overview\n\n_vk-graph_ supports desktop, mobile, and AR/VR platforms in headless, windowed, or full-screen\nmodes. An [accessory crate](crates/vk-graph-window/README.md) is provided for `winit` support:\n\n```rust\nuse vk_graph_window::{Window, WindowError};\n\nfn main() -\u003e Result\u003c(), WindowError\u003e {\n    Window::new()?.run(|frame| {\n        // It's time to do some graphics! 😲\n    })\n}\n```\n\n\u003cbr\u003e\n\n## Usage\n\n_vk-graph_ centers frame work around a `Graph`. Bind Vulkan smart-pointer resources such as\nbuffers, images, acceleration structures, and swapchain images into the graph to get statically typed\nnode handles. Commands then reference those nodes instead of raw Vulkan handles. When recording is\ncomplete, finalize the graph into a `Submission` and submit it with a pool.\n\nThe normal flow is:\n\n- Create a `Device`, resources, and pipelines.\n- Start a fresh `Graph` for the frame or workload.\n- Bind resources into typed nodes with `Graph::bind_resource` or receive nodes from a swapchain\n  integration crate.\n- Record compute, graphics, transfer, or ray tracing commands with `Graph::begin_cmd`.\n- Declare each resource access on the command so the graph can build synchronization and pass data.\n- Finalize and submit the graph.\n\n`CommandStream` is available when part of the command graph is reusable. A stream records commands\nonce with typed arguments, then each frame binds those arguments to the frame's concrete graph nodes.\nThis is useful for overlays, post-processing, or other repeated command sequences that still need\nper-frame resources such as the current swapchain image.\n\nDevice extension support is exposed through the selected physical device:\n\n```rust\nif let Some(ray_tracing) = \u0026device.physical.vk_khr_ray_tracing_pipeline {\n    println!(\"max recursion depth: {}\", ray_tracing.properties.max_ray_recursion_depth);\n}\n\nif device.physical.vk_khr_synchronization2 {\n    println!(\"synchronization2 is available\");\n}\n```\n\n## Features\n\n - Compute, graphics, and ray tracing pipelines\n - Automatic Vulkan management (render passes, subpasses, descriptors, pools, _etc._)\n - Automatic render pass scheduling, re-ordering, merging, with resource aliasing\n - Interoperable with existing Vulkan code\n - Optional [shader hot-reload](crates/vk-graph-hot/README.md) from disk\n\nExample code:\n\n```rust\ngraph\n    .begin_cmd()\n    .debug_name(\"Fancy new algorithm for shading a moving character who is actively on fire\")\n    .bind_pipeline(\u0026gfx_pipeline)\n    .shader_resource_access(0, prev_image, AccessType::FragmentShaderReadColorInputAttachment)\n    .shader_resource_access(1, some_image, AccessType::FragmentShaderReadOther)\n    .shader_resource_access(3, fire_buffer, AccessType::FragmentShaderReadUniformBuffer)\n    .color_attachment_image(0, swapchain_image, LoadOp::CLEAR_BLACK_ALPHA_ZERO, StoreOp::Store)\n    .depth_stencil_attachment_image(depth_image, LoadOp::Load, StoreOp::DontCare)\n    .record_cmd(move |cmd| {\n        cmd\n            .push_constants(0, some_u8_slice)\n            .draw(6, 1, 0, 0);\n    });\n```\n\n\u003cbr\u003e\n\n## Optional features\n\n_vk-graph_ puts a lot of functionality behind optional features in order to optimize\ncompile time for the most common use cases. The following features are\navailable.\n\n- **`checked`** *(enabled by default)* — Runtime validation of common misuse patterns\n  (missing access declarations, buffer bounds, image aspects) that the Vulkan Validation Layer\n  cannot catch, including cross-graph node ownership checks. Disable for zero-overhead in\n  validated releases.\n- **`loaded`** *(enabled by default)* — Support searching for the Vulkan loader manually at runtime.\n- **`linked`** — Link the Vulkan loader at compile time.\n- **`ash-molten`** — Enable `ash-molten` support for MoltenVK-based platforms.\n- **`parking_lot`** *(enabled by default)* — Use `parking_lot` synchronization primitives.\n- **`profile-with-*`** — Use the specified profiling backend:\n  `profile-with-puffin`, `profile-with-optick`, `profile-with-superluminal`, or\n  `profile-with-tracy`\n\n\u003cbr\u003e\n\n\n\n## Debug Logging\n\nThis crate uses [`log`](https://crates.io/crates/log) for low-overhead logging.\n\nTo enable logging, set the `RUST_LOG` environment variable to `trace`, `debug`, `info`, `warn` or\n`error` and initialize the logging provider of your choice. Examples use\n[`pretty_env_logger`](https://docs.rs/pretty_env_logger/latest/pretty_env_logger/).\n\n_You may also filter messages, for example:_\n\n```bash\nRUST_LOG=vk_graph::driver=trace,vk_graph=warn cargo run --example ray_tracing\n```\n\n```\nTRACE vk_graph::driver::instance \u003e created a Vulkan instance\nDEBUG vk_graph::driver::physical_device \u003e physical device: NVIDIA GeForce RTX 3090\nDEBUG vk_graph::driver::physical_device \u003e extension \"VK_KHR_16bit_storage\" v1\nDEBUG vk_graph::driver::physical_device \u003e extension \"VK_KHR_8bit_storage\" v1\nDEBUG vk_graph::driver::physical_device \u003e extension \"VK_KHR_acceleration_structure\" v13\n...\n```\n\n\u003cbr\u003e\n\n## Performance Profiling\n\nThis crate uses [`profiling`](https://crates.io/crates/profiling) and supports multiple profiling\nproviders. When not in use profiling has zero cost.\n\nTo enable profiling, compile with one of the `profile-with-*` features enabled and initialize the\nprofiling provider of your choice.\n\n_Example code uses [puffin](https://crates.io/crates/puffin):_\n\n```bash\ncargo run --features profile-with-puffin --release --example vsm_omni\n```\n\n\u003cimg src=\"guide/src/profile.png\" alt=\"Flamegraph of performance data\" width=30%\u003e\n\n\u003cbr\u003e\n\n## Quick Start\n\nIncluded are some examples you might find helpful:\n\n- [`hello_world.rs`](crates/vk-graph-window/examples/hello_world.rs) — Displays a window on the\n  screen. Please start here.\n- [`triangle.rs`](examples/triangle.rs) — Shaders and full setup of index/vertex buffers; \u003c 100 LOC.\n- [`shader-toy/`](examples/shader-toy) — Recreation of a two-pass Shadertoy using the original\n  shader code.\n\nSee the [example code](examples/README.md),\n[documentation](https://docs.rs/vk-graph/latest/vk_graph/), or helpful\n[guide book](https://attackgoat.github.io/vk-graph) for more information.\n\n**_NOTE:_** Required development packages and libraries are listed in the _guide_. All new users\nshould read and understand the guide.\n\n\u003cbr\u003e\n\n#### License\n\n\u003csup\u003e\nLicensed under either of \u003ca href=\"LICENSE-APACHE\"\u003eApache License, Version\n2.0\u003c/a\u003e or \u003ca href=\"LICENSE-MIT\"\u003eMIT license\u003c/a\u003e at your option.\n\u003c/sup\u003e\n\n\u003cbr\u003e\n\n\u003csub\u003e\nUnless you explicitly state otherwise, any contribution intentionally submitted\nfor inclusion in this crate by you, as defined in the Apache-2.0 license, shall\nbe dual licensed as above, without any additional terms or conditions.\n\u003c/sub\u003e\n\n[^modern]: Modern Vulkan usage means no pixel queries. Anything else unsupported is due to there\nbeing better options, no current need, or no interest. Please open an issue.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fattackgoat%2Fvk-graph","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fattackgoat%2Fvk-graph","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fattackgoat%2Fvk-graph/lists"}