Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
9e1300c
Rebrand product identity from Alchemy to Vayu Viewer
Shadowolf7 Jul 31, 2026
29d3612
Add BC7/BPTC texture compression support, fix related correctness bugs
Shadowolf7 Jul 31, 2026
945ddc8
Fix Linux FMOD build/packaging and improve viewer launcher
Shadowolf7 Jul 31, 2026
e5dbf04
Wire up ccache for faster incremental rebuilds
Shadowolf7 Jul 31, 2026
f79f1d3
Disable texture compression on setSubImageFromFrameBuffer targets
Shadowolf7 Jul 31, 2026
f7578cb
Fix asset/mesh loading regression from curl 8.21.0 upgrade
Shadowolf7 Jul 31, 2026
0b7f03a
Notify waiting objects when mesh header retries are exhausted
Shadowolf7 Jul 31, 2026
62b6601
Port secondlife/viewer#5927: interleave rigged attachment alpha into …
Shadowolf7 Aug 1, 2026
7ab47ea
Port Firestorm pose stand, FPS limiter, VRAM draw-distance toggle, an…
Shadowolf7 Aug 1, 2026
5336f60
Consolidate GPU/GameMode selection into wrapper.sh and add OpenSSL co…
Shadowolf7 Aug 1, 2026
208b869
Add Vayu Viewer logo asset
Shadowolf7 Aug 1, 2026
48b2947
Check out missing git submodules automatically at configure time
Shadowolf7 Aug 2, 2026
8b921f1
Add RenderPBRMaterials toggle to fall back PBR faces to legacy shading
Shadowolf7 Aug 1, 2026
533616d
Add notecard file import; fix CRLF/BOM handling in script file import
Shadowolf7 Aug 1, 2026
1c0d153
Detect notecard width-ruler convention, auto-size legacy viewer
Shadowolf7 Aug 2, 2026
42d652a
Add notecard and script support to batch/bulk upload
Shadowolf7 Aug 2, 2026
c7c023e
Fix quoting bug that silently dropped resources from local packaging
Shadowolf7 Aug 3, 2026
47be8d1
Add standalone Notecard/Script entries to the Upload menu
Shadowolf7 Aug 3, 2026
8344bee
Merge branch 'feature/firestorm-ports' into develop
Shadowolf7 Aug 3, 2026
3805ce4
Fix FPS limiter controls hidden behind preset buttons
Shadowolf7 Aug 3, 2026
e668080
Add per-dropdown labels to quick settings environment presets
Shadowolf7 Aug 3, 2026
5fac627
Fix PBR Materials checkbox overlap; correct/expand its tooltip
Shadowolf7 Aug 3, 2026
b2dbe4a
Merge branch 'feature/interleaved-alpha-port' into develop
Shadowolf7 Aug 3, 2026
c182dbb
Add mouselook eye-height offset and vehicle-tilt decouple option
Shadowolf7 Aug 3, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co

## Project Overview

Alchemy Viewer is a third-party client for Second Life, forked from the official Linden Lab viewer. It is a large C++ desktop application (~750 source files in the main viewer module alone) using OpenGL for rendering, with builds targeting Windows, macOS, and Linux.
Vayu Viewer is a third-party client for Second Life, forked from Alchemy Viewer, which is itself forked from the official Linden Lab viewer. It is a large C++ desktop application (~750 source files in the main viewer module alone) using OpenGL for rendering, with builds targeting Windows, macOS, and Linux.

## Build System

Expand Down
42 changes: 17 additions & 25 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Contributor guidelines

Thanks for your interest in contributing to Alchemy Viewer! This document
Thanks for your interest in contributing to Vayu Viewer! This document
summarizes some of the most important points for people looking to contribute
to the project especially those looking to provide bug reports and code
changes.
Expand All @@ -14,72 +14,64 @@ changes.
- [Importance of Your Feedback](#importance-of-your-feedback)
- [Our Relationship with Linden Lab and Code Inheritance](#our-relationship-with-linden-lab-and-code-inheritance)
- [Reporting Bugs to Linden Lab](#reporting-bugs-to-linden-lab)
- [Submitting Feedback to Alchemy Viewer](#submitting-feedback-to-alchemy-viewer)
- [Submitting Feedback to Vayu Viewer](#submitting-feedback-to-vayu-viewer)
- [Contributing pull requests](#contributing-pull-requests)

## Communication

Alchemy Viewer has multiple channels for communication. Some of these channels are
more end-user focused while others are more tailored for developer-to-developer or support.
Vayu Viewer is a young fork and does not yet have its own community chat.

- [Our Discord][discord] is the primary community engagement platform for the project.
This is where we announce our releases, answer questions from the community,
and provide support to users. This is also a great place for developers to interact
with the Alchemy users to determine if their feature is interesting to them.
- [Github issues][] provide a means for developers and contributors to organize
their work and collaborate with other developers. By default most user-facing
discussions should happen on [the Discord][discord] so that they are
visible to more people, and can build consensus.
their work and collaborate with other developers.

## Reporting Bugs and Requesting Features

### Importance of Your Feedback

We value your feedback and invite you to help us identify bugs and suggest new features for Alchemy Viewer.
We value your feedback and invite you to help us identify bugs and suggest new features for Vayu Viewer.
Your input is crucial in shaping the future of our project.

Your cooperation with these guidelines will help us improve Alchemy Viewer,
and ensures that Linden Lab can address broader issues within their codebase.
Your cooperation with these guidelines will help us improve Vayu Viewer,
and ensures that Linden Lab and the Alchemy Viewer project can address broader issues within their codebases.

### Our Relationship with Linden Lab and Code Inheritance

It's important to note that while we are not affiliated with or endorsed by Linden Lab,
the creators of Second Life, our viewer incorporates a significant amount of code from them.
the creators of Second Life, or by the Alchemy Viewer project from which we are forked,
our viewer incorporates a significant amount of code from both of them.

This shared codebase means some issues may originate from the Linden Lab viewer,
and addressing these effectively benefits both viewers.
This shared codebase means some issues may originate upstream, in either the Linden Lab
viewer or Alchemy Viewer, and addressing these effectively benefits all three viewers.

### Reporting Bugs to Linden Lab

If you encounter defects or unwanted behavior that are inherited from the official Second Life viewer,
please report these issues directly to Linden Lab.

Before submitting a bug report to Alchemy Viewer, kindly check the [official Second Life viewer][lindenviewer]
Before submitting a bug report to Vayu Viewer, kindly check the [official Second Life viewer][lindenviewer]
to determine if the defect exists there as well.

Reporting it to Linden Lab, if it hasn't already been reported, will ensure they are aware of the issue.
If you are unsure, you are encouraged to share your findings with an Alchemy team member to receive guidance.
Linden Lab's page for submitting bug reports can be found on [feedback.secondlife.com/bug-reports][lindenbugs].

### Submitting Feedback to Alchemy Viewer
### Submitting Feedback to Vayu Viewer

If the defect is unique to Alchemy Viewer or pertains to features exclusive to our viewer, please proceed to submit your bug report to us on Github. Provide as much detail as possible, including steps to reproduce the issue, logs, and screenshots if available. This information will help us diagnose and address the problem more efficiently.
If the defect is unique to Vayu Viewer or pertains to features exclusive to our viewer, please proceed to submit your bug report to us on Github. Provide as much detail as possible, including steps to reproduce the issue, logs, and screenshots if available. This information will help us diagnose and address the problem more efficiently.

## Contributing pull requests

If you wish to contribute a new pull request, please ensure that:

- You talk to other developers about how best to implement the work.
- The functionality is desired. Be sure to talk to users and members of the Alchemy
team to ensure the work is a good idea and will be accepted.
- The functionality is desired. Be sure to talk to users and maintainers of Vayu
Viewer to ensure the work is a good idea and will be accepted.
- The work is high quality and the PR follows [PR etiquette][]
- You have tested the work locally

The [Git Style Guide](https://github.com/agis/git-style-guide) is also a good
reference for best git practices.

[PR etiquette]: https://gist.github.com/mikepea/863f63d6e37281e329f8
[Github issues]: https://github.com/AlchemyViewer/Alchemy/issues
[discord]: https://discordapp.com/invite/KugCgs6
[Github issues]: https://github.com/Shadowolf7/Vayu-Viewer/issues
[lindenviewer]: https://releasenotes.secondlife.com/viewer.html
[lindenbugs]: https://feedback.secondlife.com/bug-reports
31 changes: 14 additions & 17 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,27 +1,26 @@
<picture>
<source srcset="doc/alchemy_logo.png">
<img alt="Alchemy Viewer Logo" src="doc/alchemy_logo.png">
<source srcset="doc/vayu_logo.png">
<img alt="Vayu Viewer Logo" src="doc/vayu_logo.png">
</picture>

# Alchemy Viewer
# Vayu Viewer

[![License: LGPL 2.1](https://img.shields.io/badge/License-LGPL_2.1-blue.svg)](LICENSE)
[![Latest Release](https://img.shields.io/github/v/release/AlchemyViewer/Alchemy)](https://github.com/AlchemyViewer/Alchemy/releases)
[![Discord](https://img.shields.io/badge/Discord-Join-7289da?logo=discord&logoColor=white)][discord]
[![Latest Release](https://img.shields.io/github/v/release/Shadowolf7/Vayu-Viewer)](https://github.com/Shadowolf7/Vayu-Viewer/releases)

[Alchemy Viewer](https://www.alchemyviewer.org) is a third-party client for [Second Life](https://secondlife.com), forked from the official [Linden Lab viewer](https://github.com/secondlife/viewer). We focus on a cohesive, modern experience built on thoughtful defaults — while staying on the bleeding edge of new platform features.
Vayu Viewer is a third-party client for [Second Life](https://secondlife.com), forked from [Alchemy Viewer](https://www.alchemyviewer.org), which is itself forked from the official [Linden Lab viewer](https://github.com/secondlife/viewer).

## 📥 Download

Most users install a [pre-built release][releasesgh] for Windows, macOS, or Linux. Release candidates and project viewers are announced on our [Discord server][discord].
Pre-built releases for Windows, macOS, or Linux are published on the [releases page][releasesgh] once available.

## 🔨 Building from source

Alchemy uses CMake with vcpkg for dependency management. Platform setup, presets, build options, tests, packaging, and troubleshooting all live in [**doc/BUILD.md**](doc/BUILD.md).
Vayu Viewer uses CMake with vcpkg for dependency management. Platform setup, presets, build options, tests, packaging, and troubleshooting all live in [**doc/BUILD.md**](doc/BUILD.md).

```
git clone --recurse-submodules https://github.com/AlchemyViewer/Alchemy.git alchemy
cd alchemy
git clone --recurse-submodules https://github.com/Shadowolf7/Vayu-Viewer.git vayu-viewer
cd vayu-viewer
python3 -m venv .venv && source .venv/bin/activate # Windows: .\.venv\Scripts\Activate.ps1
pip install -r requirements.txt
dotnet tool restore # packaging only
Expand All @@ -35,21 +34,19 @@ File bug reports, suggest enhancements, or open a pull request — see [CONTRIBU

## 🙏 Acknowledgements

Alchemy stands on the work of:
Vayu Viewer stands on the work of:

- [Alchemy Viewer](https://www.alchemyviewer.org), the project this is forked from
- [Linden Lab](https://www.lindenlab.com/) and the [Second Life Viewer](https://github.com/secondlife/viewer) contributors
- The many open-source libraries that power the viewer (see [`indra/vcpkg.json`](indra/vcpkg.json))

## 🔗 Resources

- [Website](https://www.alchemyviewer.org)
- [Downloads][releasesgh]
- [Issue tracker](https://github.com/AlchemyViewer/Alchemy/issues)
- [Discord][discord]
- [Issue tracker](https://github.com/Shadowolf7/Vayu-Viewer/issues)

## 📜 License

Alchemy is licensed under the [GNU Lesser General Public License v2.1](LICENSE), inherited from the upstream Linden Lab viewer.
Vayu Viewer is licensed under the [GNU Lesser General Public License v2.1](LICENSE), inherited from the upstream Alchemy Viewer and Linden Lab viewer.

[releasesgh]: https://github.com/AlchemyViewer/Alchemy/releases
[discord]: https://discordapp.com/invite/KugCgs6
[releasesgh]: https://github.com/Shadowolf7/Vayu-Viewer/releases
23 changes: 11 additions & 12 deletions doc/BUILD.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Building Alchemy Viewer
# Building Vayu Viewer

Everything you need to build Alchemy from source: platform setup, presets, options, tests, packaging, and troubleshooting.
Everything you need to build Vayu Viewer from source: platform setup, presets, options, tests, packaging, and troubleshooting.

- [Prerequisites](#prerequisites)
- [Platform setup](#platform-setup) — Windows, macOS, Linux
Expand Down Expand Up @@ -164,11 +164,11 @@ rustup default stable

## Clone and bootstrap

Alchemy vendors the [Dullahan](https://github.com/AlchemyViewer/dullahan) CEF wrapper — used by the in-world web media plugin — as a git submodule under `indra/dullahan`. It builds from source as part of the tree, so the submodule must be present before you configure. Clone with `--recurse-submodules`, then set up the Python venv and .NET tools:
Vayu Viewer vendors the [Dullahan](https://github.com/AlchemyViewer/dullahan) CEF wrapper — used by the in-world web media plugin — as a git submodule under `indra/dullahan`. It builds from source as part of the tree, so the submodule must be present before you configure. Clone with `--recurse-submodules`, then set up the Python venv and .NET tools:

```
git clone --recurse-submodules https://github.com/AlchemyViewer/Alchemy.git alchemy
cd alchemy
git clone --recurse-submodules https://github.com/Shadowolf7/Vayu-Viewer.git vayu-viewer
cd vayu-viewer
python3 -m venv .venv
# Windows: .\.venv\Scripts\Activate.ps1
# Unix: source .venv/bin/activate
Expand Down Expand Up @@ -257,10 +257,10 @@ cmake --build --preset ninja-os-release

```
# Visual Studio
start .\build-Windows-vs2026-os\Alchemy.slnx
start .\build-Windows-vs2026-os\Vayu.slnx

# Xcode
open ./build-Darwin-xcode-os-arm64/Alchemy.xcodeproj
open ./build-Darwin-xcode-os-arm64/Vayu.xcodeproj
```

> `.slnx` is the newer Visual Studio solution format. Requires VS 2022 17.10+ or VS 2026.
Expand All @@ -275,7 +275,7 @@ The viewer executable lands under `build-<OS>-<preset>/newview/<Config>/`:
| macOS | `build-Darwin-<preset>/newview/<Config>/<ChannelName>.app` |
| Linux | `build-Linux-<preset>/newview/<Config>/<ChannelName>` |

`<ChannelName>` follows `VIEWER_CHANNEL` (default `Alchemy Test` → `AlchemyTest.exe` / `AlchemyTest.app`).
`<ChannelName>` follows `VIEWER_CHANNEL` (default `Vayu Test` → `VayuTest.exe` / `VayuTest.app`).

## Configuration types

Expand Down Expand Up @@ -413,7 +413,7 @@ If the run produces no output for a very long time it usually isn't hung — che

### CMake is too old

Alchemy requires CMake 3.27+. If your distro ships something older, install a newer version via pip inside your venv:
Vayu Viewer requires CMake 3.27+. If your distro ships something older, install a newer version via pip inside your venv:

```
pip install --upgrade cmake ninja
Expand Down Expand Up @@ -454,7 +454,7 @@ cmake -S indra --preset ninja-os -DGCC_DISABLE_FATAL_WARNINGS=TRUE
cmake -S indra --preset ninja-os -DCLANG_DISABLE_FATAL_WARNINGS=TRUE
```

### Visual Studio doesn't recognize `Alchemy.slnx`
### Visual Studio doesn't recognize `Vayu.slnx`

`.slnx` is the newer Visual Studio solution format. Use Visual Studio 2022 17.10+ or Visual Studio 2026, or configure with the `vs2022-os` preset on an older compatible edition.

Expand All @@ -472,8 +472,7 @@ Double-check the package list for your distro under [Platform setup → Linux](#

### Still stuck?

- Ask on the [Discord](https://discordapp.com/invite/KugCgs6).
- File a build bug at <https://github.com/AlchemyViewer/Alchemy/issues>.
- File a build bug at <https://github.com/Shadowolf7/Vayu-Viewer/issues>.

## See also

Expand Down
Binary file added doc/vayu_logo.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
71 changes: 67 additions & 4 deletions indra/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,56 @@ cmake_minimum_required(VERSION 3.27...4.2 FATAL_ERROR)

include(CMakeDependentOption)

set(ROOT_PROJECT_NAME "Alchemy" CACHE STRING
"The root project/makefile/solution name. Defaults to Alchemy.")
# Git worktrees do not inherit submodule checkouts from the main clone, so a
# freshly-added worktree has indra/dullahan and vcpkg both empty. Left alone
# that produces two unhelpful failures: a bare "does not contain a
# CMakeLists.txt" from add_subdirectory(dullahan) ~1100 lines into the log
# (after a full vcpkg install), or a missing-toolchain-file error from the
# preset's CMAKE_TOOLCHAIN_FILE. Neither names the actual cause. Check up
# front, before project() loads the toolchain, and fix it instead.
#
# This must stay ahead of the first project() call. On a normal checkout it is
# two EXISTS tests and nothing else.
set(_required_submodules
"${CMAKE_CURRENT_SOURCE_DIR}/dullahan/CMakeLists.txt"
"${CMAKE_CURRENT_SOURCE_DIR}/../vcpkg/scripts/buildsystems/vcpkg.cmake"
)
set(_missing_submodules FALSE)
foreach(_marker IN LISTS _required_submodules)
if(NOT EXISTS "${_marker}")
set(_missing_submodules TRUE)
endif()
endforeach()

if(_missing_submodules)
set(_submodule_hint "Run 'git submodule update --init --recursive' from the repository root, then re-run cmake.")
find_package(Git QUIET)
if(NOT Git_FOUND)
message(FATAL_ERROR
"Required git submodules are not checked out, and git was not found to "
"check them out automatically.\n${_submodule_hint}")
endif()
message(STATUS "Required git submodules are not checked out - initialising them (this may take a while)")
execute_process(
COMMAND "${GIT_EXECUTABLE}" submodule update --init --recursive
WORKING_DIRECTORY "${CMAKE_CURRENT_SOURCE_DIR}/.."
RESULT_VARIABLE _submodule_result
)
foreach(_marker IN LISTS _required_submodules)
if(NOT EXISTS "${_marker}")
message(FATAL_ERROR
"Failed to check out the required git submodules automatically "
"(git exited ${_submodule_result}; '${_marker}' is still missing)."
"\n${_submodule_hint}")
endif()
endforeach()
endif()

set(ROOT_PROJECT_NAME "Vayu" CACHE STRING
"The root project/makefile/solution name. Defaults to Vayu.")

# Set our base channel
set(VIEWER_CHANNEL "Alchemy Test" CACHE STRING "Viewer Channel Name")
set(VIEWER_CHANNEL "Vayu Test" CACHE STRING "Viewer Channel Name")

# Default deploy grid
set(GRID agni CACHE STRING "Target Grid")
Expand Down Expand Up @@ -42,6 +87,7 @@ option(USE_LTO "Enable Link Time Optimization" OFF)
option(USE_NVAPI "Use NVidia NVAPI library for gpu profile support (Windows Only)" ON)
option(USE_OPENXR "Enable building with OpenXR support (Experimental)" OFF)
option(USE_PRECOMPILED_HEADERS "Enable use of precompiled header directives where supported." ON)
option(USE_CCACHE "Use ccache to speed up recompilation if it is available" ON)

# Audio Engines
option(USE_FMODSTUDIO "Enable support for the FMOD Studio audio engine" OFF)
Expand Down Expand Up @@ -104,7 +150,7 @@ option(USE_SENTRY "Use the Sentry crash reporting system" OFF)
# Default Tracy profiling on for test builds, but off for all others
set(BUILDING_TEST_CHANNEL OFF)
string(TOLOWER "${VIEWER_CHANNEL}" channel_lower)
if(channel_lower MATCHES "^alchemy test")
if(channel_lower MATCHES "^vayu test")
set(BUILDING_TEST_CHANNEL ON)
endif()
cmake_dependent_option(USE_TRACY "Enable support for Tracy profiler" ON "BUILDING_TEST_CHANNEL" OFF)
Expand Down Expand Up @@ -207,6 +253,23 @@ set(CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake" "${CMAKE_CURRENT_BINAR
# Setup VCPKG toolchains and targets
include(BootstrapVcpkg)

# Wire up ccache (if present) before project()/enable_language(), since that's
# when CMake does compiler detection and starts honoring
# CMAKE_<LANG>_COMPILER_LAUNCHER. Silently a no-op if ccache isn't installed,
# so this is safe to leave on by default for everyone.
if(USE_CCACHE)
find_program(CCACHE_PROGRAM ccache)
if(CCACHE_PROGRAM)
message(STATUS "Using ccache: ${CCACHE_PROGRAM}")
set(CMAKE_C_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
set(CMAKE_CXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
if(DARWIN)
set(CMAKE_OBJC_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
set(CMAKE_OBJCXX_COMPILER_LAUNCHER "${CCACHE_PROGRAM}")
endif()
endif()
endif()

# Generate base project after setting pre-generation variables
project(${ROOT_PROJECT_NAME})

Expand Down
4 changes: 3 additions & 1 deletion indra/cmake/FMODSTUDIO.cmake
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,9 @@ if (USE_FMODSTUDIO)
if(WINDOWS)
set(fmod_lib_paths "${FMODSTUDIO_SDK_DIR}/api/core/lib/x64")
elseif(LINUX)
set(fmod_lib_paths "${FMODSTUDIO_SDK_DIR}/api/core/lib/x64")
set(fmod_lib_paths
"${FMODSTUDIO_SDK_DIR}/api/core/lib/x86_64"
"${FMODSTUDIO_SDK_DIR}/api/core/lib/x64")
endif()
set(fmod_inc_paths "${FMODSTUDIO_SDK_DIR}/api/core/inc")

Expand Down
4 changes: 2 additions & 2 deletions indra/lib/python/indra/util/llmanifest.py
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def get_default_platform(dummy):
}[sys.platform]

DEFAULT_SRCTREE = os.path.dirname(sys.argv[0])
CHANNEL_VENDOR_BASE = 'Alchemy'
CHANNEL_VENDOR_BASE = 'Vayu'
RELEASE_CHANNEL = CHANNEL_VENDOR_BASE + ' Release'

BASE_ARGUMENTS=[
Expand All @@ -117,7 +117,7 @@ def get_default_platform(dummy):
dict(name='buildtype', description='Build type (i.e. Debug, Release, RelWithDebInfo).', default=None),
dict(name='bundleid',
description="""The macOS Bundle identifier.""",
default="org.alchemyviewer.viewer"),
default="org.vayuviewer.viewer"),
dict(name='channel',
description="""The channel to use for updates, packaging, settings name, etc.""",
default='CHANNEL UNSET'),
Expand Down
Loading