Release notes


This page includes the release notes for Varjo software.

Varjo Base
Varjo SDK for Custom Engines


Varjo Base 3.4.0

New features:

  • Official Aero support
  • Varjo Personal accounts introduced and supported with this release
  • Workspace and virtual monitor enabled for VR-3 and Aero
  • New virtual background experience added - Cabin
  • Ability to turn off the focus screen for XR-3 and VR-3 known as Simple Rendering
  • Motion Platform support added to Base UI when plugin is installed
  • OpenXR Vive Tracker support added
  • Single adaptor support added
  • Headset safety page added when first connecting a headset

Improvements to existing features:

  • Reworked resolution setting UI and optimized resolution values
  • Improved Legal section in Varjo Base to allow user to access the T&Cs, terms of use, privacy policy
  • Added the option to see the account type in the user dropdown menu
  • Added the option to toggle Workspace on and off for supported headsets XR-3, VR-3, Aero
  • Updated Ultraleap runtime to 5.1.41
  • Varjo inside-out tracking (Beta): Improved robustness and accuracy
  • Varjo inside-out tracking (Beta): Added a notification message for low light conditions
  • Varjo Markers: Improved robustness for static markers and other minor fixes (XR-3 and XR-1 Developer Edition)
  • Eye tracking: Better error handling in the eye tracking API
  • Eye tracking: Accuracy and precision improvements for XR-3 and VR-3

Varjo Base 3.3.0

October 21, 2021

New features:

  • Resolution quality: Adjust the image resolution for all applications. Replaces Compatibility render resolution from earlier versions
  • Blend Control Mask API: Control how depth occlusion, chroma key, and masking are blended in mixed reality applications
  • Analytics window: Added option to force Vertical synchronization
  • OpenXR runtime: Added support for XR_Varjo_marker_tracking (XR-3 and XR-1 Developer Edition)
  • Added Norwegian language option

Improvements to existing features:

  • Vertical synchronization: Improved functionality. When enabled, your application’s framerate is locked to specific fractions of the display refresh rate (XR-3 and VR-3)
  • Motion Prediction: Improvements for low-FPS scenarios when using Enabled if supported. Uses additional compensation for headset motion for applications that submit a depth buffer
  • Hand tracking (XR-3 and VR-3):
  • Improved tracking quality when hand is rotating
  • Stability improvements
  • Changed include directory structure in LeapC SDK
  • Varjo inside-out tracking (Beta): Improved tracking accuracy
  • Eye tracking: Improved tracking accuracy
  • Automatic IPD adjustment: Improved accuracy (XR-3 and VR-3)
  • Varjo Markers: Improved tracking quality for static markers (XR-3 and XR-1 Developer Edition)
  • Video pass-through cameras: Various fixes (XR-3)
  • Experimental point cloud and meshing 3D reconstruction API: Improved support for dynamic environments
  • Improved video recording
  • Improved system requirements check
  • Improved device connectivity (XR-3 and VR-3)
  • OpenXR runtime: Various fixes
  • API change: varjo_PropertyKey_GazeCalibrating is set to true already when headset alignment UI is displayed
  • Performance optimizations and stability improvements

Varjo Base 3.2.2

September 23, 2021

Improvements to existing features

  • Fixed an issue where Varjo Compositor would crash under rare circumstances

Varjo Base 3.2.1

September 3, 2021

Improvements to existing features

  • Fix rare rendering hangs and crashes
  • Fix OpenXR view matrix transformation on frame submission (affects Unreal OpenXR integration quality)
  • Depth sensor start-up fixes
  • Improved depth occlusion in large spaces with reflective surfaces
  • Fix missing user IPD estimation and zero individual eye ray origin in case of manual IPD mode.

Varjo Base 3.2.0

July 7, 2021

Note for XR-3 users: Varjo Base 3.2 includes a firmware update for the ToF depth sensor. The new firmware version is not compatible with older versions of Varjo Base. If you need to switch back to an older version after installing the 3.2 release and related firmware update, please contact Varjo Support.

New features:

  • Diagnostics for Varjo inside-out tracking (Beta) are now part of the diagnostics collection
  • Automatic eye tracking calibration can now be temporarily disabled from the Analytics window
  • ToF depth sensor firmware update
  • Added adaptive synchronous client frame submission and updated positional timewarp to improve the visual experience in low-FPS scenarios. Note that this may cause a small decrease in performance
  • Added warning message for situations where the headset temperature is below 5 °C (41 °F)
  • Removed notification for Limited resolution

Improvements to existing features

  • Motion Prediction: Added support for XR-3 and VR-3. When set to Enabled, visual artefacts may occur if your application does not support the feature
  • Hand tracking: Improved memory utilization with Unity Ultraleap plugin
  • Updated Ultraleap runtime to 5.1.12
  • Depth occlusion in mixed reality: Improved consistency and robustness in large rooms with objects close to the viewer and when hand tracking is in use
  • Varjo inside-out tracking (Beta): Improved performance and accuracy
  • Varjo Markers: Improved performance and tracking quality
  • Eye tracking: Improved detection of when the headset is worn by a user
  • Eye tracking: Improved tracking accuracy for users wearing eyeglasses
  • Automatic IPD adjustment: Improved accuracy
  • Improved headset idling logic
  • Varjo Account: Improvements to login
  • Fixed an issue where VR-3 would not work with an XR Subscription
  • Added Quadro RTX A5000 to list of compatible GPUs
  • Fixed an issue where GPU compatibility detection would fail in rare circumstances
  • Fixed an issue where Vive Tracker buttons were not working
  • Various other bug fixes

Varjo Base 3.1.0

May 10, 2021

This release introduces several new features and improvements to existing features.

New features

  • Custom render resolution for OpenVR and OpenXR applications: Adjust the application resolution directly in Varjo Base
  • Mixed reality for OpenVR applications: Enable mixed reality for any OpenVR application (XR-3 and XR-1 Developer Edition)
  • Foveated rendering tools in Analytics window (XR-3 and VR-3)
  • Automatic headset firmware updates (XR-3 and VR-3)

Improvements to existing features

  • Hand tracking: Improved tracking quality
  • Hand occlusion in mixed reality: Improved quality
  • Varjo inside-out tracking (Beta): Improved performance
  • Varjo Markers: Improved quality and performance
  • Eye tracking and automatic IPD adjustment: Improved performance
  • Video pass-through: Improved image quality and auto-exposure handling
  • Various bug fixes

Varjo Base 3.0.5

March 29, 2021

  • This is a hot-fix release targeted primarily for the users of XR-3 and VR-3 headsets, and contains the following changes:
    • Improved mixed reality depth occlusion at near distances close to user (XR-3 only)
    • Improvements to rendering quality
    • Performance improvements and various bug fixes

Varjo Base 3.0.0

March 8, 2021

  • XR-3 and VR-3 support
  • Guided first-time setup flow for XR-3 and VR-3
  • Single-dot eye tracking calibration for foveated rendering for XR-3 & VR-3
  • Varjo inside-out tracking (Beta) for XR-3
  • Ultraleap’s fifth generation hand tracking (Gemini Preview)
  • Log in with Varjo Account. Varjo Base will check for a valid subscription when using XR-3 and VR-3.

  • Completely redesigned Menu for quick settings while wearing the headset. Menu can also be used with hands with the new headset models XR-3 and VR-3.
  • Varjo Marker tracking quality improvements
  • Improved performance
  • Fix to an issue where user settings were not always restored after software updates.

  • Native SDK updates
    • Foveated rendering API
    • 200Hz eye tracking for XR-3 & VR-3
    • Ultraleap hand tracking SDK for XR-3 & VR-3
    • Experimental 3D reconstruction API
  • Unity plugin updates
    • Support for foveated rendering
    • 200Hz eye tracking for XR-3 & VR-3
    • Ultraleap hand tracking SDK for XR-3 & VR-3
    • Support for Chroma keying
    • Video pass-through metadata only stream
    • Support for Vive trackers
    • Support for the Experimental 3D reconstruction
  • Simulate XR-3 and VR-3 options in Varjo Base Analytics window

Varjo Base 2.5.0

September 28, 2020

  • Added ability to change between display blending modes
  • Added experimental support for chroma masking
  • Fixed a bug with Unreal depth submission

Varjo Base 2.4.1

August 17, 2020

  • Mixed Reality depth estimation performance improvements
  • Fixed a bug occasionally preventing starting of XR-1 Developer Edition cameras on Windows 10 May 2020 update (version 2004)
  • Fixed a bug with DX12 texture creation under multi-GPU SLI

Varjo Base 2.4.0

June 22, 2020

  • Added Motion Prediction
  • Added Override origin and direction
  • Added Chroma key UI
  • Unity XR SDK release
  • Added Multiclient support
  • Added HDR cube map support
  • Added Varjo Marker support for Unity
  • Added experimental support for video post-process shaders
  • Added experimental support for foveated rendering
  • Added support for matching color tone and brightness between VR and VST

Varjo Base 2.3.1

June 2, 2020

  • Added SteamVR 1.12 compatibility
  • Removed an error dialog when selecting VST image
  • Added temperature monitoring for the XR-1 Developer Edition hand tracking module
  • Fixed bug in Varjo Tracking for Japanese locale

Varjo Base 2.3.0

May 4, 2020

  • Varjo Markers full release
  • Added functionality to export eye tracking data
  • Added UI for selecting third-party tracking methods
  • Improved depth estimation for XR-1 Developer Edition
  • Added functionality to recalibrate cameras on XR-1 Developer Edition
  • Out-of-box support for client applications running in admin mode

Varjo Base 2.2.1

March 12, 2020

  • Fixed a bug when updating Varjo Base

Varjo Base 2.2.0

March 10, 2020

  • Added chroma key support for XR-1 Developer Edition
  • Added Varjo Marker support for XR-1 Developer Edition
  • Added simulation mode for XR-1 Developer Edition
  • Added DX12 API support
  • Added First Time Use wizard
  • Added optional admin-mode support for client applications
  • Bug and performance fixes

Varjo Base 2.1.0

December 16, 2019

  • Added support for rendering different images in context and focus
  • Added automated VR scene color correction based on VST image
  • Added MR examples for Unity, Unreal, and Native SDK
  • Added 3DoF tracking fallback in case the 6DoF tracking becomes unavailable
  • Implemented various rendering performance improvements

Varjo Base 2.0.0

November 7, 2019

  • Improved rendering processes
  • Switched eye tracking calibration to faster mode
  • Added Tracking Plugin API for third party tracking solutions
  • Added support for mixed reality
  • Added OpenVR/SteamVR application support


Varjo SDK for Custom Engines 3.3.0


  • BlendControlMask view extension added to Layers API. This was previously part of Experimental SDK. MaskingTool example utilizing this API is now also available in public SDK. It still has depth test related experimental features that are only available when the example is built from Experimental SDK.


  • Documentation of varjo_WorldObjectMarkerFlags has been updated
  • Renamed varjo_TextureSize_Type_Recommended to varjo_TextureSize_Type_Quad by deprecating the former option. This now better clarifies the usage intent for static fixed-foveated rendering.


  • varjo_TextureSize_Type_BestQuality resolution option. This is now synonymous with varjo_TextureSize_Quad.

Varjo SDK for Custom Engines 3.2.0


  • Property key varjo_PropertyKey_UserPresence for querying whether user is wearing the headset
  • Benchmark example reacts to varjo_EventType_TextureSizeChange by creating new swapchains


  • Benchmark example project has smaller scale so it’s easier to move around

Varjo SDK for Custom Engines 3.1.0


  • varjo_D3D11UpdateVariableRateShadingTexture and varjo_GLUpdateVariableRateShadingTexture for generating variable rate shading masks for D3D11 and OpenGL. Variable rate shading was previously available only for D3D12
  • The D3D11 and OpenGL variable rate shading functions require a varjo_ShadingRateTable that holds information about varjo_ShadingRate
  • Example code in SDK for using variable rate shading with D3D11 and OpenGL
  • Add --fps option to Benchmark example to output frames per second
  • Minor fix to varjo_UpdateNearFarPlanes


  • Refactored common code for variable rate shading in example code
  • ImGui UI stuff moved from experimental to regular SDK
  • ImGui-based UI for MRExample
  • Common code in examples refactored for UI changes
  • LayerView is now MultiLayerView and supports multiple layers

Varjo SDK for Custom Engines 3.0.0

This release adds API functionality for new XR-3/VR-3 headsets.


  • Foveated rendering API (finalized from earlier experimental version). This adds the following new functionality:
    • Ability to query FOV tangents for both foveated and non-foveated views (varjo_GetFoveatedFovTangents and varjo_GetFovTangents)
    • Function to query texture sizes (varjo_GetTextureSize) for best, recommended and foveated quality. Applications should migrate to using this API for fetching texture sizes.
    • varjo_D3D12UpdateVariableRateShadingTexture for generating various variable rate shading masks with D3D12 (other API support coming later).
  • Improved gaze data API that supports parallel data streams and 200Hz gaze tracking.
  • Helper function varjo_GetProjectionMatrix to convert FOV half tangents to projection matrix.
  • varjo_Error_SwapChainTextureIsNotReleased error code. This error will be raised if application forgets to call varjo_ReleaseSwapChainImage before varjo_EndFrameWithLayers.


  • Refactor render target handling in example code
  • Refactor some code common to all examples (logging)
  • Improve marker rendering in MarkerExample application
  • Update license


  • Legacy rendering API that was marked deprecated

Varjo SDK for Custom Engines 2.4.0


  • Benchmark example: Support for rendering left eye views and right eye views on different gpus in sli for opengl, d3d12 (--use-sli) Support for rendering all eye views on slave gpu (--use-slave-gpu)

Varjo SDK for Custom Engines 2.3.0


  • New mixed reality camera property varjo_CameraPropertyType_Sharpness
  • Generic varjo_Lock() and varjo_Unlock() functions for exclusively locking MR features for the calling session. Related new error codes varjo_Error_AlreadyLocked and varjo_Error_NotLocked.
  • New function varjo_GetPropertyString to get a string property
  • New function varjo_GetPropertyStringSize to get the size of a buffer for a string property
  • New properties to get the product name (varjo_PropertyKey_HMDProductName) and serial number (varjo_PropertyKey_HMDSerialNumber) of the HMD
  • varjo_RenderAPI_D3D12 that was missing from 2.2 release
  • New error codes for rendering data validation:
    • varjo_Error_InvalidSwapChain
    • varjo_Error_D3D12CreateTextureFailed
    • varjo_Error_WrongSwapChainTextureFormat
    • varjo_Error_InvalidViewExtension
  • Benchmark example: occlusion mesh rendering for all APIs, and support for reversed depth (--reverse-depth)


  • Update examples to use the new lock API
  • varjo_GetSupportedTextureFormats can now return varjo_Error_InvalidRenderAPI
  • Refactor common example code: headless view and logging macros
  • Stabilize Varjo World API (beta in 2.2). This is a breaking change; apps built on top of 2.2 VarjoLib will stop working gracefully (i.e. markers will not be returned anymore with new 2.3 runtime). The main change is in naming as visual markers are now called object markers. Also, the separate dynamic and static marker types have been removed; prediction mode similar to 2.2 dynamic marker is available to get similar behavior.

Varjo SDK for Custom Engines 2.2.0


  • DirectX 12 support. New header Varjo_d3d12.h and a separate function for DX12 swapchain creation in Varjo_layers.h.
  • DirectX 12 renderer for Benchmark example. Enable with –renderer=d3d12.
  • API for controlling chroma keying (Varjo_mr.h and Varjo_mr_types.h), a new feature in 2.2 software release.
  • New example, ChromaKeyExample, for showing the usage of chroma key feature.
  • Varjo world API (Varjo_world.h and Varjo_types_world.h). This API allows applications to query objects exposed by Varjo stack and the related components (such as the pose of an object). This API is currently used for visual markers, a new feature in 2.2 software release.
  • New example, MarkerExample, for showing the basic usage of Varjo World API and visual marker feature.


  • Move reusable classes from MRExample to Common folder.
  • Wrap all example classes with VarjoExamples namespace.

Varjo SDK for Custom Engines 2.1.0


  • New error codes varjo_Error_ValidationFailure, varjo_Error_InvalidSwapChainRect and varjo_Error_ViewDepthExtensionValidationFailure. These tie with the added validation for varjo_SubmitInfoLayers.
  • Benchmark example app commandline parameter –depth-format for setting the depth-stencil texture format (d32/d24s8/d32s8)
  • View extension (varjo_ViewExtensionDepthTestRange) to define ranges for which the depth test is active. Outside the given range the layer is alpha-blended in layer order without depth testing.
  • varjo_UpdateNearFarPlanes to replace deprecated varjo_UpdateClipPlaneDistances. The implementation of this function is in Varjo_math.h.


  • Improve MRExample application
  • Update Benchmark to use varjo_UpdateNearFarPlanes


  • Legacy rendering API. This includes types in Varjo_types.h and functions in Varjo.h, Varjo_d3d11.h and Varjo_gl.h. All applications need to migrate to Layer API (defined in Varjo_layers.h).

Varjo SDK for Custom Engines 2.0.0


  • Mixed reality API (Varjo_mr.h and Varjo_mr_types.h) for controlling mixed reality devices and cameras
  • Mixed reality API related events:
    • varjo_EventType_MRDeviceStatus
    • varjo_EventType_MRCameraPropertyChange
  • Mixed reality API related error codes:
    • varjo_Error_RequestFailed
    • varjo_Error_OperationFailed
    • varjo_Error_NotAvailable
    • varjo_Error_CapabilityNotAvailable
    • varjo_Error_CameraAlreadyLocked
    • varjo_Error_CameraNotLocked
    • varjo_Error_CameraInvalidPropertyType
    • varjo_Error_CameraInvalidPropertyValue
    • varjo_Error_CameraInvalidPropertyMode
  • Property key for querying whether a mixed reality capable device is currently connected (varjo_PropertyKey_MRAvailable)
  • Data stream API (Varjo_datastream.h and Varjo_datastream_types.h) for subscribing to color camera and lighting cubemap streams
  • Data stream API related events:
    • varjo_EventType_DataStreamStart
    • varjo_EventType_DataStreamStop
  • Data stream API related error codes:
    • varjo_Error_DataStreamInvalidCallback
    • varjo_Error_DataStreamInvalidId
    • varjo_Error_DataStreamAlreadyInUse
    • varjo_Error_DataStreamNotInUse
    • varjo_Error_DataStreamBufferInvalidId
    • varjo_Error_DataStreamBufferAlreadyLocked
    • varjo_Error_DataStreamBufferNotLocked
    • varjo_Error_DataStreamFrameExpired
    • varjo_Error_DataStreamDataNotAvailable
  • varjo_BeginFrameWithLayers to begin a frame when using the layer rendering API. This is effectively the same varjo_BeginFrame but without the second parameter.
  • New parameters for controlling gaze output filter
  • Mixed reality example (MRExample)
  • New options for the benchmark example to run with video see-through


  • Flag varjo_LayerFlag_BlendMode_Inherit. Inheriting has no effect anymore since runtime version 2.0, so the flag is obsolete.
  • Flag varjo_LayerFlag_BlendMode_Opaque. Opaque is the default blending mode since runtime version 2.0, so the flag is obsolete. Applications utilizing alpha blending need to turn it on using varjo_LayerFlag_BlendMode_AlphaBlend.


  • varjo_LayerMultiProj::views can be filled with just two views for submission of a stereo pair. Varjo compositor will split the image for the quad display devices. This is a runtime change, but important enough to be documented here as well.
  • Rename varjo_LayerFlag_DepthSorting to varjo_LayerFlag_DepthTesting.
  • Examples are now built using CMake. Instructions under examples/README.txt.


  • Blending / depth testing related submission flags (varjo_SubmitFlag_Opaque, varjo_SubmitFlag_InvertAlpha and varjo_SubmitFlag_DepthSorting). Behavior is controlled now for each layer separately.
  • varjo_SubmitInfoLayers::flags. This field has no effect.

Varjo SDK for Custom Engines 1.4.0

  • Added experimental layer rendering API (Varjo_layers.h and Varjo_layer_types.h) Note: This will be finalized in the next release and might still be subject to small changes. The supplied example uses both renderng APIs. Developer documentation will be included in the next version as well
  • Added varjo_RequestGazeCalibrationWithParameters for application-controlled gaze calibration
  • Added varjo_GetViewCount to query number of views
  • Added varjo_Error_GazeInvalidParameter to denote error of passing invalid parameters to varjo_RequestGazeCalibrationWithParameters
  • Added varjo_Error_D3D11CreateTextureFailed to denote error in texture creation
  • Added properties for querying gaze calibration quality
  • Added property for querying HMD connection status
  • Added support for the new texture formats: A8_UNORM, YUV422, RGBA16_FLOAT, D24_UNORM_S8_UINT and D32_FLOAT_S8_UINT

Varjo SDK for Custom Engines 1.3.0

  • Added varjo_EventType_Foreground
  • Minor documentation improvements

Varjo SDK for Custom Engines 1.2.0

  • Support for 32-bit applications
  • Improved examples
  • Native SDK projection matrix is now off-axis to provide improved image quality.
    • NOTE: Applications that don’t support off-axis projection should call varjo_SetCenteredProjection(…) function to enable old behavior.
    • NOTE: Applications built with <1.1 behave as previously.
  • Error messages for rendering and gaze are separated.
  • VarjoLib does not require CPU with AVX support anymore