A Second Life viewer, built for VR

Phostwood

Phostwood is a client for Second Life, written from scratch in C++20. Vulkan is the only graphics backend, and VR is a mode you enter and leave mid-session — not a separate build, not a launch flag, and never a reason to log in again.

C++20 Vulkan OpenXR Windows · Linux · macOS

The short version

The protocol layer is purpose-built in C++ rather than ported from an existing library; the renderer targets one graphics API instead of three; and performance is treated as a design constraint rather than a polish phase — the target is a sustained 90 Hz in VR, which is 11.1 ms per frame, in busy regions, against user-generated content that was never optimised for anything of the sort.

Major features

VR as a mode, not a build

OpenXR throughout. Every build boots flat-screen, and the user enters and exits VR while the session keeps running — no relaunch, no relogin, and a graceful fall back to the desktop if the runtime disappears underneath it. Windows and Linux; macOS is desktop-only, because no OpenXR runtime exists for it.

One graphics backend

Vulkan, everywhere, constrained to the Portability subset so macOS stays a build target rather than a second renderer. No OpenGL, no D3D12, no native Metal path. One backend is one set of bugs.

90 Hz is a requirement

The engine is a job graph. Frame threads tick the simulation and record draw commands, and do nothing else — texture decode, disk I/O, networking and pipeline compilation all live on worker pools. A blocking call on a frame thread is a bug, not a trade-off.

No copyleft in the core

The core binary carries only permissively licensed dependencies — no GPL anywhere, and nothing under the LGPL or MPL linked into it. The media and web components are optional, dynamically linked modules; the web view runs in its own process and the viewer never links it.

Clean room, by rule

No code, shaders or data files are taken from the official viewer or from LGPL-licensed third-party viewers. Everything is reimplemented from public protocol documentation.

Three platforms, one tree

Windows, Linux and macOS build from the same sources with pinned dependencies and continuous integration on each. Releases are produced by the same tree: installer and archive on Windows, Debian package, AppImage and tarball on Linux, and a signed disk image on macOS.

Features

What the finished viewer covers, end to end.

Protocol and world

Login, the UDP message layer, reliability and circuits, capabilities and the event queue, and the region and object model behind them.

Terrain and environment

Terrain rendering, sky, and a free camera.

Objects and textures

The interest list, primitives, sculpts and mesh, the JPEG 2000 decode pipeline, GPU-driven culling and a disk cache.

Avatars

Skeleton and appearance, baked textures, animation playback, attachments and rigged mesh, name tags, and movement prediction.

VR

The OpenXR session lifecycle, stereo rendering, controllers, pointer-driven UI, locomotion and comfort options, and world-space panels.

Interface

Menus and floaters, chat, instant messages, friends, inventory, map and minimap, preferences, and a quick menu designed natively for VR.

Languages

English, plus 27 translations of the interface: Chinese, Croatian, Czech, Danish, Dutch, Filipino, Finnish, French, German, Greek, Hebrew, Hungarian, Icelandic, Indonesian, Italian, Japanese, Korean, Norwegian Bokmål, Polish, Portuguese, Romanian, Russian, Spanish, Swedish, Turkish, Ukrainian and Vietnamese.

Audio and voice

Spatial sound, gestures, parcel music streams, and voice conversation correctly localised in three dimensions.

Building and tools

Edit and build interfaces, object manipulation, texture application, a mesh uploader, and a client-side plugin host.

Media and packaging

The optional web and media modules, cache tuning, crash reporting, and signed packages for all three platforms.

Under the hood

Vulkan for rendering, held to the Portability subset so a single backend covers all three platforms; OpenXR for VR; WebRTC for voice, with HRTF binaural spatialisation placing it in the world; JPEG 2000 for textures, which is the format Second Life's asset pipeline stores them in; and LLSD and Second Life's own message protocol underneath it all, with the packet layer generated from the published message template rather than written by hand. C++20 throughout.

Third-party licences and attribution

Every package ships the full third-party licence texts beside the executable, including those of the optional media and web modules.

Connecting to Second Life's main grid requires compliance with Linden Lab's Third-Party Viewer Policy.

Second Life is a trademark of Linden Research, Inc. Phostwood is an independent project, neither affiliated with nor endorsed by Linden Lab.