{"id":19462596,"url":"https://github.com/ndsol/volcano","last_synced_at":"2026-05-05T09:31:05.338Z","repository":{"id":180770467,"uuid":"87209791","full_name":"ndsol/volcano","owner":"ndsol","description":"Get started with Vulkan. Keep it simple, short and sweet. See https://github.com/ndsol/VolcanoSamples","archived":false,"fork":false,"pushed_at":"2020-07-25T02:49:55.000Z","size":1219,"stargazers_count":6,"open_issues_count":2,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-02-25T12:48:54.740Z","etag":null,"topics":["android-library","cplusplus-11","gplv3","graphics-library","linux","macos","vulkan","windows"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ndsol.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2017-04-04T16:23:44.000Z","updated_at":"2025-02-24T15:13:15.000Z","dependencies_parsed_at":"2023-07-12T19:49:41.719Z","dependency_job_id":null,"html_url":"https://github.com/ndsol/volcano","commit_stats":null,"previous_names":["ndsol/volcano"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ndsol/volcano","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsol%2Fvolcano","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsol%2Fvolcano/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsol%2Fvolcano/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsol%2Fvolcano/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ndsol","download_url":"https://codeload.github.com/ndsol/volcano/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ndsol%2Fvolcano/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32643444,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-04T10:08:07.713Z","status":"online","status_checked_at":"2026-05-05T02:00:06.033Z","response_time":54,"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":["android-library","cplusplus-11","gplv3","graphics-library","linux","macos","vulkan","windows"],"created_at":"2024-11-10T18:04:07.701Z","updated_at":"2026-05-05T09:31:05.259Z","avatar_url":"https://github.com/ndsol.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# [Volcano](https://github.com/ndsol/volcano) [![CI Status](https://travis-ci.org/ndsol/volcano.svg?branch=master)](https://travis-ci.org/ndsol/volcano) [![Build status](https://ci.appveyor.com/api/projects/status/k72xkoh00lax053d?svg=true)](https://ci.appveyor.com/project/ndsol/volcano) [![win2016](https://github.com/ndsol/volcano/workflows/win2016/badge.svg)](https://github.com/ndsol/volcano/actions/)\nVolcano is a [Vulkan](https://www.khronos.org/vulkan/) API that:\n\n* Makes it easy to [get started with Vulkan](#getting-started).\n* Keeps Vulkan simple, short and sweet.\n\n## The Trade\n\nVolcano is no silver bullet. These are some of the trade-offs it makes:\n\n* Easy to make a prototype.\n  * Easy to tweak, experiment, and hack.\n  * Easy to explain what it does, share and collaborate openly.\n  * Easy to debug.\n* May not suit a large commercial game.\n  * [GPLv3 license](LICENSE)\n  * Uses the [chromium GN build system](https://chromium.googlesources.com/chromium/src/tools/gn/).\n  * But the modularity of Volcano makes it easy to rip it out, piece by piece. :)\n\n# Getting started\n\n### 1. Grab Volcano by typing:\n```\ngit clone https://github.com/ndsol/volcano\n```\n\u003e On Windows, first install [git](https://git-scm.org).\n\n*Note:* [VolcanoSamples](https://github.com/ndsol/VolcanoSamples) has\ndocumentation for getting started with Volcano.\n\n### 2. Build Volcano by typing:\n```\nvolcano/build.cmd\n```\n\u003e On Windows: always replace `/` with `\\` like this:\n\u003e\n\u003e `volcano\\build.cmd`\n\n*Note:* the optional first-time setup steps that `volcano/build.cmd` spits out\non the terminal are a good idea.\n\n### 3. Run a demo\n\n```\ncd volcano\nvendor/subgn/ninja -C out/Debug\ncurl -o basic_test.png https://avatars2.githubusercontent.com/u/26904670?v=3\nout/Debug/basic_test basic_test.png\n```\n\n# FAQ\n\n## If I use Volcano, does it remove the low-level purpose of Vulkan?\n\nVolcano is thin. We believe Volcano is Vulkan just like GPUOpen\nVulkanMemoryAllocator is Vulkan.\n\nAutomation makes the developer experience better (such as shader reflection)\nbut it is used lightly. Vulkan is what Volcano is about.\n\nAnother way to think about this question is: what does the language provide?\n\nC is a low level language; Vulkan is a C API.\n\nVolcano aims for the best of C++. If/when your app transitions to using the\nC API, Volcano is designed to make that painless too: Volcano is modular so\nyou can incrementally refactor out one piece at a time.\n\nVolcano aims to be higher-level without being \"fat.\"\n\nFor instance, you write an amazing game prototype in Volcano. But now you\nwant to get rid of GPLv3-licensed code. (The Volcano Authors also offer\ncross-licensing terms.) Volcano can indeed be easily refactored out, and\nyou are left with \"just Vulkan.\" Many developers have taken a similar\napproach to rewrite / strip out the Vulkan SDK \"loader,\" prefering to\ndirectly load the Vulkan ICD GPU driver directly. Volcano enables that\nlevel of hacking.\n\nVolcano strives to use broadly supported C++ idioms:\n\n* C++11 only\n* Exception handling is not required (useful for the Android NDK)\n* Composition is preferred over inheritance (fewer vtables/fixups on start)\n\nVolcano is also\n[extensively documented](https://github.com/ndsol/VolcanoSamples) to speed your\ndevelopment process.\n\n## Why build vulkan from source?\n\n1. Volcano enables you to run vulkan without going through as many of the\n   download / install steps first. For example on Windows, only git and\n   python are required. If you don't have administrator access, this can\n   make a huge difference.\n\n2. At times the vulkan build has had minor bugs even in a stable release. The\n   fix shows up in the source first, making for a better experience.\n\n3. Vulkan files under the `generated` dirs are used by Volcano and provided\n   to Volcano users. These files provide useful helper methods that are not\n   part of the public API and may change without notice, but are derived from\n   the Vulkan Spec and are automatically updated when the spec is updated.\n   It's up to you whether you want to use them, but they are indispensible for\n   keeping Volcano simple, short and sweet.\n\n4. Volcano uses git shallow clones where possible. This usually saves download\n   and disk space.\n\nThere are tradeoffs as well. Building the vulkan loader and validation\nlayers in debug mode enables additional checks such as the \"ICD magic\" check.\nDebug builds may also use more memory and run slower. Debug builds include\ndebug symbols which can be very helpful tracking down crashes.\n\n## Why include skia? (It's bloated.)\n\n1. It's always easier to [rip it out](../../issues/10) than to integrate a\n   2D graphics library and validate it. There are no hard skia dependencies.\n\n2. Including it means a lot of design decisions have \"defaults\": e.g. the build\n   system, `third_party` libs, and platform support carry over. If chrome runs,\n   Volcano runs. (Because skia is a part of the Chromium open source project.)\n\nThe downsides are: the volcano source uses 371MB for skia, 102MB for other dirs\nin `vendor`, and ~2MB for Volcano. Binaries too: libskia.a (linux-amd64) is\n421MB, and basic_test is 125MB (the linker eliminates unused code). That is too\nfat for a large commercial game, but great for a prototype.\n\nChoosing skia actually saves space. Compare with Android Studio: 2,000 MB for a\nfresh install. (That's after installing the SDK and NDK.) Volcano also improves\nthe build process. Just run `build.cmd` - it downloads everything right at the\nstart and can\n[build a 3MB APK](https://github.com/ndsol/VolcanoSamples/04android/),\nbypassing the manual clicks to get Android Studio set up.\n\n## Can I open an issue / submit a pull request?\n\nYes! Ask\n[Smart Questions](http://www.catb.org/esr/faqs/smart-questions.html)\nand understand that it may be impossible to grant your wish.\n(No wishing for more wishes.)\n\n[The rules for contributing are here.](CONTRIBUTING.md)\n\nVolcano is not affiliated with or endorsed by the Khronos Group. Vulkan™ and the\nVulkan logo are trademarks of the Khronos Group Inc.\n\nCopyright (c) 2017-2018 the Volcano Authors. All rights reserved.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndsol%2Fvolcano","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fndsol%2Fvolcano","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fndsol%2Fvolcano/lists"}