Skip to content


Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?


Failed to load latest commit information.
Latest commit message
Commit time
March 17, 2023 12:58
March 17, 2023 12:58
March 17, 2023 12:58
March 17, 2023 12:58
February 16, 2023 11:12
January 24, 2023 19:11
March 9, 2023 04:59
November 30, 2022 01:11
January 24, 2023 19:11
August 22, 2022 06:50
March 17, 2023 12:58
December 26, 2020 14:22
March 17, 2023 12:58

A modern and easy-to-use library for the Vulkan® API

version License CodeFactor   Discord Donate Twitter Follow

lava provides essentials for low-level graphics - suited for prototyping, tooling, profiling and education.

This lean framework is written in neat C++20 and it strives for a modular rolling release as far as possible. We don't want to promise too much... but lava runs really smoothly on Windows and Linux.

➜   Download   •   Documentation (Tutorial + Guide)   •   Projects   •   Modules   •   Collaborate

In a nutshell

  • liblava is written in modern C++ with latest Vulkan support
  • Provides run loop abstraction for window and input handling
  • Plain renderer and command buffer model
  • Batteries included ➜ runtime shader compilation
  • Texture and mesh loading from virtual file system
  • Camera, imgui, logger and much more...

engine app   block frame asset   resource base   file util core

Take a look

#include "liblava/lava.hpp"
#include "imgui.h"

int main(int argc, char* argv[]) {

    lava::engine app("imgui demo", { argc, argv });
    if (!app.setup())
        return lava::error::not_ready;

    app.imgui.on_draw = []() {




demo lava demo
free download on ➜

The collection includes all stages to play around. - You can easily switch between them.


light spawn
deferred shading + offscreen rendering

Small demo that showcases how to render to an offscreen framebuffer and sample from it. - It is a challenge in itself and also a compact solution.
spawn light
uniform buffer + camera

This loads a very large mesh from file and simply textures it. - Use your gamepad to control the camera if there is one around.
lamp lamp
push constants to shader

Classic lamp to relax and where colors can be easily switched. - Unfortunately it also consumes power - so be aware!
shapes shapes
generating primitives

Switch between basic shapes and use the camera to fly around. - A great start for your next interactive application.
generics generics
float, double & int meshes

This demo shows how to check GPU features and render mesh data with custom vertex layout. - There is a chapter about it in the Guide.
triangle triangle
unique classic mesh

Where graphics programming always begins. - An example that illustrates how little it actually takes to render a triangle.


rt cubes
raytraced reflecting cubes

Vulkan raytracing with liblava
Support for the Vulkan KHR ray tracing extensions with idiomatic wrappers. ➜ pezcode
Do you have a project? Submit it with a pull request


lava engine

engine producer property

  ➜   require app

lava app

app camera forward_shading

benchmark config imgui

  ➜   require block + frame + asset

lava block

attachment block descriptor render_pass subpass

compute_pipeline render_pipeline pipeline pipeline_layout

  ➜   require base

lava frame

argh driver frame gamepad input

render_target renderer swapchain window

  ➜   require resource

lava asset

image_loader load_mesh load_texture write_image

  ➜   require resource + file

lava resource

buffer mesh primitive

format image texture

  ➜   require base

lava base

base instance memory queue

platform device physical_device

  ➜   require util

lava file

file file_system file_utils json_file json

  ➜   require core

lava util

hex log math random telegram thread

  ➜   require core

lava core

data id misc time types version


Use the issue tracker to report any bug or compatibility issue.

❤️   Thanks to all contributors making liblava flow...

If you want to contribute - we suggest the following:

  1. Fork the official repository
  2. Apply your changes to your fork
  3. Submit a pull request describing the changes you have made


Need help?   Please feel free to ask us on ➜ Discord

Help maintenance and development Every star and follow motivates
paypal GitHub Stars   Twitter URL


liblava is licensed under MIT License which allows you to use the software for any purpose you might like - including commercial and for-profit use. However - this library includes several Third-Party libraries which are licensed under their own respective Open Source licenses ➜ They all allow static linking with closed source software.

All copies of liblava must include a copy of the MIT License terms and the copyright notice.

Vulkan and the Vulkan logo are trademarks of the Khronos Group Inc.

Copyright (c) 2018-present - Lava Block OÜ and contributors