Skip to main content

Vitellus

Vitellus is a rendering hardware interface (RHI) written in Zig. One API sits on top of Vulkan, DirectX 12 and WebGPU, so you can write a renderer or game engine once and run it on any of them, including in the browser.

It stays close to the hardware. You create the devices, queues, swapchains, pipelines and command buffers yourself, and you record barriers and synchronisation yourself. Vitellus handles the parts that differ between backends: picking a backend, loading the driver, translating shaders and reflecting their bindings.

What's in the box​

AreaTypes
SetupInstance, Adapter, Device, Queue
PresentationWindow, Swapchain
ResourcesBuffer, Texture, TextureView, Sampler
ShadersShader, BinaryShaderModule; SPIRVShaderModule, HLSLShaderModule and SlangShaderModule in their own modules
PipelinesGraphicsPipeline, ComputePipeline, PipelineLayout
BindingsBindGroupLayout, BindGroup
RecordingCommandPool, CommandBuffer, QuerySet
SynchronisationFence (timeline), Semaphore

Each type is exported from the root module, and its descriptor sits next to it (Buffer and BufferDescriptor, for example). The lower-level enums and structs live under vitellus.hal.<area>, such as vitellus.hal.command.ColorAttachment.

Backends​

BackendPlatformsStatus
VulkanLinux, Windows, AndroidSupported
DirectX 12WindowsSupported
WebGPUBrowsers, through EmscriptenSupported (see Deploying to the web)
MetalmacOS, iOSPlanned

You can also register your own backends. See Backends and validation.

Where to go next​