A little companion suite for VRChat to help you track friend activity, inject metadata into photos, and receive VR/desktop notifications.
It features a server-client architecture, to avoid having multiple connections to VRC APIs.
Warning
Status: Most features present. Stable for daily use; Under active development.
Otherwise, get ready to frequently pull, upgrade dependencies, and build!
Warning
The client requires an active running vrcd server and packages do not come with the server.
There are plans to fix this.
Client features:
- Relatively light client using software rendering; Hardware option available.
- VR friendly UI.
- Embed world and player metadata into VRChat photos automatically.
- Strip VRChat and other metadata from VRChat photos.
- VR overlay notifications (XSOverlay/WayVR, OVR Toolkit) and desktop notifications.
- Drop a Portal integration.
Server features:
- Record incoming VRChat events.
- Event-stream API with 'catch-up' and 'back-fill' actions to know what you missed.
Feel free to join the official VRCD VRChat group (VRCD.7796)!
Related projects:
- vrcd-server-container by ArcaneDisgea.
See Compiling.
After connecting to the server, the authentication will be forward to the first connected client. After connecting, you should be good to go!
The pipehelper subpackage is used to make "Open in VRChat" button work.
You'll need to make a Windows build of pipehelper with dub build :pipehelper
in Windows, and place vrcd-pipehelper.exe next to the vrcd_client executable
or in ~/.config/vrcd. No Steam launch options are needed: the client runs the
helper with the Proton build VRChat itself is running under, against the game's
prefix, which attaches it to the wineserver holding the launch pipe.
If the helper is missing, or the IPC attempt fails, the client falls back to a server-side self-invite.
+ ~ ~ ~ ~ ~ ~ ~ ~+
| VRChat servers |
+~ ~ ~ ~ ~ ~ ~ ~ +
^
HTTP requests / WS events
v
+----------------+
| vrcd-server |
| - VRC API sync |
| - Friend state |
+----------------+
^
JSON-L
v
+-----------+-----------+
v v
+-----------------+ +----------------+ +----------+
| vrcd-client(s) | | vrcd-web | <- HTTP/WS -> | Browser |
| - Picture meta | | - Serves HTML | | - Notifs |
| - Notifications | | - Same link | | - etc. ! |
+-----------------+ +----------------+ +----------+
Targets:
- Server: Stays connected to VRChat's WebSocket 24/7, records events to SQLite, and serves them over TCP.
- Client: Connects to the server, watches local VRChat logs, and injects metadata into photos.
- Web: Connects to the server, and allows you to browse vrcd using a Web browser.
Targets Windows and Linux.
Needs a D compiler with front-end version 2.104 (DMD >=2.104, GDC >=14, LDC >=1.34).
See each component's README for dependencies, configuration, and architecture details.
In short:
- Client needs SDL3 libraries (SDL3, SDL3_ttf, SDL3_image), and optionally OpenSSL. They are loaded at run time by default, and only needed at build time with
dub build :client -c static. - Server needs the sqlite library, and optionally OpenSSL. libcurl is loaded at run time by default, and only needed at build time with
dub build :server -c static.
# Upgrade dependencies for server and client
dub upgrade -s
# Build, test, and run server (might be best to setup config first)
# For more info, see server/README.md
dub test :server
dub build :server
# Will live at ./server/vrcd_server
# Build, test, and run client
# For more info, see client/README.md
dub test :client
dub build :client
# Lives at ./client/vrcd_client
# Ditto
dub test :web
dub build :web
# Lives at ./web/vrcd_webSee API.md for server-client API details.
./packaging/package-appimage.sh # client AppImage (builds with -c static)
./packaging/package-deb.sh all # client and server .deb
./packaging/package-deb.sh --static server # Package server as static buildOn Windows, in PowerShell (no MSYS2 or Git Bash needed):
powershell -executionpolicy bypass packaging/fetch-deps-windows.ps1 # Fetches SDL3, libcurl, builds sqlite3
powershell -executionpolicy bypass packaging/package-windows.ps1 # Zips client and serverThe first script downloads the DLLs the two binaries load at run time, since
Windows ships none of them, and compiles the sqlite3 amalgamation into
sqlite3.lib for the server to link against. That last step is the only one
needing Visual Studio Build Tools with the C++ workload; it finds them itself
through vswhere, so a plain PowerShell prompt is enough.
sqlite3.lib is dropped in the repository root, not under packaging/deps/,
because that is where the linker looks: pragma(lib, "sqlite3") becomes
/DEFAULTLIB:sqlite3, and after /LIBPATH and LIB the linker falls back to
the working directory, which is wherever dub was invoked. Having run the fetch
script once, a plain dub build :server from the root works too.
The zips are self-contained: the client carries SDL3, SDL3_ttf and SDL3_image,
and the server carries libcurl (sqlite3 is linked in). libcurl comes from
curl.se and is built against the Windows certificate store, so no CA bundle is
shipped with it. The pipe helper is not in the client zip, because talking to
VRChat's launch pipe is in-process on Windows.
- Using LDC 1.41 on Windows will lead to compiling issues: undefined PAGESIZE in core.thread.fiber
I'm unsure how I want to handle contributions at this moment, sorry.
However, feel free to submit bugs in Issues and feature suggestions in Discussions, thanks.
This software is provided as-is without any warranty and is not affiliated with VRChat.
VRCD does not modify the game client in any shape, nor does it reflect the views or opinions of VRChat. It is only an external tool using the VRChat API.
Users are still responsible for complying with VRChat's Terms of Service.
VRChat is copyrighted work of VRChat Inc.
Both the server and client components are licensed BSD-3-Clause-Clear.







