
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.
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.